:is()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2021.

La función pseudo-clase de CSS :is() toma una lista de selectores como argumento y selecciona cualquier elemento que pueda ser seleccionado por uno de los selectores en esa lista. Esto es útil para escribir selectores grandes en una forma más compacta.

Nota: Originalmente llamado :matches() (y :any()), este selector pasó a llamarse :is() en CSSWG número 3258.

Pruébalo

ol {
  list-style-type: upper-alpha;
  color: darkblue;
}

/* stylelint-disable-next-line selector-pseudo-class-no-unknown */
:is(ol, ul, menu:unsupported) :is(ol, ul) {
  color: green;
}

:is(ol, ul) :is(ol, ul) ol {
  list-style-type: lower-greek;
  color: chocolate;
}
  1. Saturn
    • Mimas
    • Enceladus
      1. Voyager
      2. Cassini
    • Tethys
  2. Uranus
    1. Titania
    2. Oberon

Los pseudoelementos no son válidos en la lista de selección para :is().

Diferencia entre :is() y :where()

La diferencia entre los dos es que :is() cuenta para la especificidad del selector general (toma la especificidad de su argumento más específico), mientras que :where() tiene un valor de especificidad de 0. Esto se demuestra con el ejemplo en la página de referencia :where().

Análisis de selector permisivo

La especificación define que :is() y :where() aceptan una lista de selectores permisivos.

En CSS, cuando se utiliza una lista de selectores, si alguno de los selectores no es válido, toda la lista se considera inválida. Cuando se utiliza :is() o :where() en lugar de que toda la lista de selectores se considere inválida si uno falla al analizar, el selector incorrecto o no compatible se ignorará y se utilizarán los demás.

css
:is(:valid, :unsupported) {
  /* … */
}

Seguirá analizando correctamente y haciendo coincidir :valid incluso en navegadores que no soportan :unsupported, mientras que:

css
:valid,
:unsupported {
  /* … */
}

Se ignorará en navegadores que no admitan :unsupported incluso si admiten :valid.

Ejemplos

Simplificando selectores de listas

La pseudoclase :is() puede simplificar enormemente sus selectores CSS. Por ejemplo, tome el siguiente CSS:

css
/* Las listas desordenadas de 3 (o más) niveles usan una viñeta cuadrada */
ol ol ul,
ol ul ul,
ol menu ul,
ol dir ul,
ol ol menu,
ol ul menu,
ol menu menu,
ol dir menu,
ol ol dir,
ol ul dir,
ol menu dir,
ol dir dir,
ul ol ul,
ul ul ul,
ul menu ul,
ul dir ul,
ul ol menu,
ul ul menu,
ul menu menu,
ul dir menu,
ul ol dir,
ul ul dir,
ul menu dir,
ul dir dir,
menu ol ul,
menu ul ul,
menu menu ul,
menu dir ul,
menu ol menu,
menu ul menu,
menu menu menu,
menu dir menu,
menu ol dir,
menu ul dir,
menu menu dir,
menu dir dir,
dir ol ul,
dir ul ul,
dir menu ul,
dir dir ul,
dir ol menu,
dir ul menu,
dir menu menu,
dir dir menu,
dir ol dir,
dir ul dir,
dir menu dir,
dir dir dir {
  list-style-type: square;
}

Puedes reemplazarlo con:

css
/* Las listas desordenadas de 3 (o más) niveles usan una viñeta cuadrada */
:is(ol, ul, menu, dir) :is(ol, ul, menu, dir) :is(ul, menu, dir) {
  list-style-type: square;
}

Simplificando selectores de secciones

La pseudoclase :is() es particularmente útil cuando se trata de secciones y encabezados HTML. Dado que

,
,

:is() no selecciona pseudoelementos

La pseudoclase :is() no funciona con los pseudoelementos. Entonces en lugar de esto:

css
some-element:is(::before, ::after) {
  display: block;
}

o esto:

css
:is(some-element::before, some-element::after) {
  display: block;
}

en su lugar haz:

css
some-element::before,
some-element::after {
  display: block;
}

Sintaxis

css
:is() {
  /* ... */
}

Especificaciones

Specification
Selectors Level 4
# matches-pseudo

Compatibilidad con navegadores

Véase también