Kurs HTML i CSS · Moduł 4: Flexbox
Zawijanie elementów - flex-wrap
W tej lekcji8
Wyobraź sobie procesję kapłanów w starożytnej świątyni egipskiej. Jeśli korytarz jest wystarczająco szeroki, wszyscy kapłani idą w jednym rzędzie. Ale gdy korytarz się zwęża, część z nich musi przejść do następnego rzędu. Dokładnie tak działa właściwość flex-wrap w CSS Flexbox!
Domyślnie wszystkie elementy z działającą na rodzica deklaracją display: flex; będą próbowały zmieścić się w jednej linii. Możesz to zmienić i zezwolić elementom na zawijanie elementów do następnych linii.
section {
display: flex;
flex-wrap: nowrap | wrap | wrap-reverse;
}W przypadku modelu Flexboxa, mamy również możliwość kontrolowania zachowania zawijania elementów, gdy nie mieszczą się w jednym wierszu. Oto trzy opcje dotyczące zawijania:
Opcja "nowrap" (domyślna) - wszystkie elementy będą trzymane w jednym wierszu, bez zawijania. Elementy będą próbowały zmieścić się w dostępnej przestrzeni, bez tworzenia nowych linii.
Opcja "wrap" - elementy będą zawijane w nowe linie, od góry do dołu. Gdy elementy nie mieszczą się w bieżącym wierszu, zostaną przeniesione do kolejnej linii, tworząc układ wieloliniowy.
Opcja "wrap-reverse" - elementy będą zawijane w nowe linie, ale w odwrotnej kolejności, czyli od dołu do góry. Elementy, które nie mieszczą się w bieżącej linii, będą przenoszone do poprzedniej linii.
Dzięki tym opcjom możemy elastycznie kontrolować układ elementów w kontenerze Flexboxa, uwzględniając ich zawijanie na nowe linie, co pozwala na odpowiednie dopasowanie układu do dostępnej przestrzeni.
Ćwiczenie: Zawijanie elementów
W tym ćwiczeniu nauczysz się, jak używać właściwości flex-wrap w modelu Flexbox, aby kontrolować zawijanie elementów, gdy nie mieszczą się one w jednym wierszu. Twoim zadaniem będzie utworzenie strony internetowej z kontenerami, które będą rozmieszczane w różnych układach za pomocą tej właściwości.
Krok 1: Stwórz podstawową strukturę dokumentu HTML
Najpierw stwórz nowy plik HTML i dodaj podstawową strukturę dokumentu HTML. Dodaj element <section> z kilkoma elementami <div> w ciele dokumentu (<body>).
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css"> <!-- Podłącz plik CSS -->
<title>Zawijanie elementów</title>
</head>
<body>
<section class="container nowrap">
<div>Element 1</div>
<div>Element 2</div>
<div>Element 3</div>
<div>Element 4</div>
<div>Element 5</div>
<div>Element 6</div>
<div>Element 7</div>
<div>Element 8</div>
</section>
<section class="container wrap">
<div>Element 1</div>
<div>Element 2</div>
<div>Element 3</div>
<div>Element 4</div>
<div>Element 5</div>
<div>Element 6</div>
<div>Element 7</div>
<div>Element 8</div>
</section>
<section class="container wrap-reverse">
<div>Element 1</div>
<div>Element 2</div>
<div>Element 3</div>
<div>Element 4</div>
<div>Element 5</div>
<div>Element 6</div>
<div>Element 7</div>
<div>Element 8</div>
</section>
</body>
</html>Krok 2: Stwórz plik CSS
Otwórz lub utwórz nowy plik CSS i zapisz go jako styles.css.
Krok 3: Stylizacja podstawowa
Dodaj podstawowe style dla elementów <section> i <div>, aby były widoczne na stronie.
body {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
margin: 0;
padding: 20px;
}
.container {
display: flex;
border: 1px solid #000;
padding: 10px;
width: 80%;
height: auto;
margin: 10px 0;
flex-wrap: nowrap; /* Domyślna wartość */
}
.container div {
background-color: lightblue;
margin: 5px;
padding: 20px;
text-align: center;
flex: 1 1 30%;
}Krok 4: Układ z flex-wrap: nowrap
Dodaj styl dla klasy .nowrap, aby ustawić elementy w jednym wierszu, bez zawijania.
/* Układ z flex-wrap: nowrap */
.nowrap {
flex-wrap: nowrap;
}Krok 5: Układ z flex-wrap: wrap
Dodaj styl dla klasy .wrap, aby zawijać elementy w nowe linie, gdy nie mieszczą się w jednym wierszu.
/* Układ z flex-wrap: wrap */
.wrap {
flex-wrap: wrap;
}Krok 6: Układ z flex-wrap: wrap-reverse
Dodaj styl dla klasy .wrap-reverse, aby zawijać elementy w nowe linie w odwrotnej kolejności, czyli od dołu do góry.
/* Układ z flex-wrap: wrap-reverse */
.wrap-reverse {
flex-wrap: wrap-reverse;
}Wynik
Po wykonaniu wszystkich kroków twój plik HTML i CSS powinny wyglądać następująco:
Plik HTML (index.html)
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css"> <!-- Podłącz plik CSS -->
<title>Zawijanie elementów</title>
</head>
<body>
<section class="container nowrap">
<div>Element 1</div>
<div>Element 2</div>
<div>Element 3</div>
<div>Element 4</div>
<div>Element 5</div>
<div>Element 6</div>
<div>Element 7</div>
<div>Element 8</div>
</section>
<section class="container wrap">
<div>Element 1</div>
<div>Element 2</div>
<div>Element 3</div>
<div>Element 4</div>
<div>Element 5</div>
<div>Element 6</div>
<div>Element 7</div>
<div>Element 8</div>
</section>
<section class="container wrap-reverse">
<div>Element 1</div>
<div>Element 2</div>
<div>Element 3</div>
<div>Element 4</div>
<div>Element 5</div>
<div>Element 6</div>
<div>Element 7</div>
<div>Element 8</div>
</section>
</body>
</html>Plik CSS (styles.css)
body {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
margin: 0;
padding: 20px;
}
.container {
display: flex;
border: 1px solid #000;
padding: 10px;
width: 80%;
height: auto;
margin: 10px 0;
flex-wrap: nowrap; /* Domyślna wartość */
}
.container div {
background-color: lightblue;
margin: 5px;
padding: 20px;
text-align: center;
flex: 1 1 30%;
}
/* Układ z flex-wrap: nowrap */
.nowrap {
flex-wrap: nowrap;
}
/* Układ z flex-wrap: wrap */
.wrap {
flex-wrap: wrap;
}
/* Układ z flex-wrap: wrap-reverse */
.wrap-reverse {
flex-wrap: wrap-reverse;
}Zadanie dodatkowe
- Dodaj więcej sekcji z różnymi wartościami
flex-wrap, aby lepiej zrozumieć, jak działają różne opcje. - Spróbuj dodać więcej stylów do swojej strony, np. zmieniając kolory, rozmiary i inne właściwości elementów, aby lepiej zrozumieć, jak działają różne opcje.
- Przetestuj swoje umiejętności, tworząc bardziej złożone układy z użyciem różnych kombinacji właściwości Flexbox.
Po wykonaniu tego ćwiczenia powinieneś lepiej rozumieć, jak używać właściwości flex-wrap w modelu Flexbox, aby kontrolować zawijanie elementów, gdy nie mieszczą się one w jednym wierszu.
Pamiętaj: flex-wrap to jak planowanie procesji w egipskiej świątyni - decydujesz, czy uczestnicy mają się tłoczyć w jednym rzędzie, czy mogą elegancko przejść do kolejnych!
Kod do tej lekcji: index.html
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flexbox - Flex Wrap</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>Flex Wrap - Zawijanie elementów</h1>
<p class="subtitle">Kontroluj czy elementy mają się zawijać do nowej linii</p>
<section class="demo-section">
<h2>flex-wrap: nowrap (domyślnie)</h2>
<div class="flex-container wrap-nowrap">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
</div>
<p class="description">Wszystkie elementy w jednej linii - mogą się zmniejszyć</p>
</section>
<section class="demo-section">
<h2>flex-wrap: wrap</h2>
<div class="flex-container wrap-wrap">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
</div>
<p class="description">Elementy zawijają się do następnej linii gdy brakuje miejsca</p>
</section>
<section class="demo-section">
<h2>flex-wrap: wrap-reverse</h2>
<div class="flex-container wrap-reverse">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
<div class="flex-item">6</div>
<div class="flex-item">7</div>
</div>
<p class="description">Elementy zawijają się w odwrotnej kolejności</p>
</section>
<section class="demo-section practice">
<h2>Praktyka: Egipska galeria skarbów</h2>
<p class="practice-description">Skarby faraona w responsywnej galerii</p>
<div class="gallery">
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
<div class="treasure-item">◆</div>
</div>
<div class="gallery-info">
<p>Zmień szerokość okna aby zobaczyć jak galeria się dostosowuje!</p>
</div>
</section>
</div>
</body>
</html>Hasła z dokumentacji w tej lekcji
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Jaka jest domyślna wartość właściwości flex-wrap?
Zadania praktyczne w grze
- Klikanie w kolejności
Ułóż deklarację CSS pozwalającą elementom przenosić się do nowych wierszy:
- Edytor kodu
Stwórz kontener flex z wieloma elementami o stałej szerokości i użyj flex-wrap: wrap, aby elementy automatycznie przenosiły się do nowych wierszy.