CSS scroll-margin
La proprietà CSS3 scroll-margin
imposta lo spazio interno quando si effettua uno scroll verso un elemento
La proprietà scroll-margin
è una shorthand usata per regolare lo spazio tra il bordo del viewport e l’elemento target durante lo scroll automatico (es. tramite scrollIntoView
o link ancora). Funziona come una scorciatoia per scroll-margin-top
, scroll-margin-right
, scroll-margin-bottom
e scroll-margin-left
.
Sintassi
Significato dei valori principali:
-
1 valore
: Applica la stessa distanza a tutti e 4 i lati (top, right, bottom, left). -
2 valori
: Primo valore per top/bottom, secondo per left/right. -
3 valori
: Top | left/right | bottom. -
4 valori
: Top | Right | Bottom | Left.
Esempio proprietà: scroll-margin
Codice Esempio: scroll-margin

.scroll-target {
scroll-margin: 80px 0px; /* 80px per sopra/sotto, 0px a sinistra/destra */
height: 200px;
background-color: #50a14f;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
border-radius: 10px;
}
Contenuto Esempio: scroll-margin
Esempio di utilizzo di scroll-margin
In questo esempio, l’elemento ha un margine di scorrimento applicato su tutti i lati, grazie alla shorthand scroll-margin
. Quando ci si scrolla verso di esso, non si incolla al bordo della viewport.
CSS e HTML per scroll-margin
:
<style>
html {
scroll-behavior: smooth;
}
.scroll-target {
scroll-margin: 80px 0px; /* 80px per sopra/sotto, 0px a sinistra/destra */
height: 200px;
background-color: #50a14f;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 22px;
border-radius: 10px;
}
.scroll-link {
font-size: 20px;
color: #ff6347;
text-decoration: underline;
cursor: pointer;
}
</style>
<a href="#target" class="scroll-link">Vai alla sezione con scroll-margin</a>
<div id="target" class="scroll-target">
Scroll con margine su tutti i lati
</div>
📌 Nota sull’utilizzo delle proprietà scroll-*
Le proprietà della famiglia scroll-*
offrono controllo preciso sul comportamento e sul posizionamento dello scroll nei contenitori overflow. Tuttavia, la loro efficacia può variare in base al tipo di interazione, al contesto e al metodo di attivazione dello scroll. Di seguito una panoramica generale:
-
scroll-behavior
: controlla se lo scroll avviene in modo fluido (smooth
) o istantaneo (auto
). È supportata in interazioni utente (tastiera, mouse) e via JavaScript con metodi comescrollIntoView()
oscrollTo()
. -
scroll-margin*
: imposta uno spazio esterno virtuale tra il target dello scroll e il bordo del contenitore. È utile per evitare che l’elemento scrollato venga troppo "incollato" al bordo. Agisce solo quando l’elemento è il target di scroll (es.scrollIntoView()
). -
scroll-padding*
: definisce un’area interna del contenitore da considerare come "bordo attivo" per gli snap o il focus di scroll. È efficace nei contenitori conscroll-snap-type
attivo o nei layout con focus automatico. -
scroll-snap-type
: abilita lo snap agli elementi figlio durante lo scroll, obbligando (o suggerendo) l’aggancio al più vicino snap-point. Richiede layout a scorrimento (overflow
) e funzionerà solo se associato a elementi figli conscroll-snap-align
. -
scroll-snap-align
: definisce dove un elemento figlio deve "agganciarsi" all'interno del contenitore scrollabile (es. inizio, centro, fine). Funziona solo se il contenitore hascroll-snap-type
. -
scroll-snap-stop
: impedisce che l’elemento venga saltato durante uno scroll veloce. Utile per forzare lo stop su sezioni importanti, ma funziona solo con scroll naturali (touch, tastiera, oscrollIntoView
), non conscrollTo({ left: ... })
.
Compatibilità e contesto: molte di queste proprietà funzionano meglio con interazioni naturali (touchpad, touchscreen, tastiera) e possono non comportarsi come previsto quando lo scroll è simulato in modo diretto con JavaScript. Per ottenere effetti coerenti, è consigliato usare layout con display: flex
o grid
, dimensioni fisse e contenitori overflow con scroll-snap-type
attivo.
Note:
Le indicazioni dei Browser supportati sono superate grazie alla loro costante evoluzione, si consiglia di verificare la compatibilità dei vari browser eseguendo il test cliccando qui sotto.