Zaawansowane layouty
3 godz. 3 min · HTML i CSS · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerW początkowych lekcjach Kursu omówimy podstawową składnię CSS Grid, tak, by zbudować solidny fundament pod poznawanie kolejnych, bardziej rozbudowanych zagadnień. Na praktycznych przykładach poznasz i zrozumiesz różnice, jakie są pomiędzy CSS Grid a CSS Flexbox.
Po poznaniu niezbędnych, podstawowych zagadnień związanych ze składnią CSS Grid przejdziemy do tematu wykorzystania siatek. Wykorzystamy je do stworzenia responsywnych layoutów bez użycia media queries.
W kolejnych, bardziej rozbudowanych lekcjach kursu poznasz implikacje dotyczące dostępności. W obszernym rozdziale omówimy również szerzej najczęstsze błędy i nieporozumienia związane z CSS Grid.
Tak jak każda technologia, Grid ma swoje wady i zalety. Omówimy zarówno pierwsze, jak i drugie, tak, by wykorzystać pełen potencjał CSS Grid i nie dać się zniechęcić przez pewne jego wady. Dowiesz się również nieco na temat nadchodzących elementów w specyfikacji CSS Grid module level 2.
Aby być na bieżąco - warto uważnie śledzić najważniejsze i najbardziej aktualne źródła związane z CSS Grid. W końcowych rozdziałach pokażemy Ci naszym zdaniem najciekawsze źródła oraz osoby związane z Gridem, które warto znać oraz obserwować.
Jeśli chcesz poznać najbardziej aktualną i świetnie wspieraną metodę pozycjonowania elementów jaką jest CSS Grid, ten kurs jest właśnie dla Ciebie! Aby efektywnie korzystać z tego kursu potrzebujesz jedynie podstawowej wiedzy z zakresu HTML i CSS - a jeśli znasz Flexboxa, na pewno będzie Ci łatwiej zrozumieć niektóre koncepty.
Cześć w tym rozdziale css grid zaawansowane layouty opowiem
o różnicach między css flexbox a css grid oraz
podobieństwach czyli zaczniemy od podobieństw które
grid ma do flexa żeby później przejść do różnic
i generalnego podsumowania tych dwóch technologii zacznijmy
od ustawienia stałej wysokości na naszym gridzie na naszej
siatce powiedzmy na 800 pikseli troszkę się powiększył no
i teraz tak we flexboxie mamy możliwość wyrównywania
elementów wokół danej osi przy pomocy właściwości takich
jak justify we flexboxie mamy możliwość wyrównywania elementów wokół
danej osi przy pomocy właściwości takich jak justify content align content
align items i tak dalej no i te właściwości też są dostępne
w gridzie one się troszkę różnią ale generalnie idea działania
jest bardzo podobna czyli jeśli wpiszemy sobie justify content
end wszystkie elementy wewnątrz grida czyli wewnątrz
tego niebieskiego pola zostaną przeciągnięte do końca danej
linii justify-content i generalnie ten
suffix content działa w osi x to nie jest tak że jak
w przypadku flexboxa w zależności od tego jakie mamy flex
direction to justify content działa w osi pionowej albo poziomej to
działa inaczej w gridzie no i tutaj wpisujemy zamiast flex end
wpisujemy samo end ponieważ to nie jest flex ale ta właściwość też zadziała
w gridzie więc jeśli jesteś przyzwyczajony do korzystania z justify content flex
end no możesz wpisać flex end ale generalnie zaleca się pobieranie
tego żeby nie wprowadzać zakłopotania co to do tego jakiej technologii
w tym momencie używamy no i analogicznie mamy oczywiście start
end mamy center i jeśli chcielibyśmy
wyrównać elementy wokół osi pionowej
no to możemy wykorzystać do tego align content
i również ustawić na center więc w tym momencie wyłączył
nam się domyślny stretch domyślnie elementy są rozciągane w osi pionowej
no i elementy wycentrowaly się w danym kontenerze w
tej siatce no i możemy tutaj również dać end start
i mamy możliwość pozycjonowania tak
jak we flexie przy pomocy space-between space-around czy
space-evenly czyli space-around umieści
nam elementy w taki sposób że dookoła każdej
kolumny w tym momencie będzie dokładnie taka sama przestrzeń czyli z
lewej strony powiedzmy mamy 15 pikseli z prawej strony
pikseli i ta kolumna również ma z
lewej strony 15 i z prawej strony 15 dlatego kolumny
wewnętrzne będą miały większy margines niż te skrajne ponieważ
tutaj będzie to margines podwójny mamy też możliwość ustawienia
space-evenly i w tym momencie każdy z odstępów
ma taką samą szerokość no i mamy też możliwość ustawienia tego
jako space between tak by elementy skrajne
odpychały się do końca krawędzi no a te środkowe dystrybuowały
dostępną przestrzeń na konkretne
przerwy tak jak mieliśmy na przykład grid gap analogicznie
align content może zrobić to samo czyli jeśli zrobimy space between to
elementy będą miały przestrzeń i w osi pionowej i w
osi poziomej space-around wtedy elementy
będą miały dociąganie
w osi poziomej do krawędzi natomiast w osi pionowej będą
miały równą przestrzeń między nimi no i tak dalej i tak dalej więc justify content
i align content w kontekście grida umożliwia
nam pozycjonowanie dzieci tej siatki wewnątrz
kontenera mamy też do dyspozycji oczywiście słowa kluczowe które
będą definiowały jak mają zachowywać się pojedyncze elementy wewnątrz
siatki to znaczy jeśli chcielibyśmy żeby ten element był
dociągnięty do końca danej kolumny możemy napisać justify-items
i napisać end i w tym momencie widzimy że każda z kolumn jest
dociągnięta do prawej strony jeśli zaczniemy start to będzie na początku jeśli zrobimy
center to będzie na środku no i oczywiście jeśli
podświetlimy sobie to w kontenerze to widać że to jest faktycznie środek danej kolumny
danego tracka i analogicznie wykorzystujemy justify przepraszam
align items center no i mamy w tym
momencie w dwóch osiach wycentrowane elementy i tutaj
tak samo możemy umieścić je na końcu na początku a domyślnie są
one po prostu rozciągane przez stretcha takie elementy oczywiście dalej możemy przesuwać
przy pomocy align content więc mamy
możliwość kontrolowania rozmiarów dzieci i położenia
wewnątrz danych tracków jak i pozycji samych tracków i tak jak
we flexboxie mogliśmy kontrolować pojedyncze itemy czyli powiedzmy
że item siódmy będzie miał align
self stretch to widzimy że faktycznie element
siódmy jako jedyny jest rozciągnięty na całą wysokość
danego wiersza i to czego nie ma na przykład zestaw we flexboxie a jest w gridzie
to justify-self justify-self we flexboxie
nie działa natomiast w gridzie możemy też
pojedynczy element rozszerzać bądź kurczyć
bądź zmieniać jego położenie w osi poziomej czyli jesli
wpiszemy tutaj również wstecz aby ustawić to na wartość domyślną no to ten element
zajmuje całą wysokość wiersza i całą szerokość danej kolumny
czyli tu jest kolumna to jest wiersz bierzemy 100% danego obszaru
który jest nam dany tej właściwości nie
ma we flexboxie jest w gridzie i szczerze mówiąc składnia
grida przemawia do mnie bardziej niż ta flexboxowa ponieważ
jest bardziej spójna mamy więcej podobnych do siebie właściwości
nie mamy tutaj szumu informacyjnego przez nadawanie przedrostków
flex po prostu wiemy że chcemy położyć element element na
początku bądź na końcu danego tracka no i jest
to generalnie bardziej spójne jeśli nie czujesz się dobrze z pozycjonowaniem
elementów wzdłuż tracków bądź linii polecam ci zerknięcie
na kurs flexbox od podstaw gdzie dogłębnie tłumaczy jak ten mechanizm
działa bądź wejście na css tricks
do artykułu ultimate guide to css
grid i tam będziesz miał faktycznie rozrysowane bardzo
ładnie jak dane elementy przy jakich właściwościach są
układane wzdłuż tracków
Stan początkowy
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
<div class="item item6">6</div>
<div class="item item7">7</div>
<div class="item item8">8</div>
<div class="item item9">9</div>
<div class="item item10">10</div>
</div>
<style>
.container {
display: grid;
background: var(--blue);
grid-template-columns: repeat(auto-fit, 250px);
grid-template-rows: repeat(3, 200px);
}
</style>Stan końcowy · 7 min
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
<div class="item item6">6</div>
<div class="item item7">7</div>
<div class="item item8">8</div>
<div class="item item9">9</div>
<div class="item item10">10</div>
</div>
<style>
.container {
display: grid;
background: var(--blue);
height: 800px;
grid-template-columns: repeat(auto-fit, 250px);
grid-template-rows: repeat(3, 200px);
justify-content: space-between;
align-content: end;
justify-items: center;
align-items: start;
}
.item7 {
align-self: stretch;
justify-self: stretch;
}
</style>