- grid-template-columns e grid-template-rows
- grid-template-areas
- grid-template
- grid-column-gap e grid-row-gap
- grid-gap
- grid-auto-columns e grid-auto-rows
- grid-auto-flow
- grid
- grid-column-start, grid-column-end
- grid-row-start, grid-row-end
- grid-column e grid-row
- grid-area
- Posizionamento automatico
Se gli elementi non contengono informazioni sul posizionamento, si posizioneranno sulla griglia uno per ogni sua cella.
- Posizionamento degli elementi per numero di linea
Utilizzare le linee numerate è il punto più logico da cui iniziare, poiché quando si utilizza il layout della griglia si hanno sempre linee numerate. Le righe sono numerate per colonne e righe e sono indicizzate da 1.
- Posizionamento con linee della griglia denominate
Si può assegnare un nome ad alcune o tutte le linee nella griglia e una volta che le linee hanno un nome, possiamo usare il nome per posizionare l'oggetto anziché il numero di riga.
- Posizionamento Utilizzando la parola chiave span(espansione su traccia)
Oltre a specificare le righe di inizio e fine per numero, si può specificare una linea di partenza e quindi il numero di tracce dove si vuole che l'area si estenda.
- Posizionamento con la denominazione di un'area della griglia
Si possono posizionare gli elementi utilizzando i numeri delle quattro linee che racchiudono l'area, oppure la denominazione di aree del modello conferendogli un nome.
Ognuna delle modalità sopra esposta può avere delle semplificazioni.
.contenitore
di griglia si usa la proprietà display
con il valore grid
..contenitore { display: grid; }
.div
contenente una classe .contenitore
e al suo all'interno quattro elementi figlio.
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.contenitore {
display: grid;
}
<div class="contenitore">
<div class="box1">Primo</div>
<div class="box2">Secondo</div>
<div class="box3">Terzo</div>
<div class="box4">Quarto</div>
</div>
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.contenitore {
display: grid;
}
</style>
</head>
<body>
<div class="contenitore">
<div class="box1">Primo</div>
<div class="box2">Secondo</div>
<div class="box3">Terzo</div>
<div class="box4">Quarto</div>
</div>
</body>
</html>
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
}
display: grid;
il numero di celle con grid-template-columns: repeat(3,
1fr); e grid-template-rows: repeat(3,
100px); ovvero tre colonne e tre righe, e il dimensionamento 1fr(una frazione per ciascuna colonna)
e 100px(di altezza per ciascuna riga)
per il layout di griglia.
.box1 {
grid-column-start: 1;
grid-column-end: 2;
grid-row-start: 1;
grid-row-end: 4;
}
.box2 {
grid-column-start: 3;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 3;
}
.box3 {
grid-column-start: 2;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 2;
}
.box4 {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 3;
grid-row-end: 4;
}
grid-column-gap
per gli spazi tra le colonne, grid-row-gap
per gli spazi tra le righegrid-gap
per impostarle entrambe contemporaneamente.fr
.
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-gap: 20px;
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-gap: 20px;
}
.box1 {
grid-column-start: 1;
grid-column-end: 2;
grid-row-start: 1;
grid-row-end: 4;
}
.box2 {
grid-column-start: 3;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 3;
}
.box3 {
grid-column-start: 2;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 2;
}
.box4 {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 3;
grid-row-end: 4;
}
</style>
</head>
<body>
<div class="contenitore">
<div class="box1">Primo</div>
<div class="box2">Secondo</div>
<div class="box3">Terzo</div>
<div class="box4">Quarto</div>
</div>
</body>
</html>
grid-column-start
e grid-column-end
possono essere combinate in grid-column
,grid-row-start
e grid-row-end
in grid-row
e riportare i due valori iniziale e finale su un'unica riga.
.box1 {
grid-column: 1 / 2;
grid-row: 1 / 4;
}
.box2 {
grid-column: 3 / 4;
grid-row: 1 / 3;
}
.box3 {
grid-column: 2 / 3;
grid-row: 1 / 2;
}
.box4 {
grid-column: 2 / 4;
grid-row: 3 / 4;
}
grid-column-end
o grid-row-end
, dato che la griglia ha come impostazione predefinita l'estensione di una traccia span
.
.box1 {
grid-column-start: 1;
grid-row-start: 1;
grid-row-end: 4;
}
.box2 {
grid-column-start: 3;
grid-row-start: 1;
grid-row-end: 3;
}
.box3 {
grid-column-start: 2;
grid-row-start: 1;
}
.box4 {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 3;
}
.box1 {
grid-column: 1 ;
grid-row: 1 / 4;
}
.box2 {
grid-column: 3 ;
grid-row: 1 / 3;
}
.box3 {
grid-column: 2 ;
grid-row: 1 ;
}
.box4 {
grid-column: 2 / 4;
grid-row: 3 ;
}
gap
), basta aggiungere al contenitore:grid-row-gap
e il secondo per grid-column-gap
così: grid-gap: 1em 20px;
.contenitore {
grid-row-gap: 1em;
grid-column-gap: 20px;
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-column-gap: 20px;
grid-row-gap: 1em;
}
.box1 {
grid-column: 1 ;
grid-row: 1 / 4;
}
.box2 {
grid-column: 3 ;
grid-row: 1 / 3;
}
.box3 {
grid-column: 2 ;
grid-row: 1 ;
}
.box4 {
grid-column: 2 / 4;
grid-row: 3 ;
}
</style>
</head>
<body>
<div class="contenitore">
<div class="box1">Primo</div>
<div class="box2">Secondo</div>
<div class="box3">Terzo</div>
<div class="box4">Quarto</div>
</div>
</body>
</html>
[inizio-principale]
e [fine-principale]
[inizio-contenuto]
e [fine-contenuto]
, sia per le colonne che per le righe.
.contenitore {
display: grid;
grid-template-columns: [inizio-principale] 1fr [inizio-contenuto] 1fr [fine-contenuto] 1fr [fine-principale];
grid-template-rows: [inizio-principale] 100px [inizio-contenuto] 100px [fine-contenuto] 100px [fine-principale];
}
.box1 {
grid-column-start: inizio-principale;
grid-row-start: inizio-principale;
grid-row-end: fine-principale;
}
.box2 {
grid-column-start: fine-contenuto;
grid-row-start: inizio-principale;
grid-row-end: fine-contenuto;
}
.box3 {
grid-column-start: inizio-contenuto;
grid-row-start: inizio-principale;
}
.box4 {
grid-column-start: inizio-contenuto;
grid-column-end: fine-principale;
grid-row-start: fine-contenuto;
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.contenitore {
display: grid;
grid-template-columns: [inizio-principale] 1fr [inizio-contenuto] 1fr [fine-contenuto] 1fr [fine-principale];
grid-template-rows: [inizio-principale] 100px [inizio-contenuto] 100px [fine-contenuto] 100px [fine-principale];
}
.box1 {
grid-column-start: inizio-principale;
grid-row-start: inizio-principale;
grid-row-end: fine-principale;
}
.box2 {
grid-column-start: fine-contenuto;
grid-row-start: inizio-principale;
grid-row-end: fine-contenuto;
}
.box3 {
grid-column-start: inizio-contenuto;
grid-row-start: inizio-principale;
}
.box4 {
grid-column-start: inizio-contenuto;
grid-column-end: fine-principale;
grid-row-start: fine-contenuto;
}
</style>
</head>
<body>
<div class="contenitore">
<div class="box1">Primo</div>
<div class="box2">Secondo</div>
<div class="box3">Terzo</div>
<div class="box4">Quarto</div>
</div>
</body>
</html>
.box1 {
grid-column: 1;
grid-row: 1 / span 3;
}
.box2 {
grid-column: 3;
grid-row: 1 / span 2;
}
.box3 {
grid-column: 2;
grid-row: 1;
}
.box4 {
grid-column: 2 / span 2;
grid-row: 3;
}
grid-area
.grid-row-start
grid-column-start
grid-row-end
grid-column-end
.box1 {
grid-area: 1 / 1 / 4 / 2;
}
.box2 {
grid-area: 1 / 3 / 3 / 4;
}
.box3 {
grid-area: 1 / 2 / 2 / 3;
}
.box4 {
grid-area: 3 / 2 / 4 / 4;
}
grid-template-areas
e scegliere a priori come definire le zone dell'area.grid-area
possiamo assegnare il nome a ciascuna di queste aree.
.primo {
grid-area: pri;
}
.secondo {
grid-area: sec;
}
.terzo {
grid-area: ter;
}
.quarto {
grid-area: qua;
}
grid-area
, possiamo realizzare il layout..contenitore { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 100px); grid-template-areas: "pri ter sec" "pri . sec" "pri qua qua"; }
<div class="wrapper"> <div class="primo">Primo</div> <div class="secondo">Secondo</div> <div class="terzo">Terzo</div> <div class="quarto">Quarto</div> </div>
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-template-areas:
"pri ter sec"
"pri . sec"
"pri qua qua";
}
.primo {
grid-area: pri;
}
.secondo {
grid-area: sec;
}
.terzo {
grid-area: ter;
}
.quarto {
grid-area: qua;
}
</style>
</head>
<body>
<div class="contenitore">
<div class="primo">Primo</div>
<div class="secondo">Secondo</div>
<div class="terzo">Terzo</div>
<div class="quarto">Quarto</div>
</div>
</body>
</html>
.contenitore {
display: grid;
grid-template-columns: 300px 300px 300px;
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore > div {
border-radius: 5px;
padding: 10px;
background-color: #fff4e6;
border: 2px solid #ffa94d;
}
.contenitore {
display: grid;
grid-template-columns: 300px 300px 300px; <!-- modificare con: 1fr 1fr 1fr; -->
}
</style>
</head>
<body>
<div class="contenitore">
<div>Uno</div>
<div>Due</div>
<div>Tre</div>
<div>Quattro</div>
<div>Cinque</div>
<div>Sei</div>
<div>Sette</div>
</div>
</body>
</html>
33% 33% 33%;
"fr"
questa unità rappresenta una frazione dello spazio disponibilefr
come indicato di seguito:
.contenitore {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
fr
distribuisce lo spazio sempre in modo proporzionale rispetto al numero di frazioni indicate.
.contenitore {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
}
grid-column-gap
per gli spazi tra le colonne, grid-row-gap
per gli spazi tra le righe, e grid-gap
per impostarle entrambe contemporaneamente.fr
.*gap
prevedeno di modificarle, e renderle senza il prefisso grid
, in quanto l'intenzione è quella di utilizzarle in più metodi di layout.
.contenitore {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
grid-gap: 20px; /*con prefisso*/
gap: 20px;
}
repeat
si può ripetere il tutto, o solo una una parte dei valori.repeat(4,
1fr) indica il numero di colonne che si vogliono creare e il secodo numero repeat(4, 1fr)
la misura della sua dimensione:
/* Esempio-01: due colonne */
.contenitore {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
/* Esempio-02: quattro colonne */
.contenitore {
display: grid;
grid-template-columns: repeat(4, 1fr);
}
grid-template-columns
e dellegrid-template-rows
.
grid-auto-row
e un valore in pixel.
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 100px;
}
<html lang="it">
<head>
<title>Prima Griglia</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore > div {
border-radius: 5px;
padding: 10px;
background-color: #fff4e6;
border: 2px solid #ffa94d;
}
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 100px;
}
</style>
</head>
<body>
<div class="contenitore">
<div>Uno</div>
<div>Due</div>
<div>Tre</div>
<div>Quattro</div>
<div>Cinque</div>
<div>Sei</div>
<div>Sette</div>
</div>
</body>
</html>
funzione minmax()
ci consente, ad esempio, di impostare una dimensione minima e massima, ovvero minmax(100px, auto)
.grid-auto-rows
per usare un valore minmax()
:minimax()
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(100px, auto);
grid-gap: 20px;
}
minmax(100px, auto);
<html lang="it">
<head>
<title>Griglia css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 900px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 90%;
}
.contenitore > div {
border-radius: 5px;
padding: 10px;
background-color: #fff4e6;
border: 2px solid #ffa94d;
}
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(100px, auto);
}
</style>
</head>
<body>
<div class="contenitore">
<div>Uno<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur.
</div>
<div>Due<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur, vestibulum massa vitae, gravida elit.Suspendisse potenti.
</div>
<div>Tre<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur, vestibulum massa vitae, gravida elit. Proin commodo malesuada mi non ultricies.
</div>
<div>Quattro<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur, vestibulum massa vitae, gravida elit. Proin commodo malesuada mi non ultricies. Suspendisse potenti.
</div>
<div>Cinque<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur, vestibulum massa vitae, gravida elit. Proin commodo malesuada mi non ultricies. Suspendisse potenti. Phasellus ac ante ac arcu venenatis viverra quis vitae erat.
</div>
<div>Sei<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur, vestibulum massa vitae, gravida elit. Proin commodo malesuada mi non ultricies. Suspendisse potenti. Phasellus ac ante ac arcu venenatis viverra quis vitae erat. Donec at sem at ligula vestibulum dictum id vitae ipsum.
</div>
<div>Sette<br/>
Curabitur commodo aliquam ex sed placerat. Sed eu odio consectetur, vestibulum massa vitae, gravida elit. Proin commodo malesuada mi non ultricies. Suspendisse potenti. Phasellus ac ante ac arcu venenatis viverra quis vitae erat. Donec at sem at ligula vestibulum dictum id vitae ipsum. Etiam porta quam ut urna condimentum.
</div>
</div>
</body>
</html>
minmax()
per creare un modello utile, per chiedere alla griglia di creare tutte le colonne che si adattano al contenitore.grid-template-columns
sull'utilizzo diella notazione repeat()
, ma invece di passare un numero, passare la parola chiave auto-fill
.minmax()
, con un valore minimo uguale alla dimensione minima della traccia che vorremmo avere, e un massimo di 1fr
.
.contenitore {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
grid-auto-rows: minmax(100px, auto);
grid-gap: 20px;
}
Per molto tempo la creazione di layout Css, è stata legata agli unici strumenti affidabili e compatibili con i cross browser,
ovvero il float
e il posizionamento
, con il loro carico di frustrazione e limitazione per:
- Centrare verticalmente un blocco di contenuto all'interno del suo genitore.
- Fare in modo che tutti i figli di un contenitore occupassero la stessa quantità di larghezza / altezza disponibile.
- Far si che, in un layout a colonne multiple e con diversa quantità di contenuto adottassero tutte la stessa altezza.
Css Grid Layout
e sia il Css Flexbox Layout
è che:layout griglia Css
è stato progettato per funzionare insieme ad altre parti delle specifiche Css, come parte di un sistema completo per eseguire il layout, quindi può anche condividere alcune funzionalità di base.
In pratica, oltre alla distinzione unidimensionale e bidimensionale, possiamo usare lo style Css della griglia per creare tutta la struttura del layuot di base, e usare lo style Css del flexBox per impostare(volendo) il contenuto di ogni riga e ogni colonna del layout di base creato con il Css di griglia.
Un caso d'uso ideale per il flexbox è quando si dispone di una serie di articoli e si desidera distanziarli uniformemente in un contenitore.
Lasciare che la dimensione del contenuto decida automaticamente quanto spazio individuale occupa ogni oggetto.
Se gli elementi si espandono su una nuova riga, calcoleranno la loro spaziatura in base alla loro dimensione e allo spazio disponibile su quella riga.
La griglia funziona dal punto di vista della realizzazione del layout per una pagina o per la base di tutto il sito.
Quando si utilizza il Css di griglia, si consente in genere di automatizzare il posizionamento degli elementi nelle celle della griglia, e questo avviene in base alle rigorose regole di griglia, quindi, la possibilità di usare anche il flexBox.
flex
,flex-wrap: wrap;
in modo che se lo spazio del contenitore non è sufficiente,.contenitore { width: 600px; display: flex; flex-wrap: wrap; } .contenitore > div { flex: 1 1 150px; }
<div class="contenitore"> <div>Uno</div> <div>Due</div> <div>Tre</div> <div>Quattro</div> <div>Cinque</div> </div>
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 600px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore > div {
border-radius: 5px;
padding: 10px;
background-color: #fff4e6;
border: 2px solid #ffa94d;
}
.contenitore {
width: 600px;
display: flex;
flex-wrap: wrap;
}
.contenitore > div {
flex: 1 1 150px;
}
</style>
</head>
<body>
<div class="contenitore">
<div>Uno</div>
<div>Due</div>
<div>Tre</div>
<div>Quattro</div>
<div>Cinque</div>
</div>
</body>
</html>
frazionario: 1fr
.
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
body {
width: 90%;
max-width: 600px;
margin: 2em auto;
font-family: Consolas, 'monospace';
font-size: 120%;
}
.contenitore {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
}
.contenitore > div {
border-radius: 5px;
padding: 10px;
background-color: #ffd8a8;
border: 2px solid #ffa94d;
}
.contenitore {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
</style>
</head>
<body>
<div class="contenitore">
<div>Uno</div>
<div>Due</div>
<div>Tre</div>
<div>Quattro</div>
<div>Cinque</div>
</div>
</body>
</html>
<div class="contenitore">
<header><h4>Intestazione</h4></header>
<article>
<p>...</p>
</article>
<nav>
<h4>Naviga</h4>
<a class="link" href="#">Home</a>
<a class="link" href="#">Capitolo 1</a>
<a class="link" href="#">Capitolo 2</a>
<a class="link" href="#">Capitolo 3</a>
<a class="link" href="#">Capitolo 4</a>
</nav>
<aside>
<h4>Aside</h4>
<p>...</p>
</aside>
<footer><h4>Footer</h4></footer>
</div>
grid-row
e grid-column
.
.contenitore {
margin: 10px auto;
max-width: 1040px;
display: grid;
grid-template-columns: 8em auto 11em;
grid-template-rows: 4em auto auto auto 4em;
}
footer {
background-color: #ee7970;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
grid-column: 1 / 4;
grid-row: 5;
}
@media screen and (min-width: 800px) {
header {
grid-column: 1 / 4;
}
nav {
grid-row: 2 / 5;
grid-column: 1;
}
aside {
grid-row: 2 / 5;
grid-column: 3;
}
article {
grid-row: 2 / 5;
grid-column: 2;
}
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>titolo</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<style type="text/css">
body {
font-family: Verdana, "sans-serif";
}
nav {
background-color: #8caedc;
padding: 0.5em;
}
article {
background: #fffad3;
padding: 0.5em;
}
aside {
background-color: #fbcca2;
padding: 0.5em;
}
h4 {
margin-bottom: 0.5em;
text-align: center;
}
p {
line-height: 1.5;
margin-bottom: 1em;
padding: 0.5em;
}
.link {
display: block;
margin-bottom: 0.5em;
text-align: center;
}
header {
background-color: #b9d586;
display: flex;
align-items: center;
justify-content: center;
}
.contenitore {
margin: 10px auto;
max-width: 1040px;
display: grid;
grid-template-columns: 8em auto 11em;
grid-template-rows: 4em auto auto auto 4em;
}
footer {
background-color: #ee7970;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
grid-column: 1 / 4;
grid-row: 5;
}
@media screen and (min-width: 800px) {
header {
grid-column: 1 / 4;
}
nav {
grid-row: 2 / 5;
grid-column: 1;
}
aside {
grid-row: 2 / 5;
grid-column: 3;
}
article {
grid-row: 2 / 5;
grid-column: 2;
}
}
@media screen and (min-width: 480px) and (max-width: 799px) {
nav {
grid-column: 1;
grid-row: 2;
}
aside {
grid-column: 1;
grid-row: 3 / 5;
}
article {
grid-column: 2 / 4;
grid-row: 1 / 5;
}
}
@media screen and (max-width: 479px) {
header {
grid-column: 1 / 4;
}
article {
grid-column: 1 / 4;
grid-row: 2;
}
aside {
grid-column: 1 / 4;
grid-row: 3;
}
nav {
grid-column: 1 / 4;
grid-row: 4;
}
}
</style>
</head>
<body>
<div class="contenitore">
<header><h4>Intestazione</h4></header>
<article>
<p>"È molto triste quindi che così tanti bambini siano frettolosi e non abbiano il tempo di pensare a se stessi. La gente dice loro quando pensano di aver giocato abbastanza a lungo: "Non sei più un bambino. Devi iniziare a fare qualcosa. "Ma anche se il gioco non sta facendo nulla, stai davvero facendo qualcosa quando suoni; stai pensando a te stesso. Molti bambini giocano nel modo sbagliato. Fanno il lavoro fuori dal gioco. Non sembrano solo fare qualcosa, stanno davvero facendo qualcosa. Stanno imitando gli adulti intorno a loro che fanno sempre il più e il meno possibile. E sono spesso incoraggiati a giocare in questo modo dagli adulti. E non stanno imparando ad essere se stessi."</p>
<p>"Ci sono molte persone che non sono interamente se stesse perché da bambini non hanno avuto il tempo di pensare a se stesse. E poiché non sanno tutto di se stessi, non possono sapere tutto di tutto. Ma a nessuno piace ammettere che non sa tutto di tutto. E così queste persone cercano di compensare non sapendo tutto di tutto facendo cose".</p>
<p><small>Fonte: <em>quattro lettere non pubblicate a Catherine di Laura </em> Riding</small></p>
</article>
<nav>
<h4>Naviga</h4>
<a class="link" href="#">Home</a>
<a class="link" href="#">Capitolo 1</a>
<a class="link" href="#">Capitolo 2</a>
<a class="link" href="#">Capitolo 3</a>
<a class="link" href="#">Capitolo 4</a>
</nav>
<aside>
<h4>Aside</h4>
<p>"Un'opera d'arte è buona se è nata dalla necessità. In questa sua natura di origine c'è il giudizio: non c'è altro."
<br>- Rainer Maria Rilke</p>
</aside>
<footer><h4>Footer</h4></footer>
</div>
</body>
</html>
<ul class="elenco">
<li>
<h3>Primo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Secondo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li class="wide">
<h3>Terzo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p>
<p>Questo ha più testo degli altri elementi.</p>
<p>Molto di più</p>
<p>Forse potremmo fare qualcosa di diverso con esso?</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Quarto elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Quinto elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
</ul>
minmax();
la notazione repeat();
e con un dimensionamento di traccia.
.elenco {
list-style: none;
margin: 2em;
display: grid;
grid-gap: 20px;
grid-template-columns: repeat(auto-fill,minmax(200px, 1fr));
}
.elenco li {
border: 1px solid #ef7f1a;
border-radius: 5px;
display: flex;
flex-direction: column;
}
.elenco .coll {
margin-top: auto;
border-top: 1px solid #ef7f1a;
padding: 10px;
text-align: center;
}
.elenco .contenuto {
padding: 10px;
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
* {box-sizing: border-box;}
img {max-width: 100%; display: block;}
body {
font: 1.2em Verdana, Helvetica, arial, sans-serif;
}
a:link, a:visited {
text-decoration: none;
color: #f08c00;
}
h3 {
background-color: #f08c00;
color: #fff;
text-align: center;
margin: 0;
padding: 20px;
}
.elenco {
list-style: none;
margin: 2em;
display: grid;
grid-gap: 20px;
grid-template-columns: repeat(auto-fill,minmax(200px, 1fr));
}
.elenco li {
border: 1px solid #ef7f1a;
border-radius: 5px;
display: flex;
flex-direction: column;
}
.elenco .coll {
margin-top: auto;
border-top: 1px solid #ef7f1a;
padding: 10px;
text-align: center;
}
.elenco .contenuto {
padding: 10px;
}
</style>
</head>
<body>
<ul class="elenco">
<li>
<h3>Primo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Secondo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li class="grande">
<h3>Terzo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p>
<p>Questo ha più testo degli altri elementi.</p>
<p>Molto di più</p>
<p>Forse potremmo fare qualcosa di diverso con esso?</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Quarto elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Quinto elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
</ul>
</body>
</html>
Card
contenga molto più contenuto rispetto agli altri elementi.grid-auto-flow: dense;
cioè con riempimento di eventuali buchi..grande
nel nostro esempio con più contenuto, quindi possiamo aggiungere una regola grid-column-end
con un valore di span 2
.
.elenco {
list-style: none;
margin: 2em;
display: grid;
grid-gap: 20px;
grid-auto-flow: dense;
grid-template-columns: repeat(auto-fill,minmax(200px, 1fr));
}
/* codice da aggiungere */
.elenco .grande {
grid-column-end: span 2;
}
<!DOCTYPE html>
<html lang="it">
<head>
<title>Griglia-Css</title>
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<style type="text/css">
* {box-sizing: border-box;}
img {max-width: 100%; display: block;}
body {
font: 1.2em Verdana, Helvetica, arial, sans-serif;
}
a:link, a:visited {
text-decoration: none;
color: #f08c00;
}
h3 {
background-color: #f08c00;
color: #fff;
text-align: center;
margin: 0;
padding: 20px;
}
.elenco {
list-style: none;
margin: 2em;
display: grid;
grid-gap: 20px;
grid-auto-flow: dense;
grid-template-columns: repeat(auto-fill,minmax(200px, 1fr));
}
.elenco .grande {
grid-column-end: span 2;
}
.elenco li {
border: 1px solid #ef7f1a;
border-radius: 5px;
display: flex;
flex-direction: column;
}
.elenco .coll {
margin-top: auto;
border-top: 1px solid #ef7f1a;
padding: 10px;
text-align: center;
}
.elenco .contenuto {
padding: 10px;
}
</style>
</head>
<body>
<ul class="elenco">
<li>
<h3>Primo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Secondo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li class="grande">
<h3>Terzo elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p>
<p>Questo ha più testo degli altri elementi.</p>
<p>Molto di più</p>
<p>Forse potremmo fare qualcosa di diverso con esso?</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Quarto elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
<li>
<h3>Quinto elemento</h3>
<div class="contenuto"><p>Il contenuto di questo elemento di elenco va qui.</p></div>
<div class="coll"><a href="">Collegamento a</a></div>
</li>
</ul>
</body>
</html>