HTML-Grundlagen · 9 von 9
Das popover-Attribut
Dropdown-Menüs, Tooltips, Onboarding-Hinweise, Toast-Meldungen: All diese kleinen Overlays waren jahrelang reine JavaScript-Handarbeit. Ein Klick-Handler zum Öffnen, ein zweiter zum Schließen, ein ESC-Listener, ein z-index, der hoch genug ist, und ein Klick-außerhalb-Check obendrauf. Mit dem globalen popover-Attribut erledigt der Browser das alles selbst. In vielen Fällen brauchst du dafür keine einzige Zeile JavaScript.
- Reihe
- HTML-Grundlagen
- Teil
- 9 von 9
- Kapitel
- 14
- Vorschauen
- 5
- Lesezeit
- 8 Min
- Stand
- 03.07.2026
Was ist ein Popover?
01 / 14Ein Popover ist ein Element, das über dem restlichen Seiteninhalt eingeblendet wird, ohne die Seite zu blockieren. Du kannst weiterhin scrollen, klicken und tippen. Typische Beispiele:
- Aufklappende Menüs und Aktionslisten
- Tooltips und Hilfetexte
- Hinweise wie “In den Warenkorb gelegt”
- Kleine Einstellungs-Panels
Das Besondere: popover ist ein globales Attribut. Du kannst es auf fast jedes Element setzen, meistens landet es auf einem <div>. Ein Element mit popover ist standardmäßig unsichtbar und wird erst beim Öffnen angezeigt.
Ein Popover ohne JavaScript öffnen
02 / 14Du brauchst nur zwei Zutaten: ein Element mit popover und einer id, dazu einen <button> mit popovertarget, der auf diese id zeigt.
<button popovertarget="info-popover">
Popover öffnen
</button>
<div id="info-popover" popover>
<strong>Hallo!</strong>
<p>Ich bin ein Popover. Klick daneben oder
drücke ESC, um mich zu schließen.</p>
</div>Das war alles. Der Button öffnet das Popover, ein zweiter Klick schließt es wieder. Der Browser kümmert sich um das Ein- und Ausblenden, die ESC-Taste und den Klick daneben.
Wichtig: popovertarget funktioniert nur auf Buttons, also auf <button> oder <input> mit einem Button-Typ. Auf einem <div> oder <a> hat das Attribut keine Wirkung.
Standardmäßig zentriert der Browser das Popover in der Mitte des Viewports. Mit CSS kannst du es beliebig positionieren, zum Beispiel unter den auslösenden Button.
popovertargetaction: show, hide, toggle
03 / 14Ohne weitere Angabe toggelt ein Button mit popovertarget das Popover: Erster Klick öffnet, zweiter Klick schließt. Mit popovertargetaction legst du das Verhalten genauer fest:
Damit kannst du zum Beispiel einen eigenen Schließen-Button in das Popover setzen:
<button popovertarget="mein-popover" popovertargetaction="show">
Anzeigen
</button>
<button popovertarget="mein-popover" popovertargetaction="hide">
Verstecken
</button>
<button popovertarget="mein-popover" popovertargetaction="toggle">
Umschalten
</button>
<div id="mein-popover" popover="manual">
Ich lasse mich nur über die Buttons steuern.
</div>auto vs. manual: Light Dismiss
04 / 14Das popover-Attribut kennt zwei Werte, die das Schließ-Verhalten steuern. Schreibst du nur popover ohne Wert, gilt popover="auto".
popover="auto" bringt das sogenannte Light Dismiss mit: Ein Klick irgendwo außerhalb des Popovers schließt es, genauso wie die ESC-Taste. Öffnest du ein zweites auto-Popover, schließt sich das erste automatisch (außer die Popovers sind ineinander verschachtelt). Genau das Verhalten, das du von einem Dropdown-Menü erwartest.
popover="manual" schaltet Light Dismiss ab: Kein Klick daneben und keine ESC-Taste schließt das Popover. Es bleibt offen, bis es explizit geschlossen wird, per Button mit popovertargetaction="hide" oder per JavaScript. Außerdem können mehrere manuelle Popovers gleichzeitig offen sein. Das passt für Toast-Benachrichtigungen oder Panels, die der Nutzer bewusst wegklicken soll.
<button popovertarget="auto-pop">auto öffnen</button>
<button popovertarget="manual-pop">manual öffnen</button>
<div id="auto-pop" popover="auto">
popover="auto": Klick daneben oder ESC
schließt mich.
</div>
<div id="manual-pop" popover="manual">
<p>popover="manual": Ich bleibe offen,
bis du unten klickst.</p>
<button popovertarget="manual-pop" popovertargetaction="hide">
Schließen
</button>
</div>Der Top Layer: Schluss mit dem z-index-Kampf
05 / 14Vielleicht kennst du das: Ein Overlay soll über allem liegen, aber irgendein Element mit z-index: 9999 schiebt sich trotzdem davor. Oder ein Eltern-Element mit overflow: hidden schneidet dein Dropdown ab.
Popovers haben dieses Problem nicht, denn der Browser rendert sie im Top Layer. Das ist eine spezielle Ebene, die immer über dem gesamten restlichen Seiteninhalt liegt. Modale Dialoge und der Vollbildmodus nutzen dieselbe Ebene. Das bedeutet für dich:
- Kein
z-indexnötig, egal was der Rest der Seite treibt - Kein Abschneiden durch
overflow: hiddenauf Eltern-Elementen - Keine Probleme mit Stacking Contexts von
transformoderfilter
Du kannst das Popover irgendwo tief in deinem HTML verschachteln, es liegt beim Öffnen trotzdem über allem.
Styling mit :popover-open und ::backdrop
06 / 14Ein offenes Popover erreichst du in CSS über die Pseudo-Klasse :popover-open. Die Fläche dahinter stylst du mit dem Pseudo-Element ::backdrop, genau wie beim <dialog>. Standardmäßig ist der Backdrop bei Popovers komplett durchsichtig.
<style>
#styled-popover {
border: none;
border-radius: 14px;
padding: 20px 24px;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25);
}
/* Fläche hinter dem Popover abdunkeln */
#styled-popover::backdrop {
background: rgba(15, 23, 42, 0.4);
}
/* Nur im offenen Zustand animieren */
#styled-popover:popover-open {
animation: pop-in 0.2s ease-out;
}
@keyframes pop-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
</style>
<button popovertarget="styled-popover">
Gestyltes Popover öffnen
</button>
<div id="styled-popover" popover>
<h2>Schick!</h2>
<p>Abgedunkelter Hintergrund, Animation
und Schatten: alles nur CSS.</p>
</div>