Sass 使用

sass使用

一、sass环境

1.sass简述

Sass是最早的Css预处理语言,采用Ruby语言编写,Sass从第三代开始,放弃了缩进式风格,并且完全向下兼容普通的Css代码,这一代的Sass也被称为Scss

2.sass特点

不能直接在页面中解析,需要使用ruby预先翻译成css文件
Sass功能更加强大,拥有流控语句等
完全兼容 CSS3,在 CSS 语言基础上添加了扩展功能,比如变量、嵌套 (nesting)、混合 (mixin)

3.Sass & Scss

Sass和Scss平时都称之为Sass,是同一个东西。区别有两点:

文件后缀 (扩展名) 不同:
    Sass 以“.sasss”为扩展名,Scss 以“.scss”为扩展名;
书写方式 (语法) 不同:
  Sass 以严格的缩进式语法规则来书写,不带大括号和分号;
  Scss 的书写方式和 Css 语法非常类似(越来越受欢迎原因之一)。

4.解析Sass

方法一:使用第三方编译工具koala,官网:http://koala-app.com/
方法二:使用vscode插件:easysass,插件配置参考:https://marketplace.visualstu...

二、sass语法

1.变量

Sass 使用美元符号“$”来声明变量。
Sass的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量 之前 重新声明下变量即可。
default:降低变量的优先级(备胎)

代码中使用:

$fontSize:60px;
$bgColor:blue !default;   //全局变量
$bgColor:skyblue;

body {
    font-size: $fontSize;
    background-color: $bgColor;
    div{
        $bgColor:red;   //局部变量
        background-color: $bgColor;
    }
}

2.@import

Sass扩展了Css的@import规则,让它能够引入Scss和Sass 文件,合并并输出一个单一的Css文件。
被导入的文件中所定义的变量或 mixins 都可以在主文件中使用。

使用:

// test.scss
$bgColor:skyblue;

// index.scss
@import "test";
body {
    background-color: $bgColor;
}

3.嵌套

a.选择器嵌套

选择器嵌套,默认是叠加后代选择器

div {
    h3 {
        color: red;
    }
}
b.属性嵌套
div {
    border: {       // 注意body 后面有个英文冒号
        top:1px solid red;
        bottom:10px dotted blue;
    }
}
c.伪类嵌套
div {
    &:hover {
        background-color: red;
    }
    &::after{
        content: "after";
    }
}

4.代码复用

a.混合宏
项目中有几处小样式类似,可以使用变量来统一处理。需要重复使用大段的样式时,变量就无法达到目的了。这个时候就需要混合宏来搞定。
@mixin 用来声明混合宏
@include 用来来调用声明好的混合宏。
缺点:混合宏对于复用重复的代码块很方便,但它会生成冗余的代码块,相同代码块不能智能合并。比如在不同的地方调用一个相同的混合宏时。

使用:

@mixin after{       // 不带参数
    content: "after";
    display: block;
    background-color: red;
}

