2017-09-09 2 views
-2

Ich habe ein Element wie diese

.block{ 
    $this: &; 

    &__element{ 
    // styles go here 
    } 

    &:hover{ 
     #{$this}__subelement { 
     // styles go here 
     } 
    } 
} 

Diese ist im Grunde so, dass ich Änderungen an dem Subelement induzieren kann, wenn auf dem Block schwebt, die es enthält (I‘ m mit BEM). Aber nach der Kompilation fügt Sass zusätzlichen Platz hinzu

.block:hover .block__subelement { 
// styles go here 
} 

Und macht diesen Stil ungültig. Die einzige Möglichkeit, dies zu umgehen, ist das Schreiben

.block{ 
    $this: &; 

    &__element{ 
    // styles go here 
    } 

    &:hover{ 
     #{$this}__subelement{ // remove spacing here 
     // styles go here 
     } 
    } 
} 

Warum passiert das? Ist es wegen der Lader, die ich benutze oder?

Antwort

0

Der Sass Compiler wird immer einen Raum zwischen einem Elternteil und Kind Definition hinzufügen, wenn Sie den Speicherort des übergeordneten Regel angeben mit dem Ampersand &

Sie brauchen nur ein kaufmännische zu Beginn dieser Regel hinzuzufügen:

.block{ 
    $this: &; 

    &__element{ 
    // styles go here 
    } 

    &:hover{ 
     // Add ampersand to reference parent rule here 
     &#{$this}__subelement{ // remove spacing here 
     // styles go here 
     } 
    } 
} 
+0

Ich war wahrscheinlich nicht klar genug. Ich möchte den Abstand zwischen '.block 'und' .block .block__subelement' haben, der Abstand, den ich zu entfernen versuche, ist der zwischen '.block__subelement' und' {' –

+0

Ich dachte, die Frage sei ein bisschen seltsam. :) Der Leerraum zwischen der Regel und der Definition sollte die Regeln überhaupt nicht beeinflussen. Siehe [dieses Beispiel] (https://codepen.io/anon/pen/eEqjgm). Bricht das im Browser oder zeigt BEM sie nicht korrekt an? – LightBender

+0

Seltsam, weil in meinem Projekt der zusätzliche Platz den Stil nicht funktionierte: S Muß ein Stilproblem oder etwas ähnliches sein:/Danke für die Hilfe –

Verwandte Themen