我爲一個項目使用SASS,到目前爲止我對它非常滿意。 但是,我有一些代碼只能用於IE 7及其以下版本,因此使用類名.ie-lt8
即可。但是,當我在SASS中擴展該選擇器時,使用嵌套選擇器創建多個選擇器。SASS複製嵌套選擇器
實施例(用於延伸一個IE display: inline-block
代碼):
SASS
/* My extension code */
.ie-lt8 %ie-inline-block {
display: inline;
zoom: 1;
}
/* I want the li to be inline-block */
#my-ul li {
display: inline-block;
@extend %ie-inline-block;
}
CSS產生
/* My extension code */
.ie-lt8 #my-ul, #my-ul .ie-lt8 li {
display: inline;
zoom: 1;
}
/* I want the li to be inline-block */
#my-ul li {
display: inline-block;
}
通常這僅僅是很好,但#my-ul .ie-lt8 li
我擔心一點。在這個例子中沒關係,因爲兩個選擇器都能正常工作(上面提到的選擇器不存在)。但是如果我有另一個選擇器很重要的代碼,那麼這會導致一個問題。
一個念頭例如:
SASS
/* I want the div to get a red border,
but the div inside .container to have a green border */
#myid .container div { border: 5px dotted green; }
#myid div {
@extend %red-border;
}
/* My extension code */
.container %red-border {
border: 1px solid red;
}
CSS它會產生
/* I want the div to get a red border,
but the div inside .container to have a green border */
#myid .container div { border: 5px dotted green; }
/* My extension code */
.container #myid div, #myid .container div {
border: 1px solid red; /* [OVERRIDE OF THE BORDER] */
}
我的問題是那麼;有沒有辦法讓SASS只採用初始選擇器,而不是從嵌套選擇器(一個語句中的很多選擇器)創建多個選擇器?
我試過這個問題,但我發現很難找到任何文章/博客/等。關於這個問題。
UPDATE
我知道各種解決方法,如使用@混入的過程,而不是。我只是想知道是否有我錯過了重要的SASS,或者如果有人能告訴我爲什麼這是?因爲它在我看來就像是一種錯誤。
爲什麼不擴展完整的選擇器(即'.ie-lt8%ie-inline-block')? –
好吧,讓它變得容易。在我編寫代碼時,會出現更多內聯塊元素,然後我可以將@extend%ie-inline-block;'塊包含到這些聲明中,而不必每次都滾動到文檔中的其他位置。使用SASS之類的預編譯器的原因之一應該是使這種小事更容易。對? – Tokimon