关于 SASS 的一些思考
前言
最近在看 Element UI 的 CSS 开发规范,也有一些启发。此文用来记录下。
主要是遵循 BEM 规范。
B: Block 模块
E: Element 元素
M: Modifier 修饰符( 状态、属性 )
1 | .block{} |
思想
作用域
SASS 也是有一些 作用域机制 的,那么,局部变量 和 全局变量 就合理存在了。
一般用 $
表示 变量
也有用 #{}
表示 , 通过 #{}
插值语句可以在选择器或属性名中使用变量
1 | $name: foo; |
变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量)。
不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。
将局部变量转换为全局变量可以添加 !global 声明:
1 | #main { |
Slot 插槽
@content
: 向混合样式中导入内容 (Passing Content Blocks to a Mixin)
官方解释: 在引用混合样式的时候,可以先将一段代码导入到混合指令中,然后再输出混合样式,额外导入的部分将出现在 @content
标志的地方。
白话理解:@content
即为 插槽 、占位符。在 include mixin
时 ,定义在 mixin
里。
请看示例:
1 | @mixin apply-to-ie6-only { |
指令,类似 JS 功能 ( 循环、 )
@each
: 遍历循环 语法是$var in <list>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56@each $animal in puma, sea-slug, egret, salamander {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
}
}
/* 编译为 */
.puma-icon {
background-image: url('/images/puma.png'); }
.sea-slug-icon {
background-image: url('/images/sea-slug.png'); }
.egret-icon {
background-image: url('/images/egret.png'); }
.salamander-icon {
background-image: url('/images/salamander.png'); }
/*------------------------------------------------------------------------------*/
// element 这里用来便捷传入 e 参数数组
@each $unit in $element {
$currentSelector: #{$currentSelector +
"." +
$B +
$element-separator +
$unit +
","};
}
// 传入当前 `class`,可以是数组,逗号隔开即可。
@include b((card)) {
border-radius: 4px;
border: 1px solid #ebeef5;
background-color: #fff;
overflow: hidden;
color: #303133;
transition: 0.3s;
@include e(footer) { //传入单个
padding: 20px;
}
@include e((title, body)) { //传入数组
padding: 30px;
}
}
//编译后
.mk-card .mk-card__footer { //传入单个编译结果
padding: 20px;
}
.mk-card .mk-card__title, //传入数组编译结果
.mk-card .mk-card__body {
padding: 30px;
}
参考文档:
- 本文标题:关于 SASS 的一些思考
- 本文作者:Jonnzer
- 创建时间:2021-10-07 22:40:00
- 本文链接:https://jonnzer.github.io/2021/10/07/CSS/SASS/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论