selector { /* 一般CSS寫法 */
property: value;
}
[property]-[value] - Tailwind寫法
| 部分 | 中文 |
|---|---|
| selector | 選擇器 |
| property | 屬性 |
| value | 值 |
Cascade : 多個 CSS 規則同時存在時,瀏覽器如何決定使用哪一個。
Specificity : 每個 selector 的權重計算方式。
Cascade = 當多個 CSS 規則同時作用時,瀏覽器如何決定「哪一個生效」,priority 排序如下
Tailwind將這個priority 制度以更廣域的角度來定義 - Layer。
考慮以下程式碼,為什麼結果會是red呢? 因為: .class > element
p {
color:blue;
}
.text {
color:red;
}
Specificity 是 **選擇器的權重計算方式 在進行每一次的priority比較時,**CSS 會計算一個 四位數權重(0,0,0,0)
| Selector | Specificity |
|---|---|
| inline style | 1,0,0,0 |
| #id | 0,1,0,0 |
| .class | 0,0,1,0 |
| div | 0,0,0,1 |
如果 selector 更複雜:
div .text {
color:green;
}
權重:
div .text
div = 0,0,0,1
.text = 0,0,1,0
total = 0,0,1,1
比較:
| selector | specificity |
|---|---|
| .text | 0,0,1,0 |
| div .text | 0,0,1,1 |
結果:
div .text 勝出
在大型專案常出現:
.header .nav .menu .itemspan {
color:red;
}
這就是 specificity war,當你想覆蓋時,會變得越來越長、越來越難維護
Base Styles = reset + normalize + default style
| 名稱 | 核心概念 | 做法 |
|---|---|---|
| reset | 完全清空瀏覽器樣式 | 把幾乎所有元素樣式設為 0 |
| normalize | 統一不同瀏覽器行為 | 保留合理預設,只修正不一致 |
| default style | 專案自己的基礎樣式 | 在 reset/normalize 後建立設計基礎 |
Reset 的目標是把瀏覽器的預設樣式「全部清掉」。
* {
margin:0;
padding:0;
}
缺點:
button, input, list 樣式Normalize 與 reset 最大的差異在於:
不要全部清掉,只修正瀏覽器之間不一致的地方
例如 normalize.css
h1 {
font-size:2em;
}
這其實是 設計系統的一部分。
在 reset / normalize 後,通常會加上:
body {
font-family:system-ui;
color: #111;
}
a {
text-decoration:none;
}
它不是瀏覽器的,而是 專案設計規範。
Tailwind採用的不是base.css是Preflight = reset + normalize + modern base style
modern reset + normalize 混合版
例如 Tailwind 會做:
* {
box-sizing:border-box;
}
img {
display:block;
max-width:100%;
}
button {
background:transparent;
}
這些都在 base layer。