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.
Możemy już przejść do faktycznej pracy z gridem jak wiesz
no grid jest to z angielskiego siatka czyli możemy pociąć
dowolny element który ma ustawiony display na grid na
wiersze i kolumny i w tym momencie domyślnie css
grid tworzy jedną kolumnę aby zdefiniować inną liczbę
kolumn musimy użyć do tego polecenia grid-template-columns
czyli siatka szablon kolumny i
składnia tego tych właściwości jest taka że podajemy rozmiar
w dowolnej jednostce css tego jak chcemy by nasze
kolumny były szerokie jeśli wpiszemy grid-template-columns ustawione na 100 pikseli
to stworzy nam się jedna kolumna o szerokości 100 pikseli jeśli
wpisalibyśmy drugą wartość tutaj czyli
na przykład 200 pikseli to stworzą się dwie kolumny czyli
każda wartość którą wpiszemy po spacji to grid-template-columns
będzie kolejną kolumną o tej właśnie szerokości czyli
możemy stworzyć sobie powiedzmy trzy kolumny po 300 pikseli
możemy nawet w następnej linii to sobie zapisać żeby było czytelniej i
po zapisaniu faktycznie mamy 3 kolumny po
300 pikseli analogicznie możemy tworzyć też
rozmiary dla wierszy po angielsku wiersz jest
to row czyli jeśli wpiszemy grid-template-rows
i wpiszemy powiedzmy 200 pikseli to
pierwszy z tych wierszy będzie miał szerokość 200 pikseli
jeśli chcemy dodać kolejne no to analogicznie tak samo jak w grid template columns dodajemy
kolejne wartości czyli możemy ustawić sobie 100 pikseli no i powiedzmy
150 pikseli natomiast
w tym momencie musimy zadeklarować tyle ile chcemy
wierszy tyle razy musimy napisać tą wartość co nie
jest idealne ponieważ jeśli ustawimy tutaj powiedzmy 300 pikseli i
300 pikseli tą ten rozmiar wiersza usuniemy to
zauważ że dwie w tym momencie z czterech wierszy
mają ustaloną wysokość a pozostałe już nie dzieje
się tak ponieważ my korzystając z grid-template-columns tworzymy tory jawne
czyli explicit tracks możemy to też podejrzeć z
poziomu devtools firefox tutaj jak się dobrze przyjrzycie
linia typu solid definiuje nam które z torów są
torami jawnymi torami explicit a które z nich są torami
niejawnymi i w tym momencie tutaj gdzie mamy końcówkę tej
twardej linii kończy się nasz jawny tor nasza jawna
siatka więc jak zdefiniować rozmiary
torów rozmiary tracków dla siatki niejawnej służy do tego
polecenie grid auto i tutaj w
zależności od potrzeb możemy dać albo columns albo rows ponieważ możemy
chcieć aby nasz grid rozciągał się domyślnie na
kolumny a nie na wiersze natomiast w naszym przypadku jest to rozciąganie
się na rows czyli im więcej mamy treści tym więcej będziemy mieli
wierszy i dla grid auto rows musimy podać
tak samo wartość w pikselach jeśli damy tutaj powiedzmy
75 pikseli to faktycznie te
niejawne tory dostaną taką szerokość jeżeli teraz usuniemy ten
jawny tor to wszystkie trzy niejawne wiersze
będą miały wysokość 75 pikseli co ciekawe dla grid auto rows
też możemy podawać różne wartości czyli jeśli wpiszemy
tutaj 150 pikseli i odświeżymy to
w tym momencie siatka wygląda tak mamy 3 kolumny po 300 pikseli
oraz jeden wiersz o
jawnie zadeklarowanej wysokości jest to 300 pikseli a
pozostałe są to już nie jawne tory pierwszy z nich ma taką wysokość drugi
z nich ma taką i tutaj ponownie wraca do tej pierwszej wartości
czyli możemy tak naprawdę zapętlać nasze elementy jeżeli zmniejszymy ilość kolumn powiedzmy
albo nawet zwiększmy ją zwiększymy na
150 pikseli 150 pikseli to
widzimy że ten layout tak naprawdę nam się nie psuje tutaj oczywiście kolorowanie wygląda
trochę dziwnie ponieważ mamy ustawione kolorowanie na co drugi element by
był zielony i mamy parzystą liczbę kolumn dlatego to wygląda w ten sposób
natomiast składniowo nic się nie psuje jeżeli nie mamy nadmiarowych
elementów to po prostu nie są one renderowane więc tak
wygląda ustalanie rozmiarów wierszy i kolumn tor
jest to pojedyncza tak naprawdę linia w siatce css grid
czyli to jest jeden tor to jest jeden tor czyli element w którym możemy
wyświetlać treść i my tworząc rozmiary
kolumn czy rozmiary wierszy poprzez grid-template-rows i
grid-template-columns ustalamy siatkę jawną czyli
siatkę explicit wszystko to co nie zostanie zadeklarowane przez
te dwie właściwości zostanie potraktowane tak jak zadeklarowaliśmy to
poprzez grid-auto-rows bądź grid-auto-columns w
kolejnej lekcji dowiesz się jak ustalać rozmiary dla pojedynczych toró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;
}
</style>Stan końcowy · 5 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;
grid-template-columns:
300px 300px 300px;
grid-template-rows: 300px;
grid-auto-rows: 75px 150px;
}
</style>