执行顺序

问题描述:

我有一个相当大的页面,其中包含大量的CSS和HTML。该页面分为多个区域。某处设置了每个区域的基本信息(例如文本颜色,链接颜色等)。执行顺序

这是在CSS文件的开始处完成的。但是,您可以选择自定义区域内模块的外观。所以考虑一下,我在侧栏上有一个.right-zone类。我在里面放了一个导航模块。一旦我定制了.navigation-module(通过YUI),定制的CSS就会添加到标准的CSS文件中并保存。

我期望CSS从上到下被解释。

.right-zone a { color: #ff0000; } 

是文档的基础。因此,定制后,就变成了:

.right-zone a { color: #ff0000; } 
.navigation-module a { color: #0000ff; } 

所以,想象一下文档的结构:

[...] 
<div class="right-zone"> 
    <div class="navigation-module"> 
    <a href="http://www.*.com/">foobar link</a> 
    </div> 
</div> 

我只能假设,最终颜色的链接将#0000FF - 因为它是在最后声明CSS文件。出于某种原因,它不会在我的网站上这样做。

“通用”CSS在第335行定义 - 导航模块的定义在第409行,但链接仍然是红色而不是蓝色。

Firebug将红色显示为最终应用的样式,并且在蓝色的样式上具有透视效果。任何想法为什么发生这种情况?

+1

你能提供一个链接到网站,这是发生? – rochal 2010-08-18 14:47:24

+0

你如何尝试应用.navigation-module a的属性? – Sotiris 2010-08-18 14:51:57

+0

您提供的示例不会重现问题,所以它没有多大用处。 – meagar 2010-08-18 15:04:46

你的例子给我一个蓝色的链接,因为它应该。我假设你真正的CSS选择器更复杂,第一个比第二个更具体。

稍后的规则只会覆盖较早的规则,如果它具有相同或更大的特异性。例如,.navigation-module a将不会覆盖较早的#right-zone a.right-zone div a规则。

+0

如果提问者不熟悉CSS特异性规则,我建议阅读Eric Meyer的文章:http://meyerweb.com/eric/css/link-specificity。html快速总结一下#id> .class || :psuedo-class || [attribute]>标签 – RussellUresti 2010-08-18 14:58:18

它是级联的。所以较低的规则优先。

// this would work as desired... 
.right-zone a { color: #ff0000; } 
.right-zone .navigation-module a { color: #0000ff; } 

可选地,您可以使用重要来覆盖优先顺序。

.right-zone a { color: #ff0000; } 
.navigation-module a { color: #0000ff !important; } 

希望它有帮助!

这也与所谓的CSS特异性有关(就像弗兰基曾经谈到过的那样)。见CSS-Tricks on Specificity

基本上是:

[any selector] .navigation-module a { color: #0000ff; } 

将使其更 “具体”,因此覆盖其他样式。还要注意的是,具有相同特征的最后一个定义会胜出。