details - Der Teufel steckt im Detail
- css
- html
HTML5 brachte viele neue Elemente, darunter 2009/10 auch einen Aufklappmechanismus mit details und summary, der nur mit HTML funktionierte.
Leider steckte der Teufel im Detail:
Viele Anwendungsfälle erforderten dann doch den Einsatz von JavaScript. 😟
Mittlerweile gibt es viele neue Pseudoelemente und ein „altes“ HTML-Attribut, die reine HTML- und CSS-Lösungen ermöglichen.
Zeit unseren Wiki-Artikel wieder zu überarbeiten und erneut vorzustellen:
Ein summary-Element erhält defaultmäßig ein dreieckiges Symbol in Textfarbe, dass beim Anklicken und Aufklappen seine Richtung ändert.
Dieses Symbol ist ein Pseudoelement, dass sich in den meisten Browsern über den ::marker-Selektor formatieren lässt, aber eben nicht in allen:
summary::-webkit-details-marker,
summary::marker {
content: " ↓ "; /* "Pfeil"-Symbols anstelle des Dreiecks */
color: green;
font-size: 2em;
font-weight: bold;
transition: all 0.5s;
}
details[open] > summary::-webkit-details-marker,
details[open] > summary::marker {
content: " ↑ ";
color: red;
}
Für den Safari benötigt man – zumindest für die content-Eigenschaft – im Jahre 2026 immer noch den proprietären Präfix -webkit-
Oft ist es besser den Marker auszublenden und durch ein anderes – frei stylebares Pseudoelement zu ersetzen:
Beim Aufklappen eines details-Elements gab es weitere CSS-Probleme: Der zu öffnende Inhalt konnte nur durch ein zusätzliches wrapper-div unabhängig vom summary-Element gestaltet werden. Dies ist mit dem neuen ::details-content-Selektor mittlerweile in allen Browsern möglich.
Beim Aufklappen war kein weicher Übergang in Form eines langsamen Aufschieben möglich.
details .content {
height: 0;
}
details[open] .content {
height: 100%;
}
Dies scheitert aus einem einfachen Grund:
In den früheren Fassungen unseres Tutorials gab es Ansätze, wie man mit JavaScript die tatsächliche Höhe des Inhalts ermittelt. Alternativ musste man das händisch ermitteln und als Magic number ins CSS schreiben - immer mit der Gefahr, dass der Wert irgendwann mal nicht passt.
details::details-content {
height: 0;
overflow-y: clip;
transition: 1s allow-discrete;
}
details[open]::details-content {
height: 15em;
height: calc-size(auto, size);
}
Die neue CSS-Funktion calc-size() löst dieses Problem; allerdings noch nicht im Firefox und Safari.
😟
Kann man mit reinem HTML mehrere details-Element so koppeln, dass sich beim Aufklappen eines Elements die anderen shcließen?
Ja, mit dem von Radio-buttons bekannten name-Attribut ist dies in allen Browsern möglich! Ganz ohne einsatz von JavaSript!
Jetzt endlich kann man details endlich uneingeschränkt nutzen!
Divi, ein Pagebuilder für Wordpress löst das so:
<div class="et_pb_module et_pb_accordion et_pb_accordion_0 custom_toggle_styling">
<div class="et_pb_toggle et_pb_module et_pb_accordion_item et_pb_accordion_item_0 et_pb_toggle_close">
<h5 class="et_pb_toggle_title">...</h5>
<div class="et_pb_toggle_content clearfix">
<p>...</p>
</div>
</div>
</div>
Mir fehlen die Worte.
Hallo
2. Aufklappen oder sanft ausfahren?
[…]
details::details-content { height: 0; overflow-y: clip; transition: 1s allow-discrete; } details[open]::details-content { height: 15em; height: calc-size(auto, size); }Die neue CSS-Funktion
calc-size()löst dieses Problem; allerdings noch nicht im Firefox und Safari.
Im LibreWolf 149.0-1, der dem Firefox 149 entsprechen sollte, öffnet und schließt sich das Details-Element auf smoothe Art. Das Update auf diese Version kam am letzten Freitag. Vielleicht kam das Feature erst mit dieser Version. 🤔
Danke jedenfalls für die Darstellung der Entwicklung. 👍
BTW
Divi, ein Pagebuilder für Wordpress löst das so:
<div class="et_pb_module et_pb_accordion et_pb_accordion_0 custom_toggle_styling"> <div class="et_pb_toggle et_pb_module et_pb_accordion_item et_pb_accordion_item_0 et_pb_toggle_close"> <h5 class="et_pb_toggle_title">...</h5> <div class="et_pb_toggle_content clearfix"> <p>...</p> </div> </div> </div>Mir fehlen die Worte.
Och, habe schon schlimmeres gesehen. Sachen, wo du dich fragst, wie weit Hühner wohl noch scheißen sollen.
Tschö, Auge
Servus!
Die neue CSS-Funktion
calc-size()löst dieses Problem; allerdings noch nicht im Firefox und Safari.Im LibreWolf 149.0-1, der dem Firefox 149 entsprechen sollte, öffnet und schließt sich das Details-Element auf smoothe Art. Das Update auf diese Version kam am letzten Freitag. Vielleicht kam das Feature erst mit dieser Version. 🤔
https://caniuse.com/mdn-css_types_calc-size
Ich glaube, dass das der Fallback mit der magic number von height: 17em ist.
Danke jedenfalls für die Darstellung der Entwicklung. 👍
Gern geschehen!
BTW
Divi, ein Pagebuilder für Wordpress löst das so:
<div class="et_pb_module et_pb_accordion et_pb_accordion_0 custom_toggle_styling"> <div class="et_pb_toggle et_pb_module et_pb_accordion_item et_pb_accordion_item_0 et_pb_toggle_close"> <h5 class="et_pb_toggle_title">...</h5> <div class="et_pb_toggle_content clearfix"> <p>...</p> </div> </div> </div>Mir fehlen die Worte.
Och, habe schon schlimmeres gesehen. Sachen, wo du dich fragst, wie weit Hühner wohl noch scheißen sollen.
Was mich so fuchst - ich hatte das 2019 mit details realisiert; anschließend ist ein Profi für viel Geld rübergegangen.
Herzliche Grüße
Matthias Scharwies
Hallo
Die neue CSS-Funktion
calc-size()löst dieses Problem; allerdings noch nicht im Firefox und Safari.Im LibreWolf 149.0-1, der dem Firefox 149 entsprechen sollte, öffnet und schließt sich das Details-Element auf smoothe Art.
Ich glaube, dass das der Fallback mit der magic number von
height: 17emist.
Nachdem ich es nach langem suchen gefunden habe[1], ja, isses. Schade. Es sieht auch nicht so aus, als würde das in absehbarer Zeit etwas werden.
BTW
Divi, ein Pagebuilder für Wordpress löst das so:
<div class="et_pb_module et_pb_accordion et_pb_accordion_0 custom_toggle_styling"> <div class="et_pb_toggle et_pb_module et_pb_accordion_item et_pb_accordion_item_0 et_pb_toggle_close"> <h5 class="et_pb_toggle_title">...</h5> <div class="et_pb_toggle_content clearfix"> <p>...</p> </div> </div> </div>Mir fehlen die Worte.
Och, habe schon schlimmeres gesehen. Sachen, wo du dich fragst, wie weit Hühner wohl noch scheißen sollen.
Was mich so fuchst - ich hatte das 2019 mit details realisiert; anschließend ist ein Profi für viel Geld rübergegangen.
Das kann ich nachvollziehen. Mich wurmt es auch, wenn eines meiner Projekte abgelöst wird und der Ersatz erkennbar technisch schlechter ist.
Tschö, Auge
Der Abschnitt für Pseudoelemente war in keinen Entwickerwerkzeugen zugeklappt. Ich habe das nicht gleich gesehen und mir einen Wolf nach der Angabe height: 17em; gesucht. ↩︎
@@Matthias Scharwies
Es ist problematisch, über einen Browser zu schreiben, ohne auf diesem zu testen. Da kommt dann auch mal Mist raus.
Für den Safari benötigt man im Jahre 2026 immer noch den proprietären Präfix -webkit-
Safari 26.3 zeigt keine Smileys, sondern immer noch die Dreiecke.
Nix mit ::-webkit-details-marker.
Auf iOS wird’s noch ekliger: Im geschlossenen Zustand wird statt ▶︎ das Emoji ▶️ gesetzt. Im geöffneten Zustand hingegen kein Emoji, sondern ▼. Unter Steve wäre das nicht passiert.
Was dagegen hilft, ist ::marker { font: 1em/0 monospace }.
Ja, das geht ohne -webkit-Präfix. Es ist nicht so, dass Safari ::marker nicht kennt.
🖖 Live long and prosper
Servus!
@@Matthias
Für den Safari benötigt man im Jahre 2026 immer noch den proprietären Präfix -webkit-
@Bertie könntest du bitte noch mal schauen?
Was dagegen hilft, ist
::marker { font: 1em/0 monospace }.Ja, das geht ohne
-webkit-Präfix. Es ist nicht so, dass Safari::marker
Herzliche Grüße
Matthias Scharwies
Salü zusammen
Auf iPhone und iPad mit aktuellem Betriebssystem erscheinen bei mir in Gunnars Testseite einfache ▶︎ und ▼.
Mit oder ohne -webkit-Präfix sehe ich keinen Unterschied.
Von ::marker interpretiert Safari einzig color und font-size, wie caniuse schreibt.
Für andere Symbole funktionieren auf meinen Desktop- und Mobil-Safari einzig aus dem Wiki-Artikel die Tricks in den Beispielen «CSS-Ersatz durch Pseudoelement», «Tooltip mit details», «Akkordeon» und «Exklusives Akkordeon».
Also falls das Symbol auch in Safari wichtig sein sollte: So etwas einsetzen wie Sonderzeichen, Emoji oder ein inline-SVG per summary::after { content: " ↓ "; … .
Gruss, Bertie
@@Matthias Scharwies
Hier steckt der Teufel auch schon im Titel. Nicht im, sondern nach „details“.
Die Zeichenfolge Leerzeichen – Bindestrich – Leerzeichen im Text[1] ist immer falsch; dort muss ein Gedankenstrich (Halbgeviertstrich) stehen:

Dasselbe bei:
Na kucke, geht doch:
Da ist es schon richtig – fast: Der schließende Gedankenstrich fehlt (und ein Komma auch): Oft ist es besser, den Marker auszublenden und durch ein anderes – frei stylebares – Pseudoelement zu ersetzen.
Wenn das nach zu viel Mut zur Lücke aussieht, tut’s auch ein Komma: Oft ist es besser, den Marker auszublenden und durch ein anderes, frei stylebares Pseudoelement zu ersetzen.
🖖 Live long and prosper
nicht in Code, wo - für das Minuszeichen steht. ↩︎
FYI: MDN nutzt für die Darstellung des ::marker-Elements (zumindest ab und an) eine Transformation und dreht den jeweils um 90°. Beispielsweise mit
[open] :is(.left-sidebar details) > summary {
&::before { transform: rotate(90deg); }
}
Hallo Marker,
offensichtlich tun sie das nicht, aber ich glaube, so hattest Du es auch gemeint. Die Transformation gilt für ::before, nicht ::marker, und das muss auch so sein, weil ::marker ein ziemlicher Sturschädel ist, was CSS angeht.
Rolf
Ja, ich hatte es so gmeint. Jedenfalls „ungefähr so“.
Vor kuzrem habe ich übrigens irgendwo gelesen, daß ::marker wohl etwas wie die Oberfläche eines Konstrukts sein soll, das anscheinend als eigentliches Anezeige-Element (etwas wie?) ein display: list-item in sich trägt. — Was ein (der?) Grund für die Sturheit sein könnte.
Servus!
Ja, ich hatte es so gmeint. Jedenfalls „ungefähr so“.
Der Blog-Artikel sollte ja auf den ausführlicheren Wiki-Artikel hinweisen:
Sowohl dort als auch im MDN-Artikel wird ::marker ausgeblendet und dann
mit einem ::after, bzw ::before-Pseudoelement gearbeitet.
Vor kuzrem habe ich übrigens irgendwo gelesen, daß
::markerwohl etwas wie die Oberfläche eines Konstrukts sein soll, das anscheinend als eigentliches Anezeige-Element (etwas wie?) eindisplay: list-itemin sich trägt. — Was ein (der?) Grund für die Sturheit sein könnte.
Ja, das steht alles im dort verlinkten Wiki-Artikel zum ::marker-Selektor:
Herzliche Grüße
Matthias Scharwies