1.sass介绍
sass是成熟、稳定、强大的CSS预处理器,而SCSS是Sass3版本当中引入的新语法特性,完全兼容CSS3的同时继承了Sass强大的动态功能。
2.1 css的编译模式
css ---普通
sass /scss ---高效 **
ess ---高效
2.2 sass的介绍
来源:ruby公司 基于ruby语言
基础版本,后缀名为sass 没有{} 只能通过缩进来实现 --- 可读性差,难以维护
.scss --- 可读性高,便于维护 -- 嵌套 --不用担心权重问题
2.3 如何使用scss
最终需要使用的是css文件,而编写的是scss文件
通常需要转换工具 gulp / webpack / ruby工具 /编辑器插件
这里主要使用gulp处理scss文件
3. sass的用法
3.1安装 sass 模块
安装命令
- cnpm i gulp-sass -s (推荐)
- cnpm i gulp-sass-china -s
配置处理scss文件gulp的任务
gulp.task('scss2css', () => { //即scss to css gulp.src('scss/**/*') .pipe(concat('main.scss')) //合并scss文件 .pipe(sass()) //转为css文件 .pipe(gulp.dest('dist/css')) .pipe(minifyCss()) //压缩 .pipe (rename( main. min.css' ) ) //重命名 .pipe(gulp.dest( 'dist/css')) .pipe(connect . reload( )) })
//在watch中监听
//在build中构建
4.学习scss语法
4.1 scss的注释语句
单行注释 : (推荐)
使用双斜杠// 完成单行注释 (类似于js)
并不会编译成css文件
多行注释 :
使用的是/*注释内容*/ ,完成多行注释(类似于js)
会编译成css文件,并在css文件中注释掉
4.2 变量
scss给css赋予了动态语言的特性(变量,函数,条件判断,循环...)
4.2.1 单值变量
注意:scss对分号很敏感,一定要写分号
可以将属性保存在变量中
$baseColor : red; .box {background-color : $baseColor;} //转换成css .box(background-color : red;)
4.2.2 scss做四则运算
$baseColor :red ; html{background-color:$baseColor - 100;} //转换成css html{background-color:#9b0000;}
4.2.3 多值变量
多值变量使用语法
nth(变量名,索引值) ==>索引值起始为1;
优点:解决代码体积;
$baseColor: red blue;
html(background-color: nth($baseColor,1);color:nth($baseColor,2));
//转换css
html(background-color: red;color:blue);
4.2.4 复杂变量
会遍历数据,类似于for-in的原理
如下实例;遍历list中的数据,设置不同的box的 不同width和height;
$list:(top 20px 30px) (Ieft 40px 50px) (right 60px 70px) ; @each $name, $width, $height in $list{ .box-# {$name} { width: $width; height: $height; } } //转成css .box-top { 20px;
height:30px; }
.box-right {40px;height:50px;}
4.3 scss的嵌套
html { font-size: 12px; body { background:#f66; header { width: 100%; height: 40px; } }
}
//不用担心标签的权重问题
4.4 mixin 混入
语法: @mixin marginCenter { }
//无参数
@mixin marginCenter { margin: 0 auto; }
.container {1000px;min-height:600px;@include marginCenter}
//转换为css
.container {1000px;min-height:600px;margin: 0 auto;}
//有参数
@mixin margin($top $right $bottom $left) { margin: $top $right $bottom $left; }
.container {
@include margin(10px,10px,20px,20px);
}
//转换为css
.container {margin:10px,10px,20px,20px}
//解决兼容问题 例如弹性盒的兼容问题 @mixin flexbox { display : -webkit- box; display: -moz- box; display: -ms-flexbox; display:一 webkit-flex; display: flex; }
//混入的默认参数
@mixin opacity($val: 1) {
opacity: $val;
}
//调用opacity,不传参数的话,默认是1;
4.5 扩展/继承
可以继承其他的样式,无需重复书写
.active{
//转换css
. active, . success {background-color:#f66;color:#fff; }
. success {font-size: 30px; }
4.6 函数
//减淡:
lighten($color,$amount)
//加深:
darken($color,$amount)
//加深函数
@function dark($color, $val) { @return $color / $val; } .text {dark: color([ red, 5%);
//转换css
.text {color:#330000;}
4.7 条件判断
$lte7: true; $type: monster; .ib{ display:inline-block; @if $lte7 { *display:inline; *zoom:1; } } p { @if $type == ocean { color: blue; } @else if $type == matador { color: red; } @else if $type == monster { color: green; } @else { color: black; } }
.item-1 {width: 2em;} .item-2 {width: 4em;} .item-3 {width: 6em;}
$animal-list: puma, sea-slug, egret, salamander; @each $animal in $animal-list { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); } }
@import "文件名.scss";