: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.
Die :is()
CSS Pseudoklasse-Funktion nimmt eine Selektorliste als Argument und wählt jedes Element aus, das durch einen der Selektoren in dieser Liste ausgewählt werden kann. Dies ist nützlich, um umfangreiche Selektoren in kompakterer Form zu schreiben.
Hinweis:
Ursprünglich :matches()
(und :any()
) genannt, wurde dieser Selektor in :is()
umbenannt in CSSWG issue #3258.
Probieren Sie es aus
ol {
list-style-type: upper-alpha;
color: darkblue;
}
:is(ol, ul, menu:unsupported) :is(ol, ul) {
color: green;
}
:is(ol, ul) :is(ol, ul) ol {
list-style-type: lower-greek;
color: chocolate;
}
<ol>
<li>Saturn</li>
<li>
<ul>
<li>Mimas</li>
<li>Enceladus</li>
<li>
<ol>
<li>Voyager</li>
<li>Cassini</li>
</ol>
</li>
<li>Tethys</li>
</ul>
</li>
<li>Uranus</li>
<li>
<ol>
<li>Titania</li>
<li>Oberon</li>
</ol>
</li>
</ol>
Syntax
:is(<forgiving-selector-list>) {
/* ... */
}
Parameter
Die :is()
-Pseudoklasse erfordert eine Selektorliste, eine kommagetrennte Liste von einem oder mehreren Selektoren als Argument. Die Liste darf kein Pseudoelement enthalten, aber alle anderen einfachen, zusammengesetzten und komplexen Selektoren sind erlaubt.
Unterschied zwischen :is() und :where()
Der Unterschied zwischen den beiden besteht darin, dass :is()
zur Spezifität des gesamten Selektors beiträgt (es nimmt die Spezifität seines spezifischsten Arguments), während :where()
einen Spezifitätswert von 0 hat. Dies wird im Beispiel auf der :where()
-Referenzseite gezeigt.
Fehlerverzeihende Selektorparsing
Die Spezifikation definiert :is()
und :where()
als annehmend eine fehlerverzeihende Selektorliste.
In CSS, wenn eine Selektorliste verwendet wird, wird die gesamte Liste als ungültig angesehen, wenn einer der Selektoren ungültig ist. Wenn :is()
oder :where()
verwendet wird, wird stattdessen der gesamte Selector-Liste als ungültig angesehen, wenn einer fehlerhaft geparst wird, wird der fehlerhafte oder nicht unterstützte Selektor ignoriert und die anderen verwendet.
:is(:valid, :unsupported) {
/* … */
}
Wird immer noch korrekt geparst und stimmt mit :valid
überein, auch in Browsern, die :unsupported
nicht unterstützen, während:
:valid,
:unsupported {
/* … */
}
In Browsern, die :unsupported
nicht unterstützen, ignoriert wird, selbst wenn sie :valid
unterstützen.
Beispiele
Vereinfachung von Listen-Selektoren
Die :is()
-Pseudoklasse kann Ihre CSS-Selektoren erheblich vereinfachen. Zum Beispiel, nehmen Sie das folgende CSS:
/* 3-deep (or more) unordered lists use a square */
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;
}
Sie können es ersetzen durch:
/* 3-deep (or more) unordered lists use a square */
:is(ol, ul, menu, dir) :is(ol, ul, menu, dir) :is(ul, menu, dir) {
list-style-type: square;
}
Vereinfachung von Abschnitts-Selektoren
Die :is()
-Pseudoklasse ist besonders nützlich beim Umgang mit HTML-Abschnitten und Überschriften. Da <section>
, <article>
, <aside>
, und <nav>
häufig zusammen verschachtelt sind, kann das Styling dieser ohne :is()
anspruchsvoll sein.
Zum Beispiel, ohne :is()
, könnte das Styling aller h1-Elemente in unterschiedlichen Tiefen sehr kompliziert sein:
/* Level 0 */
h1 {
font-size: 30px;
}
/* Level 1 */
section h1,
article h1,
aside h1,
nav h1 {
font-size: 25px;
}
/* Level 2 */
section section h1,
section article h1,
section aside h1,
section nav h1,
article section h1,
article article h1,
article aside h1,
article nav h1,
aside section h1,
aside article h1,
aside aside h1,
aside nav h1,
nav section h1,
nav article h1,
nav aside h1,
nav nav h1 {
font-size: 20px;
}
/* Level 3 */
/* don't even think about it! */
Mit :is()
ist es jedoch viel einfacher:
/* Level 0 */
h1 {
font-size: 30px;
}
/* Level 1 */
:is(section, article, aside, nav) h1 {
font-size: 25px;
}
/* Level 2 */
:is(section, article, aside, nav) :is(section, article, aside, nav) h1 {
font-size: 20px;
}
/* Level 3 */
:is(section, article, aside, nav)
:is(section, article, aside, nav)
:is(section, article, aside, nav)
h1 {
font-size: 15px;
}
:is() wählt keine Pseudoelemente aus
Die :is()
-Pseudoklasse passt nicht zu Pseudoelementen. Anstatt also dies:
some-element:is(::before, ::after) {
display: block;
}
oder dies:
:is(some-element::before, some-element::after) {
display: block;
}
machen Sie stattdessen:
some-element::before,
some-element::after {
display: block;
}
Spezifikationen
Specification |
---|
Selectors Level 4 # matches-pseudo |
Browser-Kompatibilität
Siehe auch
:where()
- Wie:is()
, aber mit 0 Spezifität.- Selektorliste
- Web Components