display
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die display
-Eigenschaft von CSS legt fest, ob ein Element als Block- oder Inline-Box behandelt wird und welcher Layout-Typ für seine Kinder verwendet wird, wie z.B. flow layout, grid oder flex.
Formell legt die display
-Eigenschaft die inneren und äußeren Display-Typen eines Elements fest. Der äußere Typ bestimmt die Teilnahme eines Elements am Flow-Layout; der innere Typ legt das Layout der Kinder fest. Einige Werte von display
sind in ihren eigenen individuellen Spezifikationen vollständig definiert; zum Beispiel sind die Details dessen, was passiert, wenn display: flex
erklärt wird, in der CSS-Flexible-Box-Modellspezifikation definiert.
Probieren Sie es aus
Syntax
/* precomposed values */
display: block;
display: inline;
display: inline-block;
display: flex;
display: inline-flex;
display: grid;
display: inline-grid;
display: flow-root;
/* box generation */
display: none;
display: contents;
/* multi-keyword syntax */
display: block flex;
display: block flow;
display: block flow-root;
display: block grid;
display: inline flex;
display: inline flow;
display: inline flow-root;
display: inline grid;
/* other values */
display: table;
display: table-row; /* all table elements have an equivalent CSS display value */
display: list-item;
/* Global values */
display: inherit;
display: initial;
display: revert;
display: revert-layer;
display: unset;
Die CSS-Eigenschaft display
wird unter Verwendung von Schlüsselwortwerten angegeben.
Gruppierte Werte
Die Schlüsselwortwerte können in sechs Wertkategorien gruppiert werden.
Außen
<display-outside>
-
Diese Schlüsselwörter spezifizieren den äußeren Display-Typ des Elements, der im Wesentlichen seine Rolle im Flow-Layout festlegt:
block
-
Das Element erzeugt eine Blockbox, die sowohl vor als auch nach dem Element Zeilenumbrüche erzeugt, wenn es im normalen Fluss ist.
inline
-
Das Element erzeugt eine oder mehrere Inline-Boxen, die vor oder nach sich selbst keine Zeilenumbrüche erzeugen. Im normalen Fluss wird das nächste Element in derselben Zeile sein, wenn es Platz gibt.
Hinweis:
Wenn Browser, die die Multi-Keyword-Syntax unterstützen, auf eine Display-Eigenschaft stoßen, die nur einen äußeren Wert hat (z.B. display: block
oder display: inline
), wird der innere Wert auf flow
gesetzt (z.B. display: block flow
und display: inline flow
).
Hinweis:
Um sicherzustellen, dass Layouts auf älteren Browsern funktionieren, können Sie die Ein-Wert-Syntax verwenden. Zum Beispiel könnte display: inline flex
folgendes Fallback haben
.container {
display: inline-flex;
display: inline flex;
}
Siehe Verwendung der Multi-Keyword-Syntax mit CSS display für weitere Informationen.
Innen
<display-inside>
-
Diese Schlüsselwörter spezifizieren den inneren Display-Typ des Elements, der den Typ des Formatierungskontextes definiert, in dem sein Inhalt ausgelegt ist (vorausgesetzt, es handelt sich um ein nicht ersetztes Element):
flow
-
Das Element legt seinen Inhalt unter Verwendung des Flow-Layouts (Block-und-Inline-Layout) aus.
Wenn sein äußerer Display-Typ
inline
ist und es an einem Block- oder Inline-Formatierungskontext teilnimmt, dann generiert es eine Inline-Box. Andernfalls generiert es eine Blockbox.Abhängig vom Wert anderer Eigenschaften (wie
position
,float
, oderoverflow
) und ob es selbst an einem Block- oder Inline-Formatierungskontext teilnimmt, etabliert es entweder einen neuen Blockformatierungskontext (BFC) für seinen Inhalt oder integriert seinen Inhalt in den übergeordneten Formatierungskontext. flow-root
-
Das Element erzeugt eine Blockbox, die einen neuen Blockformatierungskontext etabliert und den Punkt definiert, an dem die Formatierungswurzel liegt.
table
-
Diese Elemente verhalten sich wie HTML-
<table>
-Elemente. Es definiert eine blocklevel Box. flex
-
Das Element verhält sich wie ein Block-Level-Element und legt seinen Inhalt gemäß dem Flexbox-Modell aus.
grid
-
Das Element verhält sich wie ein Block-Level-Element und legt seinen Inhalt gemäß dem Grid-Modell aus.
ruby
-
Das Element verhält sich wie ein Inline-Level-Element und legt seinen Inhalt gemäß dem Ruby-Formatierungsmodell aus. Es verhält sich wie die entsprechenden HTML-
<ruby>
-Elemente.
Hinweis:
Wenn Browser, die die Multi-Keyword-Syntax unterstützen, auf eine Display-Eigenschaft stoßen, die nur einen inneren Wert hat (z.B. display: flex
oder display: grid
), wird der äußere Wert auf block
gesetzt (z.B. display: block flex
und display: block grid
).
Listenelement
<display-listitem>
-
Das Element erzeugt eine Blockbox für den Inhalt und eine separate Listenelement-Inline-Box.
Ein einzelner Wert von list-item
lässt das Element sich wie ein Listenelement verhalten. Dies kann zusammen mit list-style-type
und list-style-position
verwendet werden.
list-item
kann auch mit jedem <display-outside>
Schlüsselwort und dem flow
oder flow-root
<display-inside>
Schlüsselwort kombiniert werden.
Hinweis:
In Browsern, die die Multi-Keyword-Syntax unterstützen, wird, wenn kein innerer Wert angegeben ist, der Standardwert flow
verwendet.
Wenn kein äußerer Wert angegeben ist, hat die Hauptbox einen äußeren Display-Typ von block
.
Intern
<display-internal>
-
Einige Layoutmodelle wie
table
undruby
haben eine komplexe interne Struktur mit mehreren verschiedenen Rollen, die ihre Kinder und Nachkommen spielen können. Dieser Abschnitt definiert diese "internen" Display-Werte, die nur innerhalb dieses bestimmten Layout-Modus eine Bedeutung haben.table-row-group
-
Diese Elemente verhalten sich wie HTML-
<tbody>
-Elemente. table-header-group
-
Diese Elemente verhalten sich wie HTML-
<thead>
-Elemente. -
Diese Elemente verhalten sich wie HTML-
<tfoot>
-Elemente. table-row
-
Diese Elemente verhalten sich wie HTML-
<tr>
-Elemente. table-cell
-
Diese Elemente verhalten sich wie HTML-
<td>
-Elemente. table-column-group
-
Diese Elemente verhalten sich wie HTML-
<colgroup>
-Elemente. table-column
-
Diese Elemente verhalten sich wie HTML-
<col>
-Elemente. -
Diese Elemente verhalten sich wie HTML-
<caption>
-Elemente. ruby-base
-
Diese Elemente verhalten sich wie HTML-
<rb>
-Elemente. ruby-text
-
Diese Elemente verhalten sich wie HTML-
<rt>
-Elemente. ruby-base-container
-
Diese Elemente werden als anonyme Boxen generiert.
ruby-text-container
-
Diese Elemente verhalten sich wie HTML-
<rtc>
-Elemente.
Box
<display-box>
-
Diese Werte definieren, ob ein Element überhaupt Display-Boxen erzeugt.
contents
-
Diese Elemente erzeugen selbst keine spezifische Box. Sie werden durch ihre Pseudo-Box und ihre Kinder-Boxen ersetzt. Beachten Sie, dass die CSS Display Level 3 Spezifikation definiert, wie der
contents
-Wert "ungewöhnliche Elemente" beeinflussen sollte – Elemente, die nicht rein durch CSS-Boxen-Konzepte wiedergegeben werden, wie ersetzte Elemente. Siehe Anhang B: Auswirkungen von display: contents auf ungewöhnliche Elemente für weitere Details. none
-
Schaltet die Anzeige eines Elements aus, so dass es keinen Einfluss auf das Layout hat (das Dokument wird gerendert, als ob das Element nicht existiert). Alle Nachkommenelemente haben ebenfalls ihre Anzeige ausgeschaltet. Um ein Element den Platz einnehmen zu lassen, den es normalerweise einnehmen würde, jedoch ohne tatsächlich etwas darzustellen, verwenden Sie stattdessen die Eigenschaft
visibility
.
Vorab zusammengesetzt
<display-legacy>
-
CSS 2 verwendete eine Einzelschlüsselwort-Syntax für die
display
-Eigenschaft, die getrennte Schlüsselwörter für Block- und Inline-Varianten desselben Layout-Modus erforderte.inline-block
-
Das Element erzeugt eine Blockbox, die als ein einzelnes Inline-Element mit dem umgebenden Inhalt geflossen wird (verhält sich ähnlich wie ein ersetztes Element).
Es ist äquivalent zu
inline flow-root
. inline-table
-
Der
inline-table
-Wert hat keine direkte Entsprechung in HTML. Es verhält sich wie ein HTML-<table>
-Element, jedoch als Inline-Box und nicht als Block-Level-Box. Innerhalb der Tabellen-Box ist ein Block-Level-Kontext.Es ist äquivalent zu
inline table
. inline-flex
-
Das Element verhält sich wie ein Inline-Level-Element und legt seinen Inhalt gemäß dem Flexbox-Modell aus.
Es ist äquivalent zu
inline flex
. inline-grid
-
Das Element verhält sich wie ein Inline-Level-Element und legt seinen Inhalt gemäß dem Grid-Modell aus.
Es ist äquivalent zu
inline grid
.
Welche Syntax sollten Sie verwenden?
Das CSS Display Modul beschreibt eine Multi-Keyword-Syntax für Werte, die Sie mit der display
-Eigenschaft verwenden können, um den äußeren und inneren Display explizit zu definieren. Die ein Keyword-Werte (vorgefertigte <display-legacy>
-Werte) werden aus Gründen der Rückwärtskompatibilität unterstützt.
Zum Beispiel können Sie mit zwei Werten einen Inline-Flex-Container wie folgt angeben:
.container {
display: inline flex;
}
Dies kann auch mit dem vorab zusammengesetzten Einzelwert angegeben werden:
.container {
display: inline-flex;
}
Weitere Informationen zu diesen Änderungen finden Sie im Leitfaden zur Verwendung der Multi-Keyword-Syntax mit CSS display.
Global
/* Global values */
display: inherit;
display: initial;
display: unset;
Beschreibung
Die einzelnen Seiten für die verschiedenen Typen von Werten, die auf display
gesetzt werden können, enthalten zahlreiche Beispiele dieser Werte in Aktion – siehe den Syntaxabschnitt. Darüber hinaus finden Sie folgende Materialien, die die verschiedenen Werte von Display ausführlich behandeln.
Multi-Keyword-Werte
CSS-Flow-Layout (display: block, display: inline)
display: flex
- Grundkonzepte von Flexbox
- Ausrichten von Elementen in einem Flexcontainer
- Steuern von Verhältnissen von Flex-Elementen entlang der Hauptachse
- Meistern des Umschlingens von Flex-Elementen
- Sortieren von Flex-Elementen
- Das Verhältnis von Flexbox zu anderen Layout-Methoden
- Typische Anwendungsfälle von Flexbox
display: grid
- Grundkonzepte des Grid-Layouts
- Das Verhältnis zu anderen Layout-Methoden
- Linienbasierte Platzierung
- Grid-Template-Bereiche
- Layout mit benannten Gitterlinien
- Automatische Platzierung im Grid-Layout
- Box-Ausrichtung im Grid-Layout
- Gitter, logische Werte und Schreibmodi
- CSS-Grid-Layout und Barrierefreiheit
- CSS-Grid-Layout und progressive Verbesserung
- Verwirklichung häufiger Layouts mit Gittern
Animieren von display
Unterstützende Browser animieren display
mit einem diskreten Animationstyp. Dies bedeutet im Allgemeinen, dass die Eigenschaft zwischen zwei Werten 50% beim Animieren zwischen den beiden flippen wird.
Es gibt eine Ausnahme, wenn zu oder von display: none
animiert wird. In diesem Fall wird der Browser zwischen den beiden Werten flippen, so dass der animierte Inhalt während der gesamten Animationsdauer angezeigt wird. Zum Beispiel:
- Wenn
display
vonnone
zublock
(oder einem anderen sichtbarendisplay
-Wert) animiert wird, wird der Wert bei0%
der Animationsdauer zublock
flippen, so dass es während der gesamten Zeit sichtbar ist. - Wenn
display
vonblock
(oder einem anderen sichtbarendisplay
-Wert) zunone
animiert wird, wird der Wert bei100%
der Animationsdauer zunone
flippen, so dass es während der gesamten Zeit sichtbar ist.
Dieses Verhalten ist nützlich, um Eintritts- und Austrittsanimationen zu erstellen, bei denen Sie z.B. einen Container aus dem DOM mit display: none
entfernen möchten, aber möchten, dass er mit opacity
ausblendet, anstatt sofort zu verschwinden.
Beim Animieren von display
mit CSS-Animationen müssen Sie den Anfangs-display
-Wert in einem expliziten Keyframe angeben (z.B. mit 0%
oder from
). Siehe Verwendung von CSS-Animationen für ein Beispiel.
Beim Animieren von display
mit CSS-Übergängen sind zwei zusätzliche Funktionen erforderlich:
@starting-style
gibt Startwerte für Eigenschaften an, von denen Sie aus übertragen möchten, wenn das animierte Element erstmals angezeigt wird. Dies ist notwendig, um unerwartetes Verhalten zu vermeiden. Standardmäßig werden CSS-Übergänge nicht bei der ersten Stilaktualisierung eines Elements ausgelöst oder wenn sich derdisplay
-Typ vonnone
zu einem anderen Typ ändert.transition-behavior: allow-discrete
muss auf der Deklarationtransition-property
(oder der Verkürzungtransition
) gesetzt werden, umdisplay
-Übergänge zu aktivieren.
Für Beispiele zur Umsetzung der display
-Eigenschaft siehe die Seiten @starting-style
und transition-behavior
.
Barrierefreiheit
display: none
Die Verwendung eines display
-Wertes von none
auf einem Element entfernt es aus dem Barrierefreiheitsbaum. Dies wird dazu führen, dass das Element und alle seine Nachkommenelemente von Bildschirmlesetechnologie nicht mehr angesagt werden.
Wenn Sie das Element visuell verbergen möchten, ist eine barrierefreiere Alternative, eine Kombination von Eigenschaften zu verwenden, um es visuell vom Bildschirm zu entfernen, es jedoch für unterstützende Technologien wie Bildschirmleser verfügbar zu machen.
Obwohl display: none
den Inhalt aus dem Barrierefreiheitsbaum entfernt, werden Elemente, die versteckt, aber von sichtbaren Elementen in deren aria-describedby
oder aria-labelledby
Attributen referenziert werden, unterstützenden Technologien zugänglich gemacht.
display: contents
Aktuelle Implementierungen in einigen Browsern entfernen jedes Element mit einem display
-Wert von contents
aus dem Barrierefreiheitsbaum (aber die Nachkommen bleiben erhalten). Dies führt dazu, dass das Element selbst nicht mehr von Bildschirmlesetechnologie angesagt wird. Dies ist ein inkorrektes Verhalten gemäß der CSS-Spezifikation.
Tabellen
In einigen Browsern verändert das Ändern des display
-Wertes eines <table>
-Elements zu block
, grid
oder flex
seine Darstellung im Barrierefreiheitsbaum. Dies führt dazu, dass die Tabelle von Bildschirmlesetechnologie nicht mehr ordnungsgemäß angesagt wird.
Formale Definition
Anfangswert | inline |
---|---|
Anwendbar auf | alle Elemente |
Vererbt | Nein |
Berechneter Wert | wie der angegebene Wert, außer für positionierte und umfließende Elemente und das Wurzelelement. In beiden Fällen kann der berechnete Wert ein Schlüsselwort sein, das nicht dem angegebenen entspricht. |
Animationstyp | Discrete behavior except when animating to or from none is visible for the entire duration |
Formale Syntax
display =
[ <display-outside> || <display-inside> ] |
<display-listitem> |
<display-internal> |
<display-box> |
<display-legacy> |
<display-outside> || [ <display-inside> | math ]
<display-outside> =
block |
inline |
run-in
<display-inside> =
flow |
flow-root |
table |
flex |
grid |
ruby
<display-listitem> =
<display-outside>? &&
[ flow | flow-root ]? &&
list-item
<display-internal> =
table-row-group |
table-header-group |
table-footer-group |
table-row |
table-cell |
table-column-group |
table-column |
table-caption |
ruby-base |
ruby-text |
ruby-base-container |
ruby-text-container
<display-box> =
contents |
none
<display-legacy> =
inline-block |
inline-table |
inline-flex |
inline-grid
Beispiele
Vergleich von display-Werten
In diesem Beispiel haben wir zwei Block-Level-Container-Elemente, von denen jedes drei Inline-Kinder hat. Darunter befindet sich ein Auswahlelement, das es Ihnen ermöglicht, verschiedene display
-Werte auf die Container anzuwenden, sodass Sie vergleichen und kontrastieren können, wie die verschiedenen Werte das Layout des Elements und das ihrer Kinder beeinflussen.
Wir haben padding
und background-color
auf die Container und ihre Kinder angewendet, sodass es leichter ist, den Effekt der Display-Werte zu sehen.
HTML
<article class="container">
<span>First</span>
<span>Second</span>
<span>Third</span>
</article>
<article class="container">
<span>First</span>
<span>Second</span>
<span>Third</span>
</article>
<div>
<label for="display">Choose a display value:</label>
<select id="display">
<option selected>block</option>
<option>block flow</option>
<option>inline</option>
<option>inline flow</option>
<option>flow</option>
<option>flow-root</option>
<option>block flow-root</option>
<option>table</option>
<option>block table</option>
<option>flex</option>
<option>block flex</option>
<option>grid</option>
<option>block grid</option>
<option>list-item</option>
<option>block flow list-item</option>
<option>inline flow list-item</option>
<option>block flow-root list-item</option>
<option>inline flow-root list-item</option>
<option>contents</option>
<option>none</option>
<option>inline-block</option>
<option>inline flow-root</option>
<option>inline-table</option>
<option>inline table</option>
<option>inline-flex</option>
<option>inline flex</option>
<option>inline-grid</option>
<option>inline grid</option>
</select>
</div>
CSS
html {
font-family: helvetica, arial, sans-serif;
letter-spacing: 1px;
padding-top: 10px;
}
article {
background-color: red;
}
article span {
background-color: black;
color: white;
margin: 1px;
}
article,
span {
padding: 10px;
border-radius: 7px;
}
article,
div {
margin: 20px;
}
JavaScript
const articles = document.querySelectorAll(".container");
const select = document.querySelector("select");
function updateDisplay() {
articles.forEach((article) => {
article.style.display = select.value;
});
}
select.addEventListener("change", updateDisplay);
updateDisplay();
Ergebnis
Beachten Sie, dass einige Multi-Keyword-Werte zur Illustration hinzugefügt wurden, die folgende Entsprechungen haben:
block
=block flow
inline
=inline flow
flow
=block flow
flow-root
=block flow-root
table
=block table
flex
=block flex
grid
=block grid
list-item
=block flow list-item
inline-block
=inline flow-root
inline-table
=inline table
inline-flex
=inline flex
inline-grid
=inline grid
Weitere Beispiele finden Sie auf den Seiten für jeden separaten Display-Typ unter Gruppierte Werte.
Spezifikationen
Specification |
---|
CSS Display Module Level 3 # the-display-properties |
Browser-Kompatibilität
BCD tables only load in the browser