资讯专栏INFORMATION COLUMN

SASS

chanthuang / 3054人阅读

摘要:编译之后结果混合作用继承复用定义使用传参可以对混合进行传递参数,和设置默认值。占用中的位置,使用其样式内容。在模式下,进行色彩运算时,要求通明度必须保持一致,否则无法进行运算。

Sass 是一个CSS 的扩展,在语法CSS语法的基础上,增加变量嵌套规则, 混合,导入函数等功能
对CSS进行预处理的“中间语言”

文件格式

.sass.scss
scss是对css的一种拓展,跟css很像,是开发中最常用的模式。
Sass从第三代开始,放弃了缩进风格,并且完全向下兼容普通的CSS代码。被称为scss

编译Sass

Node环境

sass app.sass app.css

sass --watch app.sass:app.css  // 自动编译更新CSS
// 用来Sass命令来监视某个Sass文件的改动
sass --style expanded app.scss app.css // 编译的CSS格式更像是手写的CSS样式 

工程化工具

Gulp插件:gulp-sass

var gulp = require("gulp"),
    sass = require("gulp-sass"),
    perfixer = require("gulp-autoprefixer"),
    minifyCss = require("gulp-minify-css"); 
    
    
    
// 编译Sass 并添加CSS前缀    ,压缩
gulp.task("sass", function () {
    
    gulp.src("*.sass")
        .pipe(sass())  // 编译
        .pipe(perfixer()) // 自动改名
        .pipe(minifyCss()) // 压缩
        .pipe(gulp.dest("dist")); 
    
});    

gulp.task("default", ["sass"]);

Sass编译后乱码,在Sass文件第一行添加 @charset "UTF-8"。再进行编译。

变量

在SASS中是一个块级作用域,在块内部定义的变量,在外部访问不到,只能在内部访问。
定义:
$w: 100px;

使用:
width: $w;

父类选择器

在SASS中,可以通过&符号,在父选择器内部访问父选择器。
经常使用在伪类元素或伪样式中

div {
    width: $w;
    height: $h;
    background: cyan;
    &:hover {
        background: khaki;
    }
}
属性嵌套

Sass允许CSS属性嵌套,通常这种特性应用于复合属性。对属性嵌套,编译的时候,这些属性会根据嵌套层级来编译结果。

$w: 100px;

div {
    width: $w;
    height: $w;
    background {
        color: pink;
    } 
    border: {
        style: solid;
        top: {
            width: 5px;
            color: tan;
        }
        left: {
            width: 2px;
            color: khaki;
        }
    }
}

编译之后结果:

div {
  width: 100px;
  height: 100px;
  border-style: solid;
  border-top-width: 5px;
  border-top-color: tan;
  border-left-width: 2px;
  border-left-color: khaki; }
  div background {
    color: pink; }
混合

作用:继承复用

定义:@mixin names {}
使用: @include names

$w: 200px;
$h: 100px;
$color: cyan; 

@mixin sayBor {
    width: $w;
    height: $h;
    background: $color;
}

.head {
    @include sayBor;
}
传参

可以对混合进行传递参数,和设置默认值。

@mixin sayBor($w: 300) {
    width: $w;
    height: $h;
    background: $color;
}

.head {
    @include sayBor(500);
}
多参数的使用

通过...语法实现

@mixin sayBor( $shadow...) {
    width: $w;
    height: $h;
    background: $color;
    box-shadow: $shadow;
}

.head {
    @include sayBor(2px 2px 10px red);
}

继承

实现对 class, 元素, id 或者自定义元素名称样式继承。

div {
    width: 100px;
}

myDiv {
    border: 1px solid tan;
}

#demo {
    height: 200px;
}

.app {
    background: tan;
}

p {
    @extend div;
    @extend myDiv;
    @extend #demo;
    @extend .app;
}
mixin与作用域

在sass中,定义在作用域内部的混合,在外部是无法访问的,只能在作用域内部访问
在sass中,定义在作用域内部的继承,在作用域外部是可以访问的,并且会继承整个文件中所有的选择器的样式,不论该选择器写在文件任何位置。编译之后会带有继承的层级选择器。

span {
    .app {
        background: tan;
    }
}

p {
    @extend .app; // 以继承的为父级
}

编译之后

span .app,
span p {
    background: tan;
}

比较Less 的Mixin 和 SASS的继承:
Less中定义在作用域内部的混合,在作用域外部是不能直接访问。
SASS中定义在文件任何位置的继承,都可以直接访问。

比较Less的方法 和 SASS的Mixin
Less中定义在作用域内部的方法,在作用域外部不能直接访问,必须通过命名空间访问。
SASS定义在作用域内部的混合,只能在作用域内部访问,外部无法访问。

占位符

编译之后,样式会删除。占用SASS中的位置,使用其样式内容。

占位符,应用于元素选择器和自定义元素选择器。

%div {
    width: 100px;
}

%myDiv {
    border: 1px solid tan;
}

#demo {
    height: 200px;
}

.app {
    background: tan;
}

p {
    @extend %div;
    @extend %myDiv;
    @extend #demo;
    @extend .app;
}

编译结果:

p {
  width: 100px; }

p {
  border: 1px solid tan; }

#demo, p {
  height: 200px; }

.app, p {
  background: tan; }
运算

在sass中我们的运算是可以包含单位,此时我们的运算会对不同的单位做换算,通常默认单位是px。
当运算时,哪个单位在前面,得到结果就一哪个单位为最终单位。

在SASS中可以对CSS属性值进行运算。
除法元算特殊,因为CSS样式中有 font 属性样式。

必须加上()

是变量或者函数返回的结果

除法是其它运算表达式中的一部分。

