一、繼承和佔位符
二者都是經過
@extend
來引用。css
1.1 繼承
一個已經存在的css樣式類,能夠被其餘樣式類繼承。git
例如,實現如下css樣式:github
.btn, .btn--primary, .btn--info { border: 1px solid blue; } .btn--primary { color: black; } .btn--info { color: gray; }
scss中能夠這樣寫,顯然,這種寫法便於維護和閱讀!web
.btn { border: 1px solid blue; } .btn--primary { color: black; @extend .btn; } .btn--info { color: gray; @extend .btn; }
1.2 佔位符
顧名思義,若是不被
extend
引用,它是不會被編譯,也就是:不會佔用css文件大小。這是和繼承最大區別。ruby
scss代碼以下:函數
%btn { border: 1px solid blue; } // 沒有被extend // 不會出如今css文件中 %test-btn { border: 1px solid black; } .btn--primary { color: black; @extend %btn; } .btn--info { color: gray; @extend %btn; }
編譯後的css代碼:測試
.btn--primary, .btn--info { border: 1px solid blue; } .btn--primary { color: black; } .btn--info { color: gray; }
2. 混合宏
scss中的函數,經過關鍵字
@mixin
聲明,@include
引用。網站
2.1 參數設置和調用方式
無參調用 scss:url
@mixin btn { border-radius : 3px; } .box { color: white; @include btn; }
css:spa
.box { color: white; border-radius: 3px; }
參數調用 scss:
$radius:3px !default; @mixin btn($radius:5px) { // 默認是 5px border-radius : $radius; } .box { color: white; @include btn($radius); // 傳入參數 }
css:
.box { color: white; border-radius: 3px; }
參數過多的狀況
當參數二、3個時候,能夠經過
@mixin size($width,$height)
這樣來調用。當參數過多,使用...
符號。
scss:
$height: 15px !default; $width: 18px !default; @mixin size($list...) { @if length($list) == 0 { height: $height; width: $width; }@else if length($list) == 1 { height: $list; width: $list; }@else if length($list) == 2 { height: nth($list , 1); width: nth($list , 2); }@else { @debug "Too many parameters"; } } .btn--primary { @include size(); } .btn--big { @include size(20px , 25px); } .btn--square { @include size( 18px ); } .btn--test { @include size(1px,2px,3px,4px); // just a test. console output "Too many parameters" what we have defined. }
輸出的css結果:
.btn--primary { height: 15px; width: 18px; } .btn--big { height: 20px; width: 25px; } .btn--square { height: 18px; width: 18px; }
2.2 好處和不足
混合宏最大的不足:會複用代碼,形成css冗贅(能夠嘗試一下下方的測試代碼)。 固然,符合宏能夠傳遞參數這點很nice。
能夠編譯下方代碼,觀察下結果:
@mixin border-radius{ -webkit-border-radius: 3px; border-radius: 3px; } .box { @include border-radius; margin-bottom: 5px; } .btn { @include border-radius; }
3. 版本
- scss:3.5.6
- ruby:2.4.4p296
歡迎技術交流,引用請註明出處。 我的網站:godbmw.com Github:godbmw