Guía de selectores CSS
Tipos, clases, atributos y especificidad.
Construye selectores básicos y de atributo, compáralos sobre tres escenarios HTML y examina cada coincidencia y su especificidad.
articlePreparando el escenario y sus resultados…
Selecciona todos los elementos <article> del escenario.
<section
id="component-catalog"
class="catalog"
aria-label="Catálogo de guías y demos"
>
<article
id="featured-card"
class="card featured"
data-kind="guide"
data-tags="css selectors"
data-code="CSS-BASICS"
data-file="selectors.pdf"
data-note="learn-selector-specificity"
lang="es-MX"
>
<h3>Guía de selectores CSS</h3>
<p>Tipos, clases, atributos y especificidad.</p>
</article>
<article
class="card"
data-kind="demo"
data-tags="html semantics"
data-code="HTML-BASICS"
data-file="semantics.html"
data-note="semantic-markup"
lang="en-US"
>
<h3>HTML semántico</h3>
<p>Estructuras accesibles para documentos web.</p>
</article>
<article
class="card"
data-kind="guide"
data-tags="css layout"
data-code="CSS-GRID"
data-file="grid.pdf"
data-note="layout-selector-reference"
lang="es-ES"
>
<h3>Guía de CSS Grid</h3>
<p>Layouts modernos con filas y columnas.</p>
</article>
</section>article {
outline: 3px solid #f97316;
outline-offset: 3px;
background-color: color-mix(in oklch, #f97316 16%, transparent);
}Guía de selectores CSS
Compara qué selecciona cada sintaxis, cómo contribuye a la especificidad y qué restricciones conviene recordar antes de usarla.
Coincidencia, especificidad y cascada responden a preguntas distintas. Separarlas evita atribuir a un selector efectos que dependen de las declaraciones o del orden de las reglas.
(ID, CLASS, TYPE)ID cuenta selectores de ID, CLASS agrupa clases, atributos y pseudoclases, y TYPE cuenta tipos y pseudoelementos. Se comparan de izquierda a derecha.
selector → matchesEl selector decide qué elementos entran en la regla. El origen, las capas, la importancia, la especificidad y el orden deciden qué declaración prevalece.
style="..."Un atributo style participa en la cascada con prioridad propia, pero no añade una cuarta columna a la tupla de especificidad de un selector.
Seleccionan por tipo, clase o ID, o combinan varias condiciones sobre el mismo elemento.
*Representa cualquier elemento dentro del contexto en el que se evalúa.
Especificidad(0, 0, 0)*Coincide: <section>
Este texto no es un elemento.
Coincide: <span>Coincide</span>
</section>.card *<article class="card">
Coincide: <strong>Coincide</strong>
Coincide: <span>Coincide</span>
</article>
<p>No coincide</p>ESelecciona todos los elementos que tienen el nombre indicado, como article.
Especificidad(0, 0, 1)articleCoincide: <article>Coincide</article>
<section>No coincide</section>button<nav>
<a href="#">No coincide</a>
Coincide: <button type="button">Coincide</button>
</nav>.classSelecciona cualquier elemento cuya lista de clases contenga el identificador indicado.
Especificidad(0, 1, 0).featuredCoincide: <article class="featured">Coincide</article>
Coincide: <p class="featured">Coincide</p>
<aside>No coincide</aside>.note<aside>
Coincide: <p class="note">Coincide</p>
<p>No coincide</p>
</aside>#idSelecciona los elementos cuyo identificador coincide exactamente con el valor escrito tras #.
Especificidad(1, 0, 0)#featured-cardCoincide: <article id="featured-card">Coincide</article>
<article id="secondary-card">No coincide</article>#primary-action<form>
Coincide: <button id="primary-action">Coincide</button>
<button>No coincide</button>
</form>E.class.classSelecciona un mismo elemento que cumple simultáneamente todas las condiciones escritas sin combinadores.
Especificidad(0, 2, 1)article.card.featuredCoincide: <article class="card featured">Coincide</article>
<article class="card">No coincide</article>button.action.primary<form>
Coincide: <button class="action primary">Coincide</button>
<a class="action primary">No coincide</a>
<button class="action">No coincide</button>
</form>Distingue entre comprobar que un atributo existe y exigir que su valor completo sea exactamente uno concreto.
[attr]Selecciona los elementos que tienen el atributo indicado, cualquiera que sea su valor.
Especificidad(0, 1, 0)[data-kind]Coincide: <article data-kind="">Coincide</article>
<article>No coincide</article>[disabled]<form>
Coincide: <input disabled value="Coincide">
<input value="No coincide">
</form>[attr="value"]Selecciona los elementos cuyo valor completo de atributo es exactamente el indicado.
Especificidad(0, 1, 0)[data-kind="guide"]Coincide: <article data-kind="guide">Coincide</article>
<article data-kind="guide-draft">No coincide</article>[data-state="open"]<dialog>
Coincide: <button data-state="open">Coincide</button>
<button data-state="opening">No coincide</button>
</dialog>Cada operador interpreta el valor del atributo de forma diferente: palabra, prefijo con guion, comienzo, final o fragmento.
[attr~="word"]Busca una palabra completa dentro de una lista de valores separados por espacios CSS.
Especificidad(0, 1, 0)[data-tags~="css"]Coincide: <article data-tags="css selectors">Coincide</article>
<article data-tags="scss">No coincide</article>[rel~="external"]<nav>
Coincide: <a rel="help external">Coincide</a>
<a rel="external-link">No coincide</a>
</nav>[attr|="prefix"]Coincide con el valor exacto o con ese valor seguido inmediatamente de un guion.
Especificidad(0, 1, 0)[lang|="es"]Coincide: <article lang="es">Coincide</article>
Coincide: <article lang="es-MX">Coincide</article>
<article lang="especial">No coincide</article>[data-locale|="pt"]<section>
Coincide: <p data-locale="pt-BR">Coincide</p>
<p data-locale="pt_BR">No coincide</p>
</section>[attr^="prefix"]Selecciona valores de atributo que comienzan exactamente por la cadena indicada.
Especificidad(0, 1, 0)[data-code^="CSS"]Coincide: <article data-code="CSS-GRID">Coincide</article>
<article data-code="HTML-CSS">No coincide</article>[href^="https://"] <nav>
Coincide: <a href="https://example.com" >Coincide</a>
<a href="/docs/css">No coincide</a>
</nav>[attr$="suffix"]Selecciona valores de atributo que terminan exactamente con la cadena indicada.
Especificidad(0, 1, 0)[data-file$=".pdf"]Coincide: <a data-file="selectors.pdf">Coincide</a>
<a data-file="selectors.html">No coincide</a>[href$=".pdf"]<ul>
<li>
Coincide: <a href="/guide.pdf">Coincide</a>
</li>
<li>
<a href="/pdf/guide">No coincide</a>
</li>
</ul>[attr*="fragment"]Selecciona valores que contienen al menos una aparición de la cadena indicada.
Especificidad(0, 1, 0)[data-note*="selector"]Coincide: <article data-note="selector-reference">Coincide</article>
<article data-note="layout-reference">No coincide</article>[href*="/docs/"]<nav>
Coincide: <a href="/docs/selectors/">Coincide</a>
<a href="/documentation/">No coincide</a>
</nav>Los modificadores i y s cambian cómo se compara el valor, independientemente de la regla por defecto del lenguaje del documento.
[attr="value" i]Compara el valor del atributo sin distinguir mayúsculas y minúsculas dentro del rango ASCII.
Especificidad(0, 1, 0)[data-code="css-basics" i]Coincide: <article data-code="CSS-BASICS">Coincide</article>
Coincide: <article data-code="Css-Basics">Coincide</article>
<article data-code="HTML-BASICS">No coincide</article>[data-theme="dark" i]<section>
Coincide: <button data-theme="DARK">Coincide</button>
<button data-theme="light">No coincide</button>
</section>Este estado Baseline corresponde al modificador i. La preview sigue comprobando por separado si el navegador actual puede evaluar el selector concreto.
[attr="value" s]Fuerza una comparación idéntica del valor, respetando mayúsculas y minúsculas.
Especificidad(0, 1, 0)[data-code="CSS-BASICS" s]Coincide: <article data-code="CSS-BASICS">Coincide</article>
<article data-code="css-basics">No coincide</article>[data-state="OPEN" s]<dialog>
Coincide: <button data-state="OPEN">Coincide</button>
<button data-state="open">No coincide</button>
</dialog>Este estado Baseline corresponde al modificador s. Si el navegador no lo soporta, el lab lo indica como no evaluable sin simular una coincidencia.