在使用CSS的過程中,我們經常會遇到優先級的問題。而CSS的優先級定義是有非常嚴格的規則的,這個規則是根據優先級來源的不同,以及鎖定性的不同進行計算的。
在CSS中,它認為"!important"最優先,其次是ID選擇器、class選擇器、標簽選擇器、通配符、繼承等,而其中選擇器的特殊性(specificity)是最關鍵的因素。關于選擇器的特殊性,可以利用下面的規則來進行計算:
[0, 0, 0, 0] | | v [0, 0, 0, 1] /* 繼承的樣式始終為 0, 0, 0, 0 */ [0, 0, 1, 0] /* 類樣式(例如 .example) */ [0, 0, 1, 1] /* 類 + 標簽樣式(例如 div.example) */ [0, 1, 0, 0] /* ID 樣式(#example) */ [0, 1, 0, 1] /* ID + 類樣式(例如 #example.one) */ [0, 1, 1, 0] /* ID + 標簽樣式(例如 div#example) */ [0, 1, 1, 1] /* ID + 類 + 標簽樣式,或者更多(例如 div#example.one) */
可以看到,在CSS中,越靠右越優先,如果尋找到一組選擇器的特殊性值相同,那么選擇器出現的順序就決定優先級。
雖然這看上去比較復雜,但我們只要端正優先級的來源,嚴格按照規則來,就能夠避免很多不必要的煩惱。同時,在編寫代碼時,也可以通過打印控制臺來幫助我們查看每個選擇器的權重值,從而驗證優先級的正確性。