将 CSS 应用于除最后一个元素之外的所有元素?

新手上路,请多包涵

我有以下 html:

 <ul class="menu">
  <li><a>list item 1</a></li>
  <li><a>list item 2</a></li>
  ...
  <li><a>list item 5</a></li>
</ul>

我想对除最后一个元素之外的所有 <a> 元素应用边框。

我一直在尝试这个:

 .menu a {
  border-right: 1px dotted #ccc;
}
.menu a:last-of-type {
  border-right: none;
}

但我最终没有在任何元素上添加边框,我猜是因为 <a> 在每种情况下都是最后一个类型。

我怎样才能做到这一点?如果可能,我宁愿只使用 CSS,如果可能,我希望与 IE9 兼容。

原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 434
2 个回答

改变:

 .menu a:last-of-type {
  border-right: none;
}

到:

 .menu li:last-of-type a {
  border-right: none;
}

 .menu a {
  border-right: 1px dotted #ccc;
}
.menu li:last-of-type a {
  border-right: none;
}
 <ul class="menu">
  <li><a>list item 1</a></li>
  <li><a>list item 2</a></li>
  <li><a>list item 3</a></li>
  <li><a>list item 4</a></li>
  <li><a>list item 5</a></li>
</ul>

正如您推测的那样,您使用的规则针对每个 a 因为它是每个 li 中的最后一个子项。只需将 :last-of-type 移动到 li 即可。

原文由 j08691 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过使用 .menu li:not(:last-child) a 将您的两个 CSS 属性组合为您想要具有边框的元素。 As choz points out in the comment below, it’s crucial to have the li after menu because every a in the li is the last当前上下文中的子项。因此,伪类应该适用于 li

  .menu li:not(:last-child) a {
  border-right: 1px dotted #ccc;
  }

原文由 litel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题