CSS: responzivni dizajn za telefon i računar

Lekcija 8 od 17 · HTML, CSS i JavaScript

Više od polovine posetilaca sajtove otvara na telefonu. Responzivan sajt se sam prilagođava širini ekrana: na telefonu je sve u jednoj koloni, na računaru u više. U ovoj lekciji su viewport, fleksibilne veličine, media upiti i pristup „prvo telefon“.

Pre nego što počneš: potrebno predznanje – flexbox i grid.
Kako da učiš: zadatke na kraju prvo uradi sam/a u svom editoru; uputstvo i rešenje otvori tek posle toga. Svaki primer ima kod i živi rezultat ispod njega; kod prekucaj u svoj fajl i menjaj ga.

Korak 1: viewport

Bez ovog reda telefon prikazuje stranicu kao da je ekran širok 980px i sve smanji – tekst postaje sitan:

<meta name="viewport" content="width=device-width, initial-scale=1">

On mora biti u head svake stranice.

Korak 2: fleksibilne veličine

UmestoKoristiZašto
width: 900pxmax-width: 900px; width: 100%na užem ekranu se smanji
slike fiksne širineimg { max-width: 100%; height: auto; }slika nikad ne izlazi iz ekrana
veličine slova u px svudarem, a za naslove clamp(1.5rem, 4vw, 2.5rem)slova se prilagođavaju
fiksni broj kolonaflex-wrap ili repeat(auto-fill, minmax(...))kolone se same preslažu

Korak 3: media upiti

Media upit je skup CSS pravila koja važe samo pod nekim uslovom, najčešće za određenu širinu ekrana:

<style>
  .kolone { display: flex; flex-direction: column; gap: 8px; }   /* telefon: jedna kolona */
  .kolone div { background: #eef6fc; padding: 14px; border-radius: 8px; }
  .poruka::after { content: "uzak ekran (telefon)"; }

  @media (min-width: 600px) {          /* važi kada je širina 600px ili više */
    .kolone { flex-direction: row; }   /* tablet i računar: kolone u redu */
    .kolone div { flex: 1; }
    .poruka::after { content: "širok ekran (≥ 600px)"; }
  }
</style>
<p class="poruka">Sada je: </p>
<div class="kolone">
  <div>Prva kolona</div>
  <div>Druga kolona</div>
  <div>Treća kolona</div>
</div>

Rezultat:

Okvir sa rezultatom je uži od 600px na telefonu, a širi na računaru – otvori ovu stranu na oba uređaja ili suzi prozor. U F12 postoji dugme Toggle device toolbar (Ctrl+Shift+M) koje prikazuje stranicu kao na izabranom telefonu.

Česte graniceUređaj
do 599pxtelefon
600px – 1023pxtablet, mali laptop
1024px i višeračunar

Granice nisu zakon – stavljaju se tamo gde se raspored „pokvari“ dok sužavaš prozor.

Prvo telefon (mobile first)

Preporučen način pisanja: osnovna pravila su za telefon (jednostavno, jedna kolona), a @media (min-width: ...) dodaje složeniji raspored za veće ekrane. Tako je CSS kraći, a stranica na telefonu brža.

/* osnovno: telefon */
.stranica { display: grid; gap: 12px; }
nav ul { display: flex; flex-direction: column; }

/* tablet i veće */
@media (min-width: 700px) {
  nav ul { flex-direction: row; gap: 16px; }
}

/* računar */
@media (min-width: 1024px) {
  .stranica { grid-template-columns: 220px 1fr; }   /* meni levo, sadržaj desno */
}

Još nekoliko pravila za prijatan sajt

  • Dugmad i linkovi za prst – bar 44×44px; mali linkovi jedan do drugog teško se pogađaju.
  • Dužina reda teksta – 60–80 znakova se najlakše čita: main { max-width: 70ch; }.
  • Tamna tema – @media (prefers-color-scheme: dark) { ... } poštuje podešavanje uređaja.
  • Široke tabele – stavi ih u div sa overflow-x: auto da se pomeraju vodoravno umesto da kvare stranicu.

Gotove biblioteke kao što je Bootstrap imaju spremne klase za responzivnu mrežu i komponente. Koriste se u projektu Logo kreator, ali je važno da prvo razumeš kako sve to radi sa običnim CSS-om.

Zadaci za vežbu

Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno ispravna u pregledaču.

ZADATAK 01Težina: teže

Responzivna početna strana

Napravi stranicu sa zaglavljem (logo + meni), tri kartice i podnožjem. Na telefonu: meni ispod logoa, kartice jedna ispod druge. Od 700px: meni desno od logoa, kartice u redu.

Česte greške i saveti
  • Bez meta viewport media upiti na telefonu ne rade kako očekuješ.
  • Proveravaj stranicu u režimu uređaja (Ctrl+Shift+M) dok pišeš, ne tek na kraju.
  • Ne kriti sadržaj na telefonu samo zato što ne staje – preuredi ga.
  • Slike bez max-width: 100% izlaze iz ekrana i prave vodoravno pomeranje cele stranice.

Proveri znanje

Otvori kviz

Responzivni dizajn

1. Šta radi @media (min-width: 600px) { ... }?




2. Koji red mora biti u head da bi responzivni dizajn radio na telefonu?




3. Šta znači „mobile first“?



4. Kako sprečiti da slika bude šira od ekrana?