在CSS中,我們常常使用不同的選擇器來選擇元素。在同一元素上使用不同的選擇器時,不同的選擇器將會產(chǎn)生不同的樣式。但是,當同一元素使用不同的選擇器定義相同的樣式時,該元素的實際樣式將有哪個選擇器定義的樣式來決定呢?
這就是CSS權(quán)重問題。在CSS中,不同的選擇器具有不同的權(quán)重值。這些權(quán)重值指示哪個規(guī)則具有優(yōu)先權(quán)。在計算樣式時,CSS將考慮所有適用于相同元素的規(guī)則,并選擇具有最高權(quán)重值的規(guī)則來應(yīng)用于該元素。
選擇器類型 權(quán)重 ------------------------------------ 樣式聲明(style attr) 優(yōu)先權(quán)值無窮大 !important 優(yōu)先權(quán)值無窮大 內(nèi)聯(lián)樣式表 優(yōu)先權(quán)值1000 ID選擇器 優(yōu)先權(quán)值100 類、屬性、偽類選擇器 優(yōu)先權(quán)值10 元素、偽元素選擇器 優(yōu)先權(quán)值1 通配符、子選擇器、相鄰選擇器 優(yōu)先權(quán)值0
因為樣式聲明和!important具有無窮大的優(yōu)先權(quán)值,它們總是會覆蓋其他所有選擇器和聲明。內(nèi)聯(lián)樣式表具有優(yōu)先權(quán)值1000,比ID選擇器的優(yōu)先權(quán)值更高。選擇器類型的優(yōu)先權(quán)由高到低是ID選擇器、類、屬性、偽類選擇器、元素、偽元素選擇器、通配符、子選擇器、相鄰選擇器。
當同一元素使用多個選擇器定義相同的樣式時,CSS根據(jù)它們的權(quán)重值來確定哪個規(guī)則優(yōu)先應(yīng)用。選擇器權(quán)重的比較是疊加的,它會優(yōu)先考慮規(guī)則的ID選擇器、然后考慮規(guī)則的類、屬性、偽類選擇器、以此類推。如果兩個規(guī)則具有相同的權(quán)重,則最后面聲明的規(guī)則將具有優(yōu)先權(quán)。最后,如果元素具有內(nèi)聯(lián)樣式,則它的權(quán)重值將優(yōu)先于所有其他選擇器。