Las pseudo-clases estructurales en CSS son selectores basados en la posición del elemento dentro de su contenedor.
Ya hemos visto cómo seleccionar elementos por etiqueta (p), clase (.boton) o ID (#cabecera). Eso está bien para decir “quiero este tipo de elemento”.
Pero muchas veces queremos algo más fino: el primer elemento de una lista, el último enlace de un menú, las filas pares de una tabla o cada tercera tarjeta de una galería.
Para eso usamos pseudo-clases estructurales. No miran si el usuario está encima con el ratón, ni si un campo tiene foco. Miran dónde está colocado el elemento dentro del árbol HTML.
Primer y último elemento
Las pseudo-clases
li:first-child {
font-weight: bold;
}
li:last-child {
border-bottom: none;
}
Esto es muy habitual para quitar separadores del último elemento de una lista, destacar el primer resultado o ajustar márgenes sin tener que añadir clases extra en el HTML.
<ul class="menu">
<li>Inicio</li>
<li>Servicios</li>
<li>Contacto</li>
</ul>
:first-child no significa “el primer <li> que encuentre por ahí”. Significa “este elemento es el primer hijo de su padre”.
Seleccionar por posición con :nth-child()
La pseudo-clase
/* Filas pares de una tabla */
tr:nth-child(even) {
background-color: #f5f5f5;
}
/* El tercer elemento de una lista */
li:nth-child(3) {
font-weight: bold;
}
Esto nos permite crear patrones visuales sin llenar el HTML de clases artificiales.
<ul>
<li>Primer elemento</li>
<li>Segundo elemento</li>
<li>Tercer elemento</li>
</ul>
:nth-of-type()
La pseudo-clase :key[:nth-of-type()] se parece a :nth-child(), pero solo cuenta elementos del mismo tipo de etiqueta.
<section>
<h2>Título</h2>
<p>Primer párrafo</p>
<p>Segundo párrafo</p>
<p>Tercer párrafo</p>
</section>
/* Selecciona el segundo párrafo, ignorando el h2 */
p:nth-of-type(2) {
background: #fef3c7;
}
Con p:nth-child(2) seleccionaríamos el primer párrafo, porque es el segundo hijo de section. Con p:nth-of-type(2) seleccionamos el segundo <p>. La diferencia está en qué está contando el navegador.
Otros selectores estructurales útiles
Hay algunas pseudo-clases más que conviene tener localizadas, aunque no las uséis todos los días.
:only-child: Selecciona un elemento si es el único hijo de su padre.:first-of-type: Selecciona el primer elemento de su tipo.:last-of-type: Selecciona el último elemento de su tipo.:empty: Selecciona elementos que no tienen contenido.
.mensaje:empty {
display: none;
}
article p:first-of-type {
font-size: 1.1rem;
}
