This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for the proper prefixes to use in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the spec changes.
Summary
The scroll-snap-type
CSS property defines how strictly snap points are enforced on the scroll container in case there is one.
Specifying any precise animations or physics used to enforce those snap points is not covered by this property but instead left up to the user agent.
Initial value | none |
---|---|
Applies to | scroll containers |
Inherited | no |
Media | interactive |
Computed value | as specified |
Animatable | no |
Canonical order | the unique non-ambiguous order defined by the formal grammar |
Syntax
/* Keyword values */
scroll-snap-type: none;
scroll-snap-type: mandatory;
scroll-snap-type: proximity;
/* Global values */
scroll-snap-type: inherit;
scroll-snap-type: initial;
scroll-snap-type: unset;
Values
none
- When the visual viewport of this scroll container is scrolled, it must ignore snap points.
mandatory
- The visual viewport of this scroll container will rest on a snap point if it isn't currently scrolled. That means it snaps on that point when the scroll action finished, if possible. If content is added, moved, deleted or resized the scroll offset will be adjusted to maintain the resting on that snap point.
proximity
- The visual viewport of this scroll container may come to rest on a snap point if it isn't currently scrolled considering the user agent's scroll parameters. If content is added, moved, deleted or resized the scroll offset may be adjusted to maintain the resting on that snap point.
Formal syntax
How to read CSS syntax.none | mandatory | proximity
Example
HTML Content
<div class="container mandatoryScrollSnapping">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
<div class="container proximityScrollSnapping">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
CSS Content
.container {
width: 100%;
overflow: auto;
white-space: nowrap;
scroll-snap-points-x: repeat(100%);
scroll-snap-type: mandatory;
font-size: 0;
}
.mandatoryScrollSnapping {
margin-bottom: 20px;
scroll-snap-type: mandatory;
}
.proximityScrollSnapping {
scroll-snap-type: proximity;
}
.container > div {
width: 100%;
height: 100px;
display: inline-block;
line-height: 100px;
text-align: center;
font-size: 50px;
}
.container > div:nth-child(even) {
background-color: #87EA87;
}
.container > div:nth-child(odd) {
background-color: #87CCEA;
}
Specification
Specification | Status | Comment |
---|---|---|
CSS Scroll Snap Points Module Level 1 The definition of 'scroll-snap-type' in that specification. |
Working Draft | Initial definition |
Browser compatibility
[1] On Firefox Mobile, available since Gecko 39, but behind the preference layout.css.vertical-text.enabled
, disabled by default.