如何选择元素中除最后一个孩子以外的所有孩子?


Answers:


689

您可以使用否定伪类:not():last-child伪类。被介绍为CSS Selectors Level 3,它在IE8或更低版本中不起作用:

:not(:last-child) { /* styles */ }

这是按原样使用的吗?在第一个冒号之前没有任何东西?
约翰尼,为什么

您可以将此添加到常规的基本选择器(div在OP示例中)
Dallas

2
对于使用SASS的用户,可以&:not(:last-child) { /* styles * }在要影响的元素内部使用。
马丁·詹姆斯(James)

100

简单点:

您可以将样式应用于所有div,然后使用:last-child重新初始化最后一个样式:

例如在CSS中

.yourclass{
    border: 1px solid blue;
}
.yourclass:last-child{
    border: 0;
}

或在SCSS中

.yourclass{
    border: 1px solid rgba(255, 255, 255, 1);
    &:last-child{
        border: 0;
    }
}
  • 易于阅读/记住
  • 快速执行
  • 浏览器兼容(IE9 +,因为它仍然是CSS3)

6
至少对我来说,这有不好的代码味道。您故意将css规则应用于您不希望使用的元素,然后尝试结块另一层以撤消它。对我来说,这是一种不好的代码味道。我担心这种CSS编码会导致越来越难以维护CSS。换句话说,您正在构建意大利面代码css。
亚历山大·伯德

1
这也可能起作用,但是问题是,当您有许多CSS样式(如边框,颜色,字体大小等)时,您将需要再次将CSS样式初始化为:last-child。因此,合适的解决方案是使用:not(:last-child)
davecar21'2


22

当IE9出现时,它将变得更加容易。但是,在很多时候,您可以将问题切换到要求:first-child的样式,并设置元素的另一面(IE7 +)的样式。




1

Nick Craver的解决方案为我提供了我所需要的,但对于使用CSS-in-JS的用户来说却很明确:

const styles = {
  yourClass: {
    /* Styles for all elements with this class */
    '&:not(:last-child)': {
      /* Styles for all EXCEPT the last element with this class */
    },
  },
};

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.