@mixin circle($radius:50px,$bgColor:skyblue){   // 带参数
    width: $radius;
    height: $radius;
    border-radius: 50%;
    background-color: $bgColor;
}
div{
    @include circle(50px,red);
    &::after{
        @include after;
    }
}
b.继承
Sass通过关键词 @extend 来继承已存在的类样式块,实现代码的继承。(可以解决混合宏不能智能合并相同代码的缺点)
.btn{
    border: solid 1px #ccc;
    background-color: white;
    font-size: 14px;
    padding: 5px 10px;
    border-radius: 4px;
}
.btn-primary{
    @extend .btn;
    background-color: #33b735;  // 重写背景颜色
    color: white;
}
.btn-warnning{
    @extend .btn;
    background-color: #da3e3e;
    color: white;
}
//===> css
/*
/* 
.btn, .btn-primary, .btn-warnning {
  border: solid 1px #ccc;
  background-color: white;
  font-size: 14px;
  padding: 5px 10px;
  border-radius: 4px;
}

c.占位符

Sass的占位符 %placeholder 声明的代码,如果不被 @extend 调用的话,不会产生任何代码。避免了代码冗余的产生。
%popover{ // 不会保存的css中,因为未继承
    background-color: #33b735;
}

.btn-primary{
    // @extend %popover; 
}

区别总结

占位符独立定义,不调用时不产生任何代码;继承首先有一个基类存在,不管调用不调用,基类的样式都将会编译到 Css 代码中。

区别图示比较:
Sass 使用_第1张图片

5.特殊变量类型

a.list
List类型的取值,语法nth(list, index),第一个参数表示要取谁的,也就是list类型的变量的名称,第二个表示索引

使用:

div {
    $div-padding: 1px 5px 10px 20px 30px 40px;
    padding: {
        top: nth($div-padding, 1);
        bottom: nth($div-padding, 4);
    }
}
b.map
Map类型取值,语法map-get(map, key),第一个参数表示要取谁的,也就是map类型的变量的名称,第二个参数表示要取的key。

使用:

div {
    $color-map: (r:red, g:green, b:blue);
    color: map-get($color-map, r);
}

6.sass运算

对sass中的数值进行计算,除法运算必须加括号,其它运算可以不加,但是建议所有运算都加上括号

使用:

div {
    border: solid 1px + 3px - 1px red;
    padding-left: (1000px / 10);
    padding-top: 10px * 10;
}

7.sass分支与循环

a.if语句
@if 指令可以根据条件来处理样式块,条件为true返回一个样式块,false返回另外样式块。除了@if之外,还可以配合@else、@else if使用。

使用:

@mixin show($boolean: true){
    @if $boolean {
        display: block;
        visibility: visible;
    }@else{
        display: none;
        visibility: hidden;
    }
}

div {
    @include show(true);
}
b.for循环
  @for 循环有两种形式:
    @for $i from  through     包括end这个数
    @for $i from  to         不包括end这个数
循环内使用#{$i}调用当前次循环变量

使用:


ul {
    width: 500px;
    border: solid 1px red;

    li {
        background-color: red;
        margin: 10px 0;

        @for $w from 1 through 10 {
            &:nth-child(#{$w}) {
                width: #{$w}0%;
            }
        }
    }
}
c.each循环list
@each 循环就是去遍历一个列表,然后从列表中取出对应的值。
@each $var in , $var 是个变量名,返回一个列表值。变量 $var 会在列表中做遍历,并且遍历出与 $var 对应的样式块。

使用:

ul {
    width: 500px;
    border: solid 1px red;

    $author-list: tony tian kevin;

    @mixin user-imgs {
        @each $author in $author-list{
            .photo-#{$author}{
                background-image: url("/imgs/#{$author}.jpg");
            }
        }
    }
    .author{
        @include user-imgs;
    } 
}

编译后的css:

ul {
  width: 500px;
  border: solid 1px red;
}

ul .author .photo-tony {
  background-image: url("/imgs/tony.jpg");
}

ul .author .photo-tian {
  background-image: url("/imgs/tian.jpg");
}

ul .author .photo-kevin {
  background-image: url("/imgs/kevin.jpg");
}
d.while循环
@while 循环和 @for类似,后面的条件为 true 就会执行,并且会生成不同的样式块,直到表达式值为 false 时停止循环。

使用:

li {
        background-color: red;
        $types: 10;
        $type-width: 20px;
        
        @while $types > 0{
            &:nth-child(#{$types}) {
                width: $type-width * $types;
                $types: $types - 1;
            }
        }
    }

8.函数

Sass自备一系列的函数功能。还可以自定义函数。

可使用的函数:

字符串函数
unquote($string):        删除字符串中的引号;
quote($string):        给字符串添加引号;
To-upper-case():        将字符串小写字母转换成大写字母;
To-lower-case():        将字符串转换成小写字母。

数字函数
percentage($value):        将一个不带单位的数转换成百分比值;
round($value):            将数值四舍五入,转换成一个最接近的整数;
ceil($value):            将大于自己的小数转换成下一位整数;
floor($value):            将一个数去除他的小数部分;
abs($value):            返回一个数的绝对值;
min($numbers…):        找出几个数值之间的最小值;
max($numbers…):        找出几个数值之间的最大值;
random():                 获取随机数。

列表函数
length($list):                         返回一个列表的长度值;
nth($list, $n):                         返回一个列表中指定的某个标签值
join($list1, $list2, [$separator]):             将两个列给连接在一起,变成一个列表;
append($list1, $val, [$separator]):         将某个值放在列表的最后;
zip($lists…):                         将几个列表结合成一个多维的列表;
index($list, $value):                     返回一个值在列表中的位置值。

Introspection 函数
type-of($value):                    返回一个值的类型;
unit($number):                        返回一个值的单位;
unitless($number):                    判断一个值是否带有单位;
comparable($number-1, $number-2):    判断两个值是否可以做加、减和合并。
Opacity函数
alpha($color) /opacity($color):        获取颜色透明度值;
rgba($color, $alpha):                      改变颜色的透明度值;
opacify($color, $amount) / fade-in($color, $amount):使颜色更不透明;
transparentize($color, $amount) / fade-out($color, $amount):使颜色更加透明。

Sass Maps的函数
map-get($map,$key):根据给定的 key 值,返回 map 中相关的值。
map-merge($map1,$map2):将两个 map 合并成一个新的 map。
map-remove($map,$key):从 map 中删除一个 key,返回一个新 map。
map-keys($map):返回 map 中所有的 key。
map-values($map):返回 map 中所有的 value。
map-has-key($map,$key):根据给定的 key 值判断 map 是否有对应的 value 值,如果有返回 true,否则返回 false。
keywords($args):返回一个函数的参数,这个参数可以动态的设置 key 和 value。

Miscellaneous函数(三元函数)
if($condition,$if-true,$if-false):条件成立时,返回的值为 $if-true,否则返回值为$if-false。

RGB颜色函数
rgb($red,$green,$blue):根据红、绿、蓝三个值创建一个颜色;
rgba($red,$green,$blue,$alpha):根据红、绿、蓝和透明度值创建一个颜色;
red($color):从一个颜色中获取其中红色值;
green($color):从一个颜色中获取其中绿色值;
blue($color):从一个颜色中获取其中蓝色值;
mix($color-1,$color-2,[$weight]):把两种颜色混合在一起

HSL函数
hsl($hue,$saturation,$lightness):
通过色相(hue)、饱和度(saturation)和亮度(lightness)的值创建一个颜色;
hsla($hue,$saturation,$lightness,$alpha):
通过色相(hue)、饱和度(saturation)、亮度(lightness)和透明(alpha)的值创建一个颜色;
hue($color):从一个颜色中获取色相(hue)值;
saturation($color):从一个颜色中获取饱和度(saturation)值;
lightness($color):从一个颜色中获取亮度(lightness)值;
adjust-hue($color,$degrees):通过改变一个颜色的色相值,创建一个新的颜色;
lighten($color,$amount):通过改变颜色的亮度值,让颜色变亮,创建一个新的颜色;
darken($color,$amount):通过改变颜色的亮度值,让颜色变暗,创建一个新的颜色;
saturate($color,$amount):通过改变颜色的饱和度值,让颜色更饱和,从而创建一个新的颜色
desaturate($color,$amount):
通过改变颜色的饱和度值,让颜色更少的饱和,从而创建出一个新的颜色;
grayscale($color):将一个颜色变成灰色,相当于desaturate($color,100%);
complement($color):返回一个补充色,相当于adjust-hue($color,180deg);
invert($color):反回一个反相色,红、绿、蓝色值倒过来,而透明度不变。

使用:

body{
    &::after{
        content: to-upper-case("haoyunlai");
        display: block;
        clear: both;
    }
}

9.注释

// 单行注释
/* 多行注释 */



你可能感兴趣的:(sass)