CSS Grid: Introducere
CSS Grid este un sistem de layout bidimensional care permite organizarea elementelor HTML în rânduri și coloane. Este ideal pentru structuri complexe, pagini responsive și layout-uri precise.
Activarea Grid-ului
Pentru a activa sistemul Grid, se aplică proprietatea display: grid pe un container. Alternativ,
se poate folosi display: inline-grid pentru comportament inline. Toți copiii direcți ai acestui
container devin automat grid items.
Terminologie de bază
Înainte de a construi un layout cu CSS Grid, e important să înțelegi termenii fundamentali:
- Grid container - elementul care are
display: grid. Este cadrul în care se construiește grid-ul. - Grid item - orice copil direct al containerului. Acestea sunt elementele care se poziționează în grid.
- Track - o coloană sau un rând din grid.
- Line - linia care separă două track-uri. Poate fi folosită pentru poziționare.
- Area - o zonă rectangulară formată din mai multe celule, definită cu
grid-area.
Definirea structurii
Structura grid-ului se stabilește prin definirea coloanelor și rândurilor. Se folosesc proprietățile
grid-template-columns și grid-template-rows pentru a crea un cadru flexibil sau fix.
- Unități fixe:
px,%- dimensiuni exacte - Unități flexibile:
fr- fracțiuni din spațiul disponibil - Funcții utile:
repeat()- repetă valori;minmax()- definește limite flexibile
Exemplu:
grid-template-columns: repeat(3, 1fr);
grid-template-rows: minmax(100px, auto);
Acest cod creează 3 coloane egale și rânduri care au minim 100px și se pot extinde automat.
Spațiere între elemente
CSS Grid oferă control precis asupra spațiului dintre coloane și rânduri prin intermediul proprietății
gap. Aceasta poate fi aplicată global sau separat pe fiecare axă.
- gap - definește spațiul dintre toate coloanele și rândurile
- row-gap - definește spațiul doar între rânduri
- column-gap - definește spațiul doar între coloane
Exemplu:
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 150px;
gap: 20px;
Acest cod creează 3 coloane egale, un singur rând de 150px și un spațiu de 20px între toate celulele.
Alinierea elementelor
CSS Grid oferă control asupra aliniării atât la nivel de container, cât și la nivel de item. Aceste proprietăți ajută la distribuirea spațiului și la poziționarea elementelor în interiorul celulelor.
La nivel de container
justify-content- aliniere orizontală a grid-ului în containeralign-content- aliniere verticală a grid-ului în containerplace-content- shortcut pentru ambele
La nivel de item
justify-items- aliniere orizontală implicită a itemiloralign-items- aliniere verticală implicită a itemilorjustify-self- aliniere orizontală individualăalign-self- aliniere verticală individualăplace-self- shortcut pentru ambele
Exemplu:
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
justify-items: center;
align-items: center;
}
Toți itemii vor fi centrați pe ambele axe în interiorul celulelor.
Poziționare manuală
CSS Grid permite poziționarea precisă a elementelor în grid folosind linii de start și de final. Se pot folosi proprietăți individuale sau shorthand.
grid-column-start/grid-column-end- poziționează pe axa orizontalăgrid-row-start/grid-row-end- poziționează pe axa verticalăgrid-column/grid-row- shorthand pentru start / endgrid-area- shortcut complet:grid-row-start / grid-column-start / grid-row-end / grid-column-end
Exemplu:
.item {
grid-column: 2 / 4;
grid-row: 1 / 3;
}
Itemul va ocupa coloanele 2 și 3 și rândurile 1 și 2.
Layout vizual cu zone
CSS Grid permite definirea unui layout semantic și ușor de întreținut folosind
grid-template-areas. Fiecare zonă este denumită și atribuită unui item prin grid-area.
Exemplu de definire a zonelor:
grid-template-areas:
"header header"
"main sidebar"
"footer footer";
Fiecare item din grid trebuie să aibă o zonă atribuită:
.header { grid-area: header; }
.main { grid-area: main; }
.sidebar { grid-area: sidebar; }
.footer { grid-area: footer; }
Umplere automată și layout flexibil
CSS Grid permite generarea automată de coloane sau rânduri în funcție de spațiul disponibil, folosind
auto-fill și auto-fit. Acestea sunt utile în layout-uri responsive.
- auto-fill - creează cât mai multe coloane, chiar dacă unele rămân goale
- auto-fit - creează coloane care se ajustează la conținutul disponibil
- minmax() - definește limitele minime și maxime ale dimensiunii unei coloane
Exemplu:
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
Acest cod creează coloane care au minimum 150px și se extind până la o fracțiune egală din spațiul disponibil. Numărul de coloane se ajustează automat.
Flux automat și dimensiuni implicite
CSS Grid poate genera automat rânduri sau coloane pentru elementele care nu au o poziție definită. Acest
comportament este controlat prin proprietățile grid-auto-flow, grid-auto-rows și
grid-auto-columns.
- grid-auto-flow - stabilește direcția în care sunt plasate automat elementele:
row,columnsaudense - grid-auto-rows - definește înălțimea implicită a rândurilor generate automat
- grid-auto-columns - definește lățimea implicită a coloanelor generate automat
Exemplu:
.grid {
display: grid;
grid-auto-flow: column;
grid-auto-columns: 120px;
}
Acest cod creează coloane de 120px lățime, iar elementele sunt plasate automat pe coloane.
Grid pe elemente individuale
Fiecare element dintr-un grid poate fi poziționat manual folosind proprietăți CSS specifice. Acestea oferă control total asupra amplasării în rânduri și coloane.
- grid-column-start / grid-column-end - definește poziția pe axa orizontală
- grid-row-start / grid-row-end - definește poziția pe axa verticală
- grid-area - scurtătură pentru toate cele patru proprietăți
Exemplu:
.item {
grid-column: 2 / 4;
grid-row: 1 / 3;
}
Acest cod plasează elementul între coloanele 2 și 4 și între rândurile 1 și 3.
Grid implicit vs. Grid explicit
În CSS Grid, putem defini structura în mod explicit sau putem lăsa browserul să o genereze automat (implicit).
- Grid explicit - definit prin
grid-template-rowsșigrid-template-columns - Grid implicit - generat automat pentru elementele care depășesc structura definită
- grid-auto-rows și grid-auto-columns - controlează dimensiunile implicite
Exemplu:
.grid {
display: grid;
grid-template-columns: 100px 100px;
grid-auto-rows: 80px;
}
Aici sunt definite 2 coloane explicit, iar rândurile suplimentare sunt generate implicit cu înălțimea de 80px.
Grid nesting și sub-grid
CSS Grid permite crearea de grile în interiorul altor grile. Acest lucru se numește nesting. Începând cu specificația CSS Subgrid, putem chiar să sincronizăm grilele interne cu cele externe.
- Nesting - un element din grid devine container pentru un alt grid
- Subgrid - permite moștenirea liniilor de grid de la containerul părinte
- grid-template-columns: subgrid - activează comportamentul de subgrid
Subgrid este suportat doar în browsere moderne (Firefox, Safari, Chromium 117+).
Ordinea de afișare și layering în Grid
CSS Grid permite controlul asupra ordinii în care sunt afișate elementele și asupra stratificării lor
(layering), folosind proprietăți precum order și z-index.
- order - stabilește ordinea de afișare în grid (funcționează doar pe elemente
display: gridsauflex) - z-index - controlează ce element apare deasupra altuia
- position - trebuie să fie
relative,absolutesaufixedpentru caz-indexsă funcționeze
Exemplu:
.item {
order: 2;
position: relative;
z-index: 10;
}
Acest cod mută elementul în a doua poziție și îl aduce deasupra altor elemente.
Grid și media queries
CSS Grid funcționează excelent cu media queries, permițând adaptarea layout-ului în funcție de dimensiunea ecranului.
- @media - permite definirea de stiluri condiționate
- grid-template-columns - poate fi modificat pentru diferite rezoluții
- repeat() și minmax() - utile pentru layout-uri fluide
Exemplu:
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
}
@media (max-width: 600px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}
Acest cod afișează 4 coloane pe ecrane mari și doar 2 coloane pe ecrane mici.
Grid și fallback-uri pentru browsere vechi
Deși CSS Grid este suportat de majoritatea browserelor moderne, unele versiuni mai vechi nu îl recunosc. Pentru aceste cazuri, se pot folosi fallback-uri sau feature queries.
- @supports - verifică dacă browserul suportă o proprietate CSS
- display: flex - poate fi folosit ca alternativă simplă
- Graceful degradation - oferă o versiune funcțională, dar mai simplă
Exemplu:
@supports (display: grid) {
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
}
@supports not (display: grid) {
.container {
display: flex;
flex-wrap: wrap;
}
}
Acest cod aplică Grid doar dacă browserul îl suportă, altfel folosește Flexbox.
Layout de pagină cu Grid
Un layout de pagină tipic conține:
- Header - partea de sus
- Sidebar - meniul lateral
- Content - zona principală
- Footer - partea de jos
Folosim grid-template-areas pentru a defini vizual structura.
.grid {
display: grid;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
grid-template-columns: 200px 1fr;
grid-template-rows: auto 1fr auto;
gap: 10px;
}
Galerie de imagini responsive
Folosim grid-template-columns cu auto-fit și minmax() pentru a crea o
galerie care se adaptează automat la dimensiunea ecranului.
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 10px;
}
Acest cod creează coloane care se extind automat, cu o lățime minimă de 150px.
Dashboard cu carduri dinamice
Folosim grid-template-columns cu auto-fit și minmax() pentru a crea un
layout flexibil, unde cardurile se rearanjează automat în funcție de spațiu.
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
Cardurile se vor extinde și reorganiza automat pe ecrane diferite.
Proiect aplicat: Layout complet cu CSS Grid
Acest layout combină toate conceptele învățate: zone, umplere automată, aliniere, layering, media queries și fallback.
.grid {
display: grid;
grid-template-areas:
"header header"
"sidebar content"
"sidebar gallery"
"sidebar dashboard"
"footer footer";
grid-template-columns: 250px 1fr;
grid-template-rows: auto auto auto 1fr auto;
gap: 20px;
padding: 20px;
}
🛠️ Sfaturi utile pentru CSS Grid
- ✅ Folosește
frpentru layout-uri flexibile - distribuie spațiul proporțional - ✅ Combină
GridcuFlexbox- Grid pentru structură, Flex pentru detalii - ✅ Testează cu DevTools - vizualizează liniile de grid și zonele
- ✅ Folosește
minmax()șiauto-fitpentru layout-uri responsive - ✅ Definește
grid-template-areaspentru claritate și mentenanță ușoară - ✅ Nu abuza de
z-index- păstrează layering-ul simplu - ✅ Folosește
@supportspentru fallback-uri elegante
Aceste sfaturi te ajută să construiești layout-uri robuste, clare și adaptabile.
CSS Grid nu e doar un sistem de layout — e un limbaj vizual. Cu cât îl înțelegi mai bine, cu atât îți poți exprima ideile mai clar.
🧠 Quiz - CSS Grid
Felicitari! Acest curs introductiv se opreste aici. In urmatorul curs vei invata limbajul de programare Javascript. Mult succes si spor la invatat!
