sass基于Ruby语言开发而成,所以安装sass前须要安装Ruby,安装过程直接下一步到底。打开cmd安装sass和compasscss
gem install sass
gem install compass
复制代码
编译单个文件和整个文件夹的命令以下[ ]为可选--watch为监听文件变化--style为编译模式有nested|compact|compressed|expanded四个选项,默认为nested。es6
/单文件编译命令。把 input.scss编译成output.css
sass input.scss:output.css [--watch] [--style nested|compact|compressed|expanded]
/编译整个文件夹:sass文件夹下的scss文件会编译到css文件夹下相同文件名的css文件
sass sass:css [--watch] ...
复制代码
须要注意的是在编译的过程当中文件须要使用绝对路径。以编译整个目录为例四种编译模式的结果以下:
1.nested
sass C:\Users\panx\Desktop\project\sass-demo\sass:C:\Users\panx\Desktop\project\sass-demo\css --watch --style nested sass
变量必须以$开头,定义一个变量及使用以下所示ruby
嵌套可让咱们少些一些代码,调用父选择器用&符号,&表明上层全部选择器的组合bash
mixin和js中的mixin有点相似,在sass中用mixin定义一个基本的样式快,而后在须要使用的地方用@include name引入,如下是语法及使用,参数必须以$开头app
语法
@mixin name (参数1,参数2...){
}
复制代码
继承的样式会以群组选择器的形式显示出来函数
这个功能用来导入其余sass文件,在sass中如下划线开头的文件是不会被编译的,以下图所示我在Sass文件夹下新建了一个_base.scss不会编译到css/_base.css.用@import指令导入的时候不须要下划线和扩展名ui
在cmd中输入sass -i 进入用户交互界面用type-of来检测数据类型,咱们能够看到在sass中的数据类型有number(宽高等,可包含单位),string,color,list(border,margin,padding的非缩写)等,spa
数字类型支持加减乘除,可带单位,但两个数字都带单位相乘结果会比较诡异(以下图),两个带单位的数字相除单位会抵消,两个数相除要加括号以下所示:3d
咱们看一下sass中字符串函数,下图我定义了一个$greeting:'Hello'的变量
$base-color:#fff;
//调整颜色的色相,单位为度可省略
adjust-hue($base-color,137[deg])
//lighten/darken调整颜色的明度和黯度
.container{
background-color:darken($base-color,30%);
color:lighten($base-color,50%);
}
//saturate/desaturate增长或下降颜色的纯度及饱和度使用方式和darken/lighten一致
// opacify/transparentize增长或减小颜色的不透明度,即改变rgba中a的值,以下图所示
复制代码
//求列表里面的长度
length(5px 10px) ==>2
length(5px 10px 0)==>3
//取列表里面的第几个数
nth(5px 10px,1)==>5px
nth(5px 10px,2)==>10px
//算列表里面某个项的索引
index(1px solid red,solid)==>2
//附加和链接
append(5px 10px,5px)==>5px 10px 5px
join(5px 10px,5px 0)==>(5px 10px 5px 0)
复制代码
//map语法
$map:(key1:val1,key2:val2...)
//实例
$colors:(light:#fff,dark:#000)
//map相关函数
length($colors)==>2
map-get($colors,dark)=>#000
map-keys($colors)==>('light','dark')
map-values($colors)==>(#fff,#000)
map-has-key($colors,light)==>true
//合并两个map
map-merge($colors,(gray:#bbb))==>(light:#fff,dark:#000,gray:#bbb)
//移除项目
map-remove($colors,dark,gray)==>(light:#fff)
复制代码
这个功能颇有用,跟es6的模板字符串相似,只是sass里面用的是#{}.具体如图
sass中的控制指令都有@开头,有@if,@for,@each,@while
@if 条件{
}
复制代码
//to不包含结束值,through包含结束值
@for $var from <开始值> through/to <结束值>{
}
复制代码
//@each语法用来循环一个列表
@each $var in $list{
}
复制代码
@while 条件{
}
复制代码
@function name (参数1,参数2){
}
复制代码
$colors:(light:#fff,dark:#000);
@function get-color($key){
@if not map-has-key($colors, $key){
@warn '在$colors里面没有找到#{ $key}这个key';
// @error '在$colors里面没有找到#{ $key}这个key';
}
@return map-get($colors,$key );
}
body {
background-color: get-color(dark);
}
复制代码