快速上手
SCSS是什么
加强版的CSS?
CSS实现了变量--var
,支持的浏览器ok(2020),单功能单一
当使用CSS时,我们经常在一个全局环境设置,这样可能会错误地设置元素的样式。
自定义CSS(即使有CSS变量)仍然是非常冗余的。
CSS不是为我们今天所拥有的那种复杂的架构设计的
我们遇到了在另一个样式表中导入一个样式表的问题,这可能会导致一个非常大的样式库,没有适当的文档可能无法理解它。
了解为什么要使用这些预处理程序
演示如何将样式划分为更小的特定组件
不必强迫用户下载大量不需要的CSS文件
SCSS历史
维基百科
脱胎于Ruby (on Rails) 社区
Node-SASS 各端的版本
HTML HAML Pug
TS/ES6
SassScript提供以下功能:变量、嵌套、混入(Mixin)、选择器继承等。
安装与运行
课堂上用到的代码,实时看到页面效果
1
2
3
4
|
cd scss-1
npm init -y
npm i -D parcel
npx parcel index.html #
|
不要装cnpm
如果发现 node-sass安装出错,请百度。
如果需要设置 npm淘宝源,请百度。
零配置学习 - 使用parcel
零配置学习 - 使用测试
最简单的几个语法
$variable
@mixin XXX
-@include XXX
%placeholder
-@extend %placeholder
嵌套选择器 Nesting
嵌套和作用域
1
2
3
4
5
6
7
8
9
|
/* div>ul>li */
.nav {
>ul {
>li {
border: 1px solid red;
}
}
border: 2px solid blue;
}
|
1
2
3
4
5
6
7
8
9
10
|
h1 {
color: red;
}
body {
h1 {
background: #ddd;
font-size: 100px;
color: green;
}
}
|
能够推断 HTML文件的结构,同时保持实现的简短。这样做的另一个好处是,它有助于避免拼写错误
而且已经确定了一些规则的作用域,因此这些样式只用于nav
。
后台看调试里对CSS的请求,仍是**.css,npx parcel index.html
自动编译成css语法
属性也可以嵌套,比如border-color
属性,可以写成:
1
2
3
4
5
|
p {
border: {
color: red;
}
}
|
注意,border:
后面必须加上冒号。
在嵌套的代码块内,可以使用&
引用父元素。比如a:hover
伪类,可以写成:
1
2
3
|
a {
&:hover { color: #ffb3ff; }
}
|
变量$
使用$来声明变量
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
|
$r:orange;
$g:yellowgreen;
$c:cyan;
$grey:#666;
$gray:$grey;
$border-width:5px;
h1 {
color: $r;
}
body {
h1 {
background: $g;
font-size: 100px;
color: $r;
}
}
/* div>ul>li */
.nav {
>ul {
>li {
border: $border-width solid $g;
}
}
border: $border-width solid $grey;
}
|
如果变量需要镶嵌在字符串之中,就必须需要写在#{}
之中。
1
2
3
4
|
$side : left;
.rounded {
border-#{$side}-radius: 5px;
}
|
@mixin
支持参数
可以重用的代码块
写成函数来代替border: 1px solid red;
调试
声明@mixin xxx
引入@include xxx
@mixin
的强大之处,在于可以指定参数和缺省值。
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
|
/* 指定参数和缺省值 */
@mixin debug($border-color:red, $background-color:gold) {
border: 10px solid $border-color;
background: $background-color;
}
/* 写成函数来代替border: 1px solid red;调试 */
/* 使用的时候,根据需要加入参数 */
body {
h1 {
background: $g;
font-size: 100px;
color: $r;
@include debug(orangered, cyan);
}
}
/* div>ul>li */
.nav {
>ul {
>li {
border: $border-width solid $g;
@include debug(purple, yellowgreen);
}
}
border: $border-width solid $grey;
}
|
@include
机械地减少了代码量,但浏览器渲染时仍旧会还原css,性能一样
下面是一个mixin的实例,用来生成浏览器前缀。
1
2
3
4
5
|
@mixin rounded($vert, $horz, $radius: 10px) {
border-#{$vert}-#{$horz}-radius: $radius;
-moz-border-radius-#{$vert}#{$horz}: $radius;
-webkit-border-#{$vert}-#{$horz}-radius: $radius;
}
|
1
2
3
4
5
6
7
|
#navbar li {
@include rounded(top, left);
}
#footer {
@include rounded(top, left, 5px);
}
|
%placeholder
和继承
1
2
3
4
5
6
7
8
9
10
11
12
|
%x
div{
@extend %x{
/* xxx */
}
}
p{
@extend %x{
/* xxx */
}
}
|
刷新页面看CSS:
不重复拷贝样式,而是把选择器提到相同样式前
SASS允许一个选择器,继承另一个选择器。比如,现有class1
:
1
2
3
|
.class1 {
border: 1px solid #ddd;
}
|
class2要继承class1,就要使用@extend
命令:
1
2
3
4
|
.class2 {
@extend .class1;
font-size:120%;
}
|
注释
SASS共有两种注释风格。
标准的CSS注释/* comment */
,会保留到编译后的文件。
单行注释//comment
,只保留在SASS源文件中,编译后被省略。
在/*
后面加一个感叹号,表示这是"重要注释"。
即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。
总结
SCSS快速入门
SCSS(学完之后你可以自学 LESS 和 Stylus PostCSS )
SCSS-lang
中文文档1
中文文档2
at-rules: @mixin @include
The Sass Way
1
2
3
4
5
6
7
8
9
10
|
/* 文本不换行 */
@mixin no-wrap(){
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
/* 使用方法: */
.box {
@include no-wrap()
}
|
SASS用法指南 阮一峰