Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs tworzenia stron - HTML + CSS

Flexbox: elastyczne rozmieszczenie elementów

Flexbox, czyli Flexible Box Layout Module, wprowadza nowy sposób rozmieszczania, wyrównywania i rozciągania elementów w kontenerze, nawet jeśli ich rozmiar jest nieznany lub dynamiczny. Dzięki Flexboxowi możesz łatwo tworzyć skomplikowane układy, które dostosowują się do różnych rozmiarów ekranu, co jest kluczowe w dobie urządzeń mobilnych.

 

Dlaczego Flexbox jest ważny?

    • Elastyczność: Umożliwia łatwe tworzenie układów, które automatycznie dostosowują się do dostępnej przestrzeni.
    • Responsywność: Ułatwia projektowanie stron, które wyglądają dobrze na różnych urządzeniach.
    • Łatwość użycia: Prostota składni i logiczne właściwości sprawiają, że jest bardziej intuicyjny niż tradycyjne metody układów.
    • Wsparcie przeglądarek: Jest dobrze obsługiwany przez nowoczesne przeglądarki.

 

Podstawy Flexboxa

Flexbox składa się z dwóch głównych elementów:

  1. Kontener flex (flex container) – element, na którym ustawiamy display: flex.
  2. Elementy flex (flex items) – bezpośrednie dzieci kontenera flex.

Ustawienie kontenera Flexbox

Aby rozpocząć korzystanie z Flexboxa, należy ustawić display: flex na elemencie rodzica.

Przykład:

.container {
  display: flex;
}

 

 

Główne właściwości Flexboxa

1. Kierunek osi – flex-direction

Określa kierunek osi głównej, wzdłuż której układane są elementy flex.

Wartości:

    • row (domyślnie) – elementy są układane w wierszu, od lewej do prawej.
    • row-reverse – elementy są układane w wierszu, od prawej do lewej.
    • column – elementy są układane w kolumnie, od góry do dołu.
    • column-reverse – elementy są układane w kolumnie, od dołu do góry.

Przykład:

.container {
  display: flex;
  flex-direction: row;
}

 

2. Wyrównanie w osi głównej – justify-content

Kontroluje wyrównanie elementów wzdłuż osi głównej.

Wartości:

    • flex-start (domyślnie) – elementy są wyrównane do początku osi.
    • flex-end – elementy są wyrównane do końca osi.
    • center – elementy są wyśrodkowane.
    • space-between – elementy są równomiernie rozłożone, pierwszy przy początku, ostatni przy końcu.
    • space-around – elementy są równomiernie rozłożone z równymi odstępami.
    • space-evenly – elementy są rozłożone z równymi odstępami, także na końcach.

Przykład:

.container {
  display: flex;
  justify-content: center;
}

 

3. Wyrównanie w osi poprzecznej – align-items

Kontroluje wyrównanie elementów wzdłuż osi poprzecznej (prostopadłej do osi głównej).

Wartości:

    • stretch (domyślnie) – elementy są rozciągane, aby wypełnić kontener.
    • flex-start – elementy są wyrównane do początku osi poprzecznej.
    • flex-end – elementy są wyrównane do końca osi poprzecznej.
    • center – elementy są wyśrodkowane.
    • baseline – elementy są wyrównane wzdłuż linii bazowej tekstu.

Przykład:

.container {
  display: flex;
  align-items: center;
}

 

4. Zawijanie elementów – flex-wrap

Określa, czy elementy flex mają się zawijać, gdy brakuje miejsca.

Wartości:

    • nowrap (domyślnie) – elementy nie zawijają się.
    • wrap – elementy zawijają się do kolejnego wiersza lub kolumny.
    • wrap-reverse – elementy zawijają się w odwrotnym kierunku.

Przykład:

.container {
  display: flex;
  flex-wrap: wrap;
}

 

5. Właściwość skrócona – flex-flow

Łączy flex-direction i flex-wrap.

Składnia:

flex-flow: <flex-direction> || <flex-wrap>;

 

Przykład:

.container {
  display: flex;
  flex-flow: row wrap;
}

 

6. Wyrównanie zawartości – align-content

Kontroluje rozmieszczenie linii flex (gdy jest więcej niż jedna) w kontenerze.

