Suche…


Einführung

Das Flexible Box-Modul oder kurz „Flexbox“ ist ein für Benutzeroberflächen entwickeltes Boxmodell. Mit diesem können Benutzer den Platz zwischen Elementen in einem Container so ausrichten und verteilen, dass sich Elemente vorhersehbar verhalten, wenn das Seitenlayout unterschiedliche, unbekannte Elemente berücksichtigen muss Bildschirmgrößen. Ein Flex-Container erweitert Elemente, um den verfügbaren Platz zu füllen, und verkleinert sie, um ein Überlaufen zu verhindern.

Syntax

  • Anzeige: Flex;
  • Flex-Richtung: Reihe | Zeilenumkehrung | Spalte | Spaltenumkehrung;
  • Flex-Wrap: Nowrap | wickeln | Wrap-Reverse;
  • Flex-Flow: <'Flex-Richtung'> || <'flex-wrap'>
  • Inhalt rechtfertigen: Flex-Start | Flex-Ende | Zentrum | Leerzeichen | Raum um;
  • Ausrichtungsartikel: Flex-Start | Flex-Ende | Zentrum | Grundlinie | strecken;
  • Inhalt ausrichten: Flex-Start | Flex-Ende | Zentrum | Leerzeichen | Raum um | strecken;
  • Reihenfolge: <Ganzzahl>;
  • Flex-Grow: <Nummer>; / * default 0 * /
  • Flex-Shrink: <Nummer>; / * default 1 * /
  • Flex-Basis: <Länge> | Auto; / * default auto * /
  • flex: keine | [<'flex-grow'> <'flex-shrink'>? || <'flex-basis'>]
  • align-self: auto | Flex-Start | Flex-Ende | Zentrum | Grundlinie | strecken;

Bemerkungen

Vender-Präfixe

  • Anzeige: -webkit-box; / * Chrome <20 * /
  • Anzeige: -webkit-flex; / * Chrome 20+ * /
  • Anzeige: -Moz-Box; /* Feuerfuchs */
  • Anzeige: -ms-flexbox; / * IE * /
  • Anzeige: Flex; / * Moderne Browser * /

Ressourcen

Klebrige Fußzeile mit variabler Höhe

Dieser Code erstellt eine klebrige Fußzeile. Wenn der Inhalt das Ende des Ansichtsfensters nicht erreicht, bleibt die Fußzeile am unteren Rand des Ansichtsfensters. Wenn der Inhalt über den unteren Rand des Ansichtsfensters hinausragt, wird auch die Fußzeile aus dem Ansichtsfenster verschoben. Zeige Ergebnis

HTML:

<div class="header">
  <h2>Header</h2>
</div>

<div class="content">
  <h1>Content</h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. </p>
</div>

<div class="footer">
  <h4>Footer</h4>
</div>

CSS:

html, body {
  height: 100%;
}

body {
  display: flex;
  flex-direction: column;
}

.content {
  /* Include `0 auto` for best browser compatibility. */
  flex: 1 0 auto;
}

.header, .footer {
  background-color: grey;
  color: white;
  flex: none;
}

Holy Grail Layout mit Flexbox

Holy Grail Layout ist ein Layout mit einer festen Höhe Kopf und Fußzeile und einem Zentrum mit 3 Spalten. Die 3 Spalten enthalten ein Sidenav mit fester Breite, ein Fluidzentrum und eine Spalte für andere Inhalte wie Anzeigen (das Fluidzentrum erscheint zuerst im Markup). Mit CSS Flexbox kann dies mit einem sehr einfachen Markup erreicht werden:

HTML-Markup:

<div class="container">
  <header class="header">Header</header>
  <div class="content-body">
    <main class="content">Content</main>
    <nav class="sidenav">Nav</nav>
    <aside class="ads">Ads</aside>
  </div>
  <footer class="footer">Footer</footer>
</div>

CSS:

body {
  margin: 0;
  padding: 0;
}

.container {
  display: flex;
  flex-direction: column;
  height: 100vh;
}

.header {
  flex: 0 0 50px;
}

.content-body {
  flex: 1 1 auto;
  
  display: flex;
  flex-direction: row;
}

.content-body .content {
  flex: 1 1 auto;
  overflow: auto;
}

.content-body .sidenav {
  order: -1;
  flex: 0 0 100px;
  overflow: auto;
}

.content-body .ads {
  flex: 0 0 100px;
  overflow: auto;
}

.footer {
  flex: 0 0 50px;
}

Demo

Perfekt abgestimmte Knöpfe in Karten mit Flexbox

Heutzutage ist es ein regelmäßiges Muster im Design, die Aufrufe der Aktionen in den darin enthaltenen Karten vertikal wie folgt auszurichten:

Was wir erreichen wollen

Dies kann durch einen speziellen Trick mit der flexbox

HTML

<div class="cards">
  <div class="card">
    <p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur reprehenderit culpa esse enim mollit labore dolore voluptate ullamco et ut sed qui minim.</p>
    <p><button>Action</button></p>
  </div>
  <div class="card">
    <p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur reprehenderit culpa esse enim mollit labore dolore voluptate ullamco et ut sed qui minim.</p>
    <p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur reprehenderit culpa esse enim mollit labore dolore voluptate ullamco et ut sed qui minim.</p>
    <p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur reprehenderit culpa esse enim mollit labore dolore voluptate ullamco et ut sed qui minim.</p>
    <p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur reprehenderit culpa esse enim mollit labore dolore voluptate ullamco et ut sed qui minim.</p>
    <p><button>Action</button></p>
  </div>
</div>

