Ihr bewährter Begleiter.
Viele Nutzer schätzen die vertraute Umgebung des Classic-Editors, die eine einfache und schnelle Bearbeitung ermöglicht.
Mehr Funktionen, mehr Möglichkeiten.
Der Advanced Editor erweitert den Funktionsumfang des Classic-Editors und ermöglicht es, Inhalte noch effektiver zu bearbeiten.
Der Classic-Editor für alle.
Der Classic-Editor zeichnet sich durch Stabilität und Zuverlässigkeit aus, was für professionellen Anwender von Bedeutung ist.
Der Advanced Editor für kreative Köpfe.
Mit dem Advanced Editor können Designer und
Content Creatoren kreative Ideen umsetzten.
Flexbox und Grid-Layout sind fortschrittliche Layout-Modelle in CSS, die es ermöglichen, komplexe Strukturen mit flexiblen und responsiven Designs zu erstellen. Mit diesen Technologien können nicht nur komplexe Strukturen geschaffen, sondern auch äußerst flexible und responsive Designs realisiert werden. Flexbox bietet eine einfache Möglichkeit, Elemente entlang einer Achse zu organisieren und zu verteilen, während Grid-Layout eine umfassendere Möglichkeit zur Erstellung von zweidimensionalen Layouts ermöglicht. In diesem Beitrag werden wir ihre Anwendungen verstehen und lernen, wie wir sie effektiv in unserer Webentwicklung einsetzen können.
Inhaltsverzeichnis
Flexbox und Grid-Layout
- Flexbox:
display: flex;
: Dies stellt den Container als Flexbox-Container dar, wodurch die darin enthaltenen Elemente in einer Reihe (Standardverhalten) oder Spalte angeordnet werden. Flexbox ist ideal für ein eindimensionales Layout, entweder horizontal oder vertikal. Sie bietet keine direkte Möglichkeit, ein mehrdimensionales Raster wie bei Grid-Layout zu erstellenflex: 1;
: Dies wird normalerweise auf die flexiblen Elemente innerhalb des Flexbox-Containers angewendet. Hier gibtflex: 1;
an, dass das Element flexibel ist und den verfügbaren Raum im Container ausfüllt.Es ist äquivalent zum Grid-Layout derflex-grow: 1;
, was bedeutet, dass es so viel Platz wie möglich einnehmen soll.
- Grid-Layout:
display: grid;
: Dies stellt den Container als Grid-Container dar. Im Gegensatz zu Flexbox, das eindimensional ist, ermöglicht Grid-Layout das Erstellen eines zweidimensionalen Layouts mit sowohl Zeilen als auch Spalten.grid-template-columns: repeat(3, 1fr);
: Dies definiert die Spalten im Grid. In diesem Beispiel werden drei Spalten mit jeweils einem fraktionierten Anteil des verfügbaren Raums erstellt. Dies bedeutet, dass die Spalten gleichmäßig auf den verfügbaren Platz aufgeteilt werden.grid-column: span 2;
: Dies wird auf die Elemente innerhalb des Grids angewendet und gibt an, über wie viele Spalten das Element verlaufen soll. Hier nimmt das Element zwei Spalten im Grid ein.
Zusammenfassung:
- Flexbox ist gut für einzeilige oder einspaltige Layouts geeignet und verwendet
display: flex;
auf dem Container undflex: 1;
auf den flexiblen Elementen, um den verfügbaren Raum zu füllen. - Grid-Layout ist mächtiger und eignet sich gut für Layouts mit mehreren Zeilen und Spalten. Es verwendet
display: grid;
auf dem Container undgrid-column: span x;
auf den Elementen, um die Anzahl der Spalten zu steuern, die sie einnehmen.
Beide Ansätze haben ihre spezifischen Anwendungsfälle, abhängig von den Anforderungen des Layouts, das man erstellen möchte.
1. Flexbox
Beachte, dass die in den Beispielen verwendeten Selektoren wie .flex-container
und .flex-item
für illustrative Zwecke dienen. In der Praxis können diese Selektoren auch anders benannt werden.
Flexbox Beispiel und Eläuterungen
/* Flexbox Beispiel */
.flex-container {
display: flex;
justify-content: space-between;
align-items: center;
}
.flex-item {
flex: 1;
}
Flex-Layout für den Container:
- Ein Container mit der Classe
.flex-container
wird erstellt, um ein flexibles Layout zu ermöglichen. - Die Eigenschaften
justify-content
undalign-items
steuern die Ausrichtung der Elemente im Container.
Flex-Elemente:
- Flex-Elemente können mit der Classe
.flex-item
und der Eigenschaftflex: 1;
flexibel gestaltet werden.
Diese Struktur ermöglicht ein flexibles Layout, bei dem die Ausrichtung der Elemente im Container leicht gesteuert werden kann. Flex-Elemente werden durch die Classe .flex-item
und die Eigenschaft flex: 1;
flexibel angepasst.
Die Eigenschaft flex: 1;
Die Eigenschaft flex: 1;
für flexibles Wachstum der Elemente ist eine Abkürzung für drei separate Eigenschaften im Flexbox-Modell: flex-grow
, flex-shrink
und flex-basis
. Hier ist die vollständige Erklärung:
.flex-item {
flex: 1;
}
Dies ist eine verkürzte Schreibweise für:
.flex-item {
flex-grow: 1; /* Verhältnis, wie viel zusätzlichen Platz das Element einnehmen kann */
flex-shrink: 1; /* Verhältnis, wie viel Platz das Element reduziert, wenn notwendig */
flex-basis: 0; /* Ursprüngliche Größe des Elements, bevor zusätzlicher Platz hinzugefügt wird */
}
Die Eigenschaften haben folgende Bedeutungen:
flex-grow
: Legt fest, in welchem Verhältnis das Flex-Element zusätzlichen Platz innerhalb des Flex-Containers einnimmt. In diesem Fall wird es den verfügbaren Raum zu gleichen Teilen mit anderen Flex-Elementen aufteilen.flex-shrink
: Legt fest, in welchem Verhältnis das Flex-Element Platz reduziert, wenn der verfügbare Platz im Flex-Container begrenzt ist. Hier wird das Element um denselben Faktor wie andere schrumpfen.flex-basis
: Legt die ursprüngliche Größe des Flex-Elements fest, bevor zusätzlicher Platz hinzugefügt wird. Hier wird es auf 0 gesetzt, damit der verfügbare Platz gleichmäßig aufgeteilt wird.
Die verkürzte Schreibweise flex: 1;
ist eine gängige Praxis, wenn das Ziel ist, dass das Flex-Element den verfügbaren Raum im Container optimal ausnutzt.
Flexbox CSS Beispiel:
/* Flexbox Beispiel */
.flex-container {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 25px;
}
.flex-item {
flex: 1;
border: 1px solid #333;
padding: 20px;
margin: 5px;
}
Das HTML zu diesem Beispiel:
<div class="flex-container">
<div class="flex-item">Element 1</div>
<div class="flex-item">Element 2</div>
<div class="flex-item">Element 3</div>
</div>
- CSS/Tutorials/Flexbox SELFHTML
2. Grid-Layout
Beachte, dass die in den Beispielen verwendeten Selektoren wie .grid-container
und .grid-item
für illustrative Zwecke dienen. In der Praxis können diese Selektoren auch anders benannt werden.
Grid-Layout Beipiel und Erläuterungen
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.grid-item {
grid-column: span 2;
}
Grid-Layout für den Container:
- Ein Container mit der Classe
.grid-container
wird erstellt, der mitdisplay: grid;
ein Grid-Layout definiert. - Die Eigenschaft
grid-template-columns
gibt an, dass es im Grid drei Spalten gibt, die jeweils den gleichen Anteil des verfügbaren Raums einnehmen (dank1fr
). - Die Eigenschaft
gap
legt den Abstand zwischen den Gridelementen fest.
Die Abkürzung fr
steht für "fractional unit" (Bruchteil-Einheit) in CSS Grid und CSS Flexbox. Mit 1fr
gibt man an, dass ein Container oder ein Element einen Bruchteil des verfügbaren Raums einnehmen soll.
Beispiel Grid-Layout
- Wenn zwei Spalten jeweils
1fr
haben, teilen sie den verfügbaren Platz zu gleichen Teilen. - Wenn eine Spalte
2fr
und eine andere1fr
hat, nimmt die erste doppelt so viel Platz wie die zweite ein.
fr
ist besonders nützlich, wenn man flexible und responsive Layouts erstellen möchte, da es sich automatisch an die verfügbare Breite anpasst
Grid-Eigenschaften für die Elemente:
- Die Eigenschaft
grid-column: span 2;
wird auf die Classe.grid-item
angewendet. - Dies bedeutet, dass jedes Element mit dieser Classe über zwei Spalten im Grid reichen soll.
- Diese Eigenschaft bestimmt also, wie breit das Gridelement sein soll, wenn es auf der Grid-Ebene positioniert wird, und es nimmt dabei zwei der definierten Spalten des Grids ein.
Diese Struktur ermöglicht es, ein Grid-Layout mit definierten Spalten und Abständen zu erstellen und gleichzeitig die Breite der Gridelemente flexibel zu gestalten.
Ein Beispiel für ein Grid-Layout in einer ähnlichen Form wie das Flexbox-Layout:
/* Grid-Layout Beispiel */
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 25px;
}
/* Grid-Layout-Stile für die Elemente */
.grid-item {
grid-column: span 1;
border: 1px solid #333;
padding: 20px;
margin: 5px;
}
Grid-Layout für den Container:
- Dieses CSS definiert ein Grid-Layout für den Container mit drei gleich großen Spalten (
grid-template-columns: repeat(3, 1fr);
) und einem Abstand von 10 Pixeln zwischen den Elementen (gap: 10px;
). - Der Container hat einen Hintergrund, Padding und andere Stile für visuelle Verbesserungen.
Grid-Eigenschaften für die Elemente:
- Die Elemente innerhalb des Grids werden durch die Classe
.grid-item
dargestellt. - Hier ist
grid-column: span 1;
gesetzt, um jedes Element über eine Spalte im Grid zu erstrecken. - Du kannst diese Zahl anpassen, um die Breite der Elemente zu verändern.
Diese Struktur ermöglicht es, ein Grid-Layout mit definierten Spalten, Abständen und visuellen Stilen zu erstellen, während gleichzeitig die Breite der Gridelemente flexibel angepasst werden kann.
Dieses CSS auf die entsprechenden HTML-Elemente angewendet:
<div class="grid-container">
<div class="grid-item">Element 1</div>
<div class="grid-item">Element 2</div>
<div class="grid-item">Element 3</div>
</div>
Das ist ein Grid-Layout, welches sich der Flex-Box nicht unterscheidet:
Das Grid-Element spielt folgend eine Rolle, indem es drei Spalten in zwei Zeilen zeigt:
/* Grid-Layout-Stile für den Container */
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* Drei Spalten */
grid-template-rows: repeat(
2,
auto
); /* Zwei Zeilen mit automatischer Höhe */
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 25px;
}
/* Grid-Layout-Stile für die Elemente */
.grid-item {
border: 1px solid #333;
padding: 20px;
margin: 5px;
}
Der .grid-container
ist als Grid-Container konzipiert und verwendet die Grid-Anzeige (display: grid;
). Dies ermöglicht die Erstellung eines mehrdimensionalen Rasters für die Anordnung von Elementen.
grid-template-columns: repeat(3, 1fr);
: Definiert drei Spalten im Raster. Jede Spalte nimmt den gleichen verfügbaren Raum ein, da1fr
für einen fraktionierten Anteil steht.grid-template-rows: repeat(2, auto);
: Legt zwei Zeilen im Raster fest. Die Höhe der Zeilen wird automatisch an den Inhalt angepasst (auto
), was bedeutet, dass die Zeilen unterschiedliche Höhen haben können, abhängig vom Inhalt der Zellen.gap: 10px;
: Bestimmt den Abstand (Zwischenraum) zwischen den Zellen im Raster.background-color: #f0f0f0;
: Setzt die Hintergrundfarbe des Containers auf einen hellen Grauton.padding: 10px;
: Fügt einen Innenabstand zum Container hinzu, um den Inhalt von den Rändern zu trennen.
Diese Stile ermöglichen es, ein klar strukturiertes und ansprechendes Grid-Layout zu erstellen.
<div class="grid-container">
<div class="grid-item">Element 1</div>
<div class="grid-item">Element 2</div>
<div class="grid-item">Element 3</div>
<div class="grid-item">Element 4</div>
<div class="grid-item">Element 5</div>
<div class="grid-item">Element 6</div>
</div>
Das Grid-Element zeigt drei Spalten in zwei Zeilen:
Unser Tabala-Container
Folgend präsentieren wir unseren "Tabla Container" und hoffen hiermit, das Thema durch dieses visuelle Element weiter zu unterstreichen. Der Tabla Container nutzt ein responsives Grid-Layout, um die Anzeige der Tabla-Buttons auf verschiedenen Bildschirmgrößen zu optimieren. Dies ermöglicht eine flexible und ansprechende Darstellung, unabhängig davon, ob du die Seite auf einem Desktop, Tablet oder Smartphone betrachtest.
/* Tabla Container - Responsive Grid */
.tabla-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
}
.tabla-button {
border: 2px solid #231f20;
padding: 5px;
text-align: center;
cursor: pointer;
background-color: #3498db;
color: #fff;
margin: 5px;
border-radius: 5px;
}
Das grid-template-columns
definiert die Anzahl und Größe der Spalten im Grid: – auto-fill
: Füllt den verfügbaren Platz mit so vielen Spalten wie möglich – minmax(90px, 1fr)
: Jede Spalte hat eine minimale Breite von 90px
und kann maximal 1fr
(Fraktion) des verfügbaren Platzes einnehmen.
<div class="tabla-container" style="margin-bottom: 50px;">
<div class="tabla-button" data-hoveraudio="">C<audio><source src="https://../C-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
<div class="tabla-button" data-hoveraudio="">D<audio><source src="https://../D-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
<div class="tabla-button" data-hoveraudio="">E<audio><source src="https://../E-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
<div class="tabla-button" data-hoveraudio="">F<audio><source src="https://../F-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
<div class="tabla-button" data-hoveraudio="">G<audio><source src="https://../G-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
<div class="tabla-button" data-hoveraudio="">A<audio><source src="https://../A-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
<div class="tabla-button" data-hoveraudio="">B<audio><source src="https://../B-salamisound-trommel-tabla-indisches.mp3" /></audio></div>
</div>
Die Bezeichnung data-hoveraudio
ist ein individuellen Datenattribut. In HTML können Entwickler individuelle Datenattribute verwenden, um zusätzliche Informationen an Elemente zu binden, die nicht standardmäßig von HTML-Elementen unterstützt werden. Siehe im Beitrag Das Audio mit Hover starten!
Beispiel Bild-Rasterlayout und parallele Ausführung mit CSS Grid Generator
Diesem Beispiel folgt die Parallele zur alternativen Schreibweise mit dem CSS Grid Generator.
.gridus-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: auto auto;
grid-gap: 2px; /* Allgemeiner Abstand zwischen den Elementen */
grid-row-gap: 2px;
margin-bottom: -35px;
}
.gridus-item {
border: 0px solid #000;
padding: 0px;
}
.gridus-item img {
width: 100%;
height: auto;
}
.gridus-top {
grid-row: 1;
}
.gridus-bottom {
grid-row: 2;
margin-top: -14px;
}
.gridus-top:nth-child(odd) {
grid-column: 1;
}
.gridus-top:nth-child(even) {
grid-column: 2;
}
.gridus-bottom:nth-child(odd) {
grid-column: 1;
}
.gridus-bottom:nth-child(even) {
grid-column: 2;
}
Das CSS sollte ein Raster für vier Bilder erstellen, zwei oben und zwei unten. Die Werte können nach Bedarf angepasst werden.
Das HTML:
<div class="gridus-container">
<div class="gridus-item gridus-top">
<img src="pfad/zum/bild1.jpg" alt="Bild 1">
</div>
<div class="gridus-item gridus-top">
<img src="pfad/zum/bild2.jpg" alt="Bild 2">
</div>
<div class="gridus-item gridus-bottom">
<img src="pfad/zum/bild3.jpg" alt="Bild 3">
</div>
<div class="gridus-item gridus-bottom">
<img src="pfad/zum/bild4.jpg" alt="Bild 4">
</div>
</div>
CSS Grid Generator für alternative Schreibweise und Code-Vergleich
Im Internet gibt es mehrere "CSS Grid Generatoren". Dies hier sollte lediglich als Einführung dienen, um ein Gefühl für das Layout zu entwickeln.
Mit dem CSS Grid Generator erfolgt eine etwas andere Schreibweise. Klicke dort in die Felder, welche konfiguriert werden sollten und beachte rechts die erweiterten Einstellungen.
Des Beispiels und Codes von oberhalb ein Vergleich: Der nachfolgende Code weist eine bessere Performance auf, da er weniger spezifische Selektoren und Regeln enthält. Der oben stehende Code verwendet hingegen spezifischere Selektoren und mehr Regeln, um die Positionierung der Bilder und den Abstand zu kontrollieren. In der Regel ist es empfehlenswert, die Lösung so einfach wie möglich zu gestalten, um die Leistungsfähigkeit und Wartbarkeit des Codes zu verbessern.
.parent {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
grid-gap: 2px;
}
.div1 { grid-area: 1 / 1 / 2 / 2; }
.div2 { grid-area: 1 / 2 / 2 / 3; }
.div3 { grid-area: 2 / 1 / 3 / 2; margin-top: -14px; }
.div4 { grid-area: 2 / 2 / 3 / 3; margin-top: -14px; }
Eine kleine Anpassung des generierten Codes: Hier wird grid-gap
anstelle von grid-column-gap
und grid-row-gap
für den Abstand zwischen den Grid-Zellen verwendet, was die Lesbarkeit des Codes verbessert. Das margin-top: -14px;
ist hier per Hand hinzugefügt, um den Abstand zwischen den beiden Zeilen zu verringern.
<div class="parent">
<div class="div1"> </div>
<div class="div2"> </div>
<div class="div3"> </div>
<div class="div4"> </div>
</div>
Zum Schluss des Grid-Layouts zeigen wir ein weiteres Beispiel in CSS. Dieses Beispiel erstellt ein Raster mit variierenden Spalten- und Zeilenbreiten. In der ersten Zeile gibt es zwei Spalten, in der zweiten Zeile drei Spalten, und in den folgenden Zeilen je zwei Spalten. Die Spaltenbreiten sind unterschiedlich, wobei die mittlere Spalte doppelt so breit ist wie die anderen. Die Höhen der Zeilen sind ebenfalls unterschiedlich, mit einer festen Höhe von 200px in der zweiten Zeile:
/* Grid-Layout-Stile für den Container */
.grid-container {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* Drei Spalten, unterschiedliche Breiten */
grid-template-rows: auto 200px auto; /* Drei Zeilen, unterschiedliche Höhen */
gap: 10px;
background-color: #f0f0f0;
padding: 10px;
margin-bottom: 25px;
}
/* Grid-Layout-Stile für die Elemente */
.grid-item {
border: 1px solid #333;
padding: 20px;
margin: 5px;
}
/* Zusätzliche Stile für spezifische Elemente */
.grid-item:nth-child(2) {
grid-column: span 2; /* Nimmt zwei Spalten ein */
}
.grid-item:nth-child(4) {
grid-row: span 2; /* Nimmt zwei Zeilen ein */
}
In diesem Beispiel:
- Der
grid-template-columns
-Eigenschaft werden drei Spalten mit unterschiedlichen Breiten zugewiesen (1 fr
,2 fr
,1 fr
). - Der
grid-template-rows
-Eigenschaft werden drei Zeilen mit unterschiedlichen Höhen zugewiesen (automatische Höhe, feste Höhe von200px
, automatische Höhe). - Die
gap
-Eigenschaft legt den Abstand zwischen den Zellen fest.
Zusätzlich werden für bestimmte Elemente spezifische Stile angewendet:
- Das zweite Element (
nth-child(2)
) erstreckt sich über zwei Spalten. - Das vierte Element (
nth-child(4)
) erstreckt sich über zwei Zeilen.
Das dazugehörige HTML zu dem CSS-Beispiel:
<div class="grid-container">
<div class="grid-item">Element 1</div>
<div class="grid-item">Element 2 (Span 2 Spalten)</div>
<div class="grid-item">Element 3</div>
<div class="grid-item">Element 4 (Span 2 Zeilen)</div>
<div class="grid-item">Element 5</div>
<div class="grid-item">Element 6</div>
<div class="grid-item">Element 7</div>
<div class="grid-item">Element 8</div>
<div class="grid-item">Element 9</div>
</div>
Dieses Beispiel zeigt, wie flexibel Grid-Layouts sind, insbesondere wenn es darum geht, unterschiedliche Breiten und Höhen für Zeilen und Spalten zu definieren.
- CSS/Tutorials/Grid (selfhtml)
Grid-Layout vs. Tabelle
Im Vergleich zu herkömmlichen Tabellen bietet das Grid-Layout in CSS eine flexiblere und leistungsfähigere Möglichkeit, Strukturen auf Webseiten zu gestalten. Während Tabellen in erster Linie für die Darstellung von tabellarischen Daten gedacht sind, ermöglicht das Grid-Layout die Erstellung komplexer Layouts für die gesamte Webseite.
Ein wesentlicher Vorteil des Grid-Layouts besteht darin, dass es eine zweidimensionale Struktur bietet, wodurch sowohl Zeilen als auch Spalten individuell gestaltet werden können. Im Gegensatz dazu ist eine Tabelle auf eine lineare Struktur beschränkt, was die Anpassung und Positionierung von Elementen erschweren kann.
Grid-Layout erlaubt außerdem eine präzise Kontrolle über den Abstand zwischen den Elementen (mit der gap
-Eigenschaft) und ermöglicht das Erstellen von responsiven Designs durch die Definition von automatischen Größenanpassungen für verschiedene Bildschirmgrößen.
Insgesamt bietet das Grid-Layout eine moderne und flexible Alternative zu Tabellen, wenn es darum geht, komplexe Layouts auf Webseiten zu erstellen.
Der Beitrag wurde mit fachlicher Unterstützung erstellt.
Aktualisiert im Jahr 2024 Februar