4. Flexbox – pierwsze układy

~18-22 min podstawowy

Flexbox to najprostszy sposób na wyrównywanie elementów w jednym kierunku – idealnie na menu, karty, centra.

Dlaczego to ważne?

Flexbox upraszcza 1D układy, jest responsywny i zastępuje stare hacki jak float.

Podstawy Flexbox

.kontener {
  display: flex;                /* włącza flex */
  flex-direction: row;          /* domyślnie – poziomo */
  justify-content: center;      /* wyrównanie główne */
  align-items: center;          /* wyrównanie poprzeczne */
  gap: 1.5rem;                  /* odstępy między dziećmi */
}

Najważniejsze właściwości

/* na kontenerze (rodzicu) */
display: flex;
flex-direction: row | column | row-reverse | column-reverse;
justify-content: flex-start | center | space-between | space-around;
align-items: stretch | center | flex-start | flex-end;
gap: 20px;                    /* row-gap + column-gap razem */
flex-wrap: wrap;              /* zawijanie elementów */

/* na dziecku */
flex: 1;                      /* rośnie i kurczy się */
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;
align-self: center;
order: 2;                     /* zmiana kolejności */

Oś główna i poprzeczna

Oś główna: pozioma (row) lub pionowa (column). Oś poprzeczna: przeciwna.

oś pionowa i pozioma

Flex vs Grid: Kiedy co?

Flex: 1D (rzędy/kolumny). Grid: 2D (siatki). Używaj Flex na menu, karty; Grid na layouty stron.

index.html
https://example.com/
Karta 1
Karta 2
trochę dłuższa
Karta 3
justify-content

justify-content: flex-start

A
B
C

justify-content: flex-end

A
B
C

justify-content: center

A
B
C

justify-content: space-between

A
B
C

justify-content: space-around

A
B
C
align-items

align-items: stretch

A
B
C

align-items: center

A
B
C

align-items: flex-start

A
B
C

align-items: flex-end

A
B
C
  • display: flex; – włącza magię
  • justify-content – oś główna (pozioma przy row)
  • align-items – oś poprzeczna
  • gap – nowoczesny odstęp (zamiast margin)
  • flex: 1; – najczęstszy skrót na równe kolumny
  • flex-wrap: wrap; – zawijanie na nową linię
  • order – zmiana kolejności elementów
  • place-content: center; – skrót dla justify + align
Do zapamiętania: Najczęściej używasz: display: flex; justify-content: center; align-items: center; gap: 1rem;

Zadanie

W pliku style.css i index.html:

  • zrób poziome menu (nav) z flex i space-between
  • wyśrodkuj pionowo i poziomo jedną dużą kartę na stronie
  • zrób 3 karty w rzędzie, które równo się dzielą (flex: 1)
  • dodaj responsywne menu z flex-wrap: wrap