CSS:不使用:不仅要排除div,还要排除其中的所有div?

时间:2013-07-02 21:53:29

标签: css css3

我想使用not:所以它将排除div2元素中的所有p元素。 这是html文件:

<body>
    <p> not in any div </p>
    <div id="div1">
        <p> div1 text1</p>
        <div>
            <p> div2 inner text2</p>
            <div>
                <p> div1 innermost text3</p>
                <p> div1 innermost text4</p>    
            </div>
        </div>
    </div> 

    <div id="div2">
        <p> div2 text1</p>
        <div>
            <p> div2 inner text2</p>
            <div>
                <p> div2 innermost text3</p>
                <p> div2 innermost text4</p>    
            </div>
        </div>
    </div>

    <div id="div3">
        <p> div3 text1</p>
        <div>
            <p> div3 inner text2</p>
            <div>
                <p> div3 innermost text3</p>
                <p> div3 innermost text4</p>    
            </div>
        </div>
    </div>
</body>

这是我使用的CSS文件,(显然)它运行不正常:

div:not(#div2) p{
    color:green;
}

这只将p元素排除在:“div2 text1”,但不包括div2中的其他三个:

我相信这是因为“not:”只排除了div2 div而不是其中的两个div。

如何更改“:not”中的上下文,这样它不仅包括div2 div,还包括div2中的所有div?

使用jQuery可以轻松实现我想要做的事情:

$('div p').not('#div2 p');

总结一下: 如何更改此css行:

div:not(#div2) p{

那么它会像jQuery那样做(选择)吗?或换句话说:

选择div中的所有p元素,除非它是div2。换句话说:

选择包含单词div1或div3的所有p元素(但不使用此信息)

1 个答案:

答案 0 :(得分:5)

您是否尝试过子选择器?

body > div:not(#div2)
{
    color:orange
}

这将仅定位作为正文后代的div。小提琴:

http://jsfiddle.net/Xk5rb/