优先

2016-04-03 82 views
1

我看到:优先

他们都好像说的是,对于相同的选择发生多次,最后一个胜。但是,这不是我所遇到的。因此,考虑到 “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,而不是最后一个,红色。见Precedence of CSS rules Sample 2。体色是水族但Aqua.css是Red.css之前。所有我找到的答案说,车身颜色将是红色。

每当我有多个链接到CSS样式表和它们之间唯一的区别是什么颜色(元素或类或其他),则使用第一样式表,而不是最后,但似乎不是我读过的每一样东西都应该发生。我曾尝试Edge,Chrome和IE;我注意到他们之间没有相关的区别。

所以,我有以下两个问题:

  • 我是正确,我看到的行为(第一个链接标签被用来代替过去的)是从其他的答案有什么不同?
  • 如果是这样的话,为什么?

我很抱歉如果我应该发布了其他线程之一的答案,但我认为创建一个新问题更为清晰。

的原因,我问的是,我想创建一个动态的系统样式这么理解的优先级是更重要的,它是不那么有效,只是试一下,看比在正常情况下,是什么在起作用。我将试图解释规范,但到已经在其他的答案的程度,我想了解什么已经在其他线程这里提供。

+1

我相信答案是,不能保证哪个样式表将首先被加载,并且以什么顺序设置主体属性。这就是为什么你不应该这样做。 – Rob

+3

@Rob,“不能保证哪个样式表会先加载”,加载顺序与它无关。 *只要所有样式表都加载了*,DOM排序就会严格定义将应用哪些样式。没有涉及模糊逻辑或猜测。 – zzzzBov

+0

@zzzzBov我不太确定,我想回忆一下我前段时间阅读过的关于不能保证首先应用什么的文章。如果您有两个外部样式表,其中包含与此问题中相同元素的相同CSS属性,并且第二个样式表在第一个样式表应用之前完成下载?如果我可以肯定地回忆,我会做出这个答案,但我现在没有时间去尝试找到它。我所想的可能不适用于此,但这是可以研究的。 – Rob

回答

4

声明:我以前的答案和思路是完全错误的,所以我删除了它,并将其作为替代品发布,以免与前面任何讨论混淆。

当您给<link>元素title属性时,您将其定义为备用样式表集。

<link rel="stylesheet" type="text/css" href="Aqua.css" title="Aqua"/> 
                 ^^^^^^^^^^^^ 
<link rel="stylesheet" type="text/css" href="Red.css" title="Red"/> 
                 ^^^^^^^^^^^ 

样式的优先级是一个红色的鲱鱼。Red.css样式根本不会被应用,因为该样式表集当前未处于活动状态。

Per the spec

此外,title属性有这个元素的特殊语义:链接的标题;替代样式表集名称。

另外值得一读:"CSS: alternative style sheets"

的文件并不需要有一个单一的样式表。您可以给它一个默认样式和任意数量的替代品供读者选择。例如,该页面可以替代所有的W3C Core Style,以及Web上其他地方的两个样式表(作者:David Baron)。

读者如何选择替代品取决于浏览器。并不是所有的浏览器都提供了一个菜单,但很多都可以。例如,在Opera,Internet Explorer和Firefox中,您可以在“查看”菜单下找到样式。从2012年起,Chrome需要扩展程序(例如Decklin Foster的Style Chooser)。

应该定义替代样式表时使用rel="alternative stylesheet",但是这似乎是在浏览器的预期行为的情况。删除title属性和<link>元素返回到规范中定义的标准行为。

+0

谢谢。你的错误被原谅了,错误发生了。请理解它是多么的令人沮丧,才能知道发生了什么,而其他人忽视了我所看到的。我希望你明白我的意思。另外,CSS似乎不必要的复杂。我不明白你在这里说的大部分内容(我会继续学习),但重要的是标题是“问题”。现在我知道title属性比一些人意识到的更重要,我希望这也能帮助其他人。 – user34660