请问,CSS能够实现这个吗?
如果 .div1 不存在,则应用此规则:
.div2{
property: value;
}
像
<div class="div1">
...
</div>
<div class="div2">
<!-- it exists, so do nothing -->
</div>
并且
<div class="div2">
<!-- it doesn't exist, apply the css -->
</div>
请问,CSS能够实现这个吗?
如果 .div1 不存在,则应用此规则:
.div2{
property: value;
}
像
<div class="div1">
...
</div>
<div class="div2">
<!-- it exists, so do nothing -->
</div>
并且
<div class="div2">
<!-- it doesn't exist, apply the css -->
</div>
存在还是不存在?你的问题让我感到困惑 :)
如果.div1
存在,则将样式应用于.div2
:
选项1:.div2
紧跟在.div1
后面
.div1 + .div2 {
property: value;
}
选项二: .div2
作为兄弟元素跟随在 .div1
后面:
.div1 ~ .div2 {
property: value;
}
样式化 .div2
,但不包含 .div1
:
这有点像一个hack,但你可以反过来做。首先样式化 .div2
,然后使用上面的选择器覆盖样式。
如果不存在 .div1
,.div2
就会得到正常的样式。
.div2 {
background: #fff;
}
.div1 + .div2 {
background: #f00; /* override */
}
/* or */
.div1 ~ .div2 {
background: #f00; /* override */
}
如果你知道 div 的“未渲染”样式,你可以使用 CSS 兄弟选择器来根据其是否跟在 .div1 后面来为其设置样式,如果是则设置一种方式,否则设置为“普通”样式 - 即:
.div2 {
/* styled however you want */
}
.div1 + .div2 {
/* 'plain' styling */
}
查看fiddle。尝试删除div1,看看div2在没有div1的情况下样式如何。
.div1 {
color: red;
}
.div2 {
color: blue;
}
.div1 ~ .div2 {
color: black;
}
仅仅使用CSS是不可能检查元素是否可用的if
条件的。你应该使用JavaScript(推荐使用jQuery)。
注意:使用CSS可以检查某些元素的条件,比如检查一个元素是否具有属性(比如input[type=text]
),或者检查一个元素是否是列表中的第一个元素(比如p:first-child
)等等。但是你无法检查元素的兄弟元素或祖先元素的任何内容。同时,大多数情况下你也无法检查否定条件。