1. 变量 (Variables)

// 定义变量
$primary-color: #3498db;
$font-size: 16px;
$font-family: 'Arial', sans-serif;

// 使用变量 body { color: $primary-color; font-size: $font-size; font-family: $font-family; }

解释:变量用于存储可重用的值,如颜色、字体、尺寸等,便于统一管理和维护。

编译后的 CSS

body {
  color: #3498db;
  font-size: 16px;
  font-family: 'Arial', sans-serif;
}

2. 嵌套 (Nesting)

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
li {
  display: inline-block;

  a {
    text-decoration: none;
    padding: 5px 10px;

    &:hover {
      color: red;
    }
  }
}

} }

解释:嵌套允许将相关的选择器组织在一起,使代码结构更清晰,减少重复书写父选择器。

编译后的 CSS

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav ul li {
  display: inline-block;
}
nav ul li a {
  text-decoration: none;
  padding: 5px 10px;
}
nav ul li a:hover {
  color: red;
}

3. 父选择器 (&)

.btn {
  background: blue;
  color: white;

&:hover { background: darkblue; }

&.disabled { opacity: 0.5; }

&-large { font-size: 20px; padding: 15px 30px; } }

解释& 符号代表父选择器,用于生成更具体的选择器,如伪类、状态类或 BEM 命名。

编译后的 CSS

.btn {
  background: blue;
  color: white;
}
.btn:hover {
  background: darkblue;
}
.btn.disabled {
  opacity: 0.5;
}
.btn-large {
  font-size: 20px;
  padding: 15px 30px;
}

4. 混合器 (Mixins)

// 定义混合器
@mixin flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

@mixin border-radius($radius: 5px) { border-radius: $radius; -webkit-border-radius: $radius; -moz-border-radius: $radius; }

// 使用混合器 .container { @include flex-center; @include border-radius(10px); }

解释:混合器用于定义可重用的样式块,可以带参数和默认值,提高代码复用性。

编译后的 CSS

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
}

5. 继承 (Extend)

// 基础样式
.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

// 继承 .success { @extend .message; border-color: green; }

.error { @extend .message; border-color: red; }

解释:继承让一个选择器继承另一个选择器的所有样式,编译后会合并选择器,减少重复代码。

编译后的 CSS

.message, .success, .error {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}
.success {
  border-color: green;
}
.error {
  border-color: red;
}

6. 运算 (Operations)

.container {
  width: 100% - 20px;
  font-size: 12px + 2px;
  padding: 10px * 2;
  margin: (14px / 2);
  line-height: 1.5 * 1.2;
}

解释:SCSS 支持数学运算,包括加减乘除,可以处理带单位的值和无单位的数值。

编译后的 CSS

.container {
  width: 80%;
  font-size: 14px;
  padding: 20px;
  margin: 7px;
  line-height: 1.8;
}

7. 函数 (Functions)

// 颜色函数
$base-color: #036;

.header { background-color: lighten($base-color, 20%); color: darken($base-color, 10%); border: 1px solid rgba($base-color, 0.5); }

// 数学函数 .sidebar { width: percentage(1/3); height: max(100px, 50vh); }

解释:SCSS 提供了丰富的内置函数,用于处理颜色、数值、字符串等,也可以自定义函数。

编译后的 CSS

.header {
  background-color: #0066cc;
  color: #003366;
  border: 1px solid rgba(0, 51, 102, 0.5);
}

.sidebar { width: 33.33333%; height: 100px; }

8. 控制指令

@if, @else if, @else

@mixin theme($mode) {
  @if $mode == 'dark' {
    background: #000;
    color: #fff;
  } @else if $mode == 'light' {
    background: #fff;
    color: #000;
  } @else {
    background: gray;
    color: #333;
  }
}

.theme-dark { @include theme(‘dark’); }

解释:条件语句根据不同的条件应用不同的样式,常用于主题切换或响应式设计。

编译后的 CSS

.theme-dark {
  background: #000;
  color: #fff;
}

@for 循环

@for $i from 1 through 4 {
  .col-#{$i} {
    width: 25% * $i;
  }
}

解释:for 循环用于生成一系列相似的样式规则,减少重复代码。

编译后的 CSS

.col-1 {
  width: 25%;
}
.col-2 {
  width: 50%;
}
.col-3 {
  width: 75%;
}
.col-4 {
  width: 100%;
}

@each 循环

$colors: red, green, blue, yellow;

@each $color in $colors { .text-#{$color} { color: $color; } }

解释:each 循环遍历列表或映射中的每个值,为每个值生成相应的样式。

编译后的 CSS

.text-red {
  color: red;
}
.text-green {
  color: green;
}
.text-blue {
  color: blue;
}
.text-yellow {
  color: yellow;
}

@while 循环

$i: 1;
@while $i <= 3 {
  .item-#{$i} {
    width: 100px * $i;
  }
  $i: $i + 1;
}

解释:while 循环在满足条件时重复生成样式,比 for 循环更灵活。

编译后的 CSS

.item-1 {
  width: 100px;
}
.item-2 {
  width: 200px;
}
.item-3 {
  width: 300px;
}

9. 导入 (Import)

// 导入其他 SCSS 文件
@import 'variables';
@import 'mixins';
@import 'components/button';

解释:import 用于将多个 SCSS 文件合并为一个,便于模块化管理和组织代码。

编译后的 CSS

/* 所有导入文件的内容会被合并到这个位置 */

10. 注释

// 单行注释(不会编译到 CSS)

/* 多行注释 会编译到 CSS */

/// 文档注释(用于文档生成工具) /// @param {Color} $color - 颜色值 /// @return {Color} - 处理后的颜色

解释:SCSS 支持多种注释方式,单行注释不会出现在编译后的 CSS 中,多行注释会保留。

编译后的 CSS

/* 
  多行注释
  会编译到 CSS
*/

11. 占位符选择器 (%)

%button-base {
  padding: 10px 20px;
  border: none;
  cursor: pointer;
}

.primary-btn { @extend %button-base; background: blue; color: white; }

.secondary-btn { @extend %button-base; background: gray; color: black; }

解释:占位符选择器以 % 开头,本身不会被编译,只有被 @extend 引用时才会生成对应的 CSS。

编译后的 CSS

.primary-btn, .secondary-btn {
  padding: 10px 20px;
  border: none;
  cursor: pointer;
}

.primary-btn { background: blue; color: white; }

.secondary-btn { background: gray; color: black; }

12. 插值 (#{})

$property: margin;
$direction: top;

.#{$property}-#{$direction} { #{$property}-#{$direction}: 10px; }

解释:插值 #{} 允许在选择器名、属性名、属性值中使用变量,实现动态生成。

编译后的 CSS

.margin-top {
  margin-top: 10px;
}

这些 SCSS 语法规则大大提升了 CSS 的开发效率和维护性,使样式代码更加模块化、可复用和易于管理。