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 poprzedniej lekcji z kursu css grid zaawansowane layouty dowiedzieliśmy
się o słowach kluczowych auto-fit i auto-fill pozwalają one nam na deklarowanie
takiej ilości kolumn czy wierszy jaka jest
potrzebna a nie ustawianie na sztywno liczby
na przykład 5 aby mieć 5 kolumn analogiczną technikę
możemy zaaplikować w css gridzie jeśli nie chcemy ustalać jakiejś
konkretnej szerokości tylko powiedzmy przedział i
do tego właśnie służy funkcja minmax minmax nazwa stąd
ponieważ możemy podać minimalną i maksymalną szerokość
dla danej kolumny czy konkretnego toru podając jako
pierwszy argument minimalną szerokość i jako drugi argument maksymalną
szerokość czyli jeśli ustawimy sobie minmax 0 do
100 pikseli to nasza siatka
wygląda w tym momencie tak ponieważ mamy 5 kolumn
każda z nich może mieć maksymalnie 100 pikseli no i jak
będziemy zmniejszać ich rozmiar to te kolumny będą się
węzić w przypadku gdy daliśmy auto-fit
na naszą siatkę na nasz kontener te
elementy się zawijały a teraz mamy tutaj takiego z flexboxa
czyli jeśli nie ma już miejsca elementy mogą się skurczyć
to takiej wartości jaką podaliśmy w pierwszym argumencie czyli
w tym momencie jest o 0 moglibyśmy to zwiększyć i na przykład ustalić że 50
pikseli jest to nasza minimalna szerokość i teraz te elementy
będą się zwężały tylko do 50 pikseli no
i w tym momencie widzimy że mamy już overflow kontener nie
mieści się w viewporcie więc mamy tutaj scroll horyzontalny i
jeśli chcielibyśmy aby elementy zawijały
się w momencie kiedy następuje ten moment że faktycznie treść musi
się już przewijać no to możemy zastosować słowo
kluczowe auto-fill czy auto-fit w zależności od potrzeby jeśli
to zrobimy to faktycznie dopóki jest miejsce to
kolumny będą miały te zadeklarowane
100 pikseli im będziemy bardziej zmniejszać nasz viewport tym będzie więcej
wierszy no i jeśli zmniejszymy tutaj powiedzmy
minimalną szerokość z powrotem na 0 to
w momencie kiedy tutaj nam się jeszcze mieściła jedna kolumna ale jeszcze
troszkę to zmniejszymy i widać że faktycznie ta kolumna się jeszcze zwęża
czyli jeśli ustalilibyśmy że wartość
graniczna ta większa będzie miała
większą wartość powiedzmy 200 pikseli to w tym momencie o wiele szybciej
widać że nasz layout jest responsywny tak naprawdę
w jednej linijce kodu css ustalamy tylko i wyłącznie grid-template-columns
powtarzamy funkcją repeat tyle
kolumn ile się zmieści zakładając że kolumny
mają do 200 pikseli no i mogą się kurczyć do zera poprzednio
gdybyśm nie korzystali z css grid musielibyśmy stworzyć
osobne media queries które będą nam zwijały tą
treść na konkretnych break pointach tutaj zauważ że nie ma ani
jednej deklaracji viewportu ta reguła css
nie wie nic o viewporcie wszystko jest resolve'owane
przez silnik przez algorytmy css
grid więc można dojść do wniosku że pracując
z gridem będziesz pisał o wiele mniej media queries związanych
z samym rozkładaniem elementów no bo jeśli oczywiście chcemy zmienić
kolor danego elementu no to dalej musimy napisać media queries do tego ale
jeśli chodzi o samo tworzenie layoutu a nie warstwę
wizualną taką jak kolory czy rozmiary czcionek css
grid bardzo upraszcza tego typu rzeczy i
jeśli będziesz mógł korzystać z css grid na przykład w swojej
pierwszej pracy okaże się że możesz pisać o wiele mniej media
queries niż gdybyś korzystał z flexboxa podsumowując
funkcja minmax przyjmuje jako pierwszy argument minimalną szerokość
jaką dany element w kolumnie w tym przypadku bo ustawiamy
to na grid-template-columns może otrzymać konkretny grid item ta
funkcja nie będzie działała poza css gridem oraz maksymalną jego
szerokość jako drugi parametr w połączeniu ze słowem kluczowym
auto-fill w funkcji repeat możesz
stworzyć responsywny layout w jednej linijce kodu css gdy
przejdziemy do kodowania praktycznych przykładów i będziemy kodowali na przykład
layout trello czy przykładowych
aplikacji zobaczysz że nasz kod będzie o wiele czystszy
i krótszy niż gdybyśmy korzystali na przykład css
flexbox w kolejnej lekcji opowiem ci o dwóch
nowych słowach kluczowych oraz funkcji fit-content która też może
się przydać w takich przypadkach
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 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>
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(0, 200px));
}
</style>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 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>
.container {
display: grid;
grid-template-columns: repeat(5, 1fr);
}
</style>