【问题标题】::first-child targeting all child elements:first-child 针对所有子元素
【发布时间】:2012-12-12 10:26:08
【问题描述】:

我有一个 ID 为“导航”的无序列表和一些子列表项元素。

我正在尝试使用:first-child 仅选择第一个项目,但它将我使用的 CSS 应用于所有其他列表项。

ul#navigation li:first-child{
    background:#fff;
}

所以,重申一下:这是给每个列表项一个白色背景。我只想选择第一个元素。出了什么问题?

【问题讨论】:

  • 对我来说很好用:jsfiddle.net/HyKFJ。发布您的 HTML。
  • 我正要这样做,但意识到我用链接包围了每个列表项。我想保持这种方式,因为我希望整个 li 成为一个链接,但这会导致这个问题。
  • @MarkLyons 不要用链接包围你的li;而是将链接display 属性设置为block
  • 我使用ul a:first-child li 作为选择器实现了这一点,但在这种情况下将链接设为display:block 是最佳做法吗?
  • @MarkLyons 会的;不要将列表项包装在锚点中。

标签: css css-selectors


【解决方案1】:

根据 cmets,您的问题是您的标记看起来像这样:

<ul id="navigation">
    <a href="http://google.com">
        <li>Google</li>
    </a>
</ul>

请注意在此模型下每个li 将如何成为:first-child。我建议您使用更合适的结构,将锚点嵌套在列表项中。如果您希望锚点填满列表项,请将其显示设置为阻止:

<ul id="navigation">
    <li><a href="http://google.com">Google</a></li>
</ul>

使用随附的 CSS:

#navigation a { display: block }

一旦你完成了这些结构上的改变,你的选择器应该定位到第一个列表项:

/* > to target only immediate list items */
#navigation > li:first-child {
    background: red;
}

【讨论】:

  • 这行得通,但在链接中添加display:block 并不能使其在整个div 区域中生效。
  • @MarkLyons 列表项上的填充/边距可能会妨碍您追求的美感。你能把你的页面放到网上,或者在jsfiddle.net做一个演示吗?
  • 是的,li 有一个顶部和底部填充。我将width:100% 添加到链接并将填充移动到链接样式。很好,谢谢!
  • @MarkLyons 如果您已经设置了display: block,则不必在锚上设置width: 100%,除非您已经为锚开始声明了先前的宽度。
  • 我有列表项的宽度,但没有链接。
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2022-01-22
  • 2013-02-01
相关资源
最近更新 更多