Sass .scss:嵌套和多个类?
我为我当前的项目使用Sass(.scss)。
下面的例子:
HTML
<div class="container desc"> <div class="hello"> Hello World </div> </div>
SCSS
.container { background:red; color:white; .hello { padding-left:50px; } }
这很好。
我可以使用嵌套样式处理多个类。
在上面的例子中,我正在谈论这个:
CSS
.container.desc { background:blue; }
在这种情况下,所有div.container
通常是red
但div.container.desc
将是蓝色的。
我怎样才能将这个内部container
与Sass嵌套?
您可以使用父select器引用 &
,它将在编译之后由父select器replace:
举个例子:
.container { background:red; &.desc{ background:blue; } } /* compiles to: */ .container { background: red; } .container.desc { background: blue; }
&
会完全解决,所以如果你的父母select器是嵌套的,嵌套将在更换&
之前解决。
这种表示法最常用于编写伪元素和-class :
.element{ &:hover{ ... } &:nth-child(1){ ... } }
但是,您可以将&
放置在您喜欢的任何位置* ,因此也可以这样做:
.container { background:red; #id &{ background:blue; } } /* compiles to: */ .container { background: red; } #id .container { background: blue; }
但是请注意,这会以某种方式破坏您的嵌套结构,因此可能会增加在样式表中查找特定规则的工作量。
*:在&
前面不允许有空格之外的其他字符。 所以你不能直接连接selector
+ &
– #id&
会抛出一个错误。
如果是这样的话,我认为你需要使用更好的方式来创build类名或类名称约定。 例如,就像你所说的,你希望.container
类根据特定的用法或外观具有不同的颜色。 你可以这样做:
SCSS
.container { background: red; &--desc { background: blue; } // or you can do a more specific name &--blue { background: blue; } &--red { background: red; } }
CSS
.container { background: red; } .container--desc { background: blue; } .container--blue { background: blue; } .container--red { background: red; }
上面的代码是基于BEM方法的类命名约定。 您可以检查此链接: BEM – 块元素修饰符方法