您可以通过左右滑屏查看更多笔记内容。。
$
符号来标识变量;变量的声明:
$
变量名:变量值;$nav-color: #F90;
$width
;$nav-color
这个变量定义在了规则块外边,所以在这个样式表中都可以像 nav
规则块那样引用它。$nav-color: #F90;
nav {
$width: 100px;
width: $width;//只能在块内使用
color: $nav-color;
}
//编译后
nav {
width: 100px;
color: #F90;
}
变量引用
当需要改变一个不同的值时,只需要改变这个变量的值,则所有引用此变量的地方生成的值都会随之改变。
$highlight-color: #F90;
$highlight-border: 1px solid $highlight-color;//变量引用
.selected {
border: $highlight-border;//变量引用
}
//编译后
.selected {
border: 1px solid #F90;
}
变量命名:
//当多级嵌套时,使用sass可以简化
#content {
article {
h1 { color: #333 }
p { margin-bottom: 1.4em }
}
aside { background-color: #EEE }
}
/* 编译后 */
#content article h1 { color: #333 }
#content article p { margin-bottom: 1.4em }
#content aside { background-color: #EEE }
//一个给定的规则块,既可以像普通的CSS那样包含属性,又可以嵌套其他规则块。
#content {
background-color: #f5f5f5;
aside { background-color: #eee }
}
父选择器的标识符&
;
当需要给超链接a 添加一个伪类时;
1. 当包含父选择器标识符的嵌套规则被打开时,它不会像后代选择器那样进行拼接,而是&
被父选择器直接替换:
article a {
color: blue;
&:hover { color: red }
}
//编译后
article a { color: blue }
article a:hover { color: red }
**2. 在父选择器之前添加选择器 **
#content aside {
color: red;
body.ie & { color: green }
}
/*编译后*/
#content aside {color: red};
body.ie #content aside { color: green }
群组选择器的嵌套
.container {
h1, h2, h3 {margin-bottom: .8em}
}
//编译后
.container h1, .container h2, .container h3 { margin-bottom: .8em }
nav, aside {
a {color: blue}
}
//编译后
nav a, aside a {color: blue}
子组合选择器和同层组合选择器:>、+和~;
>
选择一个元素的直接子元素; 空格
选择一个元素子孙元素;+
选择header
元素后紧跟的p
元素:~
选择所有跟在article
后的同层article
元素,不管它们之间隔了多少其他元素:嵌套属性
嵌套属性的规则是这样的:把属性名从中划线-的地方断开,在根属性后边添加一个冒号:,紧跟一个{ }
块,把子属性部分写在这个{ }
块中。
nav {
border: {
style: solid;
width: 1px;
color: #ccc;
}
}
//编译后
nav {
border-style: solid;
border-width: 1px;
border-color: #ccc;
}
需要导入一个sass文件时,使用@import
文件名;
sass
局部文件的文件名以下划线开头时,这样,sass
就不会在编译时单独编译这个文件输出css
,而只把这个文件用作导入。
默认变量值:
反复声明一个变量,只有最后一处声明有效且它会覆盖前边的值;
通过!default
:含义是:如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值;
$fancybox-width: 400px !default;
.fancybox {
width: $fancybox-width;
}
//如果用户在导入你的sass局部文件之前声明了一个$fancybox-width变量,那么你的局部文件中对$fancybox-width赋值400px的操作就无效。如果用户没有做这样的声明,则$fancybox-width将默认为400px。
嵌套导入:
sass
允许@import
命令写在css
规则内。这种导入方式下,生成对应的css
文件时,局部文件会被直接插入到css
规则内导入它的地方。
.blue-theme {@import "blue-theme"}
//生成的结果跟你直接在.blue-theme选择器内写_blue-theme.scss文件的内容完全一样。
.blue-theme {
aside {
background: blue;
color: #fff;
}
}
原生的CSS导入
不能用sass
的@import
直接导入一个原始的css
文件,因为sass
的语法完全兼容css
,所以你可以把原始的css
文件改名为.scss
后缀,即可直接导入了。
下列三种情况下会生成原生的CSS@import
,尽管这会造成浏览器解析css
时的额外下载:
.css
结尾;CSS
的url()值。body {
color /* 这块注释内容不会出现在生成的css中 */: #333;
padding: 1; /* 这块注释内容也不会出现在生成的css中 */ 0;
}
//添加一个圆角边框
@mixin rounded-corners {
border-radius: 5px;
}
notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners;//使用上述混合器
}
//sass最终生成:
.notice {
background-color: green;
border: 2px solid #00aa00;
//引入了混合器内容
border-radius: 5px;
}
混合器中的css规则:
混合器中不仅可以包含属性,也可以包含css
规则,包含选择器和选择器中的属性,如下代码:
@mixin no-bullets {
list-style: none;
li {
list-style-image: none;
list-style-type: none;
margin-left: 0px;
}
}
ul.plain {
color: #444;
@include no-bullets;
}
//编译后
ul.plain {
color: #444;
list-style: none;
}
ul.plain li {
list-style-image: none;
list-style-type: none;
margin-left: 0px;
}
混合器传参
@include
混合器时给混合器传参,来定制混合器生成的精确样式。@mixin link-colors($normal, $hover, $visited) {
color: $normal;
&:hover { color: $hover; }
&:visited { color: $visited; }
}
//混合器被@include时,你可以把它当作一个css函数来传参
a {
@include link-colors(blue, red, green);
}
//Sass最终生成的是:
a { color: blue; }
a:hover { color: red; }
a:visited { color: green; }
为了在@include
混合器时不必传入所有的参数,我们可以给参数指定一个默认值。参数默认值使用$name: default-value
的声明形式,默认值可以是任何有效的css
属性值,甚至是其他参数的引用
@mixin link-colors(
$normal,
$hover: $normal,
$visited: $normal
)
{
color: $normal;
&:hover { color: $hover; }
&:visited { color: $visited; }
}
调用
@include link-colors(red) 所有值都为red
//通过选择器继承继承样式
.error {
border: 1px solid red;
background-color: #fdd;
}
.seriousError {
@extend .error;//继承后,包含样式error中所有样式基础上增肌;
border-width: 3px;
}
//.seriousError从.error继承样式
.error a{ //应用到.seriousError a
color: red;
font-weight: 100;
}
h1.error { //应用到hl.seriousError
font-size: 1.2rem;
}
.seriousError
)表明它属于另一个类(比如说.error
),这时使用继承再合适不过了。@for $var from <start> through <end>
,
@for $var from
*当使用 through 时,条件范围包含
@for $i from 1 through 3 {
.item-#{$i} { width: 2em * $i; }
}
//编译后
.item-1 {
width: 2em; }
.item-2 {
width: 4em; }
.item-3 {
width: 6em; }