This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
The scroll-margin-top property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
scroll-margin-top: 0;
scroll-margin-top: 20px;
scroll-margin-top: 2em;
<section class="default-example" id="default-example">
<div class="scroller">
<div>1</div>
<div id="example-element">2</div>
<div>3</div>
</div>
<div class="info">Scroll »</div>
</section>
.default-example .info {
inline-size: 100%;
padding: 0.5em 0;
font-size: 90%;
writing-mode: vertical-rl;
}
.scroller {
text-align: left;
height: 250px;
width: 270px;
overflow-y: scroll;
display: flex;
flex-direction: column;
box-sizing: border-box;
border: 1px solid black;
scroll-snap-type: y mandatory;
}
.scroller > div {
flex: 0 0 250px;
background-color: rebeccapurple;
color: white;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
scroll-snap-align: start;
}
.scroller > div:nth-child(even) {
background-color: white;
color: rebeccapurple;
}
/* <length> values */ scroll-margin-top: 10px; scroll-margin-top: 1em; /* Global values */ scroll-margin-top: inherit; scroll-margin-top: initial; scroll-margin-top: revert; scroll-margin-top: revert-layer; scroll-margin-top: unset;
<length>An outset from the top edge of the scroll container.
| Initial value | 0 |
|---|---|
| Applies to | all elements |
| Inherited | no |
| Computed value | as specified |
| Animation type | by computed value type |
scroll-margin-top =
<length>
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
scroll-margin-top |
69 | 79 | 68 | 56 | 14.111Before version 14.1, scroll margin is not applied for scrolls to fragment target orscrollIntoView(), see bug 189265. |
69 | 68 | 48 | 14.511Before version 14.5, scroll margin is not applied for scrolls to fragment target orscrollIntoView(), see bug 189265. |
10.0 | 69 | 14.511Before version 14.5, scroll margin is not applied for scrolls to fragment target orscrollIntoView(), see bug 189265. |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-margin-top