Appearance
Kapitel 8: Sortierung und Ausrichtung von Elementen (order + align-self)
8.1 order: Reihenfolge der Elemente steuern
Definition:order bestimmt die visuelle Reihenfolge von Flex-Elementen. Elemente mit niedrigerem order-Wert werden zuerst angezeigt.
Standardwert:
- Standardmäßig haben alle Elemente
order: 0 - Elemente mit gleichem
orderwerden in der Reihenfolge des HTML-Codes angezeigt
Syntax:
css
.item {
order: <ganzzahl>; /* Kann positiv, negativ oder 0 sein */
}Praxisbeispiel: Reihenfolge ändern
HTML (ursprüngliche Reihenfolge):
html
<div class="container">
<div class="item item1">Element 1</div>
<div class="item item2">Element 2</div>
<div class="item item3">Element 3</div>
</div>CSS (Standard ohne order):
css
.container {
display: flex;
border: 2px solid #333;
padding: 10px;
}
.item {
padding: 20px;
background-color: lightblue;
margin: 5px;
}Ergebnis (ohne order):
┌────────────────────────────────────┐
│ [Element 1] [Element 2] [Element 3] │
└────────────────────────────────────┘Reihenfolge ändern mit order
CSS (mit order):
css
.item1 {
order: 2; /* Element 1 wird als 2. angezeigt */
}
.item2 {
order: 1; /* Element 2 wird als 1. angezeigt */
}
.item3 {
order: 3; /* Element 3 wird als 3. angezeigt */
}Ergebnis (mit order):
┌────────────────────────────────────┐
│ [Element 2] [Element 1] [Element 3] │ ← Reihenfolge geändert!
└────────────────────────────────────┘Negative order-Werte
CSS:
css
.item1 { order: -1; } /* Ganz nach vorne */
.item2 { order: 0; } /* Standard */
.item3 { order: 1; } /* Nach hinten */Ergebnis:
┌────────────────────────────────────┐
│ [Element 1] [Element 2] [Element 3] │ ← Mit negativem order
└────────────────────────────────────┘Häufiger Anwendungsfall: Navigation mit Login-Button
HTML:
html
<nav class="navbar">
<a href="#" class="nav-link">Home</a>
<a href="#" class="nav-link">Über uns</a>
<a href="#" class="nav-link">Kontakt</a>
<a href="#" class="login-btn">Login</a> <!-- Sollte rechts sein -->
</nav>CSS (ohne order - Login ist am Ende):
css
.navbar {
display: flex;
align-items: center;
padding: 20px;
background-color: #333;
}
.nav-link {
color: white;
text-decoration: none;
margin-right: 20px;
}
.login-btn {
color: white;
text-decoration: none;
background-color: #007bff;
padding: 10px 20px;
border-radius: 5px;
}Ergebnis (ohne order):
┌────────────────────────────────────┐
│ Home Über uns Kontakt [Login] │
└────────────────────────────────────┘CSS (mit order - Login nach rechts schieben):
css
.navbar {
display: flex;
align-items: center;
padding: 20px;
background-color: #333;
}
.nav-link {
color: white;
text-decoration: none;
margin-right: 20px;
}
.login-btn {
color: white;
text-decoration: none;
background-color: #007bff;
padding: 10px 20px;
border-radius: 5px;
margin-left: auto; /* Oder: order: 1; */
}Besser: margin-left: auto verwenden!
css
.login-btn {
margin-left: auto; /* Schiebt Login ganz nach rechts */
}Ergebnis (mit margin-left: auto):
┌────────────────────────────────────┐
│ Home Über uns Kontakt [Login]│ ← Login ganz rechts
└────────────────────────────────────┘8.2 align-self: Einzelne Elemente anders ausrichten
Definition:align-self erlaubt es, die Ausrichtung eines einzelnen Flex-Elements auf der Querachse zu überschreiben. Es überschreibt den Wert von align-items des Containers.
Syntax:
css
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}Standardwert:
align-self: auto(übernimmt den Wert vonalign-itemsdes Containers)
Werte von align-self
1. auto (Standard)
Verhalten:
- Element übernimmt den Wert von
align-itemsdes Containers
CSS:
css
.container {
display: flex;
align-items: center; /* Alle Elemente zentriert */
}
.item {
align-self: auto; /* Übernimmt "center" vom Container */
}2. flex-start
Verhalten:
- Element wird am Anfang der Querachse ausgerichtet (ignoriert
align-items)
CSS:
css
.container {
display: flex;
align-items: center; /* Container zentriert */
height: 300px;
border: 2px solid #333;
}
.item1 {
align-self: flex-start; /* Aber dieses Element oben */
}Ergebnis:
┌────────────────────────────────────┐
│ [Element 1] │ ← Oben (flex-start)
│ [Element 2] [Element 3] │ ← Zentriert (center)
└────────────────────────────────────┘3. flex-end
Verhalten:
- Element wird am Ende der Querachse ausgerichtet
CSS:
css
.item2 {
align-self: flex-end; /* Dieses Element unten */
}4. center
Verhalten:
- Element wird in der Mitte der Querachse zentriert
CSS:
css
.item3 {
align-self: center; /* Dieses Element zentriert */
}5. stretch
Verhalten:
- Element wird gestreckt, um den verfügbaren Platz auf der Querachse zu füllen
CSS:
css
.item1 {
align-self: stretch; /* Dieses Element gestreckt */
}6. baseline
Verhalten:
- Element wird an der Text-Baseline ausgerichtet
CSS:
css
.item2 {
align-self: baseline; /* An Baseline ausrichten */
}Praxisbeispiel: Einzelne Elemente anders ausrichten
HTML:
html
<div class="container">
<div class="item item1">Element 1</div>
<div class="item item2">Element 2</div>
<div class="item item3">Element 3</div>
</div>CSS (Container zentriert alle Elemente, aber wir überschreiben einzelne):
css
.container {
display: flex;
align-items: center; /* Alle Elemente zentriert */
height: 300px;
border: 2px solid #333;
padding: 10px;
}
.item {
padding: 20px;
background-color: lightblue;
margin: 5px;
width: 100px;
}
/* Einzelne Elemente überschreiben */
.item1 {
align-self: flex-start; /* Oben */
background-color: lightcoral;
}
.item2 {
align-self: center; /* Zentriert (wie Container) */
background-color: lightgreen;
}
.item3 {
align-self: flex-end; /* Unten */
background-color: lightyellow;
}Ergebnis:
┌────────────────────────────────────┐
│ [Element 1] (oben) │
│ [Element 2] (zentriert) │
│ [Element 3] (unten) │
└────────────────────────────────────┘8.3 Praxisszenario: Spezifische Elemente anordnen und ausrichten
Szenario 1: Karten-Layout mit "Featured" Karte
HTML:
html
<div class="card-container">
<div class="card">Normale Karte 1</div>
<div class="card featured">Featured Karte</div> <!-- Soll hervorgehoben sein -->
<div class="card">Normale Karte 2</div>
</div>CSS:
css
.card-container {
display: flex;
align-items: stretch; /* Alle Karten gleich hoch */
gap: 20px;
padding: 20px;
}
.card {
flex: 1;
padding: 20px;
background-color: #f0f0f0;
border-radius: 8px;
}
/* Featured Karte größer und anders ausgerichtet */
.featured {
flex: 2; /* Nimmt doppelt so viel Platz ein */
align-self: flex-start; /* Aber oben ausgerichtet */
background-color: #007bff;
color: white;
}Ergebnis:
- Featured Karte ist breiter (
flex: 2) - Aber oben ausgerichtet (
align-self: flex-start) - Andere Karten sind gestreckt (
align-items: stretch)
Szenario 2: Navigation mit Logo und Links
HTML:
html
<nav class="navbar">
<div class="logo">Logo</div>
<div class="nav-links">
<a href="#">Home</a>
<a href="#">Über uns</a>
<a href="#">Kontakt</a>
</div>
</nav>CSS:
css
.navbar {
display: flex;
align-items: center; /* Alle Elemente zentriert */
padding: 20px;
background-color: #333;
color: white;
}
.logo {
font-size: 24px;
font-weight: bold;
}
.nav-links {
display: flex;
gap: 20px;
margin-left: auto; /* Nach rechts schieben */
}
.nav-links a {
color: white;
text-decoration: none;
}
/* Logo leicht nach oben schieben */
.logo {
align-self: flex-start; /* Logo oben ausrichten */
}Zusammenfassung
In diesem Kapitel hast du gelernt:
- ✅
order: Reihenfolge von Flex-Elementen ändern (niedriger = früher) - ✅
align-self: Einzelne Elemente anders ausrichten (überschreibtalign-items) - ✅ Praxisbeispiele für beide Eigenschaften
Nächstes Kapitel: In Kapitel 9 lernen wir flex-grow, flex-shrink und flex-basis kennen (Größe von Flex-Elementen steuern).
Übungsaufgaben
Aufgabe 8.1
Erstelle einen Container mit 3 Elementen. Ändere die Reihenfolge mit order, sodass Element 3 zuerst, Element 1 als zweites und Element 2 als drittes angezeigt wird.
Aufgabe 8.2
Erstelle einen Container mit 3 Elementen. Zentriere alle Elemente mit align-items: center, aber lasse Element 2 oben ausgerichtet sein (align-self: flex-start).
Aufgabe 8.3
Erstelle eine Navigation mit Logo links und Links rechts. Verwende margin-left: auto für die Links.
