Menu

CSS Display: block, inline, inline-block, none und flex

Die Eigenschaft display entscheidet, wie ein Element am Layout teilnimmt. Hier lernst du block, inline und inline-block mit vermessenen Boxen nebeneinander, display none vs. visibility hidden und wo flex, grid, flow-root und contents hingehören.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Was display macht

Jedes Element hat einen display-Wert, der entscheidet, wie es angeordnet wird. Die drei, denen du zuerst begegnest, sind block, inline und inline-block. Hier sind drei identische Boxen, mit gleicher width, height, gleichem padding und margin, nur display ist verschieden:

blockinlineinline-block
Beginnt in neuer ZeileJaNeinNein
Breite standardmäßigFüllt den ContainerPasst sich dem Inhalt anPasst sich dem Inhalt an
width und heightGeltenIgnoriertGelten
Vertikales MarginGiltIgnoriertGilt
Vertikales PaddingSchiebt InhaltGemalt, schiebt Zeilen aber nicht auseinanderSchiebt Inhalt
Typische Elementediv, p, h1, ul, sectionspan, a, strong, embutton, input, img (ersetzte Elemente verhalten sich so)

In der Vorschau steht die Block-Box in einer eigenen Zeile und ist 120px breit. Die Inline-Box ignoriert Breite und Höhe und umschließt nur ihr Wort, und ihr vertikales Padding und ihr Rahmen ragen über und unter die Zeile hinaus, ohne die Zeile höher zu machen. Die inline-block-Box bleibt in der Textzeile, behält aber ihre volle Größe.

display: block

Ein Block-Element nimmt die ganze verfügbare Breite ein und schiebt alles, was folgt, in eine neue Zeile. Wenn du einen Link zu einem Block machst, wird eine ganze Zeile klickbar:

.menu a {
  display: block;       /* the full row is the link */
  padding: 10px 16px;
}

Die Breite eines Blocks lässt sich setzen, und sobald er eine hat, zentriert ihn margin: 0 auto, wie die Seite div zentrieren zeigt.

display: inline-block

inline-block ist der Mittelweg: Es fließt wie ein Wort in der Zeile, aber du kannst ihm eine Größe geben. Das ist praktisch für Badges, Buttons und Icons im Text:

Mehrere inline-block-Boxen in einer Reihe bekommen durch den Leerraum im HTML eine kleine Lücke dazwischen. Für Reihen von Boxen ist display: flex am Elternelement das bessere Werkzeug.

display: none vs. visibility: hidden

Beides macht ein Element unsichtbar. Der Unterschied ist, ob es seinen Platz behält:

display: nonevisibility: hiddenopacity: 0
Nimmt Platz einNeinJaJa
AnklickbarNeinNeinJa
Von Screenreadern gelesenNeinNeinJa
Lässt sich weich animierenNeinNeinJa

Das HTML-Attribut hidden bewirkt über das Stylesheet des Browsers dasselbe wie display: none. Das heißt, jede CSS-Regel, die display am Element setzt (zum Beispiel .card { display: flex; }), überschreibt es, und das Element ist wieder sichtbar. Füge [hidden] { display: none !important; } hinzu, wenn dich das trifft.

Um etwas optisch auszublenden, es aber für Screenreader zu behalten (etwa ein Label für einen Icon-Button), nimm statt display: none eine Klasse für „visuell verborgen“.

display: flex und display: grid

Diese beiden machen ein Element zu einem Layout-Container für seine Kinder:

  • display: flex ordnet Kinder in einer Zeile oder Spalte an, mit Kontrolle über Ausrichtung und Abstände. Siehe Flexbox.
  • display: grid platziert Kinder gleichzeitig in Zeilen und Spalten.

Der Container selbst bleibt ein Block. inline-flex und inline-grid machen dasselbe für die Kinder, lassen den Container aber inline fließen, wie inline-block.

Die anderen Werte

WertWas er macht
flow-rootEin Block, der seine Floats einschließt und verhindert, dass Margins von Kindern herausrutschen; der moderne „Clearfix“
contentsDie eigene Box des Elements verschwindet, und seine Kinder verhalten sich wie Kinder seines Elternelements. Vermeide es an Buttons, Listen und Tabellen: Manche Browser verlieren dabei die Bedeutung des Elements für Screenreader
list-itemEin Block mit Listenmarkierung, der Standard für li
table, table-row, table-cellTabellenlayout für Elemente, die keine Tabellen sind
inline-flex, inline-gridEin Flex- oder Grid-Container, der inline steht

Häufige Fehler

  • width oder height an einem span oder a setzen. Inline-Elemente ignorieren sie. Nimm inline-block oder block.
  • Vertikales Margin an einem Inline-Element. Wird ebenfalls ignoriert. Gleiche Lösung.
  • display: none nutzen, um Text für Screenreader zu verstecken. Es versteckt ihn auch vor ihnen.
  • Erwarten, dass ein Kind in einem Elternelement mit display: none erscheint. In einem ausgeblendeten Elternelement wird nichts dargestellt.
  • Eine display-Regel überschreibt das Attribut hidden. Die CSS-Regel gewinnt.
  • Versuchen, display zu animieren. display: none blendet das Element sofort aus, ohne Übergang; animiere opacity und schalte display (oder visibility) am Ende um.

Häufig gestellte Fragen

Was ist der Unterschied zwischen block, inline und inline-block?

Ein block-Element beginnt in einer neuen Zeile und füllt die verfügbare Breite. Ein inline-Element fließt im Text mit und ignoriert width, height und vertikale Margins. inline-block fließt wie inline im Text mit, akzeptiert aber Breite, Höhe, Padding und Margins wie ein Block.

Was macht display: none?

Es entfernt das Element vollständig von der Seite: Es nimmt keinen Platz ein, wird nicht dargestellt und ist für Screenreader verborgen. Seine Kinder sind mit ausgeblendet und lassen sich nicht mit einem eigenen display-Wert anzeigen.

Was ist der Unterschied zwischen display: none und visibility: hidden?

display: none entfernt das Element und seinen Platz. visibility: hidden macht es unsichtbar, behält aber seinen Platz im Layout, sodass sich nichts verschiebt.

Ist ein div standardmäßig block oder inline?

Block. div, p, Überschriften, ul, section und form sind standardmäßig block; span, a, strong, em, img, input und button sind inline oder inline-block.

Warum haben inline-block-Elemente eine Lücke dazwischen?

Der Leerraum zwischen den Tags im HTML wird als Leerzeichen dargestellt, genau wie zwischen Wörtern. Nimm stattdessen display: flex mit gap am Elternelement oder entferne den Leerraum.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S