Sass(Syntactically Awesome Stylesheets)是一种 CSS 预处理器,它为 CSS 赋予了更多强大的功能和更灵活的语法结构。
.sass
后缀的缩进语法,它不使用大括号和分号,通过缩进来表示代码块,代码看起来更加简洁,例如:body
font-family: Arial
color: #333
另一种是 .scss
后缀的语法,它和 CSS 语法类似,使用大括号和分号,对于熟悉 CSS 的开发者来说更容易上手,例如:
body {
font-family: Arial;
color: #333;
}
$primary-color: #007bff;
button {
background-color: $primary-color;
}
Less(Leaner Style Sheets)也是一种 CSS 预处理器,它让 CSS 的编写变得更加高效和可维护。
body {
background-color: #f8f9fa;
}
@link-color: #007bff;
a {
color: @link-color;
}
.sass
)。.scss
语法,这种语法和 CSS 兼容,使得更多开发者能够接受和使用 Sass。在前端项目中,Sass 和 Less 可以帮助开发者更高效地编写和管理 CSS 代码。
在响应式设计中,Sass 和 Less 可以让媒体查询的编写更加方便和灵活。
$tablet-width: 768px;
@media (min-width: $tablet-width) {
body {
font-size: 16px;
}
}
.container {
width: 100%;
@media (min-width: 992px) {
width: 960px;
}
}
在大型项目中,Sass 和 Less 的优势更加明显。
Sass 是一种强大的 CSS 预处理器,使用 npm(Node 包管理器)可以轻松安装它。以下是具体步骤:
检查 Node.js 和 npm 是否安装
node -v
并回车,如果显示 Node.js 的版本号,说明 Node.js 已安装。npm -v
并回车,如果显示 npm 的版本号,说明 npm 已安装。如果没有安装,需要先从 Node.js 官网 下载并安装 Node.js,npm 会随 Node.js 一起安装。安装 Sass
npm install -g sass
这里的 -g
表示全局安装,这样在系统的任何目录下都可以使用 Sass 命令。sass --version
来验证 Sass 是否安装成功,如果显示 Sass 的版本号,就说明安装成功啦。Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install sass
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install sass/sass/sass
echo "deb [arch=amd64] https://dl.bintray.com/sass/ubuntu stable main" | sudo tee -a /etc/apt/sources.list.d/sass.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C92F20992128602E
sudo apt-get update
sudo apt-get install sass
Less 也是一种流行的 CSS 预处理器,使用 npm 安装它的步骤如下:
npm install -g less
同样,-g
表示全局安装。安装完成后,可以输入 lessc --version
来验证 Less 是否安装成功。除了使用 npm 安装,还可以在浏览器端直接引入 Less。步骤如下:
less.js
文件。styles.less
文件和 less.js
文件放在项目的同一目录下,在 HTML 文件的
标签中添加以下代码:<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript">script>
less.js
文件。这样在浏览器中打开 HTML 文件时,Less 会自动编译成 CSS。package.json
文件,在终端中输入 npm init -y
。npm install gulp gulp-sass gulp-less --save-dev
这里的 gulp-sass
用于编译 Sass,gulp-less
用于编译 Less,--save-dev
表示将这些插件作为开发依赖安装。gulpfile.js
文件,添加以下代码:const gulp = require('gulp');
const sass = require('gulp-sass')(require('sass'));
const less = require('gulp-less');
// 编译 Sass 任务
function compileSass() {
return gulp.src('src/scss/*.scss')
.pipe(sass().on('error', sass.logError))
.pipe(gulp.dest('dist/css'));
}
// 编译 Less 任务
function compileLess() {
return gulp.src('src/less/*.less')
.pipe(less())
.pipe(gulp.dest('dist/css'));
}
exports.compileSass = compileSass;
exports.compileLess = compileLess;
src/scss
目录下,Less 文件放在 src/less
目录下,编译后的 CSS 文件会输出到 dist/css
目录下。gulp compileSass
可以编译 Sass 文件,输入 gulp compileLess
可以编译 Less 文件。package.json
文件,然后安装 webpack 和相关加载器,输入以下命令:npm install webpack webpack-cli style-loader css-loader sass-loader less-loader sass less --save-dev
webpack.config.js
文件,添加以下代码:const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
},
{
test: /\.less$/,
use: ['style-loader', 'css-loader', 'less-loader']
}
]
}
};
npx webpack
来运行 webpack 编译。npm install sass sass-loader --save-dev
.vue
文件的
标签中添加 lang="scss"
属性,例如:
Hello Vue with Sass
npm install less less-loader --save-dev
.vue
文件的
标签中添加 lang="less"
属性,例如:
Hello Vue with Less
npm install sass --save-dev
styles.scss
文件,在 React 组件中引入并使用:import React from 'react';
import './styles.scss';
const App = () => {
return (
Hello React with Sass
);
};
export default App;
npm install less less-loader --save-dev
react-app-rewired
来修改配置。styles.less
文件,在 React 组件中引入并使用:import React from 'react';
import './styles.less';
const App = () => {
return (
Hello React with Less
);
};
export default App;
这样,就完成了 Sass 和 Less 的安装、开发环境的配置以及与前端框架的集成啦。
在 Sass 中,变量以 $
符号开头,后面跟着变量名,使用冒号 :
来赋值。例如:
$primary-color: #007bff;
$font-size-base: 16px;
这里定义了两个变量,$primary-color
用于存储主要颜色,$font-size-base
用于存储基础字体大小。
定义好变量后,就可以在样式中使用它们了。例如:
body {
color: $primary-color;
font-size: $font-size-base;
}
在这个例子中,body
元素的文本颜色使用了 $primary-color
变量的值,字体大小使用了 $font-size-base
变量的值。
Less 中的变量以 @
符号开头,同样使用冒号 :
来赋值。例如:
@primary-color: #007bff;
@font-size-base: 16px;
这里定义的变量和 Sass 中的类似,只是符号不同。
在 Less 中使用变量的方式和 Sass 类似。例如:
body {
color: @primary-color;
font-size: @font-size-base;
}
同样,body
元素的文本颜色和字体大小使用了定义好的变量值。
body {
$local-color: #ff0000;
color: $local-color;
}
p {
// 这里无法使用 $local-color 变量
color: $primary-color;
}
body {
@local-color: #ff0000;
color: @local-color;
}
p {
// 这里无法使用 @local-color 变量
color: @primary-color;
}
Sass 允许在选择器中嵌套选择器,使代码结构更清晰。例如:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
在这个例子中,ul
、li
和 a
选择器都嵌套在 nav
选择器内部,这样的结构更符合 HTML 中的嵌套关系。
Less 的嵌套语法和 Sass 类似。例如:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
同样,ul
、li
和 a
选择器嵌套在 nav
选择器内部,使代码更易读。
// 不推荐的过度嵌套
body {
.container {
.row {
.col {
p {
color: red;
}
}
}
}
}
&
:在嵌套中,&
表示父选择器。例如:a {
color: blue;
&:hover {
color: red;
}
}
这里的 &:hover
表示 a
元素的 :hover
状态。
使用 //
来添加单行注释,单行注释不会被编译到 CSS 文件中。例如:
// 这是一个单行注释
body {
color: black;
}
使用 /* */
来添加多行注释,多行注释在压缩模式下会被移除,在非压缩模式下会保留在 CSS 文件中。例如:
/*
这是一个多行注释
可以写很多内容
*/
body {
color: black;
}
同样使用 //
来添加单行注释,单行注释不会被编译到 CSS 文件中。例如:
// 这是一个单行注释
body {
color: black;
}
使用 /* */
来添加多行注释,多行注释会保留在 CSS 文件中。例如:
/*
这是一个多行注释
可以写很多内容
*/
body {
color: black;
}
总之,Sass 和 Less 在注释方面有一些相似之处,但也有一些细微的差别,需要根据实际需求来选择合适的注释方式。
在 Sass 中,混合器就像是一个代码块的集合,你可以把一些常用的 CSS 样式组合在一起,给它取个名字,方便之后重复使用。使用 @mixin
关键字来定义混合器。
// 定义一个简单的混合器,用于设置圆角边框
@mixin rounded-border {
border: 1px solid #ccc;
border-radius: 5px;
}
使用 @include
关键字来调用定义好的混合器。
// 调用 rounded-border 混合器
.button {
@include rounded-border;
padding: 10px 20px;
color: white;
background-color: blue;
}
编译后的 CSS 代码如下:
.button {
border: 1px solid #ccc;
border-radius: 5px;
padding: 10px 20px;
color: white;
background-color: blue;
}
这样就避免了重复编写相同的代码,提高了代码的复用性。
Less 中的混合器定义方式和 Sass 类似,直接定义一个类或者 ID 样式,就可以当作混合器使用。
// 定义一个混合器,用于设置阴影效果
.shadow {
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
在需要使用混合器的地方,直接调用这个类名或者 ID 名。
.card {
.shadow;
width: 200px;
height: 300px;
background-color: #fff;
}
编译后的 CSS 代码如下:
.card {
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
width: 200px;
height: 300px;
background-color: #fff;
}
通过这种方式,也能实现代码的复用。
Sass 混合器可以接收参数,让混合器更加灵活。
// 定义一个带参数的混合器,用于设置不同颜色和大小的边框
@mixin custom-border($color, $width) {
border: $width solid $color;
}
// 调用带参数的混合器
.box {
@include custom-border(red, 2px);
width: 100px;
height: 100px;
}
编译后的 CSS 代码如下:
.box {
border: 2px solid red;
width: 100px;
height: 100px;
}
Less 混合器同样可以接收参数。
// 定义一个带参数的混合器,用于设置不同颜色的背景
.background-color(@color) {
background-color: @color;
}
// 调用带参数的混合器
.item {
.background-color(green);
width: 150px;
height: 150px;
}
编译后的 CSS 代码如下:
.item {
background-color: green;
width: 150px;
height: 150px;
}
通过传参,混合器可以根据不同的需求生成不同的样式。
@mixin
定义混合器,@include
调用混合器。lighten($color, $amount)
:用于将颜色变亮。$base-color: blue;
.lightened {
background-color: lighten($base-color, 20%);
}
darken($color, $amount)
:用于将颜色变暗。$base-color: blue;
.darkened {
background-color: darken($base-color, 20%);
}
round($number)
:对数字进行四舍五入。$num: 3.6;
.rounded {
font-size: round($num)px;
}
ceil($number)
:对数字向上取整。$num: 3.2;
.ceiled {
font-size: ceil($num)px;
}
lighten(@color, @amount)
:将颜色变亮。@base-color: blue;
.lightened {
background-color: lighten(@base-color, 20%);
}
darken(@color, @amount)
:将颜色变暗。@base-color: blue;
.darkened {
background-color: darken(@base-color, 20%);
}
replace(@string, @pattern, @replacement)
:替换字符串中的内容。@str: "Hello, World!";
.replaced {
content: replace(@str, "World", "Sass");
}
使用 @function
关键字定义自定义函数。
// 定义一个自定义函数,用于计算两个数的和
@function sum($num1, $num2) {
@return $num1 + $num2;
}
// 使用自定义函数
.result {
width: sum(100px, 20px);
}
Less 中可以使用 JavaScript 代码来定义自定义函数。
// 定义一个自定义函数,用于计算两个数的乘积
@multiply: `function(num1, num2) { return num1 * num2; }`;
// 使用自定义函数
.product {
width: ~`@{multiply}(10, 5)`px;
}
通过自定义函数,可以根据项目的具体需求实现特定的功能。
在 Sass 中,继承是一种强大的特性,它允许一个选择器继承另一个选择器的所有样式。使用 @extend
指令来实现继承。
示例代码:
// 定义一个基础的样式类
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
// 定义一个成功消息的样式类,继承自 .message
.success {
@extend .message;
background-color: #d4edda;
border-color: #c3e6cb;
color: #155724;
}
// 定义一个错误消息的样式类,继承自 .message
.error {
@extend .message;
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
}
编译后的 CSS:
.message, .success, .error {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
background-color: #d4edda;
border-color: #c3e6cb;
color: #155724;
}
.error {
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
}
可以看到,.success
和 .error
类继承了 .message
类的所有样式,并且添加了自己的额外样式。
在 Less 中,继承通过 :extend
伪类来实现。它可以让一个选择器继承另一个选择器的样式。
示例代码:
// 定义一个基础的样式类
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
// 定义一个成功消息的样式类,继承自 .message
.success:extend(.message) {
background-color: #d4edda;
border-color: #c3e6cb;
color: #155724;
}
// 定义一个错误消息的样式类,继承自 .message
.error:extend(.message) {
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
}
编译后的 CSS:
.message, .success, .error {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
background-color: #d4edda;
border-color: #c3e6cb;
color: #155724;
}
.error {
background-color: #f8d7da;
border-color: #f5c6cb;
color: #721c24;
}
同样,.success
和 .error
类继承了 .message
类的样式,并添加了自己的样式。
在 Sass 中,可以使用 @import
指令来导入其他 Sass 文件。导入的文件内容会被合并到当前文件中进行编译。
示例代码:
// 导入 variables.scss 文件
@import 'variables';
// 导入 mixins.scss 文件
@import 'mixins';
// 使用导入的变量和混合器
body {
background-color: $body-bg-color;
@include font-size(16px);
}
注意事项:
.scss
和 .sass
文件的导入,所以在 @import
中可以省略文件扩展名。_
开头,Sass 会将其视为部分文件,不会单独编译,而是在被导入时合并到其他文件中。例如,_variables.scss
就是一个部分文件。在 Less 中,同样使用 @import
指令来导入其他 Less 文件。
示例代码:
// 导入 variables.less 文件
@import 'variables';
// 导入 mixins.less 文件
@import 'mixins';
// 使用导入的变量和混合器
body {
background-color: @body-bg-color;
.font-size(16px);
}
注意事项:
.less
文件扩展名。.css
文件,Less 会将其视为普通的 CSS 文件,不会对其进行编译,而是直接将其内容插入到当前文件中。@import
指令的 Sass 文件时,Sass 会将导入的文件内容合并到当前文件中,然后进行编译。编译后的结果是一个包含所有样式的 CSS 文件。_
开头的文件)不会单独编译,而是在被导入时合并到其他文件中,这样可以更好地组织代码。@import
指令时,会将导入的 Less 文件内容合并到当前文件中进行编译。如果导入的是 CSS 文件,会直接将其内容插入到当前文件中。@condition: true;
@media (min-width: 768px) {
@import (when (@condition = true)) 'desktop.less';
}
这样,只有当 @condition
为 true
且屏幕宽度大于等于 768px 时,才会导入 desktop.less
文件。
$width1: 20px;
$width2: 10px;
.element {
width: $width1 + $width2; // 结果为 30px
}
$width: 10px;
$multiplier: 2;
.element {
width: $width * $multiplier; // 结果为 20px
}
除法运算在 Sass 中有一些特殊情况,需要使用括号或者将其作为变量或函数的一部分,例如:
$width: 20px;
.element {
width: ($width / 2); // 结果为 10px
}
颜色也可以进行运算,颜色的每个通道(红、绿、蓝)都会分别进行运算。例如:
$color1: #111111;
$color2: #222222;
.element {
color: $color1 + $color2; // 结果为 #333333
}
字符串可以使用 +
进行拼接,例如:
$prefix: "btn-";
$name: "primary";
.element {
class: $prefix + $name; // 结果为 "btn-primary"
}
@width1: 20px;
@width2: 2px;
.element {
width: @width1 / @width2; // 结果为 10px
}
@width: 20px;
@height: 10em;
.element {
width: @width + @height; // 结果为 30px(这里只是示例,实际使用中要注意单位统一)
}
和 Sass 一样,Less 也可以对颜色进行运算,每个通道分别计算。例如:
@color1: #111;
@color2: #222;
.element {
color: @color1 + @color2; // 结果为 #333
}
颜色加法运算会将颜色的红、绿、蓝通道值分别相加,取值范围在 0 - 255 之间。例如:
$color1: #001122;
$color2: #112233;
.element {
color: $color1 + $color2; // 结果为 #113355
}
减法运算则是将通道值相减,同样取值范围在 0 - 255 之间。例如:
$color1: #333333;
$color2: #111111;
.element {
color: $color1 - $color2; // 结果为 #222222
}
乘法和除法运算会按比例改变颜色的亮度。例如:
$color: #555555;
.element {
color: $color * 2; // 颜色变亮
background-color: $color / 2; // 颜色变暗
}
if
指令用于根据条件判断返回不同的值。语法为 if(condition, value-if-true, value-if-false)
。例如:
$is-large: true;
.element {
width: if($is-large, 200px, 100px); // 结果为 200px
}
for
指令用于循环生成样式。有两种形式:@for $var from
和 @for $var from
,through
包含结束值,to
不包含结束值。例如:
@for $i from 1 through 3 {
.item-#{$i} {
width: 10px * $i;
}
}
这会生成 .item-1
、.item-2
和 .item-3
三个类,宽度分别为 10px、20px 和 30px。
each
指令用于遍历列表或映射。例如:
$colors: red, green, blue;
@each $color in $colors {
.btn-#{$color} {
background-color: $color;
}
}
这会生成 .btn-red
、.btn-green
和 .btn-blue
三个类,背景颜色分别为红色、绿色和蓝色。
while
指令会在条件为真时不断循环。例如:
$i: 1;
@while $i <= 3 {
.box-#{$i} {
height: 10px * $i;
}
$i: $i + 1;
}
这会生成 .box-1
、.box-2
和 .box-3
三个类,高度分别为 10px、20px 和 30px。
when
指令用于在 Less 中进行条件判断。例如:
@width: 20px;
.element {
.mixin() when (@width > 10px) {
color: red;
}
.mixin();
}
这里当 @width
大于 10px 时,.element
的颜色会变为红色。
使用 for
或 each
指令可以根据规则动态生成多个样式类,减少重复代码。例如,在生成网格系统时,可以使用 for
循环生成不同宽度的列类:
@for $i from 1 through 12 {
.col-#{$i} {
width: (100% / 12) * $i;
}
}
使用 if
或 when
指令可以根据不同条件应用不同的样式。例如,根据屏幕宽度应用不同的布局:
$is-mobile: false;
.element {
display: if($is-mobile, block, flex);
}
使用控制指令可以方便地实现颜色主题的切换。例如,通过 each
遍历颜色列表生成不同主题的样式:
$themes: ("light": #ffffff, "dark": #000000);
@each $theme, $color in $themes {
.theme-#{$theme} {
background-color: $color;
}
}
通过这些运算和控制指令,我们可以让 CSS 代码更加灵活和高效,减少重复劳动,提高开发效率!
插值语法是 Sass 中非常实用的一个特性,它允许你在 Sass 代码中动态地插入变量、表达式等内容。简单来说,就像是在一个句子里灵活地嵌入不同的词语一样。
#{}
来包裹需要插入的内容。例如,当你想要动态生成类名或者选择器时,就可以使用插值语法。$prefix: "my-";
$element: "button";
.#{$prefix}#{$element} {
color: blue;
}
在上面的代码中,通过插值语法将 $prefix
和 $element
变量的值插入到选择器中,最终生成的 CSS 选择器为 .my-button
。
$font-family: "Arial";
body {
font-#{"family"}: #{$font-family};
}
这里通过插值语法将属性名和属性值动态插入,使代码更加灵活。
Sass 支持函数式编程特性,这让代码的复用性和可维护性大大提高。
@function calculate-width($percentage) {
@return $percentage * 100%;
}
div {
width: calculate-width(0.5);
}
在这个例子中,定义了一个名为 calculate-width
的函数,它接收一个参数 $percentage
,并返回该参数乘以 100%
的结果。在样式中调用这个函数,就可以动态计算宽度。
lighten()
函数可以用于调整颜色的亮度。$base-color: blue;
div {
background-color: lighten($base-color, 20%);
}
这里使用 lighten()
函数将 $base-color
的亮度提高了 20%
。
Sass 的模块系统让代码的组织和管理变得更加方便。
@use
规则用于导入其他 Sass 文件,并且可以指定命名空间。// _base.scss
$primary-color: blue;
// main.scss
@use 'base' as b;
body {
color: b.$primary-color;
}
在这个例子中,通过 @use
规则导入了 _base.scss
文件,并使用 as b
指定了命名空间。在 main.scss
中可以通过命名空间来访问 _base.scss
中的变量。
@forward
规则用于转发其他 Sass 文件的内容,使得导入该文件的其他文件可以直接访问被转发文件的内容。// _base.scss
$primary-color: blue;
// _utils.scss
@forward 'base';
// main.scss
@use 'utils';
body {
color: utils.$primary-color;
}
这里 _utils.scss
通过 @forward
规则转发了 _base.scss
的内容,main.scss
导入 _utils.scss
后就可以直接访问 _base.scss
中的变量。
Less 的动态导入特性允许你在运行时根据条件导入不同的 Less 文件,就像在游戏中根据不同的关卡选择不同的装备一样。
@import
语句进行导入,并且可以使用变量来动态指定导入的文件路径。@theme: "dark";
@import "@{theme}.less";
在这个例子中,根据 @theme
变量的值动态导入相应的 Less 文件。如果 @theme
的值为 "dark"
,则会导入 dark.less
文件。
Less 的命名空间与访问器特性可以帮助你更好地组织和管理代码,避免命名冲突。
#my-namespace {
.my-class {
color: red;
}
}
这里 #my-namespace
就是一个命名空间,.my-class
样式被封装在其中。
#namespace > .class
或者 #namespace.class
的方式来访问命名空间中的样式。div {
#my-namespace > .my-class();
}
在这个例子中,通过访问器调用了 #my-namespace
命名空间中的 .my-class
样式。
Less 支持循环,这可以让你批量生成样式,提高开发效率。
for
循环来生成一系列样式。.loop(@i) when (@i > 0) {
.item-@{i} {
width: (@i * 10)px;
}
.loop(@i - 1);
}
.loop(5);
在这个例子中,定义了一个递归的 for
循环,从 5
开始递减,每次生成一个类名包含序号的样式,并且设置不同的宽度。最终会生成 .item-5
到 .item-1
的样式。
代码压缩是提升性能的重要手段之一。在开发过程中,为了保证代码的可读性和可维护性,我们会添加大量的注释、空格和换行符,但这些在生产环境中是不必要的,会增加代码的体积,影响加载速度。
在编写代码时,过度的嵌套会让代码变得复杂,降低性能,同时也不利于代码的维护。
缓存和预编译可以提高代码的执行效率,减少重复计算的时间⏱️。
let cache = {};
function getData(key) {
if (cache[key]) {
return cache[key];
}
// 模拟耗时操作
let data = someExpensiveOperation(key);
cache[key] = data;
return data;
}
良好的代码结构组织可以提高代码的可维护性和可扩展性。
规范的命名可以让代码更易读、易理解,减少开发过程中的错误。
userName
而不是 a
。border-radius-mixin
表示这个混合器用于设置圆角边框。在团队协作中,统一的使用规范可以提高开发效率,减少沟通成本。
.sass
和 .scss
。.sass
采用缩进式语法,不使用大括号和分号;.scss
则使用类似 CSS 的大括号和分号语法。引入方式通常是在 CSS 中使用 @import
语句,例如 @import 'styles.sass';
或 @import 'styles.scss';
。.less
,引入方式同样使用 @import
,如 @import 'styles.less';
。$
符号来声明变量,例如:$primary-color: #007bff;
body {
color: $primary-color;
}
@
符号声明变量,示例如下:@primary-color: #007bff;
body {
color: @primary-color;
}
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
@mixin
定义混合器,使用 @include
调用。混合器可以接受参数,并且支持默认值。例如:@mixin border-radius($radius: 5px) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
.button {
@include border-radius(3px);
}
.
或 #
定义混合器,调用时直接使用混合器名称。参数和默认值的使用方式与 Sass 类似。示例:.border-radius(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.button {
.border-radius(3px);
}
@function
定义。例如自定义一个计算百分比的函数:@function percentage($value, $total) {
@return ($value / $total) * 100%;
}
.element {
width: percentage(200px, 800px);
}
@extend
实现选择器的继承。例如:.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}