【ruby环境:安装/更新/卸载】
安装ruby:http://rubyinstaller.org/downloads
安装sass:gem install sass
取版本:sass -v
更新:gem update sass
卸载:gem uninstall sass
【命令】
文件夹:sass style/scss/:style/build/ --style compressed ---wath
支持中文注释:C:\Ruby\lib\ruby\gems\1.9.1\gems\sass-3.3.14\lib\sass\engine.rb
在末尾加: Encoding.default_external = Encoding.find('utf-8')
输出风格命令
紧凑输出:--style compact, 单行
压缩输出:--style compressed,最大压缩
【关于变量与函数】
函数执行时,所有变量均以副本方式来操作并返回值,并非实例共享
【sass基础】
变量声明与调用:
$color: #333;
$btn-bg: #ccc;
$btn-bg: #e5e5e5 !default; //体现于组件化开发
.btn { border: 1px solid $color; background: $btn-bg; }
变量作用域类似js
选择器的嵌套/'&'的用法:
nav {
ul {}
li {
&:hover {}
&::before,
&::after {}
a{}
&.open a{}
}
}
复合属性的嵌套:
border: {
top: {
color: #ccc;
width: 1px;
}
}
混合宏
@mixin border-radius { }
@include border-radius;
@mixin border-radius ($radius) { }
@include border-radius(50%);
@mixin border-radius ($radius:3px, $height:20px, $shadows...) { }
@include border-radius;
@include border-radius();
@include border-radius(50%);
@include border-radius(50%, 25px);
@include border-radius(50%, 25px, 0 0 5px #ccc, 0 0 5px #fff inset);
扩展/继承(占位符%)
a.btn { height: 30px; }
.btn-big { @extend .btn; color: #ccc; }
a.btn, a.btn-big { height: 30px; }
.btn-big { color: #ccc; }
%btn { height: 30px; }
.btn-big { @extend %btn; color: #ccc; }
.btn-big { height: 30px; }
.btn-big { color: #ccc; }
div%h { height: 30px; }
.btn { @extend %h; }
.btn-big { @extend %h; color: #ccc; }
div.btn, div.btn-big { height: 30px; }
.btn-big { color: #ccc; }
插值#{} 注释 数据类型
选择器、属性名、属性值、@extend
不可用于变量及混合宏
/**/ 、 //
数字(number):10、10px、10em ...
字符串(string):"http://xxx.com/xxx.jpg" 、 ".header" 、 无引号字符串
颜色(color):#ccc、red、rgba(0,0,0,.8) ...
布尔值(bool):true、false
空值:null ...
列表:0 0 5px #ccc | a, b, c, ...
sass运算
+ -:相同单位才能运算
*:100px * 2
/:(100px / 2) 、 50px + 100px/2 、 $height / 2 、 round(1.5)/2
【控制命令】
if else:
@if 条件 {} @else if 条件 {} @else {}
判断符:!= == > < >= <=
逻辑:or and
for/while:
@for $i from 1 through 3 {} //1~3
@for $i from 1 to 3 {} //1~2
$i: 4;
@while $i > 0 { $i: $i - 1; }
each:
$list: a b c;
@each $item in $list {}
【字符串与数字函数】
unquote("去除首尾引号")
quote(添加引号)
to-upper-case(aaa) //AAA --- 转大写
to-lower-case(AAA) //aaa --- 转小写
percentage(.2) //20% --- 百分化,不可携带单位
round(12.3px) //12px --- 四舍五入
ceil(12.1px) //13px --- 向上取整
floor(12.9px) //12px --- 向下取整
abs(-12.9px) //12.9px --- 取绝对值
min(1, 2, 3) //1 --- 找到最小值
max(1em, 2em) //2em --- 找到最大值
random() //取随机数
【列表函数】
length($list) //num --- 取列表长度
index($list, $item) //num|false --- 取元素索引
nth($list, n) //el --- 按索引取元素,n大于length时报错
join($list1, $list2, auto|space|comma) //$newList --- 将两个列表合成一个列表
join( (1 2), (3,4) ) //1 2 3 4
join( (1,2), (3 4) ) //1,2,3,4
join(1, (2 3) ) //1 2 3
join(1, (2,3) ) //1,2,3
join(1,2) //1 2
append($list, $add, auto|space|comma) //$newList--- 将一个元素添加到列表
zip(1px 2px 3px, solid dashed dotted, #333 #666 #999) //--- 转成多维列表
type-of(el) //number|string|bool|color --- 返回数据类型
unit(number) //--- 取数值的单位
unitless(number) //true|false--- 是否不带单位
comparable(number1, number2) //true|false --- 是否可运算
if($condition, $if-true, $if-false) //三元运算
//类似于JSON的map
$theme-color: (
default: (
bgcolor: #fff,
text-color: #444,
link-color: #39f
),
style-1: (
bgcolor: #f36,
text-color: #fefefe,
link-color: #d4e
)
);
map-get($map, key) //--- 取出,没有则返回null
map-has-key($map, key) //true|false --- 判断$map中是否有指定key值
map-keys($map) //--- 返回keys列表(逗号分隔)
map-values($map) //--- 返回values列表(逗号分隔)
map-merge($map1, $map2) //$newMap ---将$map1合并到$map2,与$.extend顺序相反
map-remove($map, key) //删除指定key返回新map(不能删除map中的map)
keywords($args) //--- 根据宏的参数动态创建map(自动去除参数中的$符号)
@mixin map($args...){
$map: keywords($args);
//......
}
@include map(
$color-1: #ccc,
$color-2: #999
);
【颜色函数】
RGB
rgba(#f00, 0.6) //--- 将颜色转成rgba
red(#f00) //255 --- 取出R
green(#f00) //0 --- 取出G
blue(#f00) //0 --- 取出B
mix($color-1, $color-2, 50%) //颜色混合
HSL
adjust-hue(-deg|-%) //调整色相
saturate(#ccc, 30%) //增加饱和度
desaturate(#f00, 80%) //降低饱和度
lighten(#000, 30%) //提高明度
darken(#fff, 30%) //降低明度
grayscale(#f00) //转成无彩系,等同于desaturate(#f00, 100%)
opacity
alpha($color) | opacity($color) //--- 取出A
fade-in($color, .2) | opacify($color, .2) //--- 与原值进行加法运算
fade-out($color, .2) | transparentize($color, .2) //--- 与原值进行减法运算
【@规则】
引入scss或sass
@import "include/foo.scss|include/foo", "...", "...";
@import "include/";
不想被编译只想被导入,此时的命名方式:_foo.scss
@media
冒泡:
.sidebar {
@media screen {
width: 300px;
}
@media screen and (orientation: landscape) {
width: 500px;
}
}
嵌套
@media screen {
.sidebar {
width: 300px;
@media (orientation: landscape) {
width: 500px;
}
}
}
使用插值
@media #{$media} and ($feature: $value) { }
@extend
继承的位置点
.header a.btn:hover i.red { }
span { @extend i.red; } //.header a.btn:hover span
.header a.btn:hover %child { }
span { @extend %child; } //.header a.btn:hover span
@at-root //--- 跳出所有嵌套
.a {
height: 20px;
@at-root .d {
height: 30px;
}
}
@debug 、 @warn 、 @error
【总结】
1、变量、插值
2、选择器嵌套
3、混合宏、扩展/继承
5、条件判断、函数
6、透明色管理 --- rgba(#000, .2)
6、debug、warn、error