Appearance
Sass 基础概念
Sass(Syntactically Awesome Style Sheets)是一个成熟、稳定且强大的CSS扩展语言。了解Sass的基础概念是掌握其高级功能的前提。
Sass与CSS的关系
Sass是CSS的扩展,它完全兼容CSS语法。所有有效的CSS代码都是有效的Sass代码,但Sass提供了更多高级功能。Sass文件需要编译成CSS才能在浏览器中使用。
两种语法格式
Sass提供两种语法格式:
SCSS (Sassy CSS)
- 语法与CSS兼容
- 使用花括号
{}和分号; - 文件扩展名为
.scss - 推荐用于新项目
scss
$color: blue;
.example {
color: $color;
border: 1px solid darken($color, 10%);
}
缩进语法 (Indented Syntax)
- 使用缩进来表示嵌套
- 不使用花括号和分号
- 文件扩展名为
.sass - 是Sass的原始语法
sass
$color: blue
.example
color: $color
border: 1px solid darken($color, 10%)
核心概念详解
1. 变量 (Variables)
变量允许您存储值并在整个样式表中重复使用。
scss
// 定义变量
$primary-color: #3498db;
$font-size: 16px;
$border-radius: 4px;
// 使用变量
.button {
background-color: $primary-color;
font-size: $font-size;
border-radius: $border-radius;
}
变量的作用域
- 默认为全局作用域
- 可以在选择器内定义局部变量
- 局部变量优先级高于全局变量
2. 嵌套 (Nesting)
嵌套允许您以更直观的方式编写CSS,反映HTML结构。
scss
.navbar {
background-color: #333;
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
&:hover {
background-color: #555;
}
}
a {
display: block;
padding: 10px;
text-decoration: none;
color: white;
}
}
父选择器引用 (&)
使用&引用父选择器,常用于伪类和状态选择器。
scss
.button {
background-color: blue;
&:hover {
background-color: darkblue;
}
&.active {
background-color: green;
}
.icon & {
margin-right: 10px;
}
}
3. 混合宏 (Mixins)
混合宏允许您定义可重用的样式块,可以接受参数。
scss
// 定义混合宏
@mixin button-style($bg-color: blue, $text-color: white) {
padding: 10px 20px;
background-color: $bg-color;
color: $text-color;
border: none;
border-radius: 4px;
cursor: pointer;
&:hover {
background-color: darken($bg-color, 10%);
}
}
// 使用混合宏
.primary-btn {
@include button-style(#007bff, #fff);
}
.secondary-btn {
@include button-style(#6c757d, #fff);
}
4. 继承 (Extend/Inheritance)
使用@extend使一个选择器继承另一个选择器的样式。
scss
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: #28a745;
color: #155724;
background-color: #d4edda;
}
.error {
@extend .message;
border-color: #dc3545;
color: #721c24;
background-color: #f8d7da;
}
5. 函数 (Functions)
Sass提供内置函数,也可以自定义函数。
scss
// 内置函数示例
$width: percentage(50px / 100px); // 50%
// 自定义函数
@function calculate-em($px, $context: 16px) {
@return ($px / $context) * 1em;
}
.title {
font-size: calculate-em(24px);
}
数据类型
Sass支持多种数据类型:
1. 数字 (Numbers)
- 整数和浮点数
- 可带单位(px, em, rem, %, etc.)
2. 字符串 (Strings)
- 用引号或不用引号
- 可以进行字符串操作
3. 颜色 (Colors)
- 十六进制、RGB、HSL等格式
- 内置颜色函数
4. 布尔值 (Booleans)
- true 或 false
5. 空值 (Null)
- 表示无值
6. 列表 (Lists)
- 用空格或逗号分隔的值
- 类似于数组
7. 映射 (Maps)
- 键值对集合
- 类似于对象
scss
// 列表示例
$font-stack: helvetica, arial, sans-serif;
$primary-colors: (red, blue, green);
// 映射示例
$theme-colors: (
"primary": #007bff,
"secondary": #6c757d,
"success": #28a745
);
.nav-link {
color: map-get($theme-colors, "primary");
}
模块系统 (Sass 4.0+)
Sass引入了模块系统,使用@use替代@import:
scss
// _variables.scss
$primary-color: #3498db;
$font-size: 16px;
// main.scss
@use 'variables';
.element {
color: variables.$primary-color;
font-size: variables.$font-size;
}
编译模式
Sass提供多种编译模式:
1. 嵌套 (Nested)
- 默认模式
- 输出嵌套格式的CSS
2. 展开 (Expanded)
- 每个属性独占一行
- 易于阅读
3. 紧凑 (Compact)
- 每个CSS规则独占一行
4. 压缩 (Compressed)
- 移除所有空格和注释
- 最小化输出
这些基础概念是学习Sass的基石,掌握它们将有助于您更好地理解Sass的高级功能和最佳实践。