---
# System prepended metadata

title: 認識CSS#4 CSS的規則
tags: [CSS]

---

# 認識CSS#4 CSS的規則
###### tags: `CSS`

## 規則1 - Cascading

CSS是一種 <font color='red'> **階層式(Cascading)**</font> 的語言，由上往下讀程式碼
```=CSS
h1{
    color:red;
}
h2{
    color:green;
}
h1{
    color:yellow;
}
```
範例中程式碼從第一行開始讀取，原本渲染 h1 的字是要紅色的，到了最後又把 h1 渲染成黃色的，這時候就會把第一行的h1渲染給取代掉


## 規則2 - Specificity
CSS selectors 有不同的權重，CSS 會選擇權重比較重的會蓋過權重比較輕的進行渲染，<font color='red' size=5>不會管 規則1 - Cascading </font>
有相同的權重時就使用規則1來決定要渲染哪一個

### 權重
> id - specificity(1,0,0)
> 

> class - specificity(0,1,0)
> 

> element selector - specificity(0,0,1)
>

```=CSS
h1.class{ 
/* class+tag(0,1,1)*/
}
h1{/*tag(0,0,1)*/}
/*本來規則h1會蓋過h1.class的設定
但是specificity比h1{}還高
故還是套用h1.class*/

P.S. (1,0,0)>(0,1,1)
specificity最前面的1還是最大
```

### 不管權重的例外 - inline styling
不管你的權重有多高都會比不上直接用 inline styling 寫 CSS 上去，從範例來看從其他 CSS 檔案撰寫 h1 的樣式都不能蓋過直接從 HTML 寫出來的樣式，所以字體顏色都會是紅色
```=HTML 
 <h1 style="color:red"> Hello! </h1>
```

## 規則3 - inheritance
每個 element 都會預設繼承自己的 parent element 所寫的各種渲染的 CSS 樣式
```=CSS
body{
	color:green;
}
h1{
	/*h1會繼承body的color:green*/
}
```
## 標籤分數權重

* HTML 標籤 : 1分
* class : 10分
* id : 100分
* HTML style : 1000分
* important : 10000分

## CSS總決定順序總結

<font size=4>inline styling > id selector > class selector > element selector > inheritance </font>