Prilagodljiva galerija
Napravi galeriju od 8 slika koja na širokom ekranu ima 4 kolone, a na užim sama smanjuje broj kolona (najmanja širina slike 160px). Slike su iste visine (150px) i ne razvlače se.
Meni u jednom redu, kartice jedna pored druge, zaglavlje–sadržaj–podnožje: za raspoređivanje elemenata danas se koriste dva alata. Flexbox ređa elemente u jednom pravcu (red ili kolona), a grid u mreži redova i kolona.
Roditelj dobija display: flex, a njegova deca postaju „fleks elementi“ poređani u red:
<style>
.meni {
display: flex;
gap: 10px; /* razmak između elemenata */
justify-content: space-between; /* raspored po glavnoj osi (horizontalno) */
align-items: center; /* poravnanje po poprečnoj osi (vertikalno) */
background: #1f5f91;
padding: 10px;
}
.meni a { color: white; text-decoration: none; padding: 6px 10px; }
.logo { font-weight: bold; font-size: 1.4rem; color: #ffd166 !important; }
</style>
<nav class="meni">
<a class="logo" href="#">LOGO</a>
<div>
<a href="#">Početna</a>
<a href="#">Projekti</a>
<a href="#">Kontakt</a>
</div>
</nav>
Rezultat:
| Svojstvo (roditelj) | Vrednosti |
|---|---|
flex-direction | row (red, osnovno), column (kolona) |
justify-content | flex-start, center, flex-end, space-between, space-around – po glavnoj osi |
align-items | stretch, center, flex-start, flex-end – po poprečnoj osi |
flex-wrap: wrap | elementi prelaze u novi red kada nema mesta |
gap | razmak između elemenata |
| Svojstvo (dete) | Značenje |
|---|---|
flex: 1 | element zauzima preostali prostor; dva elementa sa flex: 1 i flex: 2 dele prostor 1 : 2 |
flex: 0 0 200px | fiksna širina 200px – ne raste i ne smanjuje se |
display: flex; justify-content: center; align-items: center; na roditelju koji ima visinu.<style>
.kartice { display: flex; flex-wrap: wrap; gap: 12px; }
.kartica {
flex: 1 1 140px; /* raste, smanjuje se, početna širina 140px */
background: #eef6fc;
border-radius: 10px;
padding: 12px;
}
</style>
<div class="kartice">
<div class="kartica">HTML</div>
<div class="kartica">CSS</div>
<div class="kartica">JavaScript</div>
<div class="kartica">Python</div>
<div class="kartica">C++</div>
</div>
Rezultat:
Smanji prozor pregledača: kartice same prelaze u novi red kada ne staju. Tako se bez ijednog dodatnog pravila dobija raspored koji radi i na telefonu.
<style>
.galerija {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 jednake kolone */
gap: 8px;
}
.galerija div { background: #2b7bb9; color: white; padding: 20px; text-align: center; border-radius: 6px; }
.siroka { grid-column: span 2; background: #1f5f91 !important; } /* zauzima 2 kolone */
</style>
<div class="galerija">
<div>1</div><div>2</div><div>3</div>
<div class="siroka">4 (dve kolone)</div><div>5</div>
<div>6</div><div>7</div><div>8</div>
</div>
Rezultat:
| Svojstvo | Primer |
|---|---|
grid-template-columns | 200px 1fr – prva kolona 200px, druga ostatak; repeat(4, 1fr) – 4 jednake |
fr | deo slobodnog prostora (fraction) |
repeat(auto-fill, minmax(150px, 1fr)) | onoliko kolona od bar 150px koliko stane – automatski prilagodljiva galerija |
grid-column: span 2 | element zauzima dve kolone |
grid-template-areas | raspored zadat imenima oblasti (primer ispod) |
<style>
.stranica {
display: grid;
grid-template-columns: 1fr 3fr;
grid-template-areas:
"zaglavlje zaglavlje"
"meni sadrzaj"
"podnozje podnozje";
gap: 6px;
min-height: 220px;
}
header { grid-area: zaglavlje; background: #1f5f91; color: white; }
nav { grid-area: meni; background: #cfe3f3; }
main { grid-area: sadrzaj; background: #eef6fc; }
footer { grid-area: podnozje; background: #ddd; }
header, nav, main, footer { padding: 10px; }
</style>
<div class="stranica">
<header>Zaglavlje</header>
<nav>Meni</nav>
<main>Glavni sadržaj</main>
<footer>Podnožje</footer>
</div>
Rezultat:
Oblasti se „crtaju“ tekstom u grid-template-areas, a svaki element dobija svoje mesto preko grid-area. Promena rasporeda (npr. za telefon) svodi se na drugačiji crtež.
| Situacija | Alat |
|---|---|
| meni, red dugmadi, centriranje jednog elementa | flexbox |
| kartice nepoznatog broja koje prelaze u novi red | flexbox (wrap) ili grid (auto-fill) |
| galerija sa jednakim kolonama | grid |
| raspored cele stranice (zaglavlje, meni, sadržaj, podnožje) | grid |
Često se kombinuju: grid za celu stranicu, flexbox unutar zaglavlja. Za vežbu postoje igre Flexbox Froggy (ima i srpski jezik) i Grid Garden.
Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno ispravna u pregledaču.
Napravi galeriju od 8 slika koja na širokom ekranu ima 4 kolone, a na užim sama smanjuje broj kolona (najmanja širina slike 160px). Slike su iste visine (150px) i ne razvlače se.
Napravi podnožje sajta sa tri kolone (O nama, Linkovi, Kontakt) koje su jednake širine, sa razmakom između, a na dnu jedan red sa tekstom „© 2026“ centriran.
display: flex ili grid se piše na roditelju, a ne na elementima koje raspoređuješ.justify-content radi po glavnoj osi – kod flex-direction: column to je vertikala.gap umesto margine na svakom elementu.1. Kojim svojstvom elementi u flexbox-u prelaze u novi red?
2. Kako centrirati element horizontalno i vertikalno u flex roditelju?
3. Šta znači grid-template-columns: 1fr 2fr?
4. Šta je bolje za raspored cele stranice sa zaglavljem, menijem i sadržajem?