This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
The scroll-snap-align property specifies the box's snap position as an alignment of its snap area (as the alignment subject) within its snap container's snap port (as the alignment container).
scroll-snap-align: start;
scroll-snap-align: end;
scroll-snap-align: center;
<section class="default-example" id="default-example">
<div id="example-parent">
<div>1</div>
<div id="example-element">2</div>
<div>3</div>
</div>
<div class="info">Scroll »</div>
</section>
.default-example {
flex-wrap: wrap;
}
.default-example .info {
width: 100%;
padding: 0.5em 0;
font-size: 90%;
}
#example-parent {
text-align: left;
width: 250px;
height: 250px;
overflow-x: scroll;
display: flex;
box-sizing: border-box;
border: 1px solid black;
scroll-snap-type: x mandatory;
}
#example-parent > div {
flex: 0 0 66%;
width: 250px;
background-color: rebeccapurple;
color: white;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
}
#example-parent > div:nth-child(even) {
background-color: white;
color: rebeccapurple;
}
/* Single keyword value */ scroll-snap-align: none; scroll-snap-align: center; scroll-snap-align: start; scroll-snap-align: end; /* Two keyword values */ scroll-snap-align: start end; scroll-snap-align: end center; scroll-snap-align: center start; /* Global values */ scroll-snap-align: inherit; scroll-snap-align: initial; scroll-snap-align: revert; scroll-snap-align: revert-layer; scroll-snap-align: unset;
One or two values can be specified for the scroll-snap-align property. If one value is set, it is applied to both the block and inline axes. If two values are set, the first value controls the block axis and the second value controls the inline axis.
noneThe box does not define a snap position in that axis.
startThe start alignment of this box's scroll snap area, within the scroll container's snapport is a snap position in this axis.
endThe end alignment of this box's scroll snap area, within the scroll container's snapport is a snap position in this axis.
centerThe center alignment of this box's scroll snap area, within the scroll container's snapport is a snap position in this axis.
| Initial value | none |
|---|---|
| Applies to | all elements |
| Inherited | no |
| Computed value | as specified |
| Animation type | discrete |
scroll-snap-align =
[ none | start | end | center ]{1,2}
| Specification |
|---|
| CSS Scroll Snap Module Level 1> # scroll-snap-align> |
| 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-snap-align |
69 | 79 | 68 | 56 | 11 | 69 | 68 | 48 | 11 | 10.0 | 69 | 11 |
center |
69 | 79 | 68 | 56 | 11 | 69 | 68 | 48 | 11 | 10.0 | 69 | 11 |
end |
69 | 79 | 68 | 56 | 11 | 69 | 68 | 48 | 11 | 10.0 | 69 | 11 |
none |
69 | 79 | 68 | 56 | 11 | 69 | 68 | 48 | 11 | 10.0 | 69 | 11 |
start |
69 | 79 | 68 | 56 | 11 | 69 | 68 | 48 | 11 | 10.0 | 69 | 11 |
© 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-snap-align