簡體   English   中英

用戶代理樣式表覆蓋我自己的樣式

[英]user agent stylesheet override my own styles

編輯***在什么情況下用戶代理樣式可以覆蓋自定義CSS?


我在我的頁面上的元素上設置了一些樣式,似乎用戶代理樣式表覆蓋了我的定義。

它發生在Chrome版本39.0.2171.95 m,Firefox 34.0.5中,但不是在IE 11中。

我知道我對該元素沒有任何直接的樣式,但我的理解是,如果特定元素絕對沒有樣式,則用戶代理樣式表僅接管。 繼承的風格不算數嗎?

在此輸入圖像描述

一般問題的答案是,在決定哪種樣式設置“獲勝”時,僅考慮元素本身上設置的屬性設置。 舉例來說,如果我們只有一個樣式表,設置font-size: 18px的對body元素和設置另一個樣式表font-size: 9px所有p元素,則字體大小p元素是9px,不管是什么樣式表的起源是,例如后者是否只是瀏覽器默認樣式表。 繼承在這里沒有任何作用。 這在CSS 2.1規范的分配屬性值,級聯和繼承一節中有所描述。

只有在上述“斗爭”解決后,才會考慮繼承。 只有這樣的可繼承屬性由那些他們根本沒有設置元素繼承。

具體問題沒有提供具體的代碼,但可以推斷出你有這樣的東西:

 <style>
   body { font-size: 12px; }
 </style>
 <table>
   <tr><td>foo
 </table>
 bar

通常這會導致“foo”和“bar”以12px大小顯示。 表格單元繼承的表格行,它繼承其從大小tbody元件,其繼承了它從該表,它繼承它從body

但是,在您的情況下,此鏈斷開。 原因是瀏覽器樣式表有

 table { font-size: medium }

實際上往往意味着16px。 現在table元素具有屬性集,因此單元格繼承該值。

瀏覽器通常在樣式表中沒有這樣的規則。 但是,在Quirks模式下 ,大多數瀏覽器都應用該規則。 這意味着字體大小不會從body繼承到表中。 這反映了IE的非常舊版本中的錯誤(或奇怪),並且可以像過去那樣呈現舊頁面。

如果您無意中導致Quirks模式並且不需要它用於其他目的,請拍打

<!DOCTYPE html>

在文檔的最開始。 但要注意,舊頁面可能會以不同的方式搞砸,如果它們是在與Quirks模式相對應的測試條件下設計的。

或者,將以下規則添加到樣式表中:

table { font-size: 100% }

這意味着表獲取其父級的字體大小。 (比如繼承,但更安全。)

使用normalize.css來避免這個問題,如果沒有將任何樣式設置為元素,他將繼承用戶代理樣式。

http://necolas.github.io/normalize.css/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM