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 tej lekcji z kursu css grid zaawansowane layouty podsumuję
wszystkie słowa kluczowe oraz funkcje które dostajemy dzięki
temu że nasza przeglądarka wspiera grida i piszemy w css gridzie
dwa pierwsze słowa kluczowe to min-content i max-content
zasada ich działanie jest taka że ustawiając grid-template-columns
powiedzmy na przy pomocy funkcji
już repeat użyjemy powiedzmy trzy kolumny min-content
zapiszemy to widzimy że każdy
element zajmuje tylko tyle miejsca ile ma treści to jest minimalna
szerokość jaką ta treść może posiadać w
drugim przypadku jeśli wpiszemy tutaj więcej tekstu zapiszemy
to przy min-content kolumna ma
dalej tą samą szerokość elementy są dodawane poniżej no
i oczywiście rośnie jej też wysokość natomiast jeśli zmienimy to na max-content to
elementy będą układane w jednej linii tak jakby zajmując
całą dostępną przestrzeń którą treść mogłaby zająć dlatego
max-content oczywiście mamy też fit-content jest
tak jakby trochę max-content natomiast mamy
tutaj argument którym możemy wyznaczyć jaki
jest maksymalny rozmiar danego elementu którego nie chcemy przekraczać
w przypadku auto-fit i auto-fill nie
musimy deklarować rozmiaru nie musimy deklarować ilości
kolumn możemy wpisać auto-fit i
wstawić tutaj informację że chcemy ileś kolumn
o szerokości 150 pikseli nie wiemy ile niech
grid to sam nam rozwiąże zapisujemy no
i faktycznie jak teraz będziemy rozszerzać czyli zwężać bądź
powiększać viewport przeglądarki no
to będziemy mieli sytuację podobną jak we flexie gdy
ustawimy flex-wrap na wrap auto-fit od auto-fila różni się tylko
i wyłącznie tym że auto-fill w przypadku gdy mamy mniej
kolumn niż niż to potrzebne mniej
elementów do wyświetlenia aby wypełnić kolumny jeśli zapiszemy tą sytuację
to możemy podejrzeć w inspektorze www jak wygląda nasza siatka
no i przy auto-filu faktycznie widzimy że te kolumny są
stworzone przy auto-ficie po zapisaniu widzimy
że tych kolumn nie ma one są jakby nałożone w jednym miejscu na siebie no
i to daje nam możliwość ustalania pozycji naszej
treści wewnątrz grida jeżeli damy tutaj center to te elementy wycentrują
nam się wewnątrz siatki jeżeli ustawimy background na niebieski
to faktycznie widzimy że jest to środek siatki
przy auto-fillu to nie zadziała ponieważ mamy inną liczbę kolumn jest
też oczywiście słowo kluczowe auto które pozwoli po prostu na dopasowanie
rozmiaru kolumn w zależności od treści i to rozmiary
tych elementów są już determinowane przez algorytmy css grid
może dodamy z powrotem tutaj te elementy użyjemy
emmet czyli stworzymy diva o klasie item każda
z nich będzie miała też klasę item
o swoim numerze no i w treści wstawimy numer danego elementu no
i pomnożymy to razy 20 to jest emmet teraz możemy tabem wypełnić
nasz edytor takim oto markupem bardzo przydatna rzecz emmet
polecam o funkcji repeat już wspomnieliśmy natomiast
jeszcze raz repeat pozwala nam powtórzyć cokolwiek
wpiszemy w drugi parametr tyle razy ile podamy to w pierwszym
parametrze czyli jeśli wpiszemy tutaj 5 razy 100 pikseli no
to stworzy nam się 5 kolumn o szerokości 100 pikseli
możemy też oczywiście użyć funkcji minmax która pozwoli nam
zadeklarować przedział rozdzielczości
które dane kolumny czy wiersze mogą zajmować czyli jeśli wpiszemy
minmax i damy tutaj zero do powiedzmy 1fr
no to będziemy mieli faktycznie elementy które są tak
szerokie jak tylko możliwe będą równo dystrybuowały przestrzeń między sobą no
i tak jak będziemy je zmniejszać to będą się zmniejszały aż do zera
bo zero zadeklarowaliśmy jako naszą wartość graniczną więc
to są najważniejsze właściwości i funkcje które dochodzą nam
w momencie jeśli używamy grida większość
z nich nie działa poza gridem bądź działa w inny sposób dlatego korzystajcie
z nich tylko i wyłącznie wtedy kiedy wasz layout faktycznie opiera się na siatce css
grid w kolejnej lekcji omówimy pokrótce wszystkie możliwe
właściwości czyli to konkretnie to co możemy ustawić
na gridzie żeby zmienić jego sposób renderowania włączając
w to różne short hendy czyli notacje skrócone
Stan końcowy · 5 min
<div class="grid">
<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 class="item item11">11</div>
<div class="item item12">12</div>
<div class="item item13">13</div>
<div class="item item14">14</div>
<div class="item item15">15</div>
<div class="item item16">16</div>
<div class="item item17">17</div>
<div class="item item18">18</div>
<div class="item item19">19</div>
<div class="item item20">20</div>
</div>
<style>
/**
min-content
max-content
auto-fit
auto-fill
auto
fit-content(limit)
minmax(minimum, maximum)
repeat(times, unit)
*/
.grid {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
</style>Stan początkowy
<div class="grid">
<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>
<style>
/**
min-content
max-content
auto-fit
auto-fill
auto
fit-content(limit)
minmax(minimum, maximum)
repeat(times, unit)
*/
.grid {
display: grid;
grid-template-columns: fit-content
}
</style>