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 css grid zaawansowany layouty krótko
powiem o tym czym jest zagęszczanie layoutu w poprzednich
lekcjach spotkaliśmy się z sytuacją że niektóre elementy jeśli
wypozycjonowaliśmy je wewnątrz siatki w odpowiedni sposób zostawiały
takie puste pola czyli jeśli zrobimy sobie na co drugim elemencie grid column
span 2 może na co trzecim zapiszemy
to tutaj te czarne pola możemy je pokolorować
na czerwono ustawiając kolor na kontener te
puste pola są faktycznymi miejscami gdzie nic nie zostało przez
grida wyrenderowane a tak naprawdę mogłoby ponieważ te
elementy na przykład 49 czy 50 zmieściłyby się w tym
grid tego domyślnie robi ze względu na performance
ponieważ jeśli mamy bardzo długie listy elementów
no to przy każdej takiej dziurze przy każdym takim polu grid
musiałby jeszcze raz wracać do tyłu sprawdzać czy jakiś element
tam pasuje wstawiać go w to miejsce no i układać cały layout od początku do końca
właśnie w ten sposób więc może to mieć wpływ na performance natomiast
nie przejmowałbym się tym tak bardzo ale też nie ustawiałbym właściwości
która umożliwi wypełnianie tych pól domyślnie zawsze ponieważ może
nie ma to znaczenia w konkretnym przypadku w którym używacie grida a jednak
dodatkowo obliczenia mogą być wykonywane pod spodem w silniku css
grid aby zagęścić layout musimy wykorzystać właściwość grid-auto-flow no
i ona może przyjąć trzy wartości domyślnie jest
to row czyli elementy nadmiarowe są dodawane do kolejnych
wierszy możemy też ustawić column aby nadmiarowy elementy
renderowały się w kolejnych kolumnach no i możemy też
do każdego row czy column dać wartość dense
i po zaaplikowaniu właściwości
dense widzimy że faktycznie te dziury które mieliśmy wcześniej
zostały wypełnione oczywiście na końcu grida
dalej mamy wolną przestrzeń ponieważ nie starczyło elementów aby wypełnić
ją natomiast w wielu przypadkach grid-auto-flow
dense umożliwi na czytelniejszy layout i spełnienie
kryteriów biznesowych w waszych projektach więc to jedno słowo
kluczowe umożliwi zagęszczanie wypełnianie luk w css
gridzie w dowolnym elemencie
Stan końcowy · 2 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 class="item item21">21</div>
<div class="item item22">22</div>
<div class="item item23">23</div>
<div class="item item24">24</div>
<div class="item item25">25</div>
<div class="item item26">26</div>
<div class="item item27">27</div>
<div class="item item28">28</div>
<div class="item item29">29</div>
<div class="item item30">30</div>
<div class="item item31">31</div>
<div class="item item32">32</div>
<div class="item item33">33</div>
<div class="item item34">34</div>
<div class="item item35">35</div>
<div class="item item36">36</div>
<div class="item item37">37</div>
<div class="item item38">38</div>
<div class="item item39">39</div>
<div class="item item40">40</div>
<div class="item item41">41</div>
<div class="item item42">42</div>
<div class="item item43">43</div>
<div class="item item44">44</div>
<div class="item item45">45</div>
<div class="item item46">46</div>
<div class="item item47">47</div>
<div class="item item48">48</div>
<div class="item item49">49</div>
<div class="item item50">50</div>
</div>
<style>
.container {
display: grid;
background: red;
grid-template-columns: repeat(7, 1fr);
grid-auto-flow: dense;
}
.item:nth-child(3n) {
grid-column: span 2;
}
</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 class="item item21">21</div>
<div class="item item22">22</div>
<div class="item item23">23</div>
<div class="item item24">24</div>
<div class="item item25">25</div>
<div class="item item26">26</div>
<div class="item item27">27</div>
<div class="item item28">28</div>
<div class="item item29">29</div>
<div class="item item30">30</div>
<div class="item item31">31</div>
<div class="item item32">32</div>
<div class="item item33">33</div>
<div class="item item34">34</div>
<div class="item item35">35</div>
<div class="item item36">36</div>
<div class="item item37">37</div>
<div class="item item38">38</div>
<div class="item item39">39</div>
<div class="item item40">40</div>
<div class="item item41">41</div>
<div class="item item42">42</div>
<div class="item item43">43</div>
<div class="item item44">44</div>
<div class="item item45">45</div>
<div class="item item46">46</div>
<div class="item item47">47</div>
<div class="item item48">48</div>
<div class="item item49">49</div>
<div class="item item50">50</div>
</div>
<style>
.container {
display: grid;
grid-template-columns: repeat(7, 1fr);
}
</style>