Guía principal de selectores
Destacada y disponible
Combina condiciones con OR, AND y pseudoclases funcionales; compara sus coincidencias y observa cómo cambia la especificidad.
article, .noticePreparando el escenario y sus resultados…
Selecciona los elementos que coinciden con cualquiera de las dos ramas separadas por coma.
<section class="catalog" aria-label="Catálogo para selectores lógicos y relacionales">
<article class="card featured">
<span class="badge">Nuevo</span>
<h3>Guía principal de selectores</h3>
<p>Destacada y disponible</p>
</article>
<aside class="card archived">
<h3>Referencia archivada</h3>
<p>Conservada para consulta</p>
</aside>
<article class="card featured">
<span class="media">Vídeo</span>
<span class="locked">Restringido</span>
<h3>Curso avanzado</h3>
<p>Contenido con acceso restringido</p>
</article>
<p class="notice">La colección se actualiza con nuevos ejemplos.</p>
</section>article, .notice {
outline: 3px solid #f97316;
outline-offset: 3px;
background-color: color-mix(in oklch, #f97316 16%, transparent);
}Guía de lógica y relaciones CSS
Distingue OR, AND y exclusión, compara la especificidad especial de las pseudoclases funcionales y aprende a leer selectores relativos.
La misma lista de condiciones puede cambiar de significado y de peso según dónde aparezcan las comas y qué pseudoclase las contenga.
A, BUna lista coincide si al menos una rama coincide. Cada selector complejo conserva su propia tupla de especificidad.
A.classLos selectores simples escritos sin combinador deben cumplirse sobre el mismo elemento y suman sus aportaciones.
:is() · :where():is() toma el argumento más específico; :where() y todos sus argumentos aportan cero.
E:has(relative)E es el elemento seleccionado. Los argumentos relativos se evalúan tomando E como ancla y pueden empezar con un combinador.
Compara la unión de ramas independientes con varias condiciones exigidas sobre un único elemento.
A, BSelecciona un elemento cuando coincide con al menos una rama de la lista separada por comas.
Especificidad(0, 0, 1) · (0, 1, 0)article, .notice<section>
Coincide: <article>Coincide</article>
<div>No coincide</div>
Coincide: <p class="notice">Coincide</p>
</section>button, [role="status"]<div>
Coincide: <button>Coincide</button>
<a href="#docs">No coincide</a>
Coincide: <output role="status">Coincide</output>
</div>A.class[attr]Selecciona un mismo elemento que cumple simultáneamente todos los selectores simples escritos sin combinador.
Especificidad(0, 2, 1).card.featured<section>
Coincide: <article class="card featured">Coincide</article>
<article class="card">No coincide</article>
<div class="featured">No coincide</div>
</section>button.primary[aria-pressed="true"]<div>
Coincide: <button class="primary" aria-pressed="true">Coincide</button>
<button class="primary" aria-pressed="false">No coincide</button>
<a class="primary" aria-pressed="true">No coincide</a>
</div>:is(), :where() y :not() aceptan listas, pero no comparten el mismo significado ni la misma especificidad.
:is(A, B)Coincide cuando el elemento satisface al menos un selector de su lista de argumentos.
Especificidad(0, 1, 0):is(article, aside).featured<section>
Coincide: <article class="featured">Coincide</article>
Coincide: <aside class="featured">Coincide</aside>
<section class="featured">No coincide</section>
</section>.toolbar :is(a, button)<nav class="toolbar">
Coincide: <a href="#guide">Coincide</a>
<span>No coincide</span>
Coincide: <button>Coincide</button>
</nav>Este estado Baseline corresponde a :is(), incluida su lista forgiving. El navegador actual se comprueba aparte en el playground.
:where(A, B)Coincide con los mismos elementos que :is() para la misma lista de argumentos.
Especificidad(0, 0, 0):where(article, aside).featured<section>
Coincide: <article class="featured">Coincide</article>
Coincide: <aside class="featured">Coincide</aside>
<section class="featured">No coincide</section>
</section>.content :where(p, blockquote)<article class="content">
Coincide: <p>Coincide</p>
Coincide: <blockquote>Coincide</blockquote>
<aside>No coincide</aside>
</article>Este estado Baseline corresponde a :where() y su comportamiento de especificidad cero.
:not(A, B)Selecciona el sujeto cuando no coincide con ninguno de los selectores indicados en el argumento.
Especificidad(0, 1, 0).card:not(.archived, :has(.locked))<section>
Coincide: <article class="card">Coincide</article>
<article class="card archived">No coincide</article>
<article class="card"><span class="locked">Restringido</span></article>
</section>section:not(:has(h2, h3))<main>
Coincide: <section>
<p>Coincide</p>
</section>
<section>
<h2>No coincide</h2>
</section>
</main>Este estado Baseline representa la forma de Selectors Level 4 que admite listas dentro de :not().
Selecciona un sujeto según descendientes o hermanos que coinciden con selectores relativos anclados en él.
:has(relative selector)Selecciona el elemento sujeto cuando al menos un selector relativo coincide tomando ese elemento como ancla.
Especificidad(0, 1, 0).card:has(> :is(.badge, .media))<section>
Coincide: <article class="card">
<span class="badge">Coincide</span>
</article>
<article class="card"><p>No coincide</p></article>
Coincide: <aside class="card">
<span class="media">Coincide</span>
</aside>
</section>dt:has(+ dt)<dl>
Coincide: <dt>Coincide</dt>
<dt>No coincide</dt>
<dd>CSS</dd>
<dt>No coincide</dt>
<dd>HTML</dd>
</dl>Este estado Baseline corresponde a :has(). Al ser una incorporación posterior, se muestra separado de los selectores básicos.