Zuerst verwenden wir CSS, um die display: flex; anzuwenden display: flex; zum Behälter. Dadurch werden 2 Spalten mit gleicher Höhe erstellt, in denen der Inhalt natürlich fließt

CSS

.cards {
    display: flex;
}
.card {
    border: 1px solid #ccc;
    margin: 10px 10px;
    padding: 0 20px;
}
button {
    height: 40px;
    background: #fff;
    padding: 0 40px;
    border: 1px solid #000;
}
p:last-child {
    text-align: center;
}

Das Layout ändert sich und wird so:

Was wir erreichen wollen

Um die Schaltflächen an den unteren Rand des Blocks zu verschieben, müssen Sie die display: flex; anwenden display: flex; auf die Karte selbst, wobei die Richtung auf column . Danach sollten wir das letzte Element in der Karte auswählen und den margin-top auf auto . Dadurch wird der letzte Absatz an den unteren Rand der Karte geschoben und das gewünschte Ergebnis erzielt.

Finales CSS:

.cards {
    display: flex;
}
.card {
    border: 1px solid #ccc;
    margin: 10px 10px;
    padding: 0 20px;
    display: flex;
    flex-direction: column;
}
button {
    height: 40px;
    background: #fff;
    padding: 0 40px;
    border: 1px solid #000;
}
p:last-child {
    text-align: center;
    margin-top: auto;
}

Dynamische vertikale und horizontale Zentrierung (Elemente ausrichten, Inhalt ausrichten)

Einfaches Beispiel (Zentrieren eines einzelnen Elements)

HTML

<div class="aligner">
  <div class="aligner-item">…</div>
</div>

CSS

.aligner {
  display: flex; 
  align-items: center;
  justify-content: center;
}

.aligner-item {
  max-width: 50%; /*for demo. Use actual width instead.*/
}

Hier ist eine Demo .


Argumentation

Eigentum Wert Beschreibung
align-items center Dies zentriert die Elemente entlang der Achse andere als der angegebenen einer nach flex-direction , das heißt, vertikale Zentrierung für eine horizontale FlexBox und horizontale Zentrieren für eine vertikale FlexBox.
justify-content center Dies zentriert die Elemente entlang der durch die flex-direction angegebenen Achse. Dh für eine horizontale Flexbox ( flex-direction: row ) zentriert diese horizontal und für eine vertikale Flexbox ( flex-direction: column ) Flexbox vertikal.

Beispiele für individuelle Eigenschaften

Alle folgenden Stile werden auf dieses einfache Layout angewendet:

<div id="container">
  <div></div>
  <div></div>
  <div></div>
</div>

wo #container ist die flex-box .

Beispiel: justify-content: center Zentriert auf einer horizontalen Flexbox

CSS:

div#container {
  display: flex;
  flex-direction: row;
  justify-content: center;
}

Ergebnis:

horizontale Zentrierung

Hier ist eine Demo .

Beispiel: justify-content: center Zentriert auf einer vertikalen Flexbox

CSS:

div#container {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

Ergebnis:

vertikale Zentrierung

Hier ist eine Demo .

Beispiel: align-content: center einer horizontalen Flexbox zentrieren

CSS:

div#container {
  display: flex;
  flex-direction: row;
  align-items: center;
}

Ergebnis:

Horizontale Zentrierung mit Align-Center

Hier ist eine Demo .

Beispiel: align-content: center Zentriert auf einer vertikalen Flexbox

CSS:

div#container {
  display: flex;
  flex-direction: column;
  align-items: center;
}

Ergebnis:

vertikale zentrierung mit ausrichten zentrieren

Hier ist eine Demo .

Beispiel: Kombination zum Zentrieren von beiden auf der horizontalen Flexbox

div#container {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
}

Ergebnis:

horizontale Zentrierung beider Kombinationen

Hier ist eine Demo .

Beispiel: Kombination zum Zentrieren beider auf vertikaler Flexbox

div#container {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

Ergebnis:

horizontale Zentrierung beider Kombinationen

Hier ist eine Demo .

Gleiche Höhe bei verschachtelten Containern

Dieser Code stellt sicher, dass alle geschachtelten Container immer die gleiche Höhe haben. Dies geschieht, indem sichergestellt wird, dass alle geschachtelten Elemente dieselbe Höhe wie das enthaltende parrent div haben. Siehe Arbeitsbeispiel : https://jsfiddle.net/3wwh7ewp/

Dieser Effekt wird dadurch erreicht, dass die Eigenschaft align-items standardmäßig auf stretch wird.

HTML

<div class="container">
  <div style="background-color: red">
    Some <br />
    data <br />
    to make<br />
    a height <br />
 </div>
  <div style="background-color: blue">
    Fewer <br />
    lines <br />
 </div>
</div>

CSS

.container {
    display: flex;
    align-items: stretch; // Default value
}

Hinweis: Funktioniert nicht bei IE-Versionen unter 10

Passen Sie Elemente optimal an ihren Behälter an

Eine der schönsten Eigenschaften von flexbox ist die optimale Anpassung von Behältern an das übergeordnete Element.

Live-Demo

HTML:

<div class="flex-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
  <div class="flex-item">4</div>
  <div class="flex-item">5</div>
</div>

CSS:

.flex-container {
    background-color: #000;
    height: 100%;
    display:flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: flex-start;
    align-content: stretch;
    align-items: stretch;
}

.flex-item {
    background-color: #ccf;
    margin: 0.1em;
    flex-grow: 1;
    flex-shrink: 0;
    flex-basis: 200px; /* or % could be used to ensure a specific layout */
}

Ergebnis:

Spalten passen sich an, wenn die Bildschirmgröße geändert wird.

Geben Sie hier die Bildbeschreibung ein



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow