NPM version
Downloads
Repo Dependents
Github repo

这是一份快速参考备忘单,列出了 SASS 最有用的功能

Sass 基础

介绍

Sass 是一种 CSS 的预编译语言

1
$ npm install -g sass

在 Node.js 环境中使用 Sass

1
2
3
$ sass source/index.scss build/index.css
$ sass --watch input.scss output.css
$ sass --watch app/sass:public/css

变量

1
2
3
4
$defaultLinkColor: #46EAC2;
a {
color: $defaultLinkColor;
}

字符串插值

1
2
3
4
$wk: -webkit-;
.rounded-box {
#{$wk}border-radius: 4px;
}

注释

1
2
3
4
5
6
/*
这是多行注释
块注释
块注释
*/
// 这是一条单行注释

Extend

1
2
3
4
5
6
.button {
···
}
.push-button {
@extend .button;
}

嵌套(Nesting)

1
2
3
4
5
6
7
8
9
10
nav {
ul {
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
}
}

编译 css 为:

1
2
3
4
5
6
7
8
9
10
nav ul {
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
}

模块(片段)

1
2
3
// _base.scss
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

注意以下划线开头的 Sass 文件

1
2
3
4
5
6
7
// styles.scss
@use 'base';

.inverse {
background-color: base.$primary-color;
color: white;
}

编译 css 为:

1
2
3
4
.inverse {
background-color: #333;
color: white;
}

混合(Mixins)

1
2
3
4
5
6
7
@mixin heading-font {
font-family: sans-serif;
font-weight: bold;
}
h1 {
@include heading-font;
}

查看: 混合(Mixins)

@import

1
2
3
4
5
@import './other_sass_file';
@import '/code', 'lists';
// 纯 CSS @imports
@import "theme.css";
@import url(theme);

.sass.sass 扩展名是可选的。

Sass 混合(Mixins)

参数

1
2
3
@mixin font-size($n) {
font-size: $n * 1.2em;
}

1
2
3
body {
@include font-size(2);
}

默认值

1
2
3
@mixin pad($n: 10px) {
padding: $n;
}

1
2
3
body {
@include pad(15px);
}

默认变量

1
2
3
4
5
6
7
$default-padding: 10px;
@mixin pad($n: $default-padding) {
padding: $n;
}
body {
@include pad(15px);
}

Sass 颜色函数

rgba

1
2
3
rgb(100, 120, 140)
rgba(100, 120, 140, .5)
rgba($color, .5)

Mixing

1
mix($a, $b, 10%)   // 10% a, 90% b

修改 HSLA

1
2
darken($color, 5%)
lighten($color, 5%)
1
2
3
saturate($color, 5%)
desaturate($color, 5%)
grayscale($color)
1
2
3
adjust-hue($color, 15deg)
complement($color) // like adjust-hue(_, 180deg)
invert($color)
1
2
3
fade-in($color, .5)   // aka opacify()
fade-out($color, .5) // aka transparentize()
rgba($color, .5) // sets alpha to .5

获取值

HSLA

1
2
3
4
hue($color)         // 0deg..360deg
saturation($color) // 0%..100%
lightness($color) // 0%..100%
alpha($color) // 0..1 (aka opacity())

RGB

1
2
3
red($color)         // 0..255
green($color)
blue($color)

:- :-
color.red() 用于获取颜色的红色通道
color.green() 用于获得颜色的绿色通道
color.blue() 用于获取颜色的蓝色通道
color.hue() 以获得颜色的色调
color.saturation() 用于获得颜色的饱和度
color.lightness() 以获得颜色的亮度

另见: hue(), red()

Sass 内置了对颜色值的支持

1
2
3
4
@debug rgb(204, 102, 153);  // #c69
@debug rgba(107, 113, 127, 0.8); // rgba(107, 113, 127, 0.8)
@debug hsl(228, 7%, 86%); // #dadbdf
@debug hsla(20, 20%, 85%, 0.7); // rgb(225, 215, 210, 0.7)

调整

1
2
3
4
5
6
7
8
9
10
// 固定金额变动
adjust-color($color, $blue: 5)
adjust-color($color, $lightness: -30%) // darken(_, 30%)
adjust-color($color, $alpha: -0.4) // fade-out(_, .4)
adjust-color($color, $hue: 30deg) // adjust-hue(_, 15deg)
// 通过百分比变化
scale-color($color, $lightness: 50%)
// 完全改变一个属性
change-color($color, $hue: 180deg)
change-color($color, $blue: 250)

支持的: $red, $green, $blue, $hue, $saturation, $lightness, $alpha

Sass 其他函数

字符串

1
2
unquote('hello')
quote(bold); // "bold"
1
2
to-upper-case(hello)
to-lower-case(hello)

1
2
3
4
str-length(hello world)
// "ello" - 它是从 1 开始的,而不是从 0 开始的
str-slice(hello, 2, 5)
str-insert("abcd", "X", 1) // "Xabcd"

Numbers

1
2
3
4
floor(4.2)  // 4
ceil(4.2) // 5
round(4.2) // 4
abs(-10px) // 10px

