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 opowiem ci o dwóch słowach kluczowych jakimi
są min-content i max-content oraz o funkcji fit-content do
czego one służą są to generalnie wartości które możemy wykorzystać przy tworzeniu
wierszy i kolumn możemy na przykład zamiast wartości
1fr podać wartość max-content i
w tym momencie nasz grid zwęży się do pięciu kolumn renderując
je w taki sposób aby zajmować tyle miejsca ile
maksymalna każda z kolumn może zajmować to znaczy jeśli
tutaj spiszemy więcej tekstu to faktycznie
ten grid się rozciągnie i nieważne czy damy tutaj spację
czy tutaj będą nowe linie nie ma to znaczenia ponieważ cała
treść którą tutaj dodamy będzie respektowana jako maksymalna
szerokość tej kolumny jest to dosyć podobne do tego jak wstawiliśmy
zamiast szerokości kolumny wartość auto
natomiast max-content zawsze bierze maksymalną
szerokość jaką treść zajmowałaby w tej danej
kolumnie to znaczy jeśli zmienimy wartość z
max-content na min-content to zauważ
że ten tekst zawinął się tak biorąc
pod uwagę najbardziej nierozdzielalny tekst to znaczy tam
gdzie nie było spacji i gdzie zostało znalezione najdłuższe słowo max-content
wziął swoją wartość jako szerokość tego słowa niekoniecznie
znaków ascii tylko faktycznie szerokość każdej z liter
pomnożoną razy font-size i tak dalej i tak dalej razy letter-spacing
to wszystko jest brane tutaj pod uwagę i max-content przyjmuje
wartość taką jak gdybyśmy ustawili white-space nowrap czyli
bez zawijania tekstu w danej linii a min-content z drugiej
strony zupełnie na odwrót czyli zawija nam tekst i patrzy
gdzie jest jego maksymalna szerokość i aplikuje
to do rozmiaru kolumny czyli jeśli ustawilibyśmy tutaj z powrotem 1fr
i tutaj wstawili jedną kolumnę o szerokości
max-content to widzimy że kolumny
zostały utworzone zajęły tyle miejsca ile potrzebowały jest to troszkę za
duży grid więc możemy go troszkę zmienić i pierwsza kolumna ma dokładnie taką
szerokość jeśli damy tutaj min-content będzie po prostu tak
wąska jak się da jeśli damy max-content będzie tak szeroka jak
się da w zależności od treści no i podobną sytuację możemy obsłużyć
za pomocą funkcji fit-content która działa
praktycznie jak jedno słowo kluczowe
i drugie jak max-content i min-content tylko że możemy programatycznie
przekazać argument który określi jakie
jest maksimum które dana treść może zająć czyli jeśli wpiszemy fit-content
i damy tutaj 1fr to zajmie nam
całą dostępną przestrzeń natomiast jeśli tutaj wpiszemy 100
pikseli i 100 pikseli jest to mniej niż długość
tego ciągu znaków no to brana jest większa
wartość natomiast jeśli ustalimy że
ma być to powiedzmy 150 pikseli no
tutaj musimy już troszkę zgadywać bo nie wiem jak
duży jest ten element zobaczmy to jest 346
pikseli czyli jeśli ustawimy tutaj powiedzmy 300 no
400 pikseli to już ponad to 400
pikseli nasza treść nie wejdzie więc można by powiedzieć
że fit content to jest najlepsze z obu poprzednich rozwiązań ponieważ
możemy tak czy siak respektować minimalną szerokość danej
treści jako wartość naszej kolumny rozmiaru
naszej kolumny jednocześnie dając wartość graniczną że
nie większą niż te 400 pikseli oczywiście będą
sytuacje w których silnik css nie będzie wiedział jak rozwiązać
niektóre skomplikowane obliczenia tak jak na przykład gdybyśmy zrobili
tutaj do funkcji
repeat podali auto-fit i
1fr no to w tym momencie grid
nie jest w stanie określić jaka to będzie wartość ponieważ
jeden fractional unit jest to dostępna przestrzeń i nie deklarujemy
tutaj żadnego podziału daliśmy tutaj tak jakby dwie zmienne i
to wygląda tak jak byśmy prosili silnik renderujący w
w css no domyśl się jaki chcemy layout nie
ma tutaj żadnej informacji która deklarowałaby ten layout więc algorytmy
css grid nie są w stanie domyślić się o
co nam chodzi i tak też będzie w sytuacji z fit-content jeśli podamy tam na
przykład fractional unit bądź inne zmienne których css grid nie
będzie w stanie policzyć no to najczęściej takim fallbackiem który wychodzi
w sytuacji gdy css-grid nie może tego rozwiązać jest jedna
kolumna o maksymalnej szerokości podsumowując
mamy do dyspozycji dwa słowa kluczowe max-content i min-content min-content
będzie to minimalna szerokość danej kolumny w
zależności od treści jaka się wewnątrz niej znajduje max-content
będzie to cała treść podobnie jak gdybyśmy ustawili
white-space nowrap na standardowym elemencie html w standardowym
trybie renderowania natomiast fit-content jest to tak
jakby min-content i max-content tylko że możemy przekazać wartość
graniczną podatku ponad którą css grid już nie będzie renderował
powiększał danej kolumny czy wiersza
Stan końcowy · 6 min
<div class="item item1">111111111111 111 1111 </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-fit, 1fr);
}
</style>Stan początkowy
<body>
<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>