目录
一、使用&符号来引用父选择器
二、scss的语法
三、变量(Variables)
四、嵌套(Nesting)
五、@mixin 和 @include
六、@extend 继承
七、@import 与 Partials
八、@if简单判断
九、@if复杂判断
一、使用&符号来引用父选择器
在嵌套规则中使用父选择器。这样可以避免重复编写选择器,并且在生成的CSS中保持正确的层级关系。
.button {background-color: blue;&:hover {background-color: darkblue;}&.active {background-color: red;}.icon {color: white;font-size: 16px;}
}
在上面的示例中,.button选择器是父选择器。在嵌套规则中,使用&引用父选择器。
- &:hover表示当鼠标悬停在.button元素上时,应用这个样式。
- &.active表示当.button元素有.active类时,应用这个样式。
- .icon表示嵌套在.button元素内的.icon元素,不使用&引用父选择器。 在编译为CSS后,生成的代码如下:
.button {background-color: blue; }.button:hover {background-color: darkblue; }.button.active {background-color: red; }.button .icon {color: white;font-size: 16px; }
通过使用&引用父选择器,可以编写更具可读性和维护性的代码。
父选择器的引用可以嵌套在任何层级的规则中,并且可以与其他选择器和修饰符组合使用。
二、scss的语法
- (1)// 注释的内容不会编译到css文件中去
-
/* 我的注释内容会编译到css文件中去 */ body {margin: 0; }
- (2) /* */ 注释的内容会编译到css文件中,但是不能是压缩的编译排版格式(--style compressed)
/* 我的注释内容会编译到css文件中去 */
body {margin: 0;
}
- (3)强制注释 /!* */,这种注释在编译排格式为compressed中也能存在。
- 总结:// 一般注释scss内的变量、函数等,/* / 去注释样式说明,非常重要的注释采用/! */。
三、变量(Variables)
- 变量名以 $ 开头,变量的值无需加引号,变量名与变量值之间用冒号
- 一个变量中可以使用其他变量
// 变量名以 $ 开头,变量的值无需加引号,变量名与变量值之间用冒号 $baseColor: pink; $bg_color: #ccc;// 一个变量中可以使用其他变量 $base-border: 1px solid $baseColor;.box { color: $baseColor;background-color: $bg_color;border: $base-border; }
.box {color: pink;background-color: #ccc;border: 1px solid pink; }
四、嵌套(Nesting)
- 普通后代选择器的嵌套
.box {background-color: pink;ul {/* ul 样式 */list-style: none;li {/* li 样式 */font-size: 1rem;}}
}
@charset "UTF-8";
.box {background-color: pink;
}
.box ul {/* ul 样式 */list-style: none;
}
.box ul li {/* li 样式 */font-size: 1rem;
}
伪类选择器的嵌套需要使用&符号, &的一个作用就是让两个元素之间没有空格,让他们紧密连接在一起;
.box{width: 300px;a{color:red; &:hover {font-size: 30px;}}
}
.box {width: 300px;
}
.box a {color: red;
}
.box a:hover {font-size: 30px;
}
- 属性嵌套
.box {font:{size:12px;weight: 400;}
}
.box {font-size: 12px;font-weight: 400;
}
五、@mixin 和 @include
可以理解为js的函数
// 声明:如果没有参数,括号可省略
@minxin 名字(参1,参2,..) {// 样式代码,里面也可以写任何标签嵌套
}// 调用,可以在某个标签下调用,也可单独调用;没有参数可以省略括号;
.box {@include 名字
}@include 名字
- 无参数
// 定义不带参mixin
@mixin my() {border:1px solid red;color: pink;p {font-size: 24px;}
}.box {@include my()
}
.box {border: 1px solid red;color: pink;
}
.box p {font-size: 24px;
}
Partials条件与特点:
body {margin: 0;padding: 0;
}.box {font-size: 30px;color: red;
}
// Partials 文件:_base.scss
body {padding: 0;margin:0;
}// 主要scss文件:index.scss
// 导入_base.scss
@import "base";.box {font-size: 30px;color: red;
}
- 有参数
// 定义带参mixin @mixin info($text-color, $bg-color) {color: $text-color;background-color: $bg-color; }.box {// 按顺序传实参,传递的参数必须保持一致@include info(red, gray) }.box {// 这样传参可以不考虑顺序,但是数量要一一对应,不能少写@include info($bg-color: red, $text-color:gray) }
.box {color: red;background-color: gray; }.box {color: gray;background-color: red; }
- 有参数且带默认值
@mixin btn($color:pink, $bg:orange) {color: $color;background-color: $bg; }.box {// 带默认值的参数,可以不填,等于默认值@include btn; }.box {// 也可以按顺序填,填一个值,对应@mixin的第一个形参@include btn(blue) }.box {// 也可指定某个值@include btn($bg: black) }
.box {color: pink;background-color: orange; }.box {color: blue;background-color: orange; }.box {color: pink;background-color: black; }
六、@extend 继承
-
SCSS @extend 继承
在SCSS中,
@extend
指令用于共享样式规则。使用@extend
可以提高CSS代码的DRY(不要重复自己)原则,减少冗余的代码,并使样式表更易于维护。以下是一个简单的例子,演示如何使用
@extend
: -
// 定义一个基本的类 .base-style .base-style {color: red;font-size: 16px; }// 使用 @extend 继承 .base-style 类的样式 h1 {@extend .base-style; }p {@extend .base-style; }
编译后的CSS:
.base-style, h1, p {color: red;font-size: 16px;}
在这个例子中,
h1
和p
将会共享.base-style
的样式。注意,.base-style
自身也会出现在编译后的CSS中,作为这些选择器的一部分,这是因为@extend
实质上是在修改选择器,而不是创建新的类。如果不希望.base-style
类本身出现在CSS中,可以使用嵌套规则来定义样式,如下: -
// 使用嵌套规则来定义样式 %base-style {color: red;font-size: 16px; }h1 {@extend %base-style; }p {@extend %base-style; }
h1, p {color: red;font-size: 16px; }
这里使用了
%base-style
(以百分号开头)定义的混合(placeholder)样式,不会在最终的CSS中生成对应的类。 -
七、@import 与 Partials
- 在传统的css中,就是使用@import导入其他css文件的,但是每次都会去发送http请求,浪费性能;
- scss中,优化了@import,我们会先创建一个主要scss文件index.scss,然后根据需要去创建所需的每一部分的scss文件,我们称每一个部分为Partials;这样有益于模块化;
- 创建文件时,以_开头
- 使用@import导入文件时,名字不需要加_
- 当你使用sass监听一个目录是,不会监听Partials文件
八、@if简单判断
$flg: true;.box {@if $flg {font-size: 34px;}border:2px solid red;
}
.box {font-size: 34px;border: 2px solid red;
}
九、@if复杂判断
$body-color: red;body {@if $body-color == pink {background-color: pink;} @else if $body-color == red {background-color: red;} @else {background-color: gray;}
}
body {background-color: red;
}