在HTML标题中,我有这个:
<head>
<title>Title</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
styles.css
是我的页面专用表。 master.css
是我在每个项目中使用的工作表,用于覆盖浏览器默认值。哪些样式表优先考虑?
示例:第一张表包含特定的
body { margin:10px; }
和相关的边框,但第二个包含我的重置
html, body:not(input="button") {
margin: 0px;
padding: 0px;
border: 0px;
}
从本质上讲,CSS的级联元素在样式表引用方面是否与在典型的CSS函数中一样?这意味着最后一行是显示的那一行吗?
答案 0 :(得分:146)
CSS规则级联的规则很复杂 - 而不是试图严厉地解释它们,我只是简单地引用您的规范:
http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade
简而言之:更具体的规则会覆盖更一般的规则。根据涉及的ID,类和元素名称的数量以及是否使用!important
声明来定义特异性。当存在具有相同“特异性水平”的多个规则时,无论哪个出现最后获胜。
答案 1 :(得分:27)
应用最具体的风格:
div#foo {
color: blue; /* This one is applied to <div id="foo"></div> */
}
div {
color: red;
}
如果所有选择器具有相同的特异性,则使用最近的去除:
div {
color: red;
}
div {
color: blue; /* This one is applied to <div id="foo"></div> */
}
在您的情况下,body:not([input="button"])
更具体,因此使用其样式。
答案 2 :(得分:23)
订单确实很重要。将采用最后声明的多次出现的值。请参阅我制定的同一个:http://jsfiddle.net/Wtk67/
<div class="test">Hello World!!</div>
<style>
.test{
color:blue;
}
.test{
color:red;
}
</style>
如果你改变.test{}
的顺序,那么你可以看到HTML取值在CSS中声明的最后一个
答案 3 :(得分:15)
最后加载的CSS是THE MASTER,它将覆盖具有相同css设置的所有css
示例:
<head>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<link rel="stylesheet" type="text/css" href="css/master.css">
</head>
reset.css
h1 {
font-size: 20px;
}
master.css
h1 {
font-size: 30px;
}
h1标签的输出为font-size:30px;
答案 4 :(得分:7)
让我们尝试用一个例子来简化级联规则。这些规则对一般情况更为具体。
这是css和html代码;
<style>
h2{
color:darkblue;
}
#important{
color:darkgreen;
}
.headline {
color:red;
}
article {
color:black;
font-style:italic;
}
aside h2 {
font-style:italic;
color:darkorange;
}
article h2 {
font-style: normal;
color: purple;
}
</style>
这是css风格
<body>
<section>
<div>
<h2>Houston Chronicle News</h2>
<article>
<h2 class="headline" id="important">Latest Developments in your city</h2>
<aside>
<h2>Houston Local Advertisement Section</h2>
</aside>
</article>
</div>
<p>Next section</p>
</section>
结果如下。无论样式文件的顺序还是样式声明,id="important"
都适用于最后(注意最后声明的class="deadline"
但不起任何作用)。
<article>
元素包含<aside>
元素,但最后声明的样式将生效,在本例中为article h2 { .. }
第三个h2元素。
以下是关于IE11的结果:(没有足够的权利发布图片)DarkBlue:休斯敦纪事报新闻,DarkGreen:您所在城市的最新动态,紫色:休斯顿当地广告部分,黑色:下一部分
答案 5 :(得分:6)
这取决于加载顺序和应用于每种样式的实际规则的特殊性。根据您的问题的上下文,您希望首先加载常规重置,然后是特定页面。然后,如果你仍然没有看到预期的效果,你需要调查所涉及的选择者的特殊性,正如其他人已经指出的那样。
答案 6 :(得分:1)
是的,它的工作原理与它们在一张纸上相同,但是:
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
在上面的代码中,无法保证在master.css
之后加载styles.css
。因此,如果master.css
被快速加载,styles.css
需要一段时间,styles.css
将成为第二个样式表,并且master.css
中具有相同特异性的任何规则都将被覆盖。
最好在部署之前将所有规则放入一张(并缩小)。
答案 7 :(得分:0)
最好的方法是尽可能多地使用课程。无论如何,请避免使用ID选择器(#)。当您使用单个类编写选择器时,CSS继承更容易遵循。
更新:在本文中了解有关CSS特异性的更多信息:https://css-tricks.com/specifics-on-css-specificity/
答案 8 :(得分:0)
我怀疑你的问题是你有重复的选择,主设备,适用于所有页面,以及你希望覆盖每个页面的主值的更具体的设置。如果是这种情况,那么您的订单是正确的。首先加载主文件,后续文件中的规则优先(如果它们相同或具有相同的权重)。这个网站上有一个强烈推荐的所有规则描述http://vanseodesign.com/css/css-specificity-inheritance-cascaade/当我开始进行前端开发时,这个页面清理了很多问题。
答案 9 :(得分:0)
级联 定义了声明的优先级。我可以推荐官方规格;这部分的内容很好理解。
https://www.w3.org/TR/css-cascade-3/#cascading
以下内容按优先级从高到低的顺序排序。
来源和重要性的组合:
Transition
声明!important
的用户代理声明!important
的用户声明!important
style
属性的元素上的定义Animation
声明style
属性的元素上的定义如果两个声明的来源和重要性相同,则specifity,(即元素定义的明确程度)开始起作用,计算得分。
#x34y
)得100点.level
)得10分li
)1点:hover
除外,:not
都得1分例如,选择器main li + .red.red:not(:active) p > *
的专一性为24。
出现顺序仅在两个定义具有相同的起源,重要性和特异性的情况下才起作用。以后的定义在文档中的前面的定义之前(包括导入)。
答案 10 :(得分:0)
我相信执行代码时,它是从上到下阅读的,这意味着最后的CSS链接将覆盖其上方任何样式表中的相似样式。
例如,如果您创建了两个样式表
<link rel="stylesheet" href="style1.css">
<link rel="stylesheet" href="style2.css">
在这两种方法中,您都将主体背景色设置为两种不同的颜色-style2.css中的主体颜色优先。
您可以通过在想要优先处理的类样式内使用!IMPORTANT
或重新安排<link>
顺序来避免样式优先权问题。