1. Ce este design-ul responsive?
Site NON-responsive
Latimea fixa: 1200px. Pe telefon (375px) apare micsorat sau cu scroll orizontal. Textul e ilizibil fara zoom.
Site Responsive
Layout flexibil. Pe telefon: 1 coloana, text mare. Pe desktop: 3 coloane, meniu orizontal. Acelasi cod HTML/CSS.
📊 Statistica 2026: Peste 60% din traficul web vine de pe dispozitive mobile. Un site non-responsive pierde mai mult de jumatate din vizitatori.
Meta-tag obligatoriu
Primul pas in orice pagina responsiva este aceasta linie in <head>:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Fara ea, browserul de pe telefon simuleaza un ecran de 980px si zoom-ueaza totul — site-ul apare miniatural.
2. Unitati relative vs. absolute
% — Procent
Relativ la elementul parinte. width: 50% = jumatate din parintele sau.
vw — Viewport Width
1vw = 1% din latimea ferestrei browserului. width: 100vw = toata latimea ecranului.
vh — Viewport Height
1vh = 1% din inaltimea ferestrei. height: 100vh = toata inaltimea ecranului.
rem — Root em
Relativ la font-size al elementului <html>. Implicit: 1rem = 16px. Recomandat pentru texte.
em — Element em
Relativ la font-size al elementului curent. Se compune daca e imbricat (evita pentru layout).
clamp(min, ideal, max)
Valoare fluida intre un minim si un maxim. Ex: clamp(1rem, 2.5vw, 1.5rem) pentru text responsive.
Viewport = 1024px latime, font-size radacina = 16px:
/* 100vw = 1024px (intreaga latime) */ /* 50vw = 512px */ /* 1rem = 16px (font-size html implicit) */ /* 2rem = 32px */ /* clamp(16px, 2.5vw, 24px) -> 2.5vw = 25.6px -> clamped la 24px */ /* Pe telefon 375px latime: */ /* clamp(16px, 2.5vw, 24px) -> 2.5vw = 9.4px -> clamped la 16px (min) */
Output verificat: la 1024px clamp returneaza 24px; la 375px returneaza 16px. Font-ul se adapteaza automat intre valorile min-max.
3. Media Queries
width). Sintaxa: @media (conditie) { reguli-css }.
Breakpoint-uri standard (conventional 2026)
Nu exista standard oficial, dar aceste valori sunt cel mai des utilizate:
/* === BREAKPOINT-URI STANDARD === */ /* Mobile first: stiluri default (fara @media) se aplica pe telefon */ .container { width: 100%; padding: 1rem; } /* Tableta: ecrane >= 481px */ @media (min-width: 481px) { .container { padding: 1.5rem; } } /* Desktop mic: ecrane >= 769px */ @media (min-width: 769px) { .container { max-width: 960px; margin: 0 auto; } } /* Desktop mare: ecrane >= 1201px */ @media (min-width: 1201px) { .container { max-width: 1200px; } }
min-width vs max-width: min-width = “de la latime in sus” (abordare Mobile First, recomandata). max-width = “pana la latime” (abordare Desktop First, mai veche).
/* MOBIL (default): meniu vertical */ .nav { display: flex; flex-direction: column; gap: 0.5rem; } /* DESKTOP: meniu orizontal */ @media (min-width: 769px) { .nav { flex-direction: row; gap: 2rem; } }
Pe telefon: elementele de meniu sunt stivuite vertical. Pe desktop: sunt aliniate orizontal. Acelasi HTML, CSS diferit per latime.
4. Flexbox pentru layout responsiv
display: flex
Activeaza Flexbox pe container. Copiii devin flex items.
flex-wrap: wrap
Permite elementelor sa treaca pe randul urmator. Esential pentru responsive.
flex: 1
Elementul ocupa spatiu proportional disponibil. flex: 1 1 300px = creste, scade, dar incepe de la 300px.
gap
Spatiu intre elemente. gap: 1rem adauga spatiu uniform fara margini manuale.
/* Container: flex cu wrap */ .card-grid { display: flex; flex-wrap: wrap; gap: 1.25rem; } /* Card: latime minima 280px, creste sa umple spatiul */ .card { flex: 1 1 280px; background: #1a1a2e; border-radius: 12px; padding: 1.5rem; } /* Rezultat automat: Telefon (375px): 1 card pe rand (375 > 280, 375*2 < 280*2+gap) Tableta (768px): 2 carduri pe rand Desktop (1200px): 3-4 carduri pe rand Fara nicio linie @media scrisa manual! */
Verificare matematica: Container 1200px, gap 20px, 3 coloane:
Latime coloana = (1200 - 20×2) / 3 = (1200 - 40) / 3 = 1160 / 3 = 386.67px
La 2 coloane: (768 - 16) / 2 = 376px — calculat si verificat cu Python.
5. Strategia Mobile First
min-width in media queries.
✗ Desktop First (vechi)
- CSS default pentru ecran mare (1200px)
- Media queries cu
max-width - Ascunzi/comprimi elemente pentru mobil
- Telefon incarca CSS inutil
- Mai greu de mentinut
✓ Mobile First (recomandat)
- CSS default pentru telefon (375px)
- Media queries cu
min-width - Adaugi layout complex pentru desktop
- Performanta mai buna pe mobil
- Google favorizeaza indexarea mobile-first
/* ===== MOBILE FIRST: structura corecta ===== */ /* 1. Stiluri de baza (se aplica PE ORICE ecran, inclusiv telefon) */ .hero-title { font-size: 1.75rem; /* mic pe telefon */ line-height: 1.3; } .columns { display: flex; flex-direction: column; /* stivuit pe telefon */ gap: 1rem; } /* 2. Tableta si mai mare */ @media (min-width: 768px) { .hero-title { font-size: 2.5rem; /* mai mare pe tableta */ } .columns { flex-direction: row; /* orizontal pe tableta+ */ } } /* 3. Desktop si mai mare */ @media (min-width: 1200px) { .hero-title { font-size: 3.5rem; /* maxim pe desktop */ } }
6. Erori frecvente si cum sa le eviti
Lista completa de verificare responsive
Inainte de a livra un site, verifica fiecare punct:
✗ Eroare 1: Lipsa meta viewport
Media queries-urile sunt scrise corect dar nu functioneaza pe telefon. Cauza: browserul simuleaza ecran de 980px. Fix: adauga <meta name="viewport" content="width=device-width, initial-scale=1.0"> in <head>.
✓ Fix: Adauga meta viewport
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pagina mea</title> </head>
✗ Eroare 2: Imagini care depasesc containerul
O imagine cu width: 800px depaseste ecranul de 375px, provocand scroll orizontal. Fix:
✓ Fix: Imagini fluide
img {
max-width: 100%; /* niciodata mai lata decat containerul */
height: auto; /* pastreaza proportiile */
}
✗ Eroare 3: Text prea mic pe mobil
Font-size de 12px pe telefon este greu de citit. Regula: minim 16px pentru text de baza pe orice dispozitiv.
✓ Fix: Text fluid cu clamp
body {
font-size: clamp(1rem, 2.5vw, 1.125rem);
/* minim 16px, ideal 2.5vw, maxim 18px */
}
💡 Instrument de testare: In browser (Chrome/Firefox), apasa F12 → icona “Responsive Design Mode” (telefon+tableta) pentru a simula orice dimensiune de ecran fara a fi nevoie de un dispozitiv real.