HW3- 寫 CSS 必備神器:CSS 預處理器
tags: 前端
Demo
https://hui190822.github.io/frontend-intermediate-course/answers/hw3/index.html
我們為什麼要認識CSS preprocessor預處理器呢 ?
1. 傳統CSS
- 由於傳統CSS沒有變數與可重複使用樣式的寫法,使得邏輯上相近的樣式設定常需要重複撰寫,導致維護性較差。
- 在模組化開發時,不能採用嵌套(nested)的寫法,導致需要寫很多重複的選擇器。
2. CSS預處理器
若是能讓 CSS 像一般程式語言一樣,出現巢狀、變數、函式、迴圈等功能提前設置,讓你不怕業主總想從顏色A-> B-> C都修改看看,然後再回去A的選項 QQ
- 主流的 CSS 預處理器有三種 : Sass/SCSS、Less、Stylus
- CSS 預處理器相對於CSS算是較高階的語法,需經過編譯成 CSS,瀏覽器才看得懂
- 功能 : 變數 ( Variable )、繼承 ( Extend )、函式 ( Function )、混用 ( Mixin )
介紹SASS/SCSS
- SASS 與 SCSS差別
Sass 與 Scss 的差別僅在於有無使用 { } 包覆程式碼
Scss:使用{ }表達階層關係
1 | nav { |
Sass:使用縮排方式表達階層關係
1 | nav |
- 建置環境
- 環境: Node.js
- 軟體: Vs code
- 外掛: Live Sass Compiler
變數 (Variable) $
用 $ 符號宣告變數,常用在設定顏色,字型大小等,變數編譯後不會輸出在css 檔案中。
1 | // 變數 |
繼承 (Extend) @extend
如果有很多 css 樣式需要重複使用,這邊就可以用繼承,將固定要寫的樣式集中在一起,日後需要使用可以用語法乎叫。
- % : 專門被繼承的樣式
1 | %aButton { |
函式 (Function) @function
自訂函式,可以帶變數做簡易計算變化
- 假設運用不同字級
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24$baseSize: 12px;
/*寫一個函數去定義每一種類別的字,它的大小 */
@function font($level: 1) {
@return $baseSize *$level; // 預設12px
}
/*套用函數 font()*/
.Title {
font-size:font(6); // 72px = 12px * 6
font-family: Roboto-Black;
}
.Title2 {
font-size:font(4); // 48px = 12px * 4
font-family: Roboto-Black;
}
.Paragraph {
font-size:font(1.3); // 15.6px = 12px * 1.3
font-family: Roboto-Black;
}
混用 (Mixin) @mixin
需搭配 @include 使用,產出多組樣式,達到客製化效果
注意: Mixin 跟 extend 最大的不同 →
Mixin 是產生多個樣式;extend 是將樣式全部集中管理。
- 下列為Alex大大提供的字級樣式
1 | $baseSize:14px; |
補充說明
- 在scss的註解
1
2// 不會被轉譯css
/* 會被轉譯css - 使用scss,建立分區概念
- scss 工作區 (建議注解在這,從工作區修改)
- style 測試區 (dev)
- dist 上線區 (壓縮檔案)
- 匯入 (Import) @import
匯入其他 scss 的檔案 | 使用 @import |
---|---|
撰寫 scss 時,通常會模組化管理非常多的檔案,統一匯入最終的scss,再編譯成 css | 檔名前面會加一個下底線( _ ),e.g. _reset.scss 讓編譯工具不直接編譯成CSS |
1 | @import "reset"; // 重設css |