scss
Scss
scss
.button {
padding: 3px 10px;
font-size: 12px;
border-radius: 3px;
border: 1px solid #e1e4e8;
}
嵌套
但是 Sass 想让你的生活更轻松。 与其一遍又一遍地重复相同的选择器,您可以在另一个样式规则中编写一个样式规则。 Sass 会自动将外部规则的选择器与内部规则的选择器结合起来。
scss
Scss
scss
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
嵌套规则非常有用,但它们也会让你很难想象你实际生成了多少 CSS。
嵌套越深,为 CSS 提供服务所需的带宽就越多,浏览器渲染它所需的工作也就越多。 请尽量保持这些选择器嵌套层级少一点!
选择器列表
嵌套规则在处理选择器列表(即逗号分隔的选择器)方面非常巧妙。 每个复杂选择器(逗号之间的选择器)分别嵌套,然后将它们组合回一个选择器列表。
scss
Scss
scss
.alert, .warning {
ul, p {
margin-right: 0;
margin-left: 0;
padding-bottom: 0;
}
}
选择器组合器
您也可以嵌套使用 combinators 的选择器。 您可以将组合器放在外部选择器的末尾、内部选择器的开头,或者甚至在两者之间单独放置。
scss
Scss
scss
ul > {
li {
list-style-type: none;
}
}
h2 {
+ p {
border-top: 1px solid gray;
}
}
p {
~ {
span {
opacity: 0.8;
}
}
}
高级嵌套
如果你想用你的嵌套样式规则做更多的事情,而不仅仅是按顺序组合它们,用后代组合器(即一个普通的空格)分隔它们,Sass 会支持你。 有关详细信息,请参阅父选择器文档。
插值
您可以使用 interpolation 从 expressions 注入值,例如变量和 函数调用您的选择器。 这在您编写 mixins 时特别有用,因为它允许您根据用户传入的参数创建选择器。
scss
Scss
scss
@mixin define-emoji($name, $glyph) {
span.emoji-#{$name} {
font-family: IconFont;
font-variant: normal;
font-weight: normal;
content: $glyph;
}
}
@include define-emoji("women-holding-hands", "👭");
有趣的事实:
Sass 只解析选择器 after 插值被解析。 这意味着您可以安全地使用插值来生成选择器的任何部分,而不必担心它不会解析。
您可以将插值与父选择器&
、@at-root
规则 和选择器函数在动态生成选择器时发挥一些重要的作用。 有关详细信息,请参阅父选择器文档。