我正在将 SASS 用于一个项目,到目前为止我对它非常满意。但是,我有一些代码只能用于 IE 7 及以下版本,使用类名.ie-lt8
。但是当我在 SASS 中扩展该选择器时,使用嵌套选择器创建多个选择器。
示例(display: inline-block
为 IE 扩展代码):
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 只采用初始选择器,而不从嵌套选择器创建多个选择器(一句话中有很多选择器)?
我为这个问题尝试了谷歌,但我发现很难找到任何文章/博客/等。关于这个问题。
更新
我知道各种解决方法,例如改用@mixin。我只是想知道我是否错过了关于 SASS 的东西,或者是否有人可以告诉我这是为什么?因为在我看来,这是一个错误。