声明中有两个CSS语句但序列顺序不同。
.wrap {
background-color: rgba(255, 255, 255, 0.4);
min-height:600px;
background: url('/images/bg.jpg');
background-size: cover;
max-width: 100%;
}
和
.wrap {
background: url('/images/bg.jpg');
background-size: cover;
max-width: 100%;
background-color: rgba(255, 255, 255, 0.4);
min-height:600px;
}
区别在于background: url()
和background-color
之间元素的顺序,如果在background: url()
之后声明background-color
并且没有图像可以加载,然后background-color
无法生效。似乎background: url()
覆盖了background-color
。
演示可以从http://jsfiddle.net/yckelvin/ctgc8xzL/
找到CSS语法中是否有关于声明中元素序列顺序的定义?我读过w3schools.com但没有这样的信息。
答案 0 :(得分:3)
使用快捷方式background
属性时,任何未指定的背景属性(例如background-color
)都将设置为初始默认值。
因此,如果在background
之后声明background-color
属性而未指定
一种颜色,然后背景颜色采用transparent
的初始值。
这是CSS规范的一部分:
答案 1 :(得分:0)
background
只是多个属性的简写
body {
background: #ffffff url("img_tree.png") no-repeat right top;
}
你想要的是设置
background-image: url()
分开。或者只使用合并后的所有值。
答案 2 :(得分:0)
CSS是级联样式表的缩写(强调我的)。这意味着稍后列出的选择器和属性将覆盖之前的选择器/属性。
想想看,好像有人告诉你“向左走,然后向右走。等等;没关系。走吧,然后再走吧”。您将遵循第二组指令,而不是第一组指令。 CSS以同样的方式工作。
所以使用以下CSS:
div {
color: green;
color: red;
}
color: red;
将被应用,而color: green;
将被覆盖。
通常,无要求以某种方式订购某些属性;你可以在width
之前加height
,反之亦然,你可以在background: url()
之后加background-color
。没什么大不了; CSS将以相同的方式应用。
稍微不同的是,有些选择器需要特定的排序。也就是说,a:link, a:visited, a:hover, a:active
应该按顺序排列,以避免特殊问题。
答案 3 :(得分:0)
CSS的cascading rules指定其他条件相同,后两个冲突的声明获胜。其他事情是平等的,因为background
和background-color
的声明出现在同一规则中,因此它们具有相同的状态(相同的来源,相同的重要性,相同的特异性)。
声明存在冲突,因为它们都设置了背景颜色。原因是background
速记属性始终设置所有背景属性。使用速记时未指定背景颜色时,会将其设置为初始值transparent
(当它生效时,表示封闭元素的背景通过)。
因此,尽管代码的第一个版本也是有效的,但在background-color
声明不能产生任何影响的意义上它毫无意义。第二个版本首先设置所有背景属性,然后使用另一个声明覆盖背景颜色。这是一种可能的编码风格,虽然有些人可能会说这不是好风格。
如果使用特定的background-image
属性而不是速记设置背景图像,则不会出现此问题。 (如果图像填满整个元素区域,背景图像可能会导致看不到背景颜色,但这是一个不同的问题。)