CSS的繼承是由所使用的樣式屬性定義的。換句話說,當你查看CSS屬性backgruound-color,你會看到一欄「繼承性」,也許你幾乎沒有在意過它,但是它還是十分有用的。
什麼是CSS繼承
每一個元素都是文檔樹的一部分,除了最頂級的HTML元素,每個元素都有其對應的父級元素,每一個父級元素的CSS屬性值都可以被應用到它的子項目中去。
舉個栗子,H1標籤包含著一個EM標籤:
EM就是H1標籤的子項目,任何H1中繼承的CSS屬性值會自動在EM標籤中生效,比如:
CSS Code複製內容到剪貼簿
h1{font-size: 120%;}
由於font-size是預設繼承的CSS屬性,"很大的"字型也會和H1一樣,被放大到120%。
如何使用CSS繼承
最簡單的方法就是知道CSS所有屬性中那些是預設被繼承的,如果這個屬性被繼承,就會知道它會在元素所有子項目中生效。
我們經常在非常頂級的元素上定義基礎樣式,比如BODY標籤,如果在body中設定字型,因為繼承,文檔中所有元素都會應用這個字型:
CSS Code複製內容到剪貼簿
h1{font-size: 120%;}
使用「inherit」值
每個CSS屬性的值都包括inherit,屬性被定義這個值後,即使這個屬性不是預設繼承,也會應用父級元素這個CSS屬性的值,比如:
CSS Code複製內容到剪貼簿
body { margin: 1em; }
p { margin: inherit; }
繼承使用計算值(Computed Values)
計算值指的是這個值相對於網頁中其他值來定義,這個對於繼承屬性尤其重要。如果在body中定義font-size:1em,文檔中所有元素字型大小並不都是1em,這是因為像H1-H6這類元素的font-size的值是相對大小。H1預設是網頁中字型最大的元素,當設定body元素字型大小時,H1-H6會根據這個「平均」大小的字型計算實際的字型大小。
再舉一個例子:
按照之前所述,font-size是預設被繼承的CSS屬性,然而span字型的大小並不是p的80%,而是和p一樣大,正是因為繼承使用的是計算值,如果p的父級元素的字型大小為30px,p的字型大小計算值為24px,span繼承的則是24px,而不是80%。
更多關於計算值可以閱讀CSS Computed Value。
background被「繼承」
查看backgruound屬性,會看到它的繼承性是no,也就是預設不被繼承的。但是瀏覽器依舊預設「繼承」了這個屬性,比如寫這麼一段:
“很大的”依舊有了黃色的背景,這是因為background屬性的初始值(initial value)是transparent(透明),所以看到的黃色背景其實是h1標籤的背景。