我有以下html

<div class="section">
   <div>header</div>
   <div>
          contents
          <div>sub contents 1</div>              
          <div>sub contents 2</div>
   </div>
</div>

以及下面的风格:

DIV.section DIV:first-child 
{
  ...
}

出于某种原因,我不理解的风格被应用到“子内容1”<div>以及“标题”<div>。

我认为样式上的选择器只会应用于带有“section”类的div的第一个直接子元素。我如何改变选择器来得到我想要的?


当前回答

在你的例子中,直接第一个子元素的CSS选择器是:

.section > :first-child

直接选择器是>,第一个子选择器是:first-child

不需要像其他人建议的那样在:前面加星号。你可以通过修改这个解决方案来加速DOM搜索:

div.section > :first-child

其他回答

使用div.section > div。

更好的是,在CSS中为标题和div.section h1使用一个<h1>标记,以便支持旧的浏览器(不知道>)并保持标记语义。

在谷歌上搜索到这个问题。这将返回具有类容器的元素的第一个子元素,而不管该子元素是什么类型。

.container > *:first-child
{
}
div.section > div

不完全是这个问题,但可能有用:

div.section > :first-child:is(div)

这将只匹配.section的第一个子元素,并且仅当它是div时。

匹配:

<div class="section">
  <div>MATCH</div>
  <div>NO MATCH</div>
  <div>
     <div>NO MATCH</div>
  </div>
</div>

不匹配:

<div class="section">
  <img ... >
  <div>NO MATCH</div>
  <div>NO MATCH</div>
  <div>
     <div>NO MATCH</div>
  </div>
</div>

这就是我如何解决使用TailwindCSS (v3.1)与任意变量。 我只希望在表的第一列下划线徘徊时,因为它是一个链接。

[&>:first-child]:hover:underline