Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSS:not()选择器指定上一个元素_Css_Css Selectors - Fatal编程技术网

CSS:not()选择器指定上一个元素

CSS:not()选择器指定上一个元素,css,css-selectors,Css,Css Selectors,这是一个非常简单的问题,我无法完全理解 我有一系列这样的div: <h1>Heading 1</h1> <h2>Heading 2</h2> <p>Paragraph text</p> <h2>Heading 3</h2> <p>Paragraph text</p> 但这似乎不起作用。我是否犯了某种愚蠢的语法错误,或者这是不可能的?CSSnot伪选择器不允许使用复杂的

这是一个非常简单的问题,我无法完全理解

我有一系列这样的div:

<h1>Heading 1</h1>

<h2>Heading 2</h2>

<p>Paragraph text</p>

<h2>Heading 3</h2>

<p>Paragraph text</p>

但这似乎不起作用。我是否犯了某种愚蠢的语法错误,或者这是不可能的?

CSS
not
伪选择器不允许使用复杂的选择器。你对此无能为力

要获得所需的功能,您必须覆盖它:

#文本h2{
边缘顶端:3em;
}
#文本h1+h2{
边际上限:0;
}

CSS
伪选择器不允许使用复杂选择器。你对此无能为力

要获得所需的功能,您必须覆盖它:

#文本h2{
边缘顶端:3em;
}
#文本h1+h2{
边际上限:0;
}
同样,CSS
:not()
选择器不允许在其内部使用组合符,因此实际上,这是一个语法错误

在这种情况下,由于
+
组合器的工作方式,您应该能够简单地将
+h2
移出
:not()
并移除其前面的
h2
,如下所示:

#文本:非(h1)+h2{
边缘顶端:3em;
}
如果
h2
将永远是第一个子项(鉴于您的示例,它不应该是),并且您希望匹配该子项,则需要稍微扩展选择器:

#文本h2:第一个孩子,#文本:非(h1)+h2{
边缘顶端:3em;
}
但是,如果这两种方法中的任何一种都失败,您可以始终使用好的ol'覆盖。

因为CSS
:not()
选择器不允许在其内部使用组合符,所以确实是语法错误

在这种情况下,由于
+
组合器的工作方式,您应该能够简单地将
+h2
移出
:not()
并移除其前面的
h2
,如下所示:

#文本:非(h1)+h2{
边缘顶端:3em;
}
如果
h2
将永远是第一个子项(鉴于您的示例,它不应该是),并且您希望匹配该子项,则需要稍微扩展选择器:

#文本h2:第一个孩子,#文本:非(h1)+h2{
边缘顶端:3em;
}

但是,如果这两种方法中的任何一种都失败,您可以始终使用良好的ol'覆盖。

Ah ok。是的,这就是我目前所做的,我认为一个更优雅的解决方案是把它压缩成1个规则而不是2个,但我猜这是不可能的。啊,好的。是的,这就是我目前所做的,我认为一个更优雅的解决方案是将它压缩成1条规则而不是2条规则,但我猜这是不可能做到的。@Joseph Silber:这没有必要。这是一个很好的选择!:)@约瑟夫·西尔伯:我应该在我所有的答案中强调这一点,因为我对突出显示的工作方式也不满意。谢谢你的提醒。@Jascination:很高兴我帮了你。如果你还没有看到我对你上一个问题的回答,你可能想看看:)@Joseph Silber:没必要。这是一个很好的选择!:)@约瑟夫·西尔伯:我应该在我所有的答案中强调这一点,因为我对突出显示的工作方式也不满意。谢谢你的提醒。@Jascination:很高兴我帮了你。如果您还没有看到我对上一个问题的回答,您可能想看看:)
#text h2:not(h1+h2){
    margin-top:3em;
}