sass总结
重点:
1、带@的一般是一种组合
2、混合器@mixin 选择器继承@extend
3、.seriousError不仅会继承.error自身的所有样式,任何跟.error有关的组合选择器样式也会被.seriousError以组合选择器的形式继承
//.seriousError从.error继承样式
.error a{ //应用到.seriousError a
color: red;
font-weight: 100;
}
h1.error { //应用到hl.seriousError
font-size: 1.2rem;
}
4、https://www.jianshu.com/p/7f879ce0cbb9 自定义函数
https://www.jianshu.com/p/ef2ca6fbf944 内置函数
细节:
1、变量具有块级作用域
2、变量不区分下划线和中划线,link_color
3、父级选择器的一种用法
content aside {
color: red;
body.ie & { color: green }
}
/编译后/
content aside {color: red};
body.ie #content aside { color: green }
4、群组选择器嵌套
nav, aside {
a {color: blue}
}
/编译后/
nav a, aside a {color: blue}
5、+是相邻元素,~是同层所有元素
header + p { font-size: 1.1em } 同层相邻组合选择器+选择header元素后紧跟的p元素
article ~ article { border-top: 1px dashed #ccc } 同层全体组合选择器~,
选择所有跟在article后的同层article元素,不管它们之间隔了多少其他元素
6、嵌套的另一种用法
dl > {
dt { color: #333 }
dd { color: #555 }
}
/编译后/
dl > dt { color: #333 }
dl > dd { color: #555 }
7、属性嵌套,把属性名从中划线-的地方断开,在根属性后边添加一个冒号:
nav {
border: {
style: solid;
width: 1px;
color: #ccc;
}
}
或另一种嵌套
nav {
border: 1px solid #ccc {
left: 0px;
right: 0px;
}
}
8、使用sass的@import规则可以省略.sass或.scss文件后缀
9、使用SASS部分文件
如果某个sass文件不想被单独编译成css文件,只想当作被引用文件使用,文件命名要带下划线,
比如_night-sky.scss,当要导入这个文件时,则可以省略下划线,比如@import "night-sky";
10、修改默认变量值
1)一般情况下,你反复声明一个变量,只有最后一处声明有效且它会覆盖前边的值
2)使用sass的!default标签,如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值。
例如 $fancybox-width: 400px !default;
3)两者的区别,1)有先后顺序,2)没有先后顺序,比如在2)这种情况下,
你自定义的变量在引入的变量之前,还是会应用你的变量
11、嵌套导入
举例说明,有一个名为_blue-theme.scss的局部文件,内容如下:
aside {
background: blue;
color: white;
}
然后把它导入到一个CSS规则内,如下所示:
.blue-theme {@import "blue-theme"}
//生成的结果跟你直接在.blue-theme选择器内写_blue-theme.scss文件的内容完全一样。
.blue-theme {
aside {
background: blue;
color: #fff;
}
}
12、原生css的@import会引发网络下载,scss的@import是在编译时就整合在一起,
所以尽量使用scss的导入。如果必须导入css文件,可考虑将css文件后缀名改为scss。
如果非要导入css,记得css后缀名
13、注释。使用//这种注释,在最终生成的css文件中会将其去除。
如果使用/* ... */则不会将其去除。
14、混合器是将多种属性打包在一起起一个名字使用
定义
@mixin rounded-corners {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
使用
notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners;
}
编译结果
.notice {
background-color: green;
border: 2px solid #00aa00;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
15、如何使用混合器
@include rounded-corners;
16、给混合器传参
定义
@mixin link-colors(hover,
normal;
&:hover { color: visited; }
}
使用
a {
@include link-colors(blue, red, green);
}
17、混合器默认传值
定义
@mixin link-colors(
hover:
visited:
normal;
&:hover { color: visited; }
}
使用
@include link-colors(red)
18、选择器继承
//通过选择器继承继承样式
.error {
border: 1px solid red;
background-color: #fdd;
}
使用
.seriousError {
@extend .error;
border-width: 3px;
}
19、混合器和classname有些类似,区别是混合器是用在样式表中的,classname是用在html中的
20、了解继承与混合器的区别
继承说明了两个类之间有父子关系,或者是样式由粗到细的过程
混合器可以理解成就是一个常用的组件
21,继承@extend
//通过选择器继承继承样式
.error {
border: 1px solid red;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}
以class="seriousError" 修饰的html元素最终的展示效果就好像是class="seriousError error”,本质是指向同一个元素
所以我们可以认为seriousError error都指代同一个元素,所以
.error a{ //应用到.seriousError a
color: red;
font-weight: 100;
}
h1.error { //应用到hl.seriousError
font-size: 1.2rem;
}
6-3. 继承的工作细节,这一章节相当重要
跟混合器相比,继承生成的css代码相对更少。因为继承仅仅是重复选择器,而不会重复属性,所以使用继承往往比混合器生成的css体积更小
可以继承有后代选择器的,但不要用后代选择器去继承。
@extend背后最基本的想法是,如果.seriousError @extend .error, 那么样式表中的任何一处.seriousError都用.error.seriousError这一选择器组进行替换。
如果继承的error有层次结构,是否意味着将seriousError替换成.error.seriousError时,这个元素是否符合error的层次结构
继承好像只能继承一个类名,比如@extend .error不能@extend .a .error这样
网友评论