Wartości:

    • stretch (domyślnie)
    • flex-start
    • flex-end
    • center
    • space-between
    • space-around
    • space-evenly

Przykład:

.container {
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
}

 

 

Właściwości elementów flex

1. Rozrost – flex-grow

Określa, jak element będzie się rozszerzał, gdy jest wolne miejsce.

Wartości:

    • Liczba nieujemna (domyślnie 0).

Przykład:

.item {
  flex-grow: 1;
}

 

2. Kurczenie – flex-shrink

Określa, jak element będzie się kurczył, gdy brakuje miejsca.

Wartości:

    • Liczba nieujemna (domyślnie 1).

Przykład:

.item {
  flex-shrink: 0;
}

 

3. Podstawa fleksu – flex-basis

Określa początkowy rozmiar elementu przed rozciąganiem lub kurczeniem.

Wartości:

    • auto (domyślnie)
    • Konkretna wartość (np. 200px, 20%).

Przykład:

.item {
  flex-basis: 200px;
}

 

4. Właściwość skrócona – flex

Łączy flex-grow, flex-shrink i flex-basis.

Składnia:

flex: [flex-grow] [flex-shrink] [flex-basis];

 

Przykład:

.item {
  flex: 1 0 200px;
}

 

5. Wyrównanie pojedynczego elementu – align-self

Nadpisuje align-items dla konkretnego elementu.

Wartości:

    • Takie same jak dla align-items.

Przykład:

.item.special {
  align-self: flex-end;
}

 

 

Praktyczne przykłady

1. Prosty układ z menu nawigacyjnym

HTML:

<nav class="navbar">
  <div class="logo">Logo</div>
  <ul class="menu">
    <li><a href="#">Strona główna</a></li>
    <li><a href="#">O nas</a></li>
    <li><a href="#">Usługi</a></li>
    <li><a href="#">Kontakt</a></li>
  </ul>
</nav>

 

CSS:

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #34495e;
  padding: 10px 20px;
}

.logo {
  color: #ecf0f1;
  font-size: 24px;
}

.menu {
  display: flex;
  list-style: none;
  margin: 0;
  padding: 0;
}

.menu li {
  margin-left: 20px;
}

.menu a {
  color: #ecf0f1;
  text-decoration: none;
}

 

Wyjaśnienie:

    • Ustawiliśmy display: flex na .navbar, co pozwala na łatwe rozmieszczenie logo i menu.
    • justify-content: space-between rozkłada logo i menu na przeciwległe krańce.
    • Menu jest również flexboxem, co umożliwia wyświetlanie elementów menu w linii.

2. Karty z równą wysokością

HTML:

<div class="cards">
  <div class="card">
    <h3>Tytuł 1</h3>
    <p>Treść karty 1</p>
  </div>
  <div class="card">
    <h3>Tytuł 2</h3>
    <p>Treść karty 2</p>
  </div>
  <div class="card">
    <h3>Tytuł 3</h3>
    <p>Treść karty 3</p>
  </div>
</div>

 

CSS:

.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.card {
  flex: 1 1 calc(33.333% - 20px);
  background-color: #ecf0f1;
  padding: 20px;
  box-sizing: border-box;
}

.card h3 {
  margin-top: 0;
}

 

Wyjaśnienie:

    • flex: 1 1 calc(33.333% - 20px); sprawia, że karty zajmują równą szerokość, a gap: 20px; dodaje odstępy między nimi.
    • Dzięki Flexboxowi karty automatycznie dostosowują swoją wysokość, aby były równe.

3. Centrum treści

HTML:

<div class="center-container">
  <div class="content">
    <h1>Witamy!</h1>
    <p>To jest wycentrowana treść.</p>
  </div>
</div>

 

CSS:

.center-container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Wysokość 100% widoku */
  background-color: #95a5a6;
}

.content {
  text-align: center;
  color: #fff;
}

 

Wyjaśnienie:

    • justify-content: center i align-items: center centrowane treść zarówno w poziomie, jak i w pionie.
    • Idealne do tworzenia stron typu "landing page" lub ekranów powitalnych.

 

