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 的开发效率和维护性,使样式代码更加模块化、可复用和易于管理。