CSS-Selektor :empty: leere Elemente gezielt ansprechen

CSS-Selektor :empty: leere Elemente gezielt ansprechen

Meistens gestalten wir Elemente, die Inhalt haben. Was aber, wenn ein Element weder Kindelemente noch Text enthält? Ganz einfach: Dafür gibt es den Selektor :empty.

html
<p> </p>
<!-- Pas à cause de l'espace blanc -->

<p></p>
<!-- Vide car pas d'espace blanc -->
css
p::before {
font-family: 'FontAwesome';
content: 'f240';
}

p:empty::before {
content: 'f244';
}

p {
color: silver;
}

p:empty {
color: red;
}

Was gilt als leer?

Als ich zum ersten Mal darüber gestolpert bin, war mir nicht klar, was diese Pseudoklasse überhaupt als leer ansieht. Halten wir uns hier an die Definition von MDN:

Die CSS-Pseudoklasse :empty steht für jedes Element, das keine Kinder hat. Kinder können Elementknoten oder Text sein, Leerraum eingeschlossen. Kommentare, Verarbeitungsanweisungen und CSS-Inhalt haben keinen Einfluss darauf, ob ein Element als leer gilt.

:empty

Solange kein Leerzeichen dazwischensteht, ist das Element leer.

html
<p></p>

Auch ein Kommentar dazwischen gilt weiterhin als leeres Element. Solange eben kein Leerzeichen dabei ist.

html
<p><!-- comment --></p>

Nicht :empty

Leerraum zählt als nicht leer. Selbst ein Zeilenumbruch ist Leerraum, also nicht leer! Ich betone das, weil ich genau in diese Falle getappt bin.

html
<p> </p>

<p>
<!-- comment -->
</p>

Ein Kindelement zählt ebenfalls als nicht leer

html
<p><span></span></p>

Leerraum in den kommenden Spezifikationen

Die gute Nachricht: In Selectors Level 4 gilt Leerraum als leer! Der Selektor verhält sich dann wie :-moz-only-whitespace. Mit anderen Worten, das hier gilt künftig als leer:

html
<p> </p>

ABER verlass dich noch nicht darauf. Aktuell unterstützt das kein einziger Browser.

Beispiele für den Einsatz von :empty

Sehen wir uns ein paar konkrete Anwendungen von :empty an.

:empty für die Fehlermeldung in einem Formular

An diesem Beispiel bin ich auf :empty gestoßen. Ich wollte meiner Fehlermeldung ein Icon voranstellen. Das Problem: Das Icon tauchte auch dann auf, wenn es gar keine Fehlermeldung gab. Kein Grund zur Sorge, mit :empty setze ich das Icon nur dann, wenn wirklich eine Meldung da ist.

CSS

css
.error:before {
color: red;
content: '274c '; /* ❌ Icon */
}

HTML

html
<!-- Pas de message d'erreur -->
<div class="error"></div>

<!-- Oui, un message d'erreur -->
<div class="error">Email manquant</div>

Ergebnis

Ohne :empty

❌ Email manquant

Mit :empty

❌ Email manquant

:empty bei Alerts

Noch ein Beispiel, in dem :empty den leeren Zustand ausblendet.

css
.alert {
background: pink;
padding: 10px;
}
.alert:empty {
display: none;
}

HTML

html
<div class="alert"></div>
<div class="alert">Message d'alerte</div>

Ergebnis

Ohne :empty

Message d’alerte

Mit :empty

Message d’alerte

Browser-Unterstützung

Die Unterstützung ist ausgesprochen gut. Alle Browser bis zurück zu Internet Explorer 9 beherrschen den Selektor

CSS

Damien Flandrin Webentwickler seit 2010, Gründer von Gekkode und Email Impact. Jeder Artikel wird vor der Veröffentlichung an einem echten Projekt getestet. Kontakt
Newsletter

Neue Tests, Tutorials und Projekte, per E-Mail.

Reproduzierbare Tests, versionierter Code, datierte Ergebnisse. Niemals Spam.