Context engineering
CSS Grid è un sistema di layout bidimensionale, che consente di posizionare elementi sia in righe (rows) che in colonne (columns), rendendo più semplice creare layout complessi e responsive rispetto a Flexbox (che è più indicato per un asse principale).
Controllo preciso su righe e colonne.
Possibilità di ridimensionare automaticamente gli elementi.
Facilita la creazione di homepage, magazine, dashboard.
Per definire un container grid:
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* definizione colonne */
grid-template-rows: 100px auto 50px; /* definizione righe */
gap: 15px; /* spazio tra righe e colonne */
}
fr = frazioni dello spazio disponibile.
gap = distanza tra righe e colonne.
grid-template-columns e grid-template-rows definiscono la struttura del layout.
Gli elementi figli del container grid diventano automaticamente grid items.
Possono essere posizionati usando:
grid-column: colonna di inizio/fine.
grid-row: riga di inizio/fine.
.item1 {
grid-column: 1 / 3; /* occupa colonne 1 e 2 */
grid-row: 1 / 2; /* prima riga */
}
| Proprietà | Funzione |
|---|---|
| display: grid | Trasforma l’elemento in container Grid |
| grid-template-columns/rows | Definisce numero e dimensione di colonne/righe |
| gap | Spaziatura tra righe e colonne |
| grid-auto-rows/columns | Dimensione automatica di righe o colonne non definite |
| justify-items / align-items | Allineamento degli items all’interno delle celle |
| justify-content / align-content | Allineamento dell’intera griglia all’interno del container |
grid-column / grid-row
.item {
grid-column: 2 / 4; /* dalla colonna 2 alla 3 inclusa */
grid-row: 1 / 3; /* dalla riga 1 alla 2 inclusa */
}
grid-area
Consente di definire area nomi:
.container {
grid-template-areas:
"header header header"
"sidebar content content"
"footer footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }
Allineamento interno alle celle
.item {
justify-self: center; /* or start, end, stretch */
align-self: center; /* or start, end, stretch */
}
Creare una homepage con:
Header
Sidebar
Contenuto principale
Footer
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Magazine Grid</title>
<link rel="stylesheet" href="stile.css">
</head>
<body>
<div class="container">
<header class="header">Header</header>
<aside class="sidebar">Sidebar</aside>
<main class="content">Contenuto principale</main>
<footer class="footer">Footer</footer>
</div>
</body>
</html>
body {
margin: 0;
font-family: Arial, sans-serif;
}
/* Container Grid */
.container {
display: grid;
grid-template-columns: 1fr 3fr;
grid-template-rows: 100px auto 50px;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
gap: 15px;
padding: 15px;
background-color: #f2f2f2;
}
/* Header */
.header {
grid-area: header;
background-color: #333;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
}
/* Sidebar */
.sidebar {
grid-area: sidebar;
background-color: #4fa3f2;
color: white;
padding: 15px;
}
/* Content */
.content {
grid-area: content;
background-color: #ffffff;
padding: 15px;
border-radius: 8px;
}
/* Footer */
.footer {
grid-area: footer;
background-color: #333;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
Layout a due colonne con header e footer su tutta la larghezza.
Sidebar e contenuto principali affiancati.
Layout responsive-friendly perché la griglia può essere facilmente modificata con media queries.
Commenti
Posta un commento