Mijn vraag
Kan ik in sass (scss) een selector uitbreiden met de parent (&) zonder interpolation?
Ik vind het lastig de vraag goed te formuleren (dat maakt zoeken ook wat lastiger) maar hier een wat uitgebreidere beschrijving:
Ik heb deze code structuur (versimpelt):
Gecompileerd ziet dit er als volgt uit:
Nu is het echter zo dat .one en .two op hetzelfde element worden gezet als .root en dus niet genest zijn. De selector zou dus ".root.one .foo, .root.two .foo" moeten zijn.
Het komt wel vaker voor dat je in (minder ideale) scenario's een selector wilt uitbreiden met het geen er in een variabele of in de parent (&) zit. In dat geval kan je interpolation "#{&}" gebruiken aangezien direct aansluiten (".root&") niet mag. Maar als ik dat die in scss:
Krijg ik:
En dat gaat dus mis: ".two .foo" heeft niet ".root" meegekregen. Waarschijnlijk door de volgorde waarin "&" expressies worden geëvalueerd.
Nu heb ik een workaround gevonden voor dit specifieke probleem maar ik vraag mij of er nou echt geen betere manier om "&" aan een selector te pakken zonder interpolations wat ik sowieso al lelijk vindt.
Relevante software en hardware die ik gebruik
Sass documentatie, google zoekopdrachten, en old-school trial and error, geen antwoord gevonden.
Kan ik in sass (scss) een selector uitbreiden met de parent (&) zonder interpolation?
Ik vind het lastig de vraag goed te formuleren (dat maakt zoeken ook wat lastiger) maar hier een wat uitgebreidere beschrijving:
Ik heb deze code structuur (versimpelt):
SCSS:
1
2
3
4
5
6
7
8
9
10
11
12
| @mixin bar { @at-root .root & { font-family: foobar; } } .one, .two { .foo { @include bar; } } |
Gecompileerd ziet dit er als volgt uit:
Cascading Stylesheet:
1
2
3
4
| .root .one .foo, .root .two .foo { font-family: foobar; } |
Nu is het echter zo dat .one en .two op hetzelfde element worden gezet als .root en dus niet genest zijn. De selector zou dus ".root.one .foo, .root.two .foo" moeten zijn.
Het komt wel vaker voor dat je in (minder ideale) scenario's een selector wilt uitbreiden met het geen er in een variabele of in de parent (&) zit. In dat geval kan je interpolation "#{&}" gebruiken aangezien direct aansluiten (".root&") niet mag. Maar als ik dat die in scss:
SCSS:
1
2
3
4
5
6
7
8
9
10
11
12
| @mixin bar { @at-root .root#{&} { font-family: foobar; } } .one, .two { .foo { @include bar; } } |
Krijg ik:
Cascading Stylesheet:
1
2
3
| .root.one .foo, .two .foo { font-family: foobar; } |
En dat gaat dus mis: ".two .foo" heeft niet ".root" meegekregen. Waarschijnlijk door de volgorde waarin "&" expressies worden geëvalueerd.
Nu heb ik een workaround gevonden voor dit specifieke probleem maar ik vraag mij of er nou echt geen betere manier om "&" aan een selector te pakken zonder interpolations wat ik sowieso al lelijk vindt.
Relevante software en hardware die ik gebruik
Wat ik al gevonden of geprobeerd hebnode-sass 4.9.0 (Wrapper) [JavaScript]
libsass 3.5.4 (Sass Compiler) [C/C++]
Sass documentatie, google zoekopdrachten, en old-school trial and error, geen antwoord gevonden.