规则优先有很多问题和答案。这里的问题是浏览器在相同规则中执行CSS属性。
直观地说,我一直认为规则的属性是由浏览器按顺序运行的。
例如,
#somediv {
margin:0;
margin-bottom:10px;
}
在我使用的浏览器中呈现为margin:0 0 10px 0;
(而且从不margin:0;
)(基本上是最近的Chrome,FF和Safari)。这意味着第二个属性margin-bottom
会覆盖先前的margin
属性(将所有边距设置为0
)。
但我可以在所有浏览器(IE,我看着你)中认为这是始终是真的吗?
答案 0 :(得分:5)
是的,这是预期的行为,也是CSS中cascade的一部分。您只是使用单个margin
值覆盖margin-bottom
简写的其中一个组件。
请注意,不完全删除整个margin
速记声明!请记住,您上面的速记可以重写为:
margin: 0 0 0 0;
或者这个:
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
因此margin-bottom: 10px
会覆盖上面的margin-bottom
。
另请注意,IE6及更早版本不会优先考虑同一规则中的!important
声明(但它会在不同的规则中遵守它们)。但是,由于这是一个古老的浏览器,说实话并不是很重要。这个基本规则定义明确且不变for more than 15 years,因此浏览器有足够的时间正确实现它,没有任何借口可以捏造它,包括IE。
答案 1 :(得分:3)
是的,根据w3c specification,这是正确的行为:
如果两个声明具有相同的权重...后者指定胜利
在您的示例中,margin-bottom
将设置为10px。
渲染引擎实际上并不关心相同特性的属性值来自何处(它们可能在您的示例中设置在相同规则内,或者在具有相同选择器或不同选择器的两个规则内)。如果两个声明具有相同的计算权重,则后者获胜:
<style>
.container span {color:red;}
.content span {color:blue;}
div .inner {color:green;}
p a {color:orange;}
</style>
<div class="container">
<p class="content">
<a href="#" class="button"><span class="inner">Hello world!</span></a>
</p>
<div>
文字呈现的颜色是什么?前三个规则具有相同的特异性,因此“Hello world!”将以绿色呈现。但是,使用速记属性会变得更加棘手!
答案 2 :(得分:2)
是的,如果您声明两个相同的属性但价值不同于浏览器将获取该属性的最后声明的值
因此,例如,如果您使用此
div {
background-color: #ff0000; /*Red*/
background-color: #00ff00; /*Green*/
}
浏览器将选择绿色,因为它是最后声明的
答案 3 :(得分:1)
是.. css属性按照在所有浏览器中加载的顺序被覆盖
答案 4 :(得分:1)