¿Cómo puedo seleccionar el último elemento con una clase específica, no el último hijo dentro del padre?
<div class="commentList">
<article class="comment " id="com21"></article>
<article class="comment " id="com20"></article>
<article class="comment " id="com19"></article>
<div class="something"> hello </div>
</div>
¿Quiero seleccionar #com19
?
.comment {
width:470px;
border-bottom:1px dotted #f0f0f0;
margin-bottom:10px;
}
.comment:last-child {
border-bottom:none;
margin-bottom:0;
}
Eso no funciona mientras tenga otro hijo div.something
como último hijo real en la lista de comentarios. ¿Es posible utilizar el selector de último hijo en este caso para seleccionar la última aparición de article.comment
?
jsFiddle
:last-child
sólo funciona cuando el elemento en cuestión es el último hijo del contenedor, no el último de un tipo específico de elemento. Para eso quieres:last-of-type
http://jsfiddle.net/C23g6/3/
Según el comentario de @BoltClock, esto solo busca el último article
elemento, no el último elemento con la clase .comment
.
body {
background: black;
}
.comment {
width: 470px;
border-bottom: 1px dotted #f0f0f0;
margin-bottom: 10px;
}
.comment:last-of-type {
border-bottom: none;
margin-bottom: 0;
}
<div class="commentList">
<article class="comment " id="com21"></article>
<article class="comment " id="com20"></article>
<article class="comment " id="com19"></article>
<div class="something"> hello </div>
</div>
Esto ahora se puede resolver con un uso cuidadoso de :has()
, específicamente:
/* switch out the {class} below */
.{class}:not(:has(~ .{class}))
Una técnica similar también le permite seleccionar cualquier cosa menos la última aparición de una clase en un contenedor o la última aparición dentro de un grupo de elementos. Vea el fragmento a continuación para ver ejemplos.
Nota: has()
actualmente es compatible con Chrome, Edge, Safari y Firefox desde al menos diciembre de 2023.
Mostrar fragmento de código
Supongo que la respuesta más correcta es: Usar :nth-child
(o, en este caso concreto, su contraparte :nth-last-child
). La mayoría solo conoce este selector por su primer argumento para tomar un rango de elementos basado en un cálculo con n, pero también puede tomar un segundo argumento "de [cualquier selector CSS]".
Tu escenario podría resolverse con este selector:.commentList .comment:nth-last-child(1 of .comment)
Pero ser técnicamente correcto no significa que puedas usarlo, porque este selector por ahora solo está implementado en Safari.
Para más lecturas:
- https://drafts.csswg.org/selectors-4/#the-nth-child-pseudo
- http://caniuse.com/#search=nth-child