是否只有第一个直接孩子的CSS选择器?

Jer*_*emy 292 html css css-selectors

我有以下HTML

<div class="section">
   <div>header</div>
   <div>
          contents
          <div>sub contents 1</div>              
          <div>sub contents 2</div>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

以下风格:

DIV.section DIV:first-child 
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

由于某些原因,我不明白风格是应用于"子内容1" <div>以及"标题" <div>.

我认为样式上的选择器只适用于具有名为"section"的类的div的第一个直接子节点.如何更改选择器以获得我想要的?

Mat*_*chu 488

你在字面上发布的意思是"查找div中的任何div,并且是他们父母的第一个孩子." 子包含一个与该描述匹配的标记.

我不清楚你是否想要主要div的两个孩子.如果是这样,请使用:

div.section > div
Run Code Online (Sandbox Code Playgroud)

如果您只想要标题,请使用:

div.section > div:first-child
Run Code Online (Sandbox Code Playgroud)

使用>更改描述:"查找任何div是div节的直接后代",这是你想要的.

请注意,除IE6外,所有主流浏览器都支持此方法.如果IE6支持是关键任务,则必须向子div添加类并使用它.否则,不值得关心.

  • :在这种情况下,不需要第一个孩子. (6认同)
  • 似乎OP并不是在问这个规则被应用于所有子div的原因. (3认同)
  • 啊,这个年龄段足以让人记住"直接后代"选择器可以解决你所有问题而你无法使用它的乐趣,因为_it在IE_中不起作用.随后会产生很多不必要的挫败感. (3认同)
  • 它也适用于第一个孩子的第一个孩子。如果确实需要仅对第一个孩子应用更改,我们必须取消对孩子的孩子的更改。像这样的东西: `div.section &gt; div:first-child &gt; div { /* 取消更改*/}` (2认同)

Dou*_*ner 41

CSS称为层叠样式表,因为规则是继承的.使用下面的选择,只选择父母的直接孩子,但它的规则将被继承div的孩子divs:

div.section > div { color: red }
Run Code Online (Sandbox Code Playgroud)

现在,这个div 它的孩子都会red.如果您不希望它继承,您需要取消在父级上设置的任何内容:

div.section > div { color: red }
div.section > div div { color: black }
Run Code Online (Sandbox Code Playgroud)

现在只有那个div直接的孩子div.section才会是红色的,但它的孩子divs仍然是黑色的.


Tom*_*len 40

在Google上搜索此问题.这将返回带有类的元素的第一个子元素container,而不管子元素的类型.

.container > *:first-child
{
}
Run Code Online (Sandbox Code Playgroud)

  • 这里不需要星号。`.container &gt; :first-child` 也能正常工作 (14认同)

Mat*_*ins 16

在您的情况下,直接第一个孩子的 CSS 选择器是:

.section > :first-child
Run Code Online (Sandbox Code Playgroud)

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

正如其他人所建议的那样,在 : 之前不需要星号。您可以通过添加标签来修改此解决方案来加速 DOM 搜索:

div.section > :first-child
Run Code Online (Sandbox Code Playgroud)


Яeg*_*ght 6

使用div.section > div.

更好的是,<h1>在标题和div.section h1CSS中使用标记,以便支持旧浏览器(不了解>)保持标记语义.


Ric*_*cht 6

不完全是所问的问题,但可能有用:

div.section > :first-child:is(div)
Run Code Online (Sandbox Code Playgroud)

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

匹配:

<div class="section">
  <div>MATCH</div>
  <div>NO MATCH</div>
  <div>
     <div>NO MATCH</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

没有匹配:

<div class="section">
  <img ... >
  <div>NO MATCH</div>
  <div>NO MATCH</div>
  <div>
     <div>NO MATCH</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)