样式规则

样式规则是 Sass 的基础,就像它们是 CSS 的基础一样。它们的工作方式相同:您选择要使用选择器设置样式的元素,并 声明影响这些元素外观的属性

游乐场

SCSS 语法

.button {
  padding: 3px 10px;
  font-size: 12px;
  border-radius: 3px;
  border: 1px solid #e1e4e8;
}
游乐场

Sass 语法

.button
  padding: 3px 10px
  font-size: 12px
  border-radius: 3px
  border: 1px solid #e1e4e8

CSS 输出

.button {
  padding: 3px 10px;
  font-size: 12px;
  border-radius: 3px;
  border: 1px solid #e1e4e8;
}

嵌套嵌套永久链接

但是 Sass 想要让您的生活更轻松。无需一遍又一遍地重复相同的选择器,您可以将一个样式规则写入另一个样式规则中。Sass 会自动将外部规则的选择器与内部规则的选择器组合。

游乐场

SCSS 语法

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}
游乐场

Sass 语法

nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    padding: 6px 12px
    text-decoration: none


CSS 输出

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav li {
  display: inline-block;
}
nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none;
}


⚠️ 注意!

嵌套规则非常有用,但它们也可能使您难以可视化实际生成的 CSS 量。嵌套越深,提供 CSS 所需的带宽就越多,浏览器呈现 CSS 所需的工作量就越大。保持这些选择器浅显易懂!

选择器列表选择器列表永久链接

嵌套规则在处理选择器列表(即逗号分隔的选择器)方面很聪明。每个复杂选择器(逗号之间的选择器)都分别嵌套,然后将它们组合回选择器列表中。

游乐场

SCSS 语法

.alert, .warning {
  ul, p {
    margin-right: 0;
    margin-left: 0;
    padding-bottom: 0;
  }
}
游乐场

Sass 语法

.alert, .warning
  ul, p
    margin-right: 0
    margin-left: 0
    padding-bottom: 0


CSS 输出

.alert ul, .alert p, .warning ul, .warning p {
  margin-right: 0;
  margin-left: 0;
  padding-bottom: 0;
}


选择器组合器选择器组合器永久链接

您也可以嵌套使用 组合器 的选择器。您可以将组合器放在外部选择器的末尾、内部选择器的开头,甚至可以在两者之间单独放置。

游乐场

SCSS 语法

ul > {
  li {
    list-style-type: none;
  }
}

h2 {
  + p {
    border-top: 1px solid gray;
  }
}

p {
  ~ {
    span {
      opacity: 0.8;
    }
  }
}
游乐场

Sass 语法

ul >
  li
    list-style-type: none



h2
  + p
    border-top: 1px solid gray



p
  ~
    span
      opacity: 0.8



CSS 输出

ul > li {
  list-style-type: none;
}

h2 + p {
  border-top: 1px solid gray;
}

p ~ span {
  opacity: 0.8;
}








高级嵌套高级嵌套永久链接

如果您希望对嵌套样式规则执行的操作不仅仅是按顺序将它们与后代组合器(即普通空格)分隔开,Sass 可以满足您的需求。有关更多详细信息,请参阅 父选择器文档

插值插值永久链接

您可以使用 插值 将来自 表达式(如变量和函数调用)的值注入到您的选择器中。当您编写 Mixin 时,这尤其有用,因为它允许您根据用户传入的参数创建选择器。

游乐场

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 语法

@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", "👭")

CSS 输出

@charset "UTF-8";
span.emoji-women-holding-hands {
  font-family: IconFont;
  font-variant: normal;
  font-weight: normal;
  content: "👭";
}



💡 有趣的事实

Sass 仅在解析插值后才会解析选择器。这意味着您可以安全地使用插值生成选择器的任何部分,而无需担心它不会解析。

您可以将插值与父选择器 &@at-root 规则选择器函数 结合使用,在动态生成选择器时发挥强大的作用。有关更多信息,请参阅 父选择器文档