不匹配常规同级的CSS规则

不匹配常规同级的CSS规则,css,css-selectors,siblings,Css,Css Selectors,Siblings,如果我只想在存在p同级元素时设置div元素的样式,我可以编写以下CSS规则: p ~ div 当没有匹配的同级元素时,是否有CSS规则来设置元素的样式 例如: p !~ div 如果:not()允许使用组合符,您只需执行div:not(p~div)。但事实并非如此,因此您将无法以这种方式使用:not() 您需要的选择器将取决于您的结构。在您的情况下,如果没有p导致第一个div成为部分的第一个子项,您可以使用div:first child确保您选择div的条件满足: div:first-

如果我只想在存在
p
同级元素时设置
div
元素的样式,我可以编写以下CSS规则:

p ~ div
没有匹配的同级元素时,是否有CSS规则来设置元素的样式

例如:

p !~ div


如果
:not()
允许使用组合符,您只需执行
div:not(p~div)
。但事实并非如此,因此您将无法以这种方式使用
:not()

您需要的选择器将取决于您的结构。在您的情况下,如果没有
p
导致第一个
div
成为
部分的第一个子项,您可以使用
div:first child
确保您选择
div
的条件满足:

div:first-child, div:first-child ~ div

如果您的结构不允许构造这样的选择器,那么您将不得不依赖Danield建议的覆盖规则。

只需将id/class赋予div并编写其相应的CSS simple即可。

反过来如何:

当没有
元素时,根据需要的方式为所有div设置样式

然后在存在
元素时重写该样式

section div
{
    color: green;
}

section p ~ div
{
    color: black;
}

+1谢谢,我已经考虑过了,但我不想让非CSS3浏览器为每个元素都显示
绿色的
。@Curt:
~
得到了非常好的支持-IE7这样做可能不会在您的布局中出现模糊的bug。正如您可能已经猜到的,没有这样的组合器,但这在纸上听起来确实很有趣。不确定它在实践中会如何工作。选择器4通过允许组合符出现在
:not()
中使之成为可能,但正如我在回答中提到的,还有快速和完整配置文件的问题,使其在CSS中无法使用。谢谢,您检测
div:first child
的解决方案将在我的情况下起作用,因为
p
部分
中唯一存在的其他元素,如果存在,则始终是第一个元素。然而,未来的开发可能会打破这一规则,因此很遗憾,没有办法合并
:not()
,但至少可以避免使用javascript!
section div
{
    color: green;
}

section p ~ div
{
    color: black;
}