如何在CSS中选择具有特定类名的"最后一个孩子"?

95 css css-selectors

<ul>
    <li class="list">test1</li>
    <li class="list">test2</li>
    <li class="list">test3</li>
    <li>test4</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

如何选择具有类名称的"最后一个孩子":list

<style>
    ul li.list:last-child{background-color:#000;}
</style>
Run Code Online (Sandbox Code Playgroud)

我知道上面的例子不起作用,但是有什么类似的东西可以工作吗?

重要:

a)我不能使用ul li:nth-child(3),因为它可能发生在第四或第五位.

b)没有JavaScript.

任何帮助将不胜感激,谢谢!

Cha*_*ase 57

这可以使用属性选择器完成.

[class~='list']:last-of-type  {
    background: #000;
}
Run Code Online (Sandbox Code Playgroud)

class~选择特定的整个单词.这允许您的列表项在需要时以各种顺序具有多个类.它仍然会找到确切的类"列表"并将样式应用于最后一个.

在这里查看一个工作示例:http://codepen.io/chasebank/pen/ZYyeab

阅读有关属性选择器的更多信息

http://css-tricks.com/attribute-selectors/ http://www.w3schools.com/css/css_attribute_selectors.asp

  • 不幸的是,我发现这在技术上不起作用......它真正做的是找到与类匹配的项目,看看它们是什么,在这种情况下是列表项,然后选择'last-of-输入'无论该特定的一个是否具有`list`类.我会留下答案,以防它引发一些其他解决方案,因为属性和伪选择器非常有趣和强大. (20认同)
  • 做[class~ ='list']`而不只是`.list`有什么意义? (15认同)
  • 这不会使用问题中的html选择带有"list"类的最后一个div (6认同)
  • 这**不起作用**,而且从来没有起作用。除了元素类型之外,没有 CSS 方法可以选择最后一个。您的属性选择器将与元素的类型匹配,而不是属性本身。 (6认同)
  • 您的工作示例恰好可以工作,因为第一个“section”中的最后一个“div”恰好是具有该属性/类的那个。如果您最后添加另一个“div”和其他类名,它将停止工作 (4认同)
  • 哪些跨浏览器问题?这个答案没有道理。 (3认同)
  • 不起作用。但我找到了另一种适用于我的情况的方法。`.Select-value:nth-last-child(2)`(甚至`.Select-value:not(:nth-last-child(2))` 禁用此元素的样式)。就我而言,我无法修改 html,因为它是遗留的(来自库)。但是我一直都知道我的元素2从结尾。 (2认同)

jok*_*oki 25

这是一个厚颜无耻的答案,但是如果你只受限于CSS而且能够在DOM中反转你的项目,那么可能值得考虑.它依赖于一个事实:尽管没有为没有选择最后一类特殊的元素,它实际上是可能的样式第一.诀窍是然后使用flexbox以相反的顺序显示元素.

ul {
  display: flex;
  flex-direction: column-reverse;
}

/* Apply desired style to all matching elements. */
ul > li.list {
  background-color: #888;
}

/* Using a more specific selector, "unstyle" elements which are not the first. */
ul > li.list ~ li.list {
  background-color: inherit;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li class="list">0</li>
  <li>1</li>
  <li class="list">2</li>
</ul>
<ul>
  <li>0</li>
  <li class="list">1</li>
  <li class="list">2</li>
  <li>3</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是唯一真正解决问题的黑客 (8认同)

Ken*_*nne 21

您可以使用相邻的兄弟选择器来实现类似的功能,这可能有所帮助.

.list-item.other-class + .list-item:not(.other-class)
Run Code Online (Sandbox Code Playgroud)

将有效地定位在具有类的最后一个元素之后的紧跟随元素other-class.

点击此处了解更多信息:https://css-tricks.com/almanac/selectors/a/adjacent-sibling/


Ibu*_*Ibu -26

我建议你利用这样一个事实:你可以为一个元素分配多个类,如下所示:

<ul>
    <li class="list">test1</li>
    <li class="list">test2</li>
    <li class="list last">test3</li>
    <li>test4</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

最后一个元素的list类就像它的兄弟一样,但也有last类可以用来设置你想要的任何CSS属性,如下所示:

ul li.list {
    color: #FF0000;
}

ul li.list.last {
    background-color: #000;
}
Run Code Online (Sandbox Code Playgroud)

  • 这根本没有回答这个问题,你甚至读过它吗?他要求如何做到这一点,而无需为最后一个元素添加另一个类,这就是:last-child选择器的整体美.这不应该是一个公认的答案. (166认同)

归档时间:

查看次数:

94485 次

最近记录:

5 年,12 月 前