摘要:知道存在是很有用的,這樣當(dāng)你在別人的代碼中遇到它時,你就知道它是什么了。如上面所示的示例所示,元素選擇器具有很低的特殊性。類選擇器具有更高特殊性,所以將戰(zhàn)勝元素選擇器。個位在整個選擇器中每包含一個元素選擇器或偽元素就在該列中加分。
在實際的工作中,我們可能還有些疑惑,當(dāng)有多個選擇器作用在一個元素上時,哪個規(guī)則最終會應(yīng)用到元素上?其實這是通過層疊機制來控制的,這也和樣式繼承(元素從其父元素那里獲得屬性值)有關(guān)。
層疊CSS 是 Cascading Style Sheets 的縮寫,這暗示 層疊(cascade) 的概念是很重要的。在最基本的層面上,它表明CSS規(guī)則的順序很重要,但它比那更復(fù)雜。什么選擇器在層疊中勝出取決于三個因素(這些都是按重量級順序排列的——前面的的一種會否決后一種):
重要性(Importance)
特殊性(Specificity)
源代碼次序(Source order)
重要性 !important在CSS中,有一個特別的語法可以讓一條規(guī)則總是優(yōu)先于其他規(guī)則:!important。把它加在屬性值的后面可以使這條聲明有無比強大的力量。
注意: 重載這個 !important 聲明的唯一方法是在后面的源碼或者是一個擁有更高特殊性的源碼中包含相同的 !important 特性的聲明。
知道 !important存在是很有用的,這樣當(dāng)你在別人的代碼中遇到它時,你就知道它是什么了。但是!我們建議你千萬不要使用它,除非你絕對必須使用它。您可能不得不使用它的一種情況是,當(dāng)您在CMS中工作時,您不能編輯核心的CSS模塊,并且您確實想要重寫一種不能以其他方式覆蓋的樣式。 但是,如果你能避免的話,不要使用它。由于 !important 改變了層疊正常工作的方式,因此調(diào)試CSS問題,尤其是在大型樣式表中,會變得非常困難。
樣式表來源要注意一個CSS聲明的重要性取決于它被指定在什么樣式表內(nèi)——用戶可以設(shè)置自定義樣式表覆蓋開發(fā)商的樣式,例如用戶可能有視力障礙,想設(shè)置字體大小對所有網(wǎng)頁的訪問是雙倍的正常大小,以便更容易閱讀。
相互沖突的聲明將按以下順序適用,后一種將覆蓋先前的聲明:
在用戶代理樣式表的聲明 (例如:瀏覽器在沒有其他聲明的默認樣式).
用戶樣式表中的普通聲明(由用戶設(shè)置的自定義樣式)。
作者樣式表中的普通聲明(這是我們設(shè)置的樣式,Web開發(fā)人員)。
作者樣式表中的重要聲明
用戶樣式表中的重要聲明(優(yōu)先級最高)
Web開發(fā)者的樣式表覆蓋用戶的樣式表是合理的,所以設(shè)計可以保持預(yù)期,但是有時候用戶有很好的理由來重寫web開發(fā)人員樣式,如上所述,這可以通過在用戶的規(guī)則中使用 !important。
特殊性特殊性基本上是衡量選擇器的具體程度的一種方法——它能匹配多少元素。如上面所示的示例所示,元素選擇器具有很低的特殊性。類選擇器具有更高特殊性,所以將戰(zhàn)勝元素選擇器。ID選擇器有甚至更高的專用性, 所以將戰(zhàn)勝類選擇器。
一個選擇器具有的專用性的量是用四種不同的值(或組件)來衡量的,它們可以被認為是千位,百位,十位和個位——在四個列中的四個簡單數(shù)字:
千位:如果聲明是在 style 屬性中該列加1分(這樣的聲明沒有選擇器,所以它們的專用性總是1000。)否則為0。
百位:在整個選擇器中每包含一個 ID選擇器就 在該列中加1分。
十位:在整個選擇器中每包含一個 類選擇器、屬性選擇器、或者 偽類 就在該列中加1分。
個位:在整個選擇器中每包含一個 元素選擇器 或 偽元素 就在該列中加1分。
注意: 通用選擇器 (*), 復(fù)合選擇器 (+, >, ~, " ") 和否定偽類 (:not) 在專用性中無影響。
示例
選擇器 | 千位 | 百位 | 十位 | 個位 | 合計值 |
---|---|---|---|---|---|
h1 | 0 | 0 | 0 | 1 | 0001 |
#important | 0 | 1 | 0 | 0 | 0100 |
h1 + p::first-letter | 0 | 0 | 0 | 3 | 0003 |
li > a[href*="zh-CN"] > .inline-warning | 0 | 0 | 2 | 2 | 0022 |
#important div > div > a:hover, 在一個元素的 屬性里 | 1 | 1 | 1 | 3 | 1113 |
注意: 如果多個選擇器具有相同的重要性和專用性,則選擇哪一個選擇器取決于 Source order(源代碼次序)。源代碼次序(Source order)
如果多個相互競爭的選擇器具有相同的重要性和專用性,那么第三個因素將幫助決定哪一個規(guī)則獲勝——后面的規(guī)則將戰(zhàn)勝先前的規(guī)則。
繼承CSS繼承是我們需要研究的最后一部分,以獲取所有信息并了解什么樣式應(yīng)用于元素。其思想是,應(yīng)用于某個元素的一些屬性值將由該元素的子元素繼承,而有些則不會。
哪些屬性默認被繼承哪些不被繼承大部分符合常識。如果你想確定,你可以 參考CSS參考資料—— 每個多帶帶的屬性頁都會從一個匯總表開始,其中包含有關(guān)該元素的各種詳細信息,包括是否被繼承。
繼承屬性是CSS最基本的內(nèi)容之一,一般不會特別考慮,但是還是要記住的是:
大部分框模型屬性(如border)不會繼承。
繼承沒有特殊性,且低于0,0,0,0 如 * {color: red;}
控制繼承CSS為處理繼承提供了三種特殊的通用屬性值:
inherit: 該值將應(yīng)用到選定元素的屬性值設(shè)置為與其父元素一樣。
initial :該值將應(yīng)用到選定元素的屬性值設(shè)置為與瀏覽器默認樣式表中該元素設(shè)置的值一樣。如果瀏覽器默認樣式表中沒有設(shè)置值,并且該屬性是自然繼承的,那么該屬性值就被設(shè)置為 inherit。
unset :該值將屬性重置為其自然值,即如果屬性是自然繼承的,那么它就表現(xiàn)得像 inherit,否則就是表現(xiàn)得像 initial。
總結(jié)層疊樣式表這個名字很貼切。 CSS所采用的方法就是讓樣式層疊在一起,這是通過結(jié)合繼承和特殊性做到的?。CSS2.1 的層疊規(guī)則相當(dāng)簡單。
找出所有相關(guān)的規(guī)則,這些規(guī)則都包含與一個給定元素匹配的選擇器。
按顯式權(quán)重對應(yīng)用到該元素的所有聲明排序。標志 !important 的規(guī)則的權(quán)重要高于沒有 !important 標志的規(guī)則。按來源對應(yīng)用到給定元素的所有聲明排序。共有3種來源:創(chuàng)作人員、讀者和用戶代理。正常情況下,創(chuàng)作人員的樣式要勝過讀者的樣式。有 !important 標志的讀者樣式要強于所有其他樣式,這包括有 !important 標志的創(chuàng)作人員樣式。創(chuàng)作人員樣式和讀者樣式都比用戶代理的默認樣式要強。
按特殊性對應(yīng)用到給定元素的所有聲明排序,有較高特殊性的元素權(quán)重大于有較低特殊性的元素.
按出現(xiàn)的序?qū)?yīng)用到給定元素的所和聲明排序。一個聲明在樣式表或文檔中越后出現(xiàn),它的權(quán)重越大,如果樣式表中有導(dǎo)入的樣式表,一般認為出現(xiàn)在導(dǎo)入樣式表中的聲明在前,主樣式表中的所有聲明在后。
參考《CSS 權(quán)威指南》
MDN web docs
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/115732.html
摘要:還有視口相關(guān)單位,依賴瀏覽器的視口大小來定義長度的。如果你不熟悉視口相關(guān)單位的話,在這里簡單介紹一下。筆記視口相關(guān)單位對于大多數(shù)瀏覽器還是一項比較新的特性,所以當(dāng)你試圖把這個特性和其他樣式混搭時,有可能會有一些很奇怪的。 前段時間試譯了Keith J.Grant的CSS好書《CSS in Depth》,其中的第二章《Working with relative units》,書中對rel...
摘要:前段時間試譯了的好書,其中的第二章,書中對的講解和舉例可以說相當(dāng)全面,看完之后發(fā)現(xiàn)自己并不太懂相對單位,也希望分享給大家,所以有了這個譯文系列。 showImg(https://segmentfault.com/img/bVbdOMr?w=920&h=450); 前段時間試譯了Keith J.Grant的CSS好書《CSS in Depth》,其中的第二章《Working with r...
摘要:無單位數(shù)字和行高有一些屬性可以接收不帶單位的數(shù)值意思就是一個不帶長度單位的數(shù)字,如和等于,等于,如此類推。警告不帶單位的只可以表示長度單位和百分比的值,譬如和。段落繼承了的行高。長度有兩種類型絕對的和相對的。 前段時間試譯了Keith J.Grant的CSS好書《CSS in Depth》,其中的第二章《Working with relative units》,書中對relative ...
摘要:相對單位的值會根據(jù)外部影響因素的變化而變化。很自然,相對單位使用起來會比較困難。在本章中,我將揭開相對單位的神秘面紗。重點來了,使用相對單位聲明的值會由瀏覽器轉(zhuǎn)化為一個絕對值,我們稱之為計算值。 showImg(https://segmentfault.com/img/bVbdtsA); 前段時間試譯了Keith J.Grant的CSS好書《CSS in Depth》,其中的第二章《W...
摘要:值得注意的是,這個設(shè)置對使用或其他絕對單位定義的字號大小無效。事實上,提供了一個在和間的相對單位折中解決方案,而且更易于使用。圖使用相對單位和繼承字號的面板下面是模板,加到你的頁面吧。 showImg(https://segmentfault.com/img/bVbdOMr?w=920&h=450); 前段時間試譯了Keith J.Grant的CSS好書《CSS in Depth》,其...
閱讀 3352·2021-11-25 09:43
閱讀 3143·2021-10-11 10:58
閱讀 2747·2021-09-27 13:59
閱讀 3080·2021-09-24 09:55
閱讀 2172·2019-08-30 15:52
閱讀 1834·2019-08-30 14:03
閱讀 2262·2019-08-30 11:11
閱讀 2027·2019-08-28 18:12