【问题标题】:Is there a CSS selector for the first direct child only?是否只有第一个直接子级的 CSS 选择器?
【发布时间】:2011-01-06 20:39:59
【问题描述】:

我有以下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 
{
  ...
}

由于某种原因,我不明白该样式被应用于 "sub contents 1" &lt;div&gt; 以及 "header" @987654325 @。

我认为样式上的选择器仅适用于具有名为“section”的类的 div 的第一个直接子级。如何更改选择器以获得我想要的?

【问题讨论】:

标签: html css css-selectors


【解决方案1】:

您发布的字面意思是“查找位于部分 div 内并且是其父级的第一个子级的任何 div。” sub 包含一个与该描述匹配的标签。

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

div.section > div

如果你只想要标题,使用这个:

div.section > div:first-child

使用&gt; 将描述更改为:“查找作为部分 div 的直接后代的任何 div”,这正是您想要的。

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

【讨论】:

  • :first-child 不是必需的,在这种情况下。
  • 似乎 OP 并没有询问选择器,而是询问为什么将规则应用于所有子 div。
  • 我的解释是他得到了CSS继承的概念,并认为first-child会有>的效果。它的措辞相当不清楚。
  • 啊,长大到可以记住“直接后代”选择器何时可以解决您所有问题但您无法使用它的乐趣,因为 它在 IE 中不起作用我>。很多不必要的挫败感随之而来。
  • 它也适用于第一个孩子的第一个孩子。如果真的需要仅对第一个孩子应用更改,我们必须取消对孩子的孩子的更改。像这样的东西:div.section &gt; div:first-child &gt; div { /* Cancel Changes*/}
【解决方案2】:

在 Google 上搜索找到了这个问题。这将返回类为 container 的元素的第一个子元素,无论子元素是什么类型。

.container > *:first-child
{
}

【讨论】:

  • 这里不需要星号。 .container &gt; :first-child 也能正常工作
【解决方案3】:

CSS 被称为层叠样式表,因为规则是继承的。使用以下选择器,仅选择父级的直接子级,但其规则将由div 的子级divs继承

div.section > div { color: red }

现在,div 它的孩子都将是red。如果您不想继承父项,则需要取消您在父项上设置的任何内容:

div.section > div { color: red }
div.section > div div { color: black }

现在只有div.section 的直接子代div 是红色的,但它的子代divs 仍然是黑色的。

【讨论】:

    【解决方案4】:

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

    .section > :first-child
    

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

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

    div.section > :first-child
    

    【讨论】:

      【解决方案5】:
      div.section > div
      

      【讨论】:

        【解决方案6】:

        使用div.section &gt; div

        更好的是,在您的 CSS 中使用 &lt;h1&gt; 标签作为标题并使用 div.section h1,以支持旧版浏览器(不知道 &gt;并且你的标记语义。

        【讨论】:

        • 好主意,可惜我还需要支持IE6,如果我使用h1,我需要设置font-size来继承,以便字体与body的字体匹配,而ie7及以下不要不支持继承。啊!
        • 另外,我有子 div 并且将子 div 放在 h1 中违反了规则,即使 IE 呈现它,我也不确定其他浏览器会做什么
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        • 2022-12-20
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多