# 语法选用SASS有两种语法格式,一种是 SCSS (Sassy CSS),另一种是缩进格式(Indented Syntax),有时称之为 Sass。
# SCSSSCSS语法基于 CSS 语法扩展,每一个有效的 CSS 文件都是一个有效的具有相同含义的 SCSS 文件,换种说法就是 SCSS 能识别大多数的 CSS hacks 写法和浏览器前缀写法以及早期的 IE 滤镜写法,这种格式以 .scss 作为扩展名。
# SassSass 使用 “缩进” 代替 “花括号” 表示属性属于某个选择器,用 “换行” 代替 “分号” 分隔属性,很多人认为这样做比 SCSS 更容易阅读,书写也更快速。缩进格式也可以使用 Sass 的全部功能,只是与 SCSS 相比个别地方采取了不同的表达方式,具体请查看 the indented syntax reference 。这种格式以 .sass 作为拓展名。
更详细的用法请阅读 SASS 官网文档:DOCUMENTATION
# 团队约定考虑到 SCSS 语法对 CSS 语法友好的兼容性和扩展性,我们在使用 SASS 编写样式的时候,统一使用 SCSS 语法
# 编码格式When running on Ruby 1.9 and later, Sass is aware of the character encoding of documents. Sass follows the CSS spec to determine the encoding of a stylesheet, and falls back to the Ruby string encoding. This means that it first checks the Unicode byte order mark, then the @charset declaration, then the Ruby string encoding. If none of these are set, it will assume the document is in UTF-8.
当在 Ruby1.9或更新的版本运行的时候,SASS 能识辨文档的字符编码。SASS 遵循 CSS 规范去确定样式文件的编码,进而转回 Ruby 字符串编码。这意味着SASS编译的时候会首先检测 BOM,然后到 @charset 声明,再到 Ruby 字符串编码,如果以上都没有设置,SASS 会认为文档的编码为 UTF-8
# 团队约定严格遵守上面 “CSS规范” 中的 “编码规范”
更多关于 SASS 编码:SASS Encodings
# SASS注释规范SASS支持 CSS 标准的多行注释 /* */
,同时也支持单行注释 //
。
多行注释在使用非 Compressed 模式进行编译后的输出文件中会保留下来,单行注释 //
侧会被移除 多行注释和单行注释在 SASS 编译后输出的压缩 CSS 文件都会被移除 当多行注释内容第一个字符是感叹号 “!” 的时候,即 /*! */
,SASS 无论用哪一种编译方式编译注释都会保留 注释内容可以加入 SASS 变量 # 团队约定SCSS 文件内
全部遵循 CSS 注释规范 不使用 /*! */
注释方式 注释内不放 SASS 变量 标准的注释规范如下:
Copy @charset "UTF-8" ;
.mod_a { }
.mod_a_logo { }
.mod_a_nav { }
.mod_b { }
.mod_b_logo { }
.mod_b_nav { }
# 嵌套规范# 选择器嵌套Copy
.jdc { }
body .jdc { }
.jdc {
body & { }
}
Copy
.jdc { }
.jdc_cover { }
.jdc_info { }
.jdc_info_name { }
.jdc {
& _cover { }
& _info {
& _name { }
}
}
# 属性嵌套Copy
.jdc {
background-color : red ;
background-repeat : no-repeat ;
background-image : url ( /img/icon.png ) ;
background-position : 0 0 ;
}
.jdc {
background: {
color : red ;
repeat : no-repeat ;
image : url ( /img/icon.png ) ;
position : 0 0 ;
}
}
可复用属性尽量抽离为页面变量,易于统一维护
Copy
.jdc {
color : red ;
border-color : red ;
}
$color : red ;
.jdc {
color : $color ;
border-color : $color ;
}
# 混合(mixin)根据功能定义模块,然后在需要使用的地方通过 @include
调用,避免编码时重复输入代码段
Copy
.jdc_1 {
-webkit-border-radius : 5 px ;
border-radius : 5 px ;
}
.jdc_2 {
-webkit-border-radius : 10 px ;
border-radius : 10 px ;
}
@mixin radius ( $radius : 5 px ) {
-webkit-border-radius : $radius ;
border-radius : $radius ;
}
.jdc_1 {
@include radius ;
}
.jdc_2 {
@include radius ( 10 px ) ;
}
.jdc_1 {
background : url ( /img/icon.png ) no-repeat -10 px 0 ;
}
.jdc_2 {
background : url ( /img/icon.png ) no-repeat -20 px 0 ;
}
@mixin icon ( $x : 0 , $y : 0 ) {
background : url ( /img/icon.png ) no-repeat $x , $y ;
}
.jdc_1 {
@include icon ( -10 px , 0 ) ;
}
.jdc_2 {
@include icon ( -20 px , 0 ) ;
}
# 占位选择器 %如果不调用则不会有任何多余的 css 文件,占位选择器以 %
标识定义,通过 @extend
调用
Copy
%borderbox {
-webkit-box-sizing : border-box ;
box-sizing : border-box ;
}
.jdc {
@extend %borderbox ;
}
# extend 继承Copy
.jdc_1 {
font-size : 12 px ;
color : red ;
}
.jdc_2 {
font-size : 12 px ;
color : red ;
font-weight : bold ;
}
.jdc_1 {
font-size : 12 px ;
color : red ;
}
.jdc_2 {
@extend .jdc_1 ;
font-weight : bold ;
}
%font_red {
font-size : 12 px ;
color : red ;
}
.jdc_1 {
@extend %font_red ;
}
.jdc_2 {
@extend %font_red ;
font-weight : bold ;
}
# for 循环Copy
.jdc_1 { background-position : 0 -20 px ; }
.jdc_2 { background-position : 0 -40 px ; }
.jdc_3 { background-position : 0 -60 px ; }
@for $i from 1 through 3 {
.jdc_ #{$i} {
background-position : 0 ( -20 px ) * $i ;
}
}
注意:#{}
是连接符,变量连接使用时需要依赖
# each 循环Copy
.jdc_list {
background-image : url ( /img/jdc_list.png ) ;
}
.jdc_detail {
background-image : url ( /img/jdc_detail.png ) ;
}
@each $name in list, detail {
.jdc_ #{$name} {
background-image : url ( /img/jdc_ #{$name} .png ) ;
}
}
.jdc_list {
background-image : url ( /img/jdc_list.png ) ;
background-color : red ;
}
.jdc_detail {
background-image : url ( /img/jdc_detail.png ) ;
background-color : blue ;
}
@each $name , $color in ( list , red ) , ( detail , blue ) {
.jdc_ #{$name} {
background-image : url ( /img/jdc_ #{$name} .png ) ;
background-color : $color ;
}
}
# function 函数Copy @function pxToRem ( $px ) {
@return $px / 10 px * 1 rem ;
}
.jdc {
font-size : pxToRem ( 12 px ) ;
}
# 运算规范运算符之间空出一个空格
Copy .jdc {
width : 100 px - 50 px ;
height : 30 px / 5 ;
}
注意运算单位,单位同时参与运算,所以 10px 不等于 10,乘除运算时需要特别注意
Copy
.jdc {
width : 100 px - 50 px ;
width : 100 px + 50 px ;
width : 100 px * 2 ;
width : 100 px / 2 ;
}