SCSS 简介
SCSS(Sassy CSS)是一种CSS预处理器,它扩展了CSS的功能,提供了许多便利的特性,使CSS的编写更加高效、可维护。SCSS 是 SASS(Syntactically Awesome Stylesheets)的一种语法格式,使用与 CSS 相似的语法,更易于 CSS 开发者上手。
SCSS 与 CSS 的区别
SCSS 是 CSS 的超集,这意味着所有有效的 CSS 代码也是有效的 SCSS 代码。SCSS 相比 CSS 增加了以下核心特性:
- 变量:可以存储颜色、字体、间距等常用值
- 嵌套规则:可以嵌套选择器,使代码结构更清晰
- 混入(Mixins):可以定义可重用的样式块
- 继承:可以继承其他选择器的样式
- 函数和运算:支持数学运算和自定义函数
- 条件语句和循环:支持控制流语法
安装与使用
安装 SCSS
要使用 SCSS,需要先安装 Node.js,然后通过 npm 安装 sass 包:
编译 SCSS 到 CSS
安装完成后,可以使用以下命令将 SCSS 文件编译为 CSS:
| 1
 | sass input.scss output.css
 | 
 
也可以启用监视模式,实时编译文件变化:
| 1
 | sass --watch input.scss:output.css
 | 
 
基本语法
变量
SCSS 允许使用变量存储值,并在整个样式表中重复使用。变量以$符号开头:
| 1
2
3
4
5
6
7
8
9
 | $primary-color: #3498db;
$font-stack: 'Helvetica Neue', sans-serif;
$spacing: 16px;
body {
  font-family: $font-stack;
  color: $primary-color;
  padding: $spacing;
}
 | 
 
编译为 CSS 后:
| 1
2
3
4
5
 | body {
  font-family: 'Helvetica Neue', sans-serif;
  color: #3498db;
  padding: 16px;
}
 | 
 
嵌套规则
SCSS 允许嵌套选择器,这样可以更清晰地表示 HTML 的层次结构:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 | nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  
  li {
    display: inline-block;
  }
  
  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}
 | 
 
编译为 CSS 后:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 | nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav li {
  display: inline-block;
}
nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none;
}
 | 
 
父选择器引用
在嵌套规则中,可以使用&符号引用父选择器:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 | a {
  color: #333;
  
  &:hover {
    color: #666;
  }
  
  &:active {
    color: #999;
  }
}
 | 
 
编译为 CSS 后:
| 1
2
3
4
5
6
7
8
9
 | a {
  color: #333;
}
a:hover {
  color: #666;
}
a:active {
  color: #999;
}
 | 
 
混入(Mixins)
混入允许定义可重用的样式块,可以接受参数:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 | @mixin border-radius($radius: 5px) {
  -webkit-border-radius: $radius;
  -moz-border-radius: $radius;
  border-radius: $radius;
}
.button {
  @include border-radius(10px);
}
.card {
  @include border-radius;
}
 | 
 
编译为 CSS 后:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
 | .button {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
}
.card {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}
 | 
 
继承
使用@extend指令可以继承其他选择器的样式:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 | .base-button {
  padding: 10px 20px;
  border: 1px solid #ccc;
  cursor: pointer;
}
.primary-button {
  @extend .base-button;
  background-color: #3498db;
  color: white;
}
.secondary-button {
  @extend .base-button;
  background-color: #ecf0f1;
  color: #2c3e50;
}
 | 
 
编译为 CSS 后:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 | .base-button, .primary-button, .secondary-button {
  padding: 10px 20px;
  border: 1px solid #ccc;
  cursor: pointer;
}
.primary-button {
  background-color: #3498db;
  color: white;
}
.secondary-button {
  background-color: #ecf0f1;
  color: #2c3e50;
}
 | 
 
运算
SCSS 支持各种数学运算,可以用于计算尺寸、颜色等:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 | $width: 1000px;
.container {
  width: $width;
}
.sidebar {
  width: $width * 0.3;
}
.main-content {
  width: $width * 0.7;
}
$primary-color: #3498db;
.hover-color {
  color: $primary-color + #222;
}
 | 
 
编译为 CSS 后:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 | .container {
  width: 1000px;
}
.sidebar {
  width: 300px;
}
.main-content {
  width: 700px;
}
.hover-color {
  color: #56baeb;
}
 | 
 
条件语句
SCSS 支持@if、@else if和@else条件语句:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 | @mixin text-size($size) {
  @if $size == small {
    font-size: 12px;
  } @else if $size == medium {
    font-size: 16px;
  } @else if $size == large {
    font-size: 24px;
  } @else {
    font-size: 14px;
  }
}
.small-text {
  @include text-size(small);
}
.large-text {
  @include text-size(large);
}
 | 
 
编译为 CSS 后:
| 1
2
3
4
5
6
 | .small-text {
  font-size: 12px;
}
.large-text {
  font-size: 24px;
}
 | 
 
循环
SCSS 支持多种循环语法,包括@for、@each和@while:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 | // @for循环
@for $i from 1 through 3 {
  .col-#{$i} {
    width: 100% / 3 * $i;
  }
}
// @each循环
$colors: (primary, #3498db), (secondary, #2ecc71), (danger, #e74c3c);
@each $name, $color in $colors {
  .text-#{$name} {
    color: $color;
  }
}
 | 
 
编译为 CSS 后:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 | .col-1 {
  width: 33.33333%;
}
.col-2 {
  width: 66.66667%;
}
.col-3 {
  width: 100%;
}
.text-primary {
  color: #3498db;
}
.text-secondary {
  color: #2ecc71;
}
.text-danger {
  color: #e74c3c;
}
 | 
 
导入其他文件
使用@import指令可以导入其他 SCSS 文件:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 | // _variables.scss
$primary-color: #3498db;
$secondary-color: #2ecc71;
// style.scss
@import 'variables';
body {
  color: $primary-color;
  background-color: $secondary-color;
}
 | 
 
编译为 CSS 后:
| 1
2
3
4
 | body {
  color: #3498db;
  background-color: #2ecc71;
}
 | 
 
总结
SCSS 作为一种 CSS 预处理器,通过提供变量、嵌套、混入、继承等特性,大大增强了 CSS 的功能和可维护性。掌握 SCSS 的基本语法,可以使前端开发工作更加高效和便捷。
希望本文对你了解 SCSS 的基本语法有所帮助!如果有任何问题或建议,欢迎在评论区留言。