Sass
学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢?
Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了。预处理器通常可以实现浏览器兼容,变量,结构体等功能,代码更加简洁易于维护。
那么css预处理器与Sass有什么关系呢,Sass就是属于css预处理器中的一种,还有两款他们分别是Less和 Stylus,这里就不做过多的介绍了.
Compass是Sass的工具库,详情请点击 这里
1. nested
1.body {2. background-color: #f00; }3.4..person, .son {5. height: 100px; }6.7./*# sourceMappingURL=demo1.css.map */
2. expanded
1./* line 1, ../sass/demo1.scss */2.body {3. background-color: #f00;4.}5.6./* line 4, ../sass/demo1.scss */7..person, .son, .banner {8. height: 100px;9.}10.11./* line 7, ../sass/demo1.scss */12..son, .banner {13. height: 100px;14.}15.
3.compact
1./* line 1, ../sass/demo1.scss */2.body { background-color: #f00; }3.4./* line 4, ../sass/demo1.scss */5..person, .son, .banner { height: 100px; }6.7./* line 7, ../sass/demo1.scss */8..son, .banner { height: 100px; }9.
4.compressed
1.body{background-color:red}.person,.son,.banner{height:100px}.son,.banner{height:100px}
1.// scss2.body {3. /*$color: red;4. color: $color; 局部变量,下面访问不到, 所以编译会报错,如果想要下面能够访问到的话. 只需要后面加上!global就可以了*/5. $color: red !global; /*这样就可以吧局部变量变为全局变量*/6. color: $color;7.}8.9.footer {10. color: $color;// 这里也不会报错11.}
1.// scss2.$fontSize: 12px;3.$fontSize: 16px;4..one {5. font-size: $fontSize;6.}7.// 生成的css8.body { color: red; }9.footer { color: red; }10..one { font-size: 16px; }
1.// scss2.$fontSize: 12px;3.$fontSize: 16px !default;4..one {5. font-size: $fontSize;6.}7.// 生成的css8.body { color: red; }9.footer { color: red; }10..one { font-size: 12px; }11.
4.1 nth: 语法 nth(variable,index);
1.// scss2.$color: red;3.$maps: (borderColor: red, backgroundColor: blue);4.$paddings: 10px 20px 30px 40px;5.$padding1: 3px 20px 30px 40px;6.body {7. color: $color; 8.}9.10.footer {11. color: $color;12. padding: $paddings;13. padding-left: nth($padding1,1);14.}15.16.// 生成的css17.18.body { color: red; }19.footer { color: red; padding: 10px 20px 30px 40px; padding-left: 3px; }
4.2 map-get: 语法 map-get(variable, key)
1.// scss2.$color: red;3.$paddings: 10px 20px 30px 40px;4.$padding1: 3px 20px 30px 40px;5.$maps: (borderColor: red, backgroundColor: blue);6.body {7. color: $color; 8.}9.10.footer {11. color: $color;12. padding: $paddings;13. padding-left: nth($padding1,1);14. border-color: map-get($maps, borderColor);15. background-color: map-get($maps, backgroundColor);16.}17.18.// 生成的css19.body { color: red; }20.footer { color: red; padding: 10px 20px 30px 40px; padding-left: 3px; border-color: red; background-color: blue; }
5.1 变量用在属性或者选择器上
1.// scss2.$className: container; // 变量的特殊用法3.$bgc: background-color;4..#{$className} {5. width: 100px;6. height: 100px;7. #{$bgc}: $color;8.}9.// 生成的css10..container { width: 100px; height: 100px; background-color: red; }
5.2 变量的使用中横线还是下划线,都是一个变量 怎么用取决于你的爱好
1.//scss2.$font-size: 19px;3..font-size {4. font-size: $font_size;5.}6.// 生成的css7..font-size { font-size: 19px; }
6.1 部分文件
6.2 导入文件
1.// scss2.@import "css.css";3.@import "http://xxx";4.@import url(css.css);5.// 生成的css6.@import url(css.css);7.@import "http://xxx";8.@import url(css.css);
1.// 这里我新建了一个文件名称叫做_part1.scss2.3.// _part1.scss 文件的样式4.$fontFamily: '微软雅黑';5..body {6. font-family: $fontFamily;7.}8.9.// 在demo1.scss中导入10.@import "part1"; // 这样直接写,就会导入_part1.scss中的样式,这是约定.11.12.13.// demo1文件生成了以下的css14./* line 2, ../sass/_part1.scss */15..body { font-family: "微软雅黑"; }
1.body {2. a {3. height: 100px;4. &:hover {5. background-color: green;6. }7. // 跳出常规样式,对应着下面的行号 88. @at-root .container {9. height: 100px;10. }11. @media(min-width: 768px) {12. // 跳出media和常规样式13. @at-root(without: media rule) {14. .container { // 这里对应下面的行号1415. height: 100px;16. }17. }18. // 下面的样式只跳出了media 没有跳出常规样式,如果需要跳出常规样式的话需要设置,rule19. @at-root(without: media) {20. .container { // 这里对应行号2021. width: 1000px;22. }23. }24. }25. }26. @media(max-width: 1000px) {27. // 默认是跳出 rule28. @at-root .container{ // 对应行号2829. height: 1000px;30. }31. // 下面这句跳出media32. @at-root(without: media rule) {33. .container { // 对应行号3334. width: 500px;35. }36. }37. }38.}39.40.41.// css42.@charset "UTF-8";43./* line 2, ../sass/demo2.scss */44.body a { height: 100px; }45./* line 4, ../sass/demo2.scss */46.body a:hover { background-color: green; }47./* line 8, ../sass/demo2.scss */48..container { height: 100px; }49./* line 14, ../sass/demo2.scss */50..container { height: 100px; }51./* line 20, ../sass/demo2.scss */52.body a .container { width: 1000px; }53.54.@media (max-width: 1000px) { /* line 28, ../sass/demo2.scss */55. .container { height: 1000px; } }56./* line 33, ../sass/demo2.scss */57..container { width: 500px; }
1.// scss2. @at-root .container {3. color: red;4. @at-root nav & {5. color: blue; 6. }7. }8.9.// out css10..container { color: red; }11.nav .container { color: blue; }
8.1 简单继承
1.//scss2..alert {3. height: 30px;4.}5..alert-info {6. @extend .alert;7. color: #D9EDF7;8.}9.// out css10..alert, .alert-info { height: 30px; }11..alert-info { color: #D9EDF7; }
8.2 多继承
1.// scss2..alert {3. height: 30px;4.}5..bgc {6. background-color: #f5f5f5;7.}8..alert-info {9. @extend .alert, .bgc;10. color: #D9EDF7;11.}12.13.// out css14..alert, .alert-info { height: 30px; }15..bgc, .alert-info { background-color: #f5f5f5; }16..alert-info { color: #D9EDF7; }
8.3 链型继承
1.// scss2..one {3. border: 1px solid red;4.}5..two {6. @extend .one;7. color: red;8.}9..three {10. @extend .two;11. background-color: #f5f5f5;12.}13.14.// out css15..one, .two, .three { border: 1px solid red; }16..two, .three { color: red; }17..three { background-color: #f5f5f5; }
8.4 继承局限性
8.5 继承交叉合并
1.a span{2. height: 100px;3.}4.div .container {5. @extend a, span; 6.}7.a span, div .container span, a div .container, div a .container, div .container .container { height: 100px; }
8.6 继承作用域
1.// scss 这样写将会出错 ,2.// .three1 {width: 100px;} // 将media写在这里将会出错3.@media screen and (min-width:320px) and (max-width:639px){4. .three1 {width: 100px;} // 写在这里下面的才可以继承5. .container {6. @extend .three1;7. height: 100px;8. } 9.}
1.// scss2.%message {height: 30px;}3..message-danger {4. @extend %message;5. color: red;6. font-size: 18px;7. height: 30px;8.}9.10.// out css11..message-danger { height: 30px; }12..message-danger { color: red; font-size: 18px; height: 30px; }
好了基础篇完结了,接下来是进阶之路,依次会介绍数据类型,变量操作和内置函数等等, 写博客好费劲,我要坚持,坚持,咬牙坚持.作者的水平有限,文中若有疏漏,还请多多批评..谢谢!