Curs Web Development
Curs HTML
Curs CSS
Curs Javascript
Curs PHP
Curs Phyton
Curs SQL
Curs SEO

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.

🔧 Exemplu: Activarea Grid-ului

Terminologie de bază

Înainte de a construi un layout cu CSS Grid, e important să înțelegi termenii fundamentali:

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.

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.

🔧 Exemplu live

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ă.

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.

🔧 Exemplu: Spațiere între elemente

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

La nivel de item

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.

🔧 Exemplu: Alinierea elementelor

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.

Exemplu:

.item {
  grid-column: 2 / 4;
  grid-row: 1 / 3;
}

Itemul va ocupa coloanele 2 și 3 și rândurile 1 și 2.

🔧 Exemplu: Poziționare manuală

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; }
🔧 Exemplu: Layout vizual cu zone

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.

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.

🔧 Exemplu: Umplere automată și layout flexibil

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.

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.

🔧 Exemplu: Flux automat și dimensiuni implicite

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.

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.

🔧 Exemplu: Grid pe elemente individuale

Grid implicit vs. Grid explicit

În CSS Grid, putem defini structura în mod explicit sau putem lăsa browserul să o genereze automat (implicit).

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.

🔧 Exemplu: Grid implicit vs. Grid explicit

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.

Subgrid este suportat doar în browsere moderne (Firefox, Safari, Chromium 117+).

🔧 Exemplu: Grid nesting și sub-grid

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.

Exemplu:

.item {
  order: 2;
  position: relative;
  z-index: 10;
}

Acest cod mută elementul în a doua poziție și îl aduce deasupra altor elemente.

🔧 Exemplu: Ordinea de afișare și layering în Grid

Grid și media queries

CSS Grid funcționează excelent cu media queries, permițând adaptarea layout-ului în funcție de dimensiunea ecranului.

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.

🔧 Exemplu: Grid și media queries

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.

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.

🔧 Exemplu: Grid și fallback-uri pentru browsere vechi

Layout de pagină cu Grid

Un layout de pagină tipic conține:

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;
}
🔧 Exemplu: Layout de pagină cu Grid

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.

🔧 Exemplu: Galerie de imagini responsive

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.

🔧 Exemplu: Dashboard cu carduri dinamice

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;
}
🔧 Proiect aplicat: Layout complet și responsive

🛠️ Sfaturi utile pentru CSS Grid

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!

Top