前言
Sass是CSS预处理器,Sass是一种易于使用的样式语言,可帮助减少传统CSS的许多重复性和可维护性挑战。学习Sass可以编写出可重复使用的样式效,也是在工作和面试要求中不可或缺的一项技能了。
基本概念
什么是Sass?
-
Sass
与所有版本的CSS
完全兼容。 - 文件后缀名是
.scss
,意思为Sassy CSS
。 -
Sass
是CSS
的扩展,Sass
是CSS
预处理器。 -
Sass
减少了CSS
的重复,因此节省了时间。 -
Sass
文件就是普通的文本文件,里面可以直接使用CSS
语法。 -
Sass
由Hampton Catlin
设计,由Natalie Weizenbaum
在2006年开发
为什么使用Sass?
- 随着项目开发样式表越来越大,越来越复杂并且难以维护。这是
CSS
预处理程序可以提供帮助的地方。 -
Sass
使您可以使用CSS
中不存在的功能,例如变量,嵌套规则,混合,导入,继承,内置函数和其他内容。
Sass与Less、Stylus有何区别
- 均具有“变量”、“混合”、“嵌套”、“继承”、“颜色混合”五大基本特性
-
Scss
和Less
语法较为严谨,Less
要求一定要使用大括号{}
,Scss
和Stylus
可以通过缩进表示层次与嵌套关系 -
Scss
无全局变量的概念,Less
和Stylus
有类似于其它语言的作用域概念 -
Sass
是基于Ruby
语言的,而Less
和Stylus
可以基于NodeJS NPM
下载相应库后进行编译;
基本用法
1、使用注释
支持/** **/
和 //
两种方式
/* Block comments */
// Line comments
2、引入样式
引入外部样式可以使用@import
关键字。
@import './other_sass_file`;
文件的.scss或.sass扩展名是可选的。
3、声明变量
以$
符号来声明变量。
$red: #833;
body {
color: $red;
}
如果变量需要镶嵌在字符串之中,就必须需要写在#{}
之中。
$side : left;
.rounded {
border-#{$side}-radius: 5px;
}
4、使用嵌套
在嵌套的代码块内,可以使用&
引用父元素,属性也可以嵌套,比如border-color
属性。注意,border后面必须加上冒号
.markdown-body {
p {
color: blue;
}
&:hover {
color: red;
}
}
p {
border: {
color: red;
}
}
最后编译的结果为
.markdown-body p {
color: blue;
}
.markdown-body :hover {
color: red;
}
p {
border-color: red
}
5、使用继承
继承另外一个标签的属性可以使用@extend
关键字。
.button {
···
}
.push-button {
@extend .button;
}
6、Mixin
Mixin
一般用来编写公共可复用的样式,如定位上下左右居中、背景图片地址和大小。使用@Mixin
关键字来声明,应用使用@include
关键字
@mixin heading-font {
font-family: sans-serif;
font-weight: bold;
}
h1 {
@include heading-font;
}
带参数的声明和引用
@mixin font-size($n) {
font-size: $n * 1.2em;
}
body {
@include font-size(2);
}
具有默认值
@mixin pad($n: 10px) {
padding: $n;
}
body {
@include pad(15px);
}
带有默认变量
// 设置默认的值
$default-padding: 10px;
@mixin pad($n: $default-padding) {
padding: $n;
}
body {
@include pad(15px);
}
7、颜色函数
rgba
rgb(100, 120, 140)
rgba(100, 120, 140, .5)
rgba($color, .5)
Mixing
mix($a, $b, 10%) // 10% a, 90% b
RGB
red($color) // → 0..255
green($color)
blue($color)
调整颜色
lighten(#cc3, 10%) // #d6d65c
darken(#cc3, 10%) // #a3a329
grayscale(#cc3) // #808080
complement(#cc3) // #33c
高级用法
1、循环语句
使用for
循环。
@for $i from 1 through 4 {
.item-#{$i} { left: 20px * $i; }
}
each
循环(简单),作用与for类似。
@each $item in $menu-items {
.photo-#{$item} {
background: url('images/#{$item}.jpg');
}
}
each
循环(嵌套)
$backgrounds: (home, 'home.jpg'), (about, 'about.jpg');
@each $id, $image in $backgrounds {
.photo-#{$id} {
background: url($image);
}
}
While
循环
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
$i: $i - 2;
}
2、条件语句
@if
可以用来判断,配套@else
命令。
@if $position == 'left' {
position: absolute;
left: 0;
}
@else {
position: static;
}
3、自定义函数
Sass允许用户编写自己的函数。
@function double($n) {
@return $n * 2;
}
#sidebar {
width: double(5px);
}
其他特性
1、List
$list: (a b c);
nth($list, 1) // starts with 1
length($list)
@each $item in $list { ... }
2、Map
$map: (key1: value1, key2: value2, key3: value3);
map-get($map, key1)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。