Flexbox (Flexible Box Layout) to nowoczesny model układu elementów w CSS, zaprojektowany po to, aby w prosty i przewidywalny sposób tworzyć elastyczne układy na stronie. Ułatwia rozmieszczanie, wyrównywanie oraz zmienianie rozmiarów elementów w jednym wymiarze — w linii poziomej lub pionowej.
Dlaczego używamy Flexbox?
Flexbox jest idealny, gdy chcemy:
Flexbox składa się z dwóch ról:
1. Kontener Flex (flex container)
Element, na którym ustawiamy display: flex.
To on steruje układem swoich dzieci.
2. Elementy Flex (flex items)
Wszystkie elementy bezpośrednio w środku kontenera.
Można je niezależnie wyrównywać i skalować.
Właściwości kontenera:
| Właściwość | Opis |
|---|---|
display: flex | aktywuje tryb flexbox |
flex-direction | określa kierunek ułożenia elementów (row, row-reverse, column, column-reverse) |
justify-content | wyrównanie elementów po głównej osi (np. do środka, na koniec, odstępy – używamy tutaj właściwości: flex-end, flex-start, center, space-around, space-between, space-evenly) |
align-items | wyrównanie elementów po osi poprzecznej |
flex-wrap | czy elementy mają się zawijać do kolejnych linii |
gap | odstępy między elementami |
Właściwości elementów flex:
| Właściwość | Opis |
|---|---|
flex-grow | jak bardzo element ma się rozszerzać |
flex-shrink | jak bardzo może się kurczyć |
flex-basis | początkowy rozmiar elementu |
flex | skrót: grow shrink basis |
align-self | indywidualne wyrównanie elementu |
Przykład do wykonania na zajęciach:
Zbuduj nst strukturę strony:
<section class=”container”>
<div class=”box”>1</div>
<div class=”box”>2</div>
<div class=”box”>3</div>
</section>
W CSS ustaw:
.container {
display: flex; /* aktywacja Flexboxa */
flex-direction: row; /* układ w poziomie */
justify-content: center; /* wyśrodkowanie elementów w poziomie */
align-items: center; /* wyśrodkowanie elementów w pionie */
gap: 20px; /* odstępy między elementami */
height: 200px;
background: #eee;
}
.box {
width: 80px;
height: 80px;
background: #4da3ff;
color: white;
font-size: 30px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10px;
}
Efekt końcowy:
