用户代理样式表覆盖我自己的样式

user agent stylesheet override my own styles

编辑*** 在什么情况下用户代理样式可以覆盖自定义 CSS?


我在我的页面上的一个元素上设置了一些样式,用户代理样式表似乎覆盖了我的定义。

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

我知道我在该元素上没有任何直接样式,但据我了解,用户代理样式表仅在特定元素绝对没有样式时才会接管。继承的样式不算在内吗?

使用normalize.css来避免这个问题,如果一个元素没有设置none样式,他会继承用户代理样式。

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

一般问题的答案是,在决定哪种样式设置“获胜”时,仅考虑元素本身的 属性 设置。例如,如果我们只有一种样式 sheet 在 body 元素上设置 font-size: 18px,而另一种样式 sheet 在所有 [=17= 元素上设置 font-size: 9px ] 元素,则 p 元素的字体大小为 9px,无论 sheet 样式的来源是什么,例如后者是否只是浏览器默认样式sheet。继承在这里不起作用。 CSS 2.1 规范的 Assigning property values, Cascading, and Inheritance 部分对此进行了全部描述。

解决了上述“争吵”后,才考虑继承。只有这样,inheritable 属性才能被根本没有设置 的元素继承.

具体问题没有给出具体的代码,但是可以推断出你是这样的:

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

通常这会导致“foo”和“bar”都显示为 12px 大小。 table 单元格从 table 行继承大小,从 tbody 元素继承它,从 table 继承它,从 [=15] 继承它=].

但是,在您的情况下,此链已断开。原因是浏览器样式sheet有

 table { font-size: medium }

这在实践中往往意味着 16px。现在 table 元素设置了 属性,因此单元格会继承该值。

浏览器通常在其样式 sheet 中没有这样的规则。但是,在 Quirks Mode 中,大多数浏览器都应用该规则。这意味着字体大小不会从 body 继承到 tables。这反映了非常旧版本的 IE 中的错误(或奇怪之处),并让遗留页面像以前一样呈现。

如果您无意中造成了怪癖模式并且不需要它用于其他目的,请拍打

<!DOCTYPE html>

在文档的开头。但请注意,如果旧页面是在符合 Quirks 模式的测试条件下设计的,它们可能会以不同的方式变得混乱。

或者,将以下规则添加到您的样式中 sheet:

table { font-size: 100% }

这意味着 table 获取其父项的字体大小。 (类似于继承,但更安全。)