SASS: Using the parent reference (&) inside and @if ... @else structure. & picks up else instead of parent

StackOverflow https://stackoverflow.com/questions/23177164

  •  06-07-2023
  •  | 
  •  

質問

I'm using the &: select inside a SASS @if block inside a mixin.

@mixin mixin-name {
   @if (condition) {
        .....
   } else {
        &:nth-of-type(...) {}
   }
}

The &:Nth-of-type is the outermost actual selector inside the mixin. In my code, I use it this way:

aside {
    @include mixin-name;
}

I'm expecting this in the CSS output:

aside:nth-of-type() {}

Instead, I get this:

aside else:nth-of-type() {}

Clearly SASS is picking up the else as the "parent" instead of the aside. The old mixin included the aside element within the mixin, but I wanted to make it more flexible, to use it with any selector.

My current solution is to pass the selector into the mixin as variable and use it this way:

#{$var} {
    &:nth-of-type() {}
}

This works, but it seems like a bug that the & should pick up a piece of code instead of the actual selector. Anyone have a more elegant solution?

役に立ちましたか?

解決

Use @else. You can check the full documentation here: SASS Docs

Basically, SASS is thinking that else is a CSS keyword/identifier. It needs to be prefixed with the @.

Ie, your code would become:

@mixin mixin-name {
   @if (condition) {
        .....
   } @else {
        &:nth-of-type(...) {}
   }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top