如何在CSS(使用属性)中选择不是另一个元素的后代的元素

时间:2011-12-15 14:02:52

标签: javascript css css-selectors

重读CSS2.1和CSS3选择器规格后我怀疑这是不可能的,但你永远不知道。

如果我可以选择一个p元素,那么使用CSS后代选择器就是其他p元素的后代:

p p {};

有没有办法否定后代选择器,仍然选择类型,所以我可以选择p元素,除了那些是其他p元素的后代......

p & ( p ! p ) {...};

即。我想选择p类型的元素,但是如果它们偏离p。

类型的其他元素则不是

BTW:我在querySelector()和querySelectorAll()中使用它,其中每个都是由属性而非标签类型选择的,但我想展示最简单的例子......

我尝试了这个没有成功(语法错误!)

p:not(p p) {......}

3 个答案:

答案 0 :(得分:3)

*:not(h1) p {
  ...
}

这称为negation pseudo-class,您可以找到有关它的更多信息here

顺便说一句,它是CSS3,所以你不能在8之前的IE版本中使用它。

答案 1 :(得分:3)

你怀疑是正确的,这是不可能的。 :not(s)指定s必须是简单选择器

您可以做的最近的事情是将样式应用于所有p,然后将其覆盖为p p

答案 2 :(得分:1)

虽然:not(...)选择器只是CSS3,但我通常使用它来兼容CSS2:

p { color: #abc; border: ... ; ... }
h1 > p { color: inherit; border: inherit; ... }

如果你的<p>有一个共同的祖先,即你的html看起来像这样:

<body>
    <p> ... </p>
    <p>
        <p> ... </p>
        <p> ... </p>
    </p>
</body>

您可以使用“直接子”选择器:

body > p { ... }

或者,当然,使用以下内容重置所有属性:

p p { color: inherit; background: inherit; ... }

也可以。