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.
Hej w tej lekcji css grid zaawansowane layouty pokażę wam
jak zrobić taki oto układ strony jest to
powiedzmy zbiór galeria obrazków mogą to być płyty
mogą to być dowolne produkty jakie chcecie no i sprawimy że będzie on responsywny
w ten sposób czyli oczywiście mieści się tyle elementów na
stronie na ile pozwala nam na to viewport no i jak zjedziemy do
bardzo niskiej rozdzielczości to te elementy też zaczną się
kurczyć tego typu layout można zrobić zarówno w gridzie jak i we flexboxie
teraz pokażę jak to zrobić w gridzie więc
zacznijmy od tego że omówimy jak wygląda w tym momencie nasz markup naszym
głównym kontenerem gridem jest lista nienumerowana
o klasie grid no i oczywiście jak to lista nienumerowana ona
musi mieć elementy li jako bezpośrednie dzieci tego
kontenera nie może mieć żadnych innych elementów no i każdy list
item składa się z figury czyli obrazka plus
jakiegoś opisu no i zacznijmy to kodować zacznijmy
może od usunięcia tych punktorów które zawsze dostajemy jeżeli korzystamy z jakiegokolwiek
rodzaju list możemy je usunąć poprzez list-style-type
ustawiając na none okej są usunięte no
i teraz możemy ustawić faktyczną deklarację kolumn chcielibyśmy
aby te
elementy były same układane przez grida my
tylko podamy jakiś zakres rozdzielczości w których mają się rozszerzać
bądź kurczyć czyli użyjemy tutaj funkcji repeat zdefiniujemy
że nie wiadomo ile ma być elementów w danym wierszu
zostawimy to gridowi czyli auto-fit auto-fit
dlatego bo na mniejszych rozdzielczościach będziemy chcieli faktycznie
centrować nasze kolumny no i tutaj podamy powiedzmy 400
pikseli zapiszemy no i w tym momencie faktycznie
mamy kolumny 400 pikselowe ale one pozostają na 400 pikselach czyli
teraz jak je zmniejszamy to one się nie kurczą i aby stworzyć
to kurczenie musimy użyć funkcji minmax i
jako wartość minimalną damy 0 zapisujemy jeszcze raz możemy
przy okazji ustawić na grid
figure background
color jako rgba
255 255 255 0.1 i to
jest po prostu bardzo przezroczysty biały no i faktycznie mamy ten biały
kolor tutaj możemy dać padding powiedzmy 20 pikseli
musimy też zresetować margines bo figure ma
domyślnie taki oto margines i to nam będzie psuło layouty
o tutaj widać ten margines w box modelu jest 30 pikseli
marginesu z lewej oczywiście też zresetujemy margines i padding
na naszym gryziegridzie margin zero padding zero zapisujemy
ustalimy grid-gap na
naszym głównym kontenerze grid powiedzmy na 20 pikseli
i teraz te elementy będą faktycznie oddzielone między sobą 20
pikselami no i przez to że już daliśmy tutaj funkcję minmax od 0
do 400 pikseli no to faktycznie te elementy będą się teraz kurczyły
przy zmniejszaniu viewportu mogliście zauważyć
że faktycznie teraz jak skurczyliśmy te elementy to one się kurczą ale obrazek nam dalej
wyjeżdża musimy po prostu go zlimitować aby nie rozszerzał się ponad
swojego rodzica czyli musimy po prostu na obrazku
możemy to zrobić wewnątrz figure albo po prostu grid img
ustawić max width na 100% zapiszemy i
teraz faktycznie jak skurczymy ten element no to obrazek też nam się będzie kurczył co
jeszcze możemy zrobić to ustawić na samym figure display grid
i w tym momencie domyślnie elementy
układają się w jedną kolumnę jak sobie podejrzymy to w narzędziach deweloperskich to
widać że faktycznie mamy główną naszą siatkę grida która
jest kontenerem na wszystkie albumy no i pojedyncze figures no
i ta figura ma jedną kolumnę i dwa wiersze
jeden wiersz to jest obrazek drugi wiersz to jest podpis fig caption możemy
też zdefiniować tutaj grid-gap na zagnieżdżonym elemencie powiedzmy też
na 20 pikseli no i wyrównać te elementy poprzez justify-items
center i widzimy faktycznie że w tym
momencie zdjęcia są wypozycjonowane na środku tak zajmuje
tyle miejsca ile potrzebuję no i możemy jeszcze wyrównać
te elementy poprzez justify-content tym razem bo
chcemy wyrównać je wewnątrz kontenera a nie wewnątrz pojedynczego itemu na center
no i teraz jak rozszerzamy i zmniejszamy nasz ekran to
faktycznie widzimy że nowe kolumny nam się pojawiają wraz z możliwością viewportu
no i jak zejdziemy do momentu że już faktycznie się nie mieszczą
to one się kurczą tak jak miałoby to miejsce na urządzeniach
mobilnych zauważcie że jest to zaledwie powiedzmy
20 linijek czy z tego css oraz żadnych
media queries możemy stworzyć tego typu layout tak szybko
w samym css gridzie natomiast wymaga to od nas dobrego
zrozumienia funkcji repeat minmax słowa
kluczowego auto-fit no i generalnie zrozumienia modelu
pudełkowego oraz tego jak css resolve'uje
czyli oblicza wszystkie właściwości w jeden konkretny layout
Stan początkowy
<ul class="grid">
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v1" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v2" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v3" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v4" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v5" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v4" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v3" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v2" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v1" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
</ul>
<style>
.grid {
display: grid;
}
</style>Stan końcowy · 6 min
<ul class="grid">
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v1" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v2" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v3" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v4" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v5" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v4" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v3" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v2" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
<li>
<figure>
<img src="https://source.unsplash.com/random/200x200?v1" alt="">
<figcaption> Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum nobis fugit dolorem recusandae saepe quidem voluptatibus quaerat, incidunt, enim praesentium ad, vitae modi sunt debitis tempora vel pariatur dolores quos? </figcaption>
</figure>
</li>
</ul>
<style>
.grid {
display: grid;
list-style-type: none;
margin: 0;
padding: 0;
grid-gap: 20px;
grid-template-columns: repeat(auto-fit, minmax(0, 400px));
justify-content: center;
}
.grid figure {
background: rgba(255,255,255, 0.1);
padding: 20px;
margin: 0;
display: grid;
grid-gap: 20px;
justify-items: center;
}
.grid img {
max-width: 100%;
}
</style>