HTML no introduce nuevas sintaxis de selectores CSS, ya que la definición de los selectores es responsabilidad de CSS. Sin embargo, HTML moderno sí ha mejorado la forma en que podemos seleccionar elementos al proporcionar estructuras y atributos más ricos y semánticos que sirven como mejores «enganches» (hooks) para los selectores CSS existentes y los nuevos que van surgiendo en las especificaciones de CSS.
/* Antes, con divs genéricos */
.encabezado-principal { /* ... */ }
.contenido-principal { /* ... */ }
/* Con HTML semántico moderno */
header { /* ... */ }
main { /* ... */ }
input
como ganchos:input
en HTML5 (como type="email"
, type="date"
, type="number"
, type="search"
, etc.) pueden ser seleccionados específicamente usando selectores de atributo:input[type="date"] { border-color: skyblue; }
required
, pattern
, min
, max
) interactúan directamente con pseudo-clases de CSS como :required
, :optional
, :valid
, :invalid
, :in-range
, :out-of-range
, permitiéndote dar estilos basados en el estado de validación del campo:input:invalid { border-left: 5px solid red; }
input:valid { border-left: 5px solid green; }
role
, aria-label
, aria-describedby
, aria-hidden
, aria-invalid
, etc., aunque su propósito principal es la accesibilidad, también pueden usarse como selectores de atributo en CSS. [role="alert"] {
background-color: lightyellow;
border: 1px solid orange;
}
[aria-hidden="true"] {
display: none !important; /* Ojo con !important, usar con cautela */
}
:is()
y :where()
: Permiten agrupar selectores de forma más concisa.:has()
(el «selector padre»): Permite seleccionar un elemento basado en sus descendientes. <figure>
que contiene una <figcaption>
: figure:has(figcaption) { margin-bottom: 2em; }
.:empty
, :target
, :not()
, entre otras, pueden combinarse de formas más expresivas con una estructura HTML semántica.:host
y :host-context()
para estilizar el elemento anfitrión del shadow tree desde dentro. En resumen, HTML moderno no crea nueva sintaxis de selectores CSS, pero sí enriquece el «vocabulario» de elementos y atributos disponibles, lo que a su vez permite que los selectores CSS (tanto los clásicos como los más nuevos) se utilicen de manera más potente, semántica y mantenible.