安装
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
#安装 sass
gem install sass
Ruby 是一个面向对象的脚本语言,20世纪90年代日本人松本行弘发明。 Sass 是基于 Ruby 开发 https://www.sassmeister.com SASS语法 2007 诞生
SASS语法
2007 诞生
缩进代替花括号,换行代替分号。
近似 Ruby 的 SASS 语法:
$color: #fff
$font-size: 10px
.box
color: $color
font-size: $font-size
background-color: red
SCSS语法
Sass 3.0 版本
Sassy CSS,在 CSS 写法的基础上补充/扩展,也包括 Sass 的所有特性。
更贴近 css 的写法:
$color: #fff;
$font-size: 10px;
.box{
color: $color;
font-size: $font-size;
background-color: red;
}
编译
sass scss/source.scss:css/target.css --style expanded
- —watch 监听
- 4种输出风格
.box{ color: $color; // red
.inner-box-1{
$color: blue; //局部变量
color: $color; // blue
}
.inner-box-2{
color: $color; // red
}
}
$color: red; // 全局变量
.box{ color: $color; // red
.inner-box-1{
$color: blue !global; // 提升为全局变量;覆盖red->blue
color: $color; // blue
}
.inner-box-2{
color: $color; // blue
}
}
<a name="xZ5di"></a>
## !default
定义为默认值 即可以被修改
```css
#1.scss
$color: blue !default;
.box{
color: $color;
}
#2.scss
$color: red;
@import "2.scss";
变量可以有多个值
可以使用 nth(var, num) 选择 num 由 1 可以
$darkColor: #333 #666;
$lightColor: #ddd #eee;
div{
background-color: nth($darkColor, 1);
}
@mixin 混合宏
定义 @mixin Mixin 名 (参数名:默认值) { 样式规则 }
调用 @include Mixin 名 (参数)
可以解决兼容性问题
@mixin box-shadow($shadow){
/*此时只能接收一个参数,对于box-shadow是支持多个参数,只需在后面加 ...*/
-webkit-box-shadow: $shadow;
-moz-box-shadow: $shadow;
-o-box-box-shadow: $shadow;
-ms-box-shadow: $shadow;
box-shadow: $shadow;
}
div{
@include box-shadow(-5px 0 -5px orange);
}
p{
@include box-shadow(5px 0 5px blue);
}
---------------------------------------------------------
/*支持多个参数 */
@mixin box-shadow($shadow...) {
-webkit-box-shadow: $shadow;
-moz-box-shadow: $shadow;
-o-box-box-shadow: $shadow;
-ms-box-shadow: $shadow;
box-shadow: $shadow;
}
div{
@include box-shadow(-5px 0 -5px orange, 5px 0 5px blue);
}
变量成为 属性 / 选择器 的一部份
在属性名 / 选择器 使用时需要使用 #{}
包裹(字符串占位)
@mixin set-value($direction){
margin-#{$direction}: 10px;
padding-#{$direction}: 10px;
}
.input-box{
@include set-value(top);
}
-------------------------------------------------------------
@mixin btn-bg-color($btnClass, $bgColor){
.btn-#{$btnClass}{
background-color: $bgColor;
}
}
@include btn-bg-color('success', #5cb85c);
@include btn-bg-color('warning', #f0ad4e);
@extend 选择器继承
.box{
width: 100px;
height: 100px;
}
.box-1{
@extend .box;
}
.box-2{
@extend .box;
}
------------------------------------------------
/* 使用%占位符的属性不会出现在编译的结果 */
%box{
width: 100px;
height: 100px;
}
.box-1{
@extend %box;
}
.box-2{
@extend %box;
}
& 嵌套父元素
.clearfix{
background-color: black;
&::before{
display: block;
clear: both;
}
}
选择器嵌套
div{
width: 100px;
height: 300px;
ul{
height; 100%;
li{
width: 20%;
height: 100%;
}
}
}
属性嵌套
div{
background:{
image: url(../img/bg.jpg);
repeat: no-repeat;
size: 100% 100%;
position: 0 0;
}
}
运算
- 10px + 60px
- 加减法
- 单位不能转换的单位不能运算
- 1in = 96px
- 乘法
- 只需要一个单位,单位也会进行运算
- 50px * 2
- 除法
- font: font-size / line-height
- CSS 把
/
作为分隔属性数字的符号 - width: (30px / 2) 用小括号包裹
- width: 30px / 2 - 6px; 后面还有运算
- width: $fullWidth / 2; 变量 / 2
- mod
- width: 50px % 3;
- 加减法
- 颜色运算 (调色)
- 字符串运算
@for $i from 1 to 3{ //to不包含3 .item-#{$i}{ width: 5px * $i; } }
<a name="r4V4t"></a>
### @while
```css
$i: 12;
@while $i > 0{
.item-#{$i}{
width: 5px * $i;
}
$i: $i - 1;
}
@each
$list: dog, cat, elephant;
@each $animal in $list{
.#{$animal}-icon{
background-image: url(/imgs/#{$animal}.png);
}
}
------------------------------------
@each $animal, $color, $cursor in (cat, white, default),
(dog, brown, pointer),
(butterfly, yellow, move){
.#{$animal}-icon{
background-image: url(/imgs/#{$animal}.png);
border: 1px solid $color;
cursor: $cursor;
}
}
------------------------------------
//map的方式
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em){
#{$header}{
font-size: $size;
}
}
函数
字符串函数
quote() 给字符串添加上引号,保证一定有双引号。
h1{ &::before{ content: quote(Girl); //"Girl" } }
unquote() 给字符串去除最外层引号
- to-upper-case() 大写
-
数字函数
percentage() 转为百份
- round() 四舍五入
- ceil() 向上取整
- floor() 向下取整
- abs() 绝对值
- max()
- mix()
-
列表函数
length() 列表长度
- nth() 由1开始
join(list1, list2, separator = auto) separator = auto | space | comma
join(10px 20px, 30px 40px) // 10px 20px 30px 40px
append(list1, list2, separator = auto) separator = auto | space | comma
- zip 把多个列表转为一个多维列表
index() 找索引 由1开始
index(1px solid #000000, 1px) // 1 index(1px solid #000000, solid) // 2
type-of() 输出类型
- number
- string
- bool
- color
- unit() 找单位
- unitless() 是否没有单位
- comparable 是否能比较(相加)
if($condition, $if-true, $if-faluse) 三元条件函数
map函数
map-get(map, key) 获取 map 的 value, 可以嵌套 ```css $color: ( default: (
bgcolor: #fff, text-color: #999,
), primary: red )
.box{
background-color: map-get($color, “primary”)
}
.box2{
background-color: map-get(map-get($color, “primary”), “bgcolor”);
}
- map-has-key(map, key) 是否有key
- map-keys(map) 返回所有key
- map-values(map) 返回所有value
- map-merge(map1, map2) map合拼
- map-remove(map, key) 移除
- keywords 创造一个新的map
<a name="PjGtl"></a>
### 颜色函数
- rgb(Red, Green, Blue)
- rgba(Red, Green, Blue, Alpha)
- mix(color1, color2, [weight]) 颜色混合
- hsl(Hue, Saturation, Lightness)
- hsla(Hue, Saturation, Lightness, Alpha)
- hue(color) 获得色相
- saturation(color) 获得饱和度
- lightness(color) 获得亮度
- adjust-hue(color, deg) 基于一个颜色,调整其色相,得到一个新的颜色
- lighten(color, percent%) 基于一个颜色,变亮,得到一个新的颜色
- darken(color, percent%) 基于一个颜色,变暗,得到一个新的颜色
- saturate(color, percent%) 基于一个颜色,变得更饱和,得到一个新的颜色
- desaturate(color, percent%) 基于一个颜色,变减少饱和,得到一个新的颜色
- grayscale(color) = desaturate(color, 100%) 灰度
- complement(color) = adjust-hue(color, 180deg) 补色
- invert(color) 反色
- opacity(color) / alpha(color) 获取透明度
- opacify(color, percent%) 让颜色更不透明
- transparentize(color, percent%) / fade-out(color, percent%) 让颜色更透明
<a name="l5SeM"></a>
### 自定义函数
- @function
```css
$theme-color: (
bgcolor: #fff,
text-color: #999
);
@function colors($color){
@if not map-has-key($theme-color, $color){
@warn "No color found for '#{$color}' in $theme-color map. Property omitted."
}
@return map-get($theme-color, $color);
}
.box-1{
color: colors(bg);
}
- @规则
- @import
- Sass 会自动找具有 .scss 和 .sass 扩展名的同名文件
- 如果一个 .scss 或 .sass 文件需要引入,但不希望编译为 css 时, 可为其文件名前加一个
_
- @media
- 支持嵌套
- @extend
- @at-root
- 跳出至根元素
- @debug
- @warn
- @error
- @import