CSS預處理器css
1.基於CSS的另外一種語言sass
2.經過工具編譯成CSSapp
3.添加了不少CSS不具有的特性less
4.能提高CSS文件的組織模塊化
提供功能:1.嵌套 反映層級和約束 2.變量和計算,減小重複戴拿 3.Extend 和 Mixin 代碼片斷工具
4.循環 適用於複雜有規律的樣式 5.import CSS 文件模塊化oop
知識點:spa
1.less(嵌套)blog
body{ padding:0; margin:0; } .wrapper{ background:white; .nav{ font-size: 12px; } .content{ font-size: 14px; &:hover{ background:red; } } }
2.sass 嵌套遞歸
body { padding: 0; margin: 0; } .wrapper { background: white; } .wrapper .nav { font-size: 12px; } .wrapper .content { font-size: 14px; } .wrapper .content:hover { background: red; }
3.less 變量
@fontSize: 12px; @bgColor: red; body{ padding:0; margin:0; } .wrapper{ background:lighten(@bgColor, 40%); .nav{ font-size: @fontSize; } .content{ font-size: @fontSize + 2px; &:hover{ background:@bgColor; } } }
須要改動變量時,只需改動變量的值而後編譯成 css 文件便可,一次定義,屢次使用,方便維護
4.sass 變量
$fontSize: 12px; $bgColor: red; body{ padding:0; margin:0; } .wrapper{ background:lighten($bgColor, 40%); .nav{ font-size: $fontSize; } .content{ font-size: $fontSize + 2px; &:hover{ background:red; } } }
sass 和 css 不兼容,儘可能避免混淆,@在css 中是有意義的,故使用 $.
5.less mixin
有一段代碼想公共使用(複用)的狀況下:
@fontSize: 12px; @bgColor: red; .box{ color:green; } .box1{ .box(); line-height: 2em; } .box2{ .box(); line-height: 3em; } .block(@fontSize){ font-size: @fontSize; border: 1px solid #ccc; border-radius: 4px; } body{ padding:0; margin:0; } .wrapper{ background:lighten(@bgColor, 40%); .nav{ .block(@fontSize); } .content{ .block(@fontSize + 2px); &:hover{ background:red; } } }
編譯成css
.box { color: green; } .box1 { color: green; line-height: 2em; } .box2 { color: green; line-height: 3em; } body { padding: 0; margin: 0; } .wrapper { background: #ffcccc; } .wrapper .nav { font-size: 12px; border: 1px solid #ccc; border-radius: 4px; } .wrapper .content { font-size: 14px; border: 1px solid #ccc; border-radius: 4px; } .wrapper .content:hover { background: red; }
6. sass mixin
$fontSize: 12px; $bgColor: red; @mixin block($fontSize){ font-size: $fontSize; border: 1px solid #ccc; border-radius: 4px; } body{ padding:0; margin:0; } .wrapper{ background:lighten($bgColor, 40%); .nav{ @include block($fontSize); } .content{ @include block($fontSize + 2px); &:hover{ background:red; } } }
與 less 不一樣點:1. less 須要 @mixin 2.參數名稱不同 3.不須要class,直接指定其名字
編譯成 css
body { padding: 0; margin: 0; } .wrapper { background: #ffcccc; } .wrapper .nav { font-size: 12px; border: 1px solid #ccc; border-radius: 4px; } .wrapper .content { font-size: 14px; border: 1px solid #ccc; border-radius: 4px; } .wrapper .content:hover { background: red; }
7.less extend
解決重複代碼問題,減小 css 體積
@fontSize: 12px; @bgColor: red; .block{ font-size: @fontSize; border: 1px solid #ccc; border-radius: 4px; } body{ padding:0; margin:0; } .wrapper{ background:lighten(@bgColor, 40%); .nav:extend(.block){ color: #333; } .content{ &:extend(.block); &:hover{ background:red; } } }
mixin 是把代碼直接複製過來,extend 是把選擇器提取出來,把公共樣式寫到一塊兒
編譯成 css
.block, .wrapper .nav, .wrapper .content { font-size: 12px; border: 1px solid #ccc; border-radius: 4px; } body { padding: 0; margin: 0; } .wrapper { background: #ffcccc; } .wrapper .nav { color: #333; } .wrapper .content:hover { background: red; }
8. sass extend
$fontSize: 12px; $bgColor: red; .block{ font-size: $fontSize; border: 1px solid #ccc; border-radius: 4px; } body{ padding:0; margin:0; } .wrapper{ background:lighten($bgColor, 40%); .nav{ @extend .block; color: #333; } .content{ @extend .block; &:hover{ background:red; } } }
編譯成 css
.block, .wrapper .nav, .wrapper .content { font-size: 12px; border: 1px solid #ccc; border-radius: 4px; } body { padding: 0; margin: 0; } .wrapper { background: #ffcccc; } .wrapper .nav { color: #333; } .wrapper .content:hover { background: red; }
sass 中 div 沒有換行,其他再無區別,在樣式表中就能夠徹底完成樣式變動的操做,更加集中地維護代碼
9.less loop (循環)
高度有規律的狀況(網格) 採用遞歸,出口就是 n <= 0 時,跳出循環
.gen-col(@n) when (@n > 0){ .gen-col(@n - 1); .col-@{n}{ width: 1000px/12*@n; } } .gen-col(12);
編譯成 css
.col-12 { width: 1000px; } .col-11 { width: 916.66666667px; } .col-10 { width: 833.33333333px; } .col-9 { width: 750px; } .col-8 { width: 666.66666667px; } .col-7 { width: 583.33333333px; } .col-6 { width: 500px; } .col-5 { width: 416.66666667px; } .col-4 { width: 333.33333333px; } .col-3 { width: 250px; } .col-2 { width: 166.66666667px; } .col-1 { width: 83.33333333px; }
10. sass loop
@mixin gen-col($n){ @if $n > 0 { @include gen-col($n - 1); .col-#{$n}{ width: 1000px/12*$n; } } } @include gen-col(12);
這是類比上面 less 的寫法,但 sass 還有更簡便的寫法,由於 sass 支持 for,故
@for $i from 1 through 12 { .col-#{$i} { width: 1000px/12*$i; } }
編譯成 css
.col-1 { width: 83.33333px; } .col-2 { width: 166.66667px; } .col-3 { width: 250px; } .col-4 { width: 333.33333px; } .col-5 { width: 416.66667px; } .col-6 { width: 500px; } .col-7 { width: 583.33333px; } .col-8 { width: 666.66667px; } .col-9 { width: 750px; } .col-10 { width: 833.33333px; } .col-11 { width: 916.66667px; } .col-12 { width: 1000px; }
11. less import
解決 css 模塊化 問題
6-import-variable
@themeColor: blue; @fontSize: 14px;
6-import-module1
.module1{ .box{ font-size:@fontSize + 2px; color:@themeColor; } .tips{ font-size:@fontSize; color:lighten(@themeColor, 40%); } }
6-import-module2
.module2{ .box{ font-size:@fontSize + 4px; color:@themeColor; } .tips{ font-size:@fontSize + 2px; color:lighten(@themeColor, 20%); } }
less import(能夠跨文件使用)
@import "./6-import-variable"; @import "./6-import-module1"; @import "./6-import-module2";
編譯成 css
.module1 .box { font-size: 16px; color: blue; } .module1 .tips { font-size: 14px; color: #ccccff; } .module2 .box { font-size: 18px; color: blue; } .module2 .tips { font-size: 16px; color: #6666ff; }
12.sass import
6-import-variable
$themeColor: blue; $fontSize: 14px;
6-import-module1
.module1{ .box{ font-size:$fontSize + 2px; color:$themeColor; } .tips{ font-size:$fontSize; color:lighten($themeColor, 40%); } }
6-import-module2
.module2{ .box{ font-size:$fontSize + 4px; color:$themeColor; } .tips{ font-size:$fontSize + 2px; color:lighten($themeColor, 20%); } }
sass import(能夠跨文件使用)
@import "./6-import-variable"; @import "./6-import-module1"; @import "./6-import-module2";
編譯成 css
.module1 .box { font-size: 16px; color: blue; } .module1 .tips { font-size: 14px; color: #ccccff; } .module2 .box { font-size: 18px; color: blue; } .module2 .tips { font-size: 16px; color: #6666ff; }