簡單用幾個範例示範 CSS 預處理器的幾個常用的特性:變數(Variables)、函式(Functions)、嵌套(Nesting)、混入(Mixins)、共用(Extends)。
現今較為主流的 CSS 預處理器有三種,分別是 Sass/SCSS、Less、Stylus,其中的 Sass/SCSS 是目前最多人使用也相對較成熟的選擇。
變數的命名通常使用在 CSS 中常見的屬性名稱寫法,也就是用連接號(-)與全小寫英文,例如$second-color,變數在編譯後並不會出現在最後輸出的 CSS 檔案中。
此外,變數也可以指定給其他變數使用,變數的值也可以是一個字串值,不過解譯時有特別的語法。
//scss $color-white: #fff; $color-pink: #ee11ab; $title-font: normal 24px/1.5 'Open Sans', sans-serif; $primary-color: $color-pink; a { background-color: $color-white; color: $color-pink; }變數可以再進行作加減乘除餘(+-*/%)運算,最特別的是字串與顏色色碼也可以進行運算。
$_num: 5px; .container { color: $color-pink / 2; margin: $_num * 2 $_num; }
SCSS | CSS |
---|---|
// scss ul { list-style: none; li { display: inline-block; padding: 15px; a { color: #444; font-size: 16px; text-decoration: none; } } } |
ul { list-style: none; } ul li { display: inline-block; padding: 15px; } ul li a { color: #444; font-size: 16px; text-decoration: none; } |
例如base.scss中要匯入_reset.scss,base.scss的檔案內容會如下,要注意的是只需要寫@import 'reset',不用加副檔名或下底線(_), 編譯程式會自動尋找對應的檔案:
@import 'reset'; body { background-color: #efefef; font: 100% Helvetica, sans-serif; }
@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius; } .box { @include border-radius(10px); }要記住的是@minix標記需要對應到@include標記,上面的@include border-radius(10px)可以像變數一樣,加在 scss 檔案中的任一個定義中。
這個mixin中的定義傳入值,是可以加上預設值的,例如以下的範例:
@mixin label($text: 'Code', $background: $yellow, $color: rgba(black, 0.5)) { position: relative; &:before { background: $background; color: $color; content: $text; display: inline-block; font-size: 0.6rem; } }
轉成 CSS 會像右面這樣,你可能會注意到.message仍然被保留著:
.message { border: 1px solid #ccc; padding: 10px; color: #333; } .success { @extend .message; border-color: green; } .error { @extend .message; border-color: red; }
.message, .success, .error { border: 1px solid #ccc; padding: 10px; color: #333; } .success { border-color: green; } .error { border-color: red; }
@function calculate-width($col-span) { @return 100% / $col-span; } .span-two { width: calculate-width(2); // spans 2 columns, width = 50% } .span-three { width: calculate-width(3); // spans 3 columns, width = 33.3% }SCSS 中也內建了許多工具函式,詳見內建函式的清單。 常用的例如按比例加亮顏色的 lighten 與按比例加深顏色的 darken,裡面有關於顏色、透明度、字串、數字的函式很多。以下為範例:
$awesome-blue: #2196f3; a { background-color: $awesome-blue; padding: 10px 15px; } a:hover { background-color: darken($awesome-blue, 10%); }