Dobre praktyki

    • Używaj Flexboxa do układów jednowymiarowych: Flexbox jest idealny do układania elementów w jednym wymiarze (wiersz lub kolumna). Do układów dwuwymiarowych lepiej użyć CSS Grid.
    • Unikaj nadmiernego zagnieżdżania: Staraj się nie tworzyć zbyt głębokich struktur Flexboxa, aby kod był czytelny i łatwy w utrzymaniu.
    • Stosuj skróconą składnię flex: Ułatwia to czytelność kodu i konsystencję.
    • Pamiętaj o wsparciu przeglądarek: Flexbox jest dobrze wspierany, ale zawsze warto przetestować stronę w różnych przeglądarkach.
    • Używaj gap do odstępów między elementami: Od CSS3 możesz używać właściwości gap (wcześniej grid-gap), co jest bardziej eleganckie niż stosowanie marginesów.

 

Częste błędy i jak ich unikać

    • Zapominanie o ustawieniu display: flex na kontenerze: Właściwości Flexboxa działają tylko wtedy, gdy kontener ma ustawione display: flex lub display: inline-flex.

Niepoprawnie:

.item {
  flex: 1;
}

 

Poprawnie:

.container {
  display: flex;
}

.item {
  flex: 1;
}

 

    • Niewłaściwe użycie flex-basis i width: Gdy używasz flex-basis, unikaj jednoczesnego ustawiania width, aby uniknąć konfliktów.
    • Nieprzewidywalne zachowanie z flex-shrink: Domyślnie flex-shrink: 1, co oznacza, że elementy mogą się kurczyć. Jeśli chcesz tego uniknąć, ustaw flex-shrink: 0.
    • Brak flex-wrap przy tworzeniu siatki: Jeśli chcesz, aby elementy zawijały się do kolejnych wierszy, musisz ustawić flex-wrap: wrap.
    • Niepoprawne użycie jednostek: Upewnij się, że używasz odpowiednich jednostek (np. %, px, fr) i że obliczenia są poprawne.

 

Podsumowanie

W tej lekcji nauczyliśmy się:

    • Czym jest Flexbox i jakie problemy rozwiązuje w tworzeniu układów stron.
    • Jak ustawić kontener Flexbox za pomocą display: flex.
    • Głównych właściwości Flexboxa, takich jak flex-direction, justify-content, align-items, flex-wrap.
    • Właściwości elementów flex, w tym flex-grow, flex-shrink, flex-basis, flex i align-self.
    • Praktycznych zastosowań Flexboxa w tworzeniu menu, kart i centrowaniu treści.
    • Dobrych praktyk w korzystaniu z Flexboxa oraz jak unikać typowych błędów.

Flexbox jest potężnym narzędziem, które znacznie ułatwia tworzenie elastycznych i responsywnych układów. Dzięki niemu możesz skupić się na projektowaniu atrakcyjnych interfejsów bez konieczności pisania skomplikowanego kodu CSS.

 

Zadania do samodzielnego wykonania

    1. Stwórz stronę z układem kolumnowym:

      • Utwórz kontener z trzema kolumnami, które automatycznie dostosowują swoją szerokość.
      • Wykorzystaj Flexbox do równomiernego rozmieszczenia kolumn.
      • Dodaj treść do każdej kolumny i upewnij się, że układ jest responsywny.
    2. Zaprojektuj stopkę strony:

      • Utwórz stopkę z trzema sekcjami (np. informacje kontaktowe, linki, media społecznościowe).
      • Użyj Flexboxa do rozmieszczenia sekcji w linii na dużych ekranach i w kolumnie na małych ekranach.
      • Dodaj odpowiednie style, aby stopka była czytelna i estetyczna.
    3. Eksperymentuj z właściwościami Flexboxa:

      • Stwórz zestaw elementów i zastosuj różne wartości flex-grow, flex-shrink, flex-basis.
      • Obserwuj, jak zmienia się zachowanie elementów w zależności od dostępnej przestrzeni.
      • Zanotuj swoje obserwacje i wnioski.

 

Ciekawostka

Czy wiesz, że Flexbox został wprowadzony jako rekomendacja W3C w 2012 roku, aby rozwiązać problemy z układami stron w CSS? Przed Flexboxem programiści musieli polegać na mniej elastycznych metodach, takich jak float czy display: table, które często były kłopotliwe w użyciu i prowadziły do nieprzewidywalnych rezultatów. Flexbox zrewolucjonizował sposób, w jaki tworzymy układy, wprowadzając bardziej intuicyjne i elastyczne podejście.

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się