【发布时间】:2016-07-22 17:25:09
【问题描述】:
我见过:
- CSS 2, precedence of stylesheets imported using link element
- In which order do CSS stylesheets override?
- stylesheet - Can one CSS file take priority over another CSS file?
他们似乎都说,对于多次出现的同一个选择器,最后一个获胜。然而,这不是发生在我身上的事情。因此,鉴于“Aqua.css”具有:
body {color:aqua;}
而“Red.css”有:
body {color:red;}
然后使用以下内容:
<link rel="stylesheet" type="text/css" href="Aqua.css" title="Aqua"/>
<link rel="stylesheet" type="text/css" href="Red.css" title="Red"/>
<style type="text/css">
body {color: lime;}
body {color: yellow;}
</style>
正如其他答案所说,使用了最后一个黄色。但是,如果我将其更改为:
<style type="text/css">
body {color: lime;}
body {color: yellow;}
</style>
<link rel="stylesheet" type="text/css" href="Aqua.css" title="Aqua"/>
<link rel="stylesheet" type="text/css" href="Red.css" title="Red"/>
然后使用 Aqua,而不是最后一个,Red。见Precedence of CSS rules Sample 2。主体颜色是 Aqua 但 Aqua.css 在 Red.css 之前。我找到的所有答案都说体色是红色。
每当我有多个指向 css 样式表的链接并且它们之间的唯一区别是某些东西(元素或类或其他)的颜色时,就会使用 first 样式表,而不是 last,但这似乎不是我读到的一切都应该发生的事情。我试过 Edge、Chrome 和 IE;我注意到它们之间没有相关的区别。
所以我有以下两个问题:
- 我是否纠正了我看到的行为(使用第一个链接标签而不是最后一个)与其他答案不同?
- 如果是,那为什么?
如果我应该对其他线程之一发布答案,我深表歉意,但我认为创建一个新问题更简洁。
我问的原因是我正在尝试创建一个动态样式表系统,因此了解优先级更为重要,与正常情况下相比,仅仅尝试一些东西来看看什么是有效的效率较低。我将尝试解释规范,但就其他答案中的情况而言,我想了解其他线程中提供的内容。
【问题讨论】:
-
我相信答案是不能保证首先加载哪个样式表以及设置正文属性的顺序。这就是为什么你不应该这样做。
-
@Rob,“无法保证首先加载哪个样式表”加载顺序与它无关。 只要加载了所有样式表,DOM 排序就会严格定义将应用哪些样式。不涉及模糊逻辑或猜测。
-
@zzzzBov 我对此不太确定,我想回忆一下我前段时间读过的一篇文章,关于不能保证首先应用什么。如果您有两个外部样式表,它们都包含与此问题中相同元素的相同 CSS 属性,并且第二个样式表在第一个样式表之前完成下载,哪个会被应用?如果我可以确定的话,我会把这个作为答案,但我现在没有时间尝试找到这个。我的想法可能不适用于此,但可以调查。
-
“如果您有两个外部样式表,两个样式表都包含与本问题中相同元素的相同 CSS 属性,并且第二个样式表在第一个样式表之前完成下载,哪个会应用?” the spec is clear that the order of declaration is what is used to determine which styles are applied.