Układ masonry: podejścia CSS i JavaScript
Twórz siatki masonry w stylu Pinteresta, używając column-count w CSS oraz strategii awaryjnych w JavaScript.
Układ masonry: podejścia CSS i JavaScript to bezpłatna lekcja CSS Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CSS Academy zawiera 4 lekcji w sumie.
Czym jest Masonry
Układ masonry umieszcza elementy w kolumnach, w których każdy element wypełnia następną dostępną przestrzeń w pionie, podobnie jak na Pintereście. Elementy mają jednakową szerokość kolumn, ale różne wysokości. Rezultat to gęsta, dynamiczna wizualnie siatka bez niewykorzystanej pustej przestrzeni między wierszami.
Masonry w CSS Grid (eksperymentalne)
Chrome i Firefox, po włączeniu odpowiedniej flagi, obsługują grid-template-rows: masonry. Elementy są umieszczane w kolumnach, ale wysokość wierszy jest dopasowywana do treści, dzięki czemu elementy o różnej wysokości układają się bez przerw. To przyszłe natywne rozwiązanie.
<div class="grid">
<div>1</div><div>2</div><div>3</div><div>4</div>
</div>Podejście z CSS Columns
Kolumny CSS umożliwiają utworzenie układu przypominającego masonry: columns: 3; column-gap: 1rem. Elementy automatycznie przepływają z góry na dół w obrębie każdej kolumny. Ograniczenie polega na tym, że elementy są uporządkowane kolumnami (góra kolumny 1, góra kolumny 2 itd.), a nie wierszami, co wpływa na kolejność czytania i dostępność.
Zapobieganie łamaniu kolumn
Aby zapobiec łamaniu elementów między kolumnami, użyj break-inside: avoid na każdym elemencie. Bez tego wysoka karta może zostać podzielona między dwie kolumny, przecinając treść na pół. Tej właściwości należy zawsze używać przy stosowaniu CSS Columns do treści przypominającej karty.
Biblioteki JavaScript do układów Masonry
Masonry.js (autorstwa Davida DeSandro) ponownie rozmieszcza elementy pozycjonowane absolutnie, obliczając wysokości kolumn i umieszczając każdy element w najniższej kolumnie. Isotope rozszerza to rozwiązanie o sortowanie i filtrowanie. Obie biblioteki wymagają użycia JavaScriptu do obliczania i stosowania pozycji.
Hybrydowe podejście CSS Grid + JS
Lekkie podejście polega na zdefiniowaniu siatki ze stałymi kolumnami i wierszami o wysokości 1 px, a następnie użyciu JS do ustawienia grid-row-end: span N dla każdego elementu na podstawie jego wysokości treści i wysokości wiersza. Elementy zachowują wyrównanie względem wierszy siatki, a jednocześnie mogą mieć różne wysokości.
ResizeObserver do ponownych obliczeń
Pozycje w układzie masonry stają się nieaktualne po zmianie rozmiaru okna lub załadowaniu obrazów. Użyj ResizeObserver, aby wykrywać zmiany rozmiaru i uruchamiać ponowne obliczenia. Ponowne obliczenia należy opóźniać za pomocą debounce, aby uniknąć nadmiernych obliczeń podczas szybkiej zmiany rozmiaru.
Ładowanie obrazów i stabilność układu
Obrazy o nieznanej wysokości powodują ponowne obliczenie układu masonry po załadowaniu. Wszystkim obrazom należy podać jawne atrybuty width i height, aby przeglądarka zarezerwowała miejsce przed ich załadowaniem. Zapobiega to przesuwaniu pozycji i zmniejsza liczbę przebiegów ponownego obliczania.
Nieskończone przewijanie z Masonry
Dodawanie elementów do układu masonry wymaga ponownego obliczenia tylko tych kolumn, których dotyczy zmiana (zawierających nowe elementy), a nie całej siatki. Biblioteki takie jak Masonry.js obsługują animowanie dodawanych elementów i przyrostowy układ bez pełnego rozmieszczania przy każdej nowej partii.
Kwestie dostępności
Wizualna kolejność elementów w układach pozycjonowanych za pomocą JavaScriptu różni się od kolejności w DOM. Należy zadbać, aby kolejność przechodzenia klawiszem Tab była zgodna z kolejnością w DOM (logiczną kolejnością czytania), a nie z pozycją wizualną. Atrybutu tabindex należy używać ostrożnie lub polegać na naturalnym przepływie DOM podczas nawigacji za pomocą klawiatury.
Kompromisy rozwiązania Masonry bez CSS
CSS Columns są proste i nie wymagają JS, ale zapewniają kolejność czytania kolumnami, a nie wierszami, oraz nie obsługują filtrowania ani sortowania. Masonry w Gridzie nie jest jeszcze obsługiwane produkcyjnie. Masonry oparte na JS jest w pełni funkcjonalne, ale zwiększa rozmiar rozwiązania i powoduje opóźnienie renderowania, ponieważ pozycje są obliczane dopiero po załadowaniu treści.
Sprawdzenie wiedzy
Jaka właściwość CSS zapobiega podzieleniu karty między dwie kolumny CSS?
Podsumowanie
Układ masonry można uzyskać za pomocą CSS Columns (proste rozwiązanie uporządkowane kolumnami), eksperymentalnego grid-template-rows: masonry (rozwiązanie przyszłościowe) lub bibliotek JavaScript, takich jak Masonry.js (pełna funkcjonalność z sortowaniem i filtrowaniem). Każde podejście wiąże się z kompromisami dotyczącymi prostoty, dostępności i możliwości.
Ucz się CSS dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 40
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „Układ masonry: podejścia CSS i JavaScript” jest bezpłatna?
Tak — pełny tekst „Układ masonry: podejścia CSS i JavaScript” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu CSS Academy, przejdź na CoddyKit PRO. Kurs CSS Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Układ masonry: podejścia CSS i JavaScript”?
Twórz siatki masonry w stylu Pinteresta, używając column-count w CSS oraz strategii awaryjnych w JavaScript. Ćwiczysz CSS Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć CSS Academy?
Nie wymagamy żadnego doświadczenia. CSS Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Układ masonry: podejścia CSS i JavaScript”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji CSS Academy?
Tak. Każda lekcja CSS Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Układ przyklejonej stopki i panelu bocznego
- Układ Świętego Graala z Grid
- Układ masonry: podejścia CSS i JavaScript
- Projektowanie intrynsyczne: rozmiar zależny od treści