Saltar al contenido

Calculadora de especificidad CSS

Escribe un selector por línea para comparar su especificidad; las listas con comas se dividen por selector. Los no válidos se marcan y !important o las capas aún deciden.

Se ejecuta localmente en tu navegador
· :where() · :is() · :not() · :has() · A-B-C
SELECTOR INPUT
CASCADE MAP
COPY REPORT

Cómo comparar la especificidad de selectores CSS

Cada selector se puntúa con los tres contadores de la especificación: A para selectores de ID, B para clases, atributos y pseudoclases, C para selectores de tipo y pseudoelementos. Los tres ejemplos ya muestran la forma del resultado: #app .card:hover > h2 es 1-2-1, :where(.theme) .card:is(.featured, #hero) es 1-1-0 y main article[data-kind="docs"]::before es 0-1-3.

Los selectores se validan con el propio analizador del navegador y se puntúan dentro de la página, así que no se envía nada. La línea sobre el mapa indica cuántos selectores se leyeron y cuál es el más fuerte; el bloque de copia repite cada puntuación en texto plano.

  1. Escribe o pega los selectores en el cuadro, uno por línea. Una línea con una lista separada por comas se divide en una fila por selector, así que una lista pegada nunca se suma en una sola puntuación.
  2. Pulsa Analizar selectores o sigue escribiendo: el mapa se reconstruye con cada tecla.
  3. Lee el mapa de cascada: cada fila muestra la puntuación A-B-C, una barra proporcional al selector más fuerte y una etiqueta: Mayor especificidad, A-B-C o Selector no válido cuando el navegador rechaza la sintaxis.
  4. Activa Ordenar por mayor especificidad para reordenar las filas de mayor a menor; los selectores con la misma puntuación conservan el orden de entrada.
  5. Usa Copiar informe para llevarte las líneas A-B-C en texto plano, o Restablecer para recuperar los tres ejemplos y desactivar el orden.

Qué cuentan los números A-B-C y qué queda fuera

Qué cuentan los tres números

A cuenta los selectores de ID como #app. B cuenta las clases (.card), los selectores de atributo ([data-kind="docs"]) y las pseudoclases (:hover, :focus-visible, :nth-child(2n+1)). C cuenta los selectores de tipo (main, article, h2) y los pseudoelementos (::before, ::selection). El selector universal * no suma nada en ninguna columna.

Las pseudoclases funcionales siguen la especificación: :where() aporta cero, mientras que :is(), :not(), :has() y la lista of de :nth-child() se puntúan por su argumento más pesado; por eso :is(.featured, #hero) vale un ID. ::part() y ::slotted() cuentan como un pseudoelemento cada uno y su argumento no suma nada.

Listas con comas, selectores no válidos y cascada

Una lista separada por comas en una línea se trata como lo que es: varios selectores. a, b se convierte en dos filas de 0-0-1. Cada fila se valida antes con el analizador del navegador; la que rechaza —un combinador suelto, tres dos puntos— sigue apareciendo, marcada como Selector no válido, y queda fuera del veredicto de mayor especificidad, porque un selector no válido nunca llega a la cascada.

La puntuación responde a una pregunta: si dos de estos selectores coinciden con el mismo elemento, qué declaración gana por peso. Las capas, !important, los estilos en línea, el orden de aparición y la proximidad de ámbito pueden anular la aritmética; una puntuación menor dentro de una @layer anterior puede ganar.

Procesamiento local y límites

Toda la comparación ocurre en la pestaña, así que los selectores no se envían a ningún sitio. No hay un límite fijo de líneas; el mapa, la línea de veredicto y el bloque de copia se reconstruyen juntos mientras escribes.

La herramienta compara texto, no aplica tu hoja de estilo: no casa nada contra un documento y los números son los pesos de la especificación, no una predicción del estilo calculado. Para una comprobación visual, ejecuta el selector en el inspector del navegador sobre la página real.

Herramientas recientes: