SCSS(Sassy CSS)是 Sass(Syntactically Awesome Stylesheets)的一种语法扩展,它是 CSS 的增强版本,提供了变量、嵌套规则、混合宏、继承等功能,使得 CSS 更加强大、灵活和易于维护。SCSS 与 CSS 基本兼容,区别在于 SCSS 允许使用更强大的功能,如变量、嵌套、运算等。

下面是 SCSS 的一些基础知识,帮助你快速入门。

1. SCSS 基本语法

SCSS 的语法与 CSS 基本相同,唯一的区别在于 SCSS 允许嵌套、变量等高级功能。

/* SCSS 语法 */
$primary-color: #333; /* 定义变量 */

body {
  color: $primary-color; /* 使用变量 */
}

a {
  text-decoration: none;
  color: $primary-color;

  &:hover { /* 嵌套 */
    color: lighten($primary-color, 20%); /* 使用 SCSS 函数 */
  }
}

2. 变量(Variables)

SCSS 允许你定义变量来存储值,以便重用。变量使用 $ 符号。

$primary-color: #3498db;
$font-size: 16px;

body {
  color: $primary-color;
  font-size: $font-size;
}

3. 嵌套(Nesting)

SCSS 支持嵌套规则,这使得 CSS 的结构更符合 HTML 的层次结构。

/* 传统 CSS */
nav a {
  color: #333;
}

nav a:hover {
  color: #f00;
}

/* SCSS 嵌套 */
nav {
  a {
    color: #333;
    
    &:hover {
      color: #f00;
    }
  }
}

  • & 符号代表父级元素,允许对其进行修改。

4. 混合宏(Mixins)

混合宏(mixins)是一种重用 CSS 代码的方法,允许你定义一个可复用的代码块,并且可以传递参数。

/* 定义混合宏 */
@mixin border-radius($radius) {
  -webkit-border-radius: $radius;
  -moz-border-radius: $radius;
  border-radius: $radius;
}

/* 使用混合宏 */
.box {
  @include border-radius(10px);
}

  • @mixin 用来定义混合宏。
  • @include 用来调用混合宏。

5. 继承(Inheritance)

继承允许一个选择器继承另一个选择器的样式,从而避免重复的代码。

/* 定义一个通用样式 */
%button-styles {
  padding: 10px;
  font-size: 16px;
  cursor: pointer;
}

/* 使用继承 */
.button {
  @extend %button-styles;
  background-color: #3498db;
}

.button-danger {
  @extend %button-styles;
  background-color: red;
}

  • % 符号用来定义占位符选择器,只能通过 @extend 扩展,而不会直接生成 CSS 规则。

6. 运算(Operations)

SCSS 支持基本的数学运算,可以在样式表中直接进行计算。

$base-width: 100px;
$padding: 20px;

.container {
  width: $base-width + $padding; /* 120px */
  margin: $base-width / 2; /* 50px */
}

7. 条件语句和循环(Control Directives)

SCSS 提供了类似编程语言中的控制语句,比如 @if, @else, @for, @each, @while,可以用来进行更复杂的样式控制。

$theme: light;

.button {
  @if $theme == light {
    background-color: white;
    color: black;
  } @else {
    background-color: black;
    color: white;
  }
}

@for $i from 1 to 5 {
  .box-#{$i} {
    width: 10px * $i;
  }
}

  • @if 用来判断条件。
  • @for 用来创建循环。
  • #{$i} 用来在选择器中插入变量值。

8. 文件导入(@import 和 @use)

SCSS 允许将样式拆分到多个文件中,并通过 @import@use 将它们合并。

/* _variables.scss 文件 */
$primary-color: #3498db;
$font-size: 16px;

/* style.scss 文件 */
@use 'variables';

body {
  color: variables.$primary-color;
  font-size: variables.$font-size;
}

  • @import 逐渐被 @use 取代,因为 @use 提供了更好的模块化和命名空间支持。

9. CSS 输出

SCSS 文件需要经过编译,生成普通的 CSS 文件。可以使用 Sass CLI 或通过构建工具(如 Webpack、Gulp)进行编译。

sass style.scss style.css


总结

SCSS 是 CSS 的扩展,提供了很多强大的功能,让样式表的编写更加简洁、灵活。记住以下几点可以帮助你快速掌握 SCSS:

  • 变量:存储值,便于重用。
  • 嵌套:根据 HTML 结构组织 CSS。
  • 混合宏:复用样式块,支持传参。
  • 继承:减少代码重复。
  • 运算:直接在 SCSS 中进行计算。
  • 控制语句:使用条件判断和循环。

如果你有更具体的问题,随时告诉我!