Lekcija 07 — CSS Grid Layout
Uvod
CSS Grid Layout je najmoćniji moderni alat za pravljenje dvodimenzionalnih rasporeda na web stranici. Za razliku od Flexbox-a, koji je „jednodimenzionalan“ (ili radi raspored u redu ili u koloni), Grid omogućava da u isto vreme kontrolišeš redove i kolone, praviš složene šablone, zone, rasporede celih sekcija i responzivne mreže sa minimalno koda.
Ako si ikada pokušao da praviš složeni raspored pomoću float-a, inline-block elemenata ili 50 media query-a — Grid ti rešava većinu tih problema elegatno i jednostavno.
Šta je CSS Grid i kako funkcioniše
Kada na roditeljski element postaviš display: grid;, on postaje grid kontejner, a njegova deca postaju grid item-i. Zatim možeš da definišeš:
-
broj kolona
-
broj redova
-
razmake
-
širine i visine
-
automatsko raspoređivanje
-
poravnanje
-
grid zone
Drugim rečima — praviš tabelu, ali mnogo fleksibilniju i dizajnerski slobodniju.
Osnovna podešavanja Grid-a
Najvažnija svojstva za početak:
1. Definisanje kolona
grid-template-columns: 200px 200px 200px;
Pravi 3 kolone širine 200px.
Možeš koristiti i fleksibilne jedinice:
grid-template-columns: 1fr 2fr 1fr;
fr = „fraction” — delovi dostupnog prostora.
2. Definisanje redova
grid-template-rows: 150px 150px;
Dva reda od po 150px.
3. Razmak između elemenata
gap: 20px;
Razmak između kolona i redova.
4. Automatsko raspoređivanje
Grid ume sam da rasporedi stavke, što je savršeno za galerije, blog listinge, portfolio stranice itd.
Praktičan primer — jednostavna 3-kolonska mreža
<!DOCTYPE html>
<html lang="sr">
<head>
<meta charset="UTF-8">
<title>CSS Grid Primer</title>
<style>
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
padding: 10px;
background: #f5f5f5;
}
.grid-item {
background: #cce5ff;
border: 1px solid #333;
padding: 20px;
text-align: center;
font-size: 18px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
</div>
</body>
</html>
Objašnjenje:
-
display: grid;— aktivira Grid -
repeat(3, 1fr)— tri fleksibilne kolone -
gap: 15px— razmak između blokova -
Stavke se automatski raspoređuju po redu i koloni
Naprednije mogućnosti CSS Grid-a
1. Spajanje kolona (span)
.grid-item:first-child { grid-column: span 2; }
Prvi element sada zauzima dve kolone.
2. Spajanje redova
.grid-item:nth-child(2) { grid-row: span 2; }
Zauzimanje 2 reda.
3. Automatski “responsive” Grid — bez media query-a
Ovo je jedan od najvećih benefita Grid-a:
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
Ovim se pravi savršeno responzivna mreža:
-
svaka kolona ima minimum 250px
-
kada ima mesta — širi se do 1fr
-
kada nema mesta — prelazi u novi red
Ovo je idealno za galerije i liste blog postova.
Napredni primer — responzivna galerija
<style>
.gallery {
display: grid;
gap: 20px;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
.item {
background: #e2e2e2;
padding: 40px;
border-radius: 6px;
text-align: center;
}
</style>
<div class="gallery">
<div class="item">Slika 1</div>
<div class="item">Slika 2</div>
<div class="item">Slika 3</div>
<div class="item">Slika 4</div>
<div class="item">Slika 5</div>
</div>
Radi savršeno od mobilnog do desktop ekrana — bez jedne jedine media query.
Grid template areas — kreiranje zoniranja layout-a
Možeš da nacrtaš raspored kao „ASCII mapu“:
.grid-layout {
display: grid;
grid-template-areas:
"header header header"
"sidebar content content"
"footer footer footer";
grid-template-columns: 200px 1fr 1fr;
gap: 20px;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }
HTML:
<div class="grid-layout">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="content">Content</div>
<div class="footer">Footer</div>
</div>
Dobiješ kompletan layout sa samo par linija CSS-a.
Flexbox vs Grid — kada koristiš šta?
| Flexbox | Grid |
|---|---|
| Jednodimenzionalni layout (red ili kolona) | Dvodimenzionalni layout (redovi + kolone) |
| Idealno za raspored elemenata u jednom nizu | Idealno za celokupne sekcije i složene rasporede |
| Dinamičan, fluidan | Strukturiran, mrežast |
| Dobar za navigacije, dugmiće, kartice | Dobar za cele layout-e, galerije, portfolio rasute liste |
U praksi — često se koriste zajedno.
Zaključak
CSS Grid je jedan od najvažnijih modernih alata za pravljenje layout-a. Omogućava izuzetno moćne, responzivne i fleksibilne rasporede uz minimalno koda. Grid ti daje potpunu kontrolu nad rasporedom elemenata i značajno olakšava izradu kompleksnih web stranica.
Ako razumeš osnovne pojmove — kolone, redove, gap, auto-fit, grid-areas — više od 90% layout situacija možeš rešiti bez komplikacija.
Zadatak za vežbu (za kraj lekcije)
Napraviti responzivan raspored od 6 kutija koji:
-
ima 3 kolone na desktopu
-
2 kolone na tablet veličini
-
1 kolonu na mobilnom telefonu
-
koristi Grid (ne Flexbox)
-
koristi
minmax()iauto-fit