解決CSS樣式衝突的幾個辦法

1. 細化選擇符

經過使用組合器(Combinator)將選擇器的描述寫得更加精確(參考CSS選擇器 - MDN),例如對於下述代碼片斷,若是想給.cellphones中的.apple增長樣式,只使用.apple,勢必會對.fruit中的.apple也形成影響。php

<div class="cellphones">
  <div class="apple"></div>
</div>
<div class="fruit">
  <div class="apple"></div>
</div>
複製代碼

可使用後代組合器(Descendant Combinator)或子代組合器(Child Combinator)這種更爲精確的描述。描述得越精確,優先級越高,優先級更高的描述會覆蓋優先級較低的描述。css

/* 後代組合器:全部後代節點 */
.cellphones .apple {
	border: 1px solid black;
}

/* 更加精確的後代組合器 */
body .cellphones .apple {
  border: 1px solid blue;
}

/* 子代組合器:直接子節點 */
.cellphones > .apple {
  border: 1px solid red;
}
複製代碼

若是給.apple按順序加上上述所有樣式,最終,邊框將呈現藍色。html

詳細的優先級規則參見CSS 優先級瀏覽器

2. 再寫一次選擇器名

本質上是上一種狀況的特例。例如對於.apple,添加以下樣式:app

.cellphones > .apple.apple {
  border: 1px solid purple;
}
.cellphones > .apple {
  border: 1px solid red;
}
複製代碼

最終,邊框將呈現紫色。ui

3. 改變CSS樣式表中的順序

對於相同類型選擇器指定的樣式,在CSS文件中的順序靠後的樣式會覆蓋以前的樣式。 例如對於下述代碼中的div元素,瀏覽器渲染的結果會是紅色的:spa

<div class="redBorder" class="blackBorder"></div>
複製代碼
.blackBorder {
  border: 1px solid black;
}
.redBorder {
  border: 1px solid red;
}
複製代碼

須要注意的是,儘管在HTML文件中.blackBorder出如今.redBorder後,但優先級的判斷是根據他們在CSS文件中的順序。也就是說,CSS文件中更爲靠後的.redBorder纔會被採用。調試

4. 主動提高優先級(不建議)

還有一種簡單粗暴可是並不建議的辦法,就是在須要使用的樣式後加上關鍵字!important能夠將樣式優先級提到極高。例如:code

<div class="redBorder" class="greenBorder"></div>
複製代碼
.greenBorder {
  border: 1px solid green !important;
}
.redBorder {
  border: 1px solid red;
}
複製代碼

對於上述代碼,邊框將顯示爲綠色。htm

使用 !important 是一個很是很差的習慣,會破壞樣式表中固有的級聯規則,使得調試變得很是困難!

參考資料: 優先級 - MDN css樣式衝突怎麼解決 - 魔法時光機

相關文章
相關標籤/搜索