我可能是在回答我自己的问题,但我非常好奇。

我知道CSS可以选择父容器的各个子容器,但是如果父容器有一定数量的子容器,是否支持对子容器进行样式化。

例如

container:children(8) {
  // style the parent this way if there are 8 children
}

我知道这听起来很奇怪,但我的经理让我去看看,我自己什么都没有发现,所以我决定在结束搜索之前转向so。


当前回答

如果你正在寻找一种方法来样式所有元素,如果超过N个存在(例如2个或更多):

李:first-child nth-last-child (n + 2), 李:第一个孩子:nth-last-child(n+2) ~ li background-color:红; 的 <德> < li >第一< / li > < /德> <德> < li >第一< / li > < li >第二< / li > < /德> <德> < li >第一< / li > < li >第二< / li > < li >第三< / li > < /德>

其他回答

不,在CSS中没有这样的东西。但是,您可以使用JavaScript来计算子元素的数量并应用样式。

是的,我们可以像这样使用n -child:

div:nth-child(n + 8) {
    background: red;
} 

这将使第8 div子div变成红色。希望这对你有所帮助……

同时,如果有人说“嘿,他们不能用css做样式,用JS!”立即怀疑他们。CSS现在非常灵活

.container div { 背景:蓝色; } .container div:n -child(n + 8) { 背景:红色; } < div class = "容器" > < div > div 1 < / div > < div > div 2 < / div > div < div > 3 < / div > < div > div 4 < / div > < div > div 5 < / div > < div > div 6 < / div > < div > div 7 < / div > < div > div 8 < / div > < div > div 9 < / div > < div > div 10 < / div > < div > div 11 < / div > < div > div 12 < / div > < / div >

在这个例子中,前7个孩子是蓝色的,之后的8个孩子是红色的……

(外部的例子)

如果你打算用纯CSS(使用scss),但你在同一个父类中有不同的元素/类,你可以使用这个版本!!

  &:first-of-type:nth-last-of-type(1) {
    max-width: 100%;
  }

  @for $i from 2 through 10 {
    &:first-of-type:nth-last-of-type(#{$i}),
    &:first-of-type:nth-last-of-type(#{$i}) ~ & {
      max-width: (100% / #{$i});
    }
  }

根据Matt的解决方案,我使用了以下Compass/SCSS实现。

@for $i from 1 through 20 {
    li:first-child:nth-last-child( #{$i} ),
    li:first-child:nth-last-child( #{$i} ) ~ li {
      width: calc(100% / #{$i} - 10px);
    }
  }

这允许您快速扩展项目的数量。

现在我们可以使用:has()选择器来标识条目的数量,并将样式应用到容器中

.container { height: 50px; margin: 10px; } .container:not(:has(*)) { /* 0 elements */ background: yellow; } .container:has(> :last-child:nth-child(1)) { /* 1 element */ background: red; } .container:has(> :last-child:nth-child(2)) { /* 2 elements */ background: blue; } .container:has(> :last-child:nth-child(3)) { /* 3 elements */ background: green; } /* For N elements .container:has(> :last-child:nth-child(N)) { background: red; } */ <div class="container"> </div> <div class="container"> <div></div> </div> <div class="container"> <div></div> <div></div> </div> <div class="container"> <div></div> <div></div> <div></div> </div>