1
2
3
min(1px, 4px)  // 1px
$widths: 50px, 30px, 100px
@debug math.min($widths...) // 30px

1
2
percentage(.5)   // 50%
random(3) // 0..3

Units

1
2
unit(3em)        // 'em'
unitless(100px) // false

Units

1
2
unit(3em)        // 'em'
unitless(100px) // false

Misc

1
2
3
4
5
// 检查 $red
variable-exists(red)
// 检查@mixin red-text
mixin-exists(red-text)
function-exists(redify)

1
global-variable-exists(red)

1
2
3
4
5
6
7
8
// .menu li a
selector-append('.menu', 'li', 'a')
// .menu:hover li
selector-nest('.menu', '&:hover li')
selector-extend(...)
selector-parse(...)
selector-replace(...)
selector-unify(...)

Sass 功能检查

功能检查

1
2
meta.feature-exists($feature)
feature-exists($feature) //=> boolean

1
2
3
4
5
6
7
8
9
@mixin debug-content-exists {
@debug meta.content-exists();
@content;
}

@include debug-content-exists; // false
@include debug-content-exists { // true
// Content!
}

功能

:- :-
global-variable-shadowing # 这意味着局部变量将隐藏全局变量,除非它具有 !global 标志
extend-selector-pseudoclass # 这意味着 @extend 规则将影响嵌套在伪类中的选择器,如 :not()
units-level-3 # 这意味着单位算术支持在 CSS 值和单位级别 3 中定义的单位
at-error # 这意味着支持 @error 规则
custom-property # 这意味着自定义属性声明值不支持除插值之外的任何表达式

Sass 循环

For 循环

1
2
3
4
5
6
7
$base-color: #036;

@for $i from 1 through 3 {
ul:nth-child(3n + #{$i}) {
background-color: lighten($base-color, $i * 5%);
}
}

编译 css 为:

1
2
3
4
5
6
7
8
9
10
11
ul:nth-child(3n + 1) {
background-color: #004080;
}

ul:nth-child(3n + 2) {
background-color: #004d99;
}

ul:nth-child(3n + 3) {
background-color: #0059b3;
}

Each 循环(简单)

1
2
3
4
5
6
7
8
$sizes: 40px, 50px;

@each $size in $sizes {
.icon-#{$size} {
font-size: $size;
height: $size;
}
}

编译 css 为:

1
2
3
4
5
6
7
8
9
.icon-40px {
font-size: 40px;
height: 40px;
}

.icon-50px {
font-size: 50px;
height: 50px;
}

Each 循环(嵌套)

1
2
3
4
5
6
7
8
9
$icons: ("eye": "\f112", "start": "\f12e");

@each $name, $glyph in $icons {
.icon-#{$name}:before {
display: inline-block;
font-family: "Icon Font";
content: $glyph;
}
}

编译 css 为:

1
2
3
4
5
6
7
8
9
10
.icon-eye:before {
display: inline-block;
font-family: "Icon Font";
content: "";
}
.icon-start:before {
display: inline-block;
font-family: "Icon Font";
content: "";
}

While 循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@use "sass:math";

/// 将 `$value` 除以 `$ratio` 直到它低于 `$base`
@function scale-below($value, $base, $ratio: 1.618) {
@while $value > $base {
$value: math.div($value, $ratio);
}
@return $value;
}

$normal-font-size: 16px;
sup {
font-size: scale-below(20px, 16px);
}

编译 css 为:

1
2
3
sup {
font-size: 12.36094px;
}

Sass 其它功能

条件句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@mixin avatar($size, $circle: false) {
width: $size;
height: $size;

@if $circle {
border-radius: $size / 2;
}
}

.square-av {
@include avatar(100px, $circle: false);
}
.circle-av {
@include avatar(100px, $circle: true);
}

编译 css 为:

1
2
3
4
5
6
7
8
9
10
.square-av {
width: 100px;
height: 100px;
}

.circle-av {
width: 100px;
height: 100px;
border-radius: 50px;
}

插值

1
2
3
4
5
.#{$klass} { ... }      // Class
call($function-name) // Functions
@media #{$tablet}
font: #{$size}/#{$line-height}
url("#{$background}.jpg")

列表

1
2
3
4
$list: (a b c);
nth($list, 1) // starts with 1
length($list)
@each $item in $list { ... }

Maps

1
2
$map: (key1: value1, key2: value2, key3: value3);
map-get($map, key1)

另见


评论
avatar
竹山一叶
技术分享 个人心得
Follow Me
公告
欢迎光临小站,这里是我日常工作和学习中收集和整理的总结,希望能对你有所帮助:)

本站的内容经过个人加工总结而来,也参考了网友们分享的资料,如有侵权,请第一时间联系我,我将及时进行修改或删除😊
最新文章
网站资讯
文章数目 :
437
已运行时间 :
本站总字数 :
431.6k
本站访客数 :
本站总访问量 :
最后更新时间 :
文章归档文章分类文章标签复制本文标题复制本文地址
随便逛逛