Il Box Model

Bentornato.
Nella lezione precedente hai imparato a stilizzare il testo con colori, font, dimensioni e spaziatura.
Ora incontriamo una delle idee più importanti di CSS:
Il box model.
Ogni elemento in una pagina web viene trattato come una scatola.
Titoli?
Scatola.
Paragrafi?
Scatola.
Immagini?
Scatola.
Pulsanti?
Scatola.
Quel piccolo div innocente?
Decisamente una scatola.
CSS guarda la tua pagina e vede scatole ovunque.
Come un magazziniere con opinioni di design.
Cosa Imparerai
In questa lezione imparerai:
- cos’è il CSS box model;
- cosa significa
content; - cosa fa
padding; - cosa fa
border; - cosa fa
margin; - come funzionano
widtheheight; - perché
box-sizingè importante; - come creare card pulite;
- come evitare problemi comuni di spaziatura.
Cos’è il Box Model?
Il CSS box model descrive come funziona lo spazio attorno a ogni elemento.
Ogni box ha quattro parti principali:
- content;
- padding;
- border;
- margin.
Puoi immaginarlo così:
margin
border
padding
content
Il content è il testo, l’immagine o il contenuto reale dell’elemento.
Padding è lo spazio dentro l’elemento.
Border è la linea attorno all’elemento.
Margin è lo spazio fuori dall’elemento.
Idea semplice.
Impatto enorme.
Come scoprire che i problemi di layout non erano magia.
Erano scatole.
Scatole fin dall’inizio.
Crea il Progetto
Crea una cartella per questa lezione:
mkdir css-lesson4
cd css-lesson4
touch index.html
touch style.css
Dovresti avere:
css-lesson4/
index.html
style.css
Apri la cartella nel tuo editor.
Costruiremo una piccola pagina con card.
Le card sono perfette per imparare il box model.
Perché usano padding, margin, border, width e a volte supporto emotivo.
Scrivi l’HTML
Apri index.html e aggiungi questo:
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Il CSS Box Model</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="site-header">
<h1>Il CSS Box Model</h1>
<p>Ogni elemento è una scatola. Sì, anche quello.</p>
</header>
<main class="page">
<section class="intro-card">
<h2>Cos’è il Box Model?</h2>
<p>
Il box model spiega come CSS calcola dimensioni e spaziatura degli elementi.
</p>
</section>
<section class="cards">
<article class="card">
<h2>Content</h2>
<p>Il testo, l’immagine o il contenuto reale dentro l’elemento.</p>
</article>
<article class="card">
<h2>Padding</h2>
<p>Lo spazio tra il contenuto e il bordo.</p>
</article>
<article class="card">
<h2>Border</h2>
<p>La linea attorno al padding e al content.</p>
</article>
<article class="card">
<h2>Margin</h2>
<p>Lo spazio fuori dall’elemento.</p>
</article>
</section>
</main>
<footer class="site-footer">
<p>Creato mentre imparo il CSS box model.</p>
</footer>
</body>
</html>
Questo ci dà:
- un header;
- una sezione introduttiva;
- quattro card;
- un footer.
Ora possiamo stilizzare le scatole.
E sì, finalmente capiremo perché un solo margin può rovinarti la mattina.
Inizia con gli Stili Base
Apri style.css e aggiungi:
body {
margin: 0;
font-family: Arial, sans-serif;
background-color: #f3f4f6;
color: #111827;
}
.site-header {
background-color: #111827;
color: white;
text-align: center;
padding: 48px 24px;
}
.page {
max-width: 900px;
margin: 40px auto;
padding: 0 20px;
}
Questo crea un layout base della pagina.
Nota:
margin: 40px auto;
Questo centra il container .page orizzontalmente.
40px aggiunge spazio verticale.
auto gestisce lo spazio a sinistra e a destra.
CSS dice:
“Lascia calcolare i lati a me.”
E per una volta, CSS è utile.
Content
Il content è la parte interna dell’elemento.
Per esempio:
<article class="card">
<h2>Content</h2>
<p>Il testo, l’immagine o il contenuto reale dentro l’elemento.</p>
</article>
Il testo dentro la card è il content.
In CSS, width e height di solito descrivono la dimensione dell’area content.
Esempio:
.card {
width: 300px;
}
Questo significa che l’area content è larga 300px.
Ma c’è un piccolo problema.
Padding e border possono aumentare la dimensione visibile finale.
Perché CSS ama le sorprese.
Non sempre belle sorprese.
Padding
Padding è lo spazio dentro l’elemento.
Crea respiro tra il contenuto e il border.
Aggiungi questo:
.card {
background-color: white;
padding: 24px;
}
Ora il contenuto non tocca i bordi.
Molto meglio.
Senza padding, il testo sta troppo vicino al bordo.
Come qualcuno che si avvicina troppo mentre spiega le closure di JavaScript.
Padding rende tutto più comodo.
Puoi impostare padding su tutti i lati:
padding: 24px;
Oppure separatamente:
padding-top: 20px;
padding-right: 24px;
padding-bottom: 20px;
padding-left: 24px;
Puoi anche usare shorthand:
padding: 20px 24px;
Questo significa:
- sopra e sotto:
20px; - sinistra e destra:
24px.
Molto utile.
Molto comune.
Border
Border è la linea attorno all’elemento.
Aggiungi questo:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
}
Il border ha tre parti:
border: width style color;
Esempio:
border: 2px solid #e5e7eb;
Questo significa:
- width:
2px; - style:
solid; - color:
#e5e7eb.
Puoi creare stili diversi di border:
border: 2px solid #2563eb;
border: 2px dashed #f97316;
border: 2px dotted #16a34a;
I border sono utili per separare contenuti.
Ma non mettere border ovunque.
Troppi border fanno sembrare una pagina come un foglio Excel dopo un esaurimento nervoso.
Border Radius
La proprietà border-radius arrotonda gli angoli.
Aggiungi:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
}
Ora le card sembrano più morbide.
Meno taglienti.
Meno come un documento ufficiale del 2004.
Puoi usare valori piccoli o grandi:
border-radius: 8px;
border-radius: 16px;
border-radius: 999px;
999px viene spesso usato per pulsanti a pillola.
Il pulsante diventa rotondo e amichevole.
Come se volesse essere cliccato educatamente.
Margin
Margin è lo spazio fuori dall’elemento.
Aggiungi questo:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
margin-bottom: 20px;
}
Ora c’è spazio tra le card.
Margin separa gli elementi tra loro.
Padding crea comfort interno.
Margin crea distanza esterna.
Differenza importante.
Padding dice:
“Dai spazio al mio contenuto dentro di me.”
Margin dice:
“Dammi spazio dagli altri.”
Entrambi sono necessari.
Molto umano, in realtà.
Width e Height
Puoi controllare la dimensione degli elementi con width e height.
Esempio:
.card {
width: 300px;
}
Ma fai attenzione alle larghezze fisse.
Le larghezze fisse possono creare problemi su schermi piccoli.
Meglio spesso usare:
.card {
max-width: 300px;
}
Oppure per i container:
.page {
max-width: 900px;
}
max-width significa:
Non diventare più largo di questo, ma puoi essere più piccolo se necessario.
È utile per il responsive design.
Il browser ha spazio per respirare.
E il layout non esplode sui telefoni.
Sempre una buona cosa.
Il Problema di Box-Sizing
Di default, CSS usa:
box-sizing: content-box;
Questo significa:
- width si applica solo al content;
- padding viene aggiunto fuori da quella width;
- border viene aggiunto fuori da quella width.
Esempio:
.card {
width: 300px;
padding: 20px;
border: 2px solid black;
}
La larghezza visibile finale diventa:
300px content
+ 40px padding
+ 4px border
= 344px total width
Questo sorprende molti principianti.
E anche alcuni sviluppatori esperti.
E probabilmente una persona in una cantina che sta ancora debuggando un layout del 2016.
Usa border-box
La maggior parte dei progetti CSS moderni usa questo:
* {
box-sizing: border-box;
}
Aggiungilo all’inizio del CSS:
* {
box-sizing: border-box;
}
Ora width include:
- content;
- padding;
- border.
Questo rende le dimensioni più semplici.
Se scrivi:
.card {
width: 300px;
padding: 20px;
border: 2px solid black;
}
La larghezza visibile finale resta 300px.
Molto più prevedibile.
CSS diventa leggermente meno caotico.
Apprezziamo questo raro momento.
Stilizza il Layout delle Card
Aggiungi questo:
.cards {
display: grid;
gap: 20px;
}
Non preoccuparti troppo di Grid adesso.
Lo studieremo più avanti.
Per ora sappi solo questo:
gap: 20px;
crea spazio tra le card.
Spesso è più pulito che usare tanti margin.
Ora aggiorna lo stile della card:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
}
Dato che .cards usa gap, non ci serve margin-bottom su ogni card.
Più pulito.
Più organizzato.
Meno spaghetti CSS.
Stilizza la Intro Card
Aggiungi:
.intro-card {
background-color: #eff6ff;
padding: 32px;
border-left: 6px solid #2563eb;
border-radius: 16px;
margin-bottom: 24px;
}
Questa intro card usa:
- background color;
- padding;
- border;
- border radius;
- margin.
Questo è il box model in azione.
Non teoria.
Layout reale.
La scatola è entrata nell’edificio.
CSS Completo
Il tuo style.css dovrebbe essere così:
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, sans-serif;
background-color: #f3f4f6;
color: #111827;
}
.site-header {
background-color: #111827;
color: white;
text-align: center;
padding: 48px 24px;
}
.page {
max-width: 900px;
margin: 40px auto;
padding: 0 20px;
}
.intro-card {
background-color: #eff6ff;
padding: 32px;
border-left: 6px solid #2563eb;
border-radius: 16px;
margin-bottom: 24px;
}
.cards {
display: grid;
gap: 20px;
}
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
}
.card h2 {
margin-top: 0;
}
.card p,
.intro-card p {
color: #374151;
font-size: 18px;
line-height: 1.7;
}
.site-footer {
text-align: center;
padding: 24px;
color: #6b7280;
}
Salva il file.
Aggiorna il browser.
Ora dovresti vedere spaziatura pulita e struttura delle card.
Questo è il box model che lavora.
In silenzio.
Dietro le quinte.
Come una squadra tecnica vestita da proprietà CSS.
Errori Comuni
Confondere margin e padding
Padding è dentro.
Margin è fuori.
Esempio:
.card {
padding: 24px;
margin-bottom: 20px;
}
padding dà spazio dentro la card.
margin-bottom dà spazio dopo la card.
Se il testo è troppo vicino al bordo della card, usa padding.
Se le card sono troppo vicine tra loro, usa margin o gap.
Semplice.
Ma facile da confondere.
CSS ama testare la concentrazione.
Dimenticare box-sizing
Senza questo:
* {
box-sizing: border-box;
}
Le larghezze possono diventare sorprendenti.
Usa border-box nella maggior parte dei progetti.
Rende i layout più facili da capire.
Il tuo futuro te ti ringrazierà.
Forse anche con un caffè.
Aggiungere troppo margin ovunque
Male:
h1 {
margin: 50px;
}
p {
margin: 50px;
}
.card {
margin: 50px;
}
Troppo margin ovunque crea caos.
Usa la spaziatura con intenzione.
Non come lanciare cuscini in una stanza a occhi chiusi.
Pratica
Crea una pagina con:
- un header;
- una intro box;
- tre card;
- un footer.
Stilizza ogni card con:
- background color;
- padding;
- border;
- border radius;
- spazio tra le card.
Usa:
box-sizing: border-box;
all’inizio del CSS.
Poi sperimenta con:
- aumentare padding;
- rimuovere padding;
- aggiungere border;
- cambiare margin;
- usare
gap.
Osserva come cambia il layout.
CSS diventa meno spaventoso quando guardi cosa fa ogni proprietà.
Mini Sfida
Crea tre pricing cards:
- Basic;
- Standard;
- Premium.
Ogni card dovrebbe avere:
- titolo;
- prezzo;
- breve descrizione;
- link pulsante.
Usa il box model per stilizzarle:
- padding dentro le card;
- border attorno a ogni card;
- margin o gap tra le card;
- border radius per angoli più morbidi;
box-sizing: border-box.
Fai risaltare la card Premium con un colore diverso del border.
Non troppo.
Solo abbastanza per dire:
“Sono speciale.”
Non:
“Sono scappata da un poster del carnevale.”
Riassunto
Oggi hai imparato che:
- ogni elemento HTML si comporta come una scatola;
- il box model include content, padding, border e margin;
- content è il testo o media reale;
- padding crea spazio dentro un elemento;
- border circonda padding e content;
- margin crea spazio fuori da un elemento;
widtheheightcontrollano la dimensione;- il sizing predefinito può confondere;
box-sizing: border-boxrende le dimensioni più semplici;- la spaziatura è una delle parti più importanti del design pulito.
Il box model è ovunque.
Se lo capisci, CSS diventa molto più facile.
Se lo ignori, i tuoi layout si comporteranno come mobili ribelli.
E abbiamo già abbastanza mobili ribelli nella vita.
Prossima Lezione
Nella prossima lezione impareremo Flexbox.
Flexbox aiuta ad allineare e organizzare elementi in una direzione.
Righe.
Colonne.
Cose centrate.
Finalmente CSS ci aiuterà a posizionare elementi senza evocare spiriti antichi.