$w: 100px;

.box {
    width: $w;
    height: (100/2)px;  // 尽量不要使用数字相除,编译之后单位与数字之间会有空格
    height: 100px+2px;
    font-size: round(5.5px)/2;
    padding: ($w/20)px; // 加上括号之后,不需要加单位,会补默认单位,加上去变成  `px px` 
} 
色彩运算

在16进制的色彩模式中,进行运算时,是对每一个通道色彩多带带运算,每个通道大于255或者小于0时候不会影响其它的通道颜色值。
在rgba模式下,进行色彩运算时,要求通明度必须保持一致,否则无法进行运算。

background: #948204 + #325;
color: rgb(10, 20, 20) - rgb(22, 2, 8);
border: 1px solid rgba(20, 2, 10, .4) * rgba(10, 34, 2, .4);  

编译之后:

    
background: #c7a459;
color: #00120c;
border: 1px solid rgba(200, 68, 20, 0.4);    

字符运算

+:字符串拼接。
注意:没有""来表示字符串

$cur: -drop;
div {
    cursor: no + $cur;
}

插值

作用:动态创建一些值
语法:border-#{$key}

@mixin arrow ( $dir: top, $w: 1px, $c: #fff, $pos: absolute ) {
    position: $pos;
    border: $w solid transparent;
    border-#{$dir}: $w solid $c;
    font-size: 0;
}
if语句

语法:
通过@if定义if语句
通过@else if 定义else if 语句
通过@else 定义 else 语句

使用关键字: or, and :表示 ||&&

@mixin arrow ( $dir: top, $w: 1px, $c: #fff, $h: $w, $pos: absolute ) {
    border: $w solid transparent;
    
    @if $dir == top or $dir == bottom {
        border-left-width: $h;
        border-right-width: $h;
    } @else {
        border-top-width: $h;
        border-right-width: $h;
    }
    
    position: $pos;
    border-#{$dir}: $w solid $c;
    font-size: 0;
}
for循环

语法: @for $i form strat through end {}
$i:循环变量
start: 起始值,包括自身
end:终止值,包括自身

.box {
    height: 30px;
    margin-bottom: 10px;
}

@for $i from 1 through 16 {
    .item-#{$i} {
       background: #101 * ($i-1);     
    }
}
while循环

语法:@while 循环条件 {}

当循环条件满足时,会执行该循环

$i: 1;
@while $i < 2 {
    .item-#{$i} {
        background: #111 * $i;
    }
    $i: $i + 2;
}
$j: 1;
@while $j < 21 {
    .col-lg-#{$i} {
        width: 100%/2 * $j;
    }
    $j: $j+1;
}
三元运算符

语法:通过if关键字实现。if(条件, true结果, false结果)

$isColor: true;
body {
    background: if( $isColor, green, blue );
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/111374.html

相关文章

  • CSS 强化装备!Sass 安装与使用

    摘要:不过必须要先安装,然后再安装。淘宝镜像安装由于国内网络原因你懂的,导致存放在上面的资源文件间歇性连接失败。嵌套可以进行选择器的嵌套,表示层级关系。重要注释管理项目文件结构预处理器的特点之一是可以把你的代码分割成很多文件,而且不会影响性能。 Sass 是什么? showImg(https://segmentfault.com/img/bVqyKF); Sass 是 Syntactical...

    wuyumin 评论0 收藏0
  • sass的基本使用

    摘要:本文所有的例子都是在中编译,而可以自行编译,具体可以查看该链接配置的概念定义是的一种预处理器,文件后缀名为,可以用中的来转成样式。 最近在项目中利用到了css预处理器(sass),而之前没接触过的本博主出于好奇心,就在业余的时间里搜了一些资料来看看,看完后觉得sass挺不错,就想简单的介绍一下sass的基本使用方法(ps:本文只介绍sass的一些基本使用,而这些内容都是本博主觉得比较有...

    alighters 评论0 收藏0
  • Sass

    摘要:同样的在下安装有多种方法。这样的文件,命名规范是以下划线开头的,这样的文件不会被编译成文件。这个特性现在正被众多开发者滥用。就是取值的一种特殊形式,符合特殊用法。函数名称参数列表数据处理继承允许一个选择器,继承另一个选择器。 sass介绍 • SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单且可维护。 • SASS的本...

    StonePanda 评论0 收藏0
  • Sass

    摘要:同样的在下安装有多种方法。这样的文件,命名规范是以下划线开头的,这样的文件不会被编译成文件。这个特性现在正被众多开发者滥用。就是取值的一种特殊形式,符合特殊用法。函数名称参数列表数据处理继承允许一个选择器,继承另一个选择器。 sass介绍 • SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单且可维护。 • SASS的本...

    pcChao 评论0 收藏0
  • Sass

    摘要:同样的在下安装有多种方法。这样的文件,命名规范是以下划线开头的,这样的文件不会被编译成文件。这个特性现在正被众多开发者滥用。就是取值的一种特殊形式,符合特殊用法。函数名称参数列表数据处理继承允许一个选择器,继承另一个选择器。 sass介绍 • SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单且可维护。 • SASS的本...

    alexnevsky 评论0 收藏0
  • [Sass]-Sass入门

    摘要:未编译样式多继承链式继承占位选择器编译后样式中使用声明混合,可以传递参数,参数名以符号开始,多个参数以逗号分开,也可以给参数设置默认值。 初识Sass SASS简介 sass是一种css预处理器,用专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。Sass是CSS3的扩展,它增加了嵌套规则,变量,mixins,选择器继承等等。Sass生成格式良好的CSS,使样式表更易于组...

    godiscoder 评论0 收藏0

发表评论

0条评论

chanthuang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<