簡單用幾個範例示範 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%);
}