src/docs/scroll-snap-type.mdx
import { ApiTable } from "@/components/api-table.tsx"; import { Example } from "@/components/example.tsx"; import { Figure } from "@/components/figure.tsx"; import { ResponsiveDesign } from "@/components/content.tsx";
export const title = "scroll-snap-type"; export const description = "Utilities for controlling how strictly snap points are enforced in a snap container.";
<ApiTable rows={[ ["snap-none", "scroll-snap-type: none;"], ["snap-x", "scroll-snap-type: x var(--tw-scroll-snap-strictness);"], ["snap-y", "scroll-snap-type: y var(--tw-scroll-snap-strictness);"], ["snap-both", "scroll-snap-type: both var(--tw-scroll-snap-strictness);"], ["snap-mandatory", "--tw-scroll-snap-strictness: mandatory;"], ["snap-proximity", "--tw-scroll-snap-strictness: proximity;"], ]} />
Use the snap-x utility to enable horizontal scroll snapping within an element:
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center">
<div className="w-4 shrink-0 sm:w-37"></div>
</div>
</div>
</div>
} </Example>
<!-- [!code classes:snap-x,snap-center] -->
<div class="snap-x ...">
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
</div>
For scroll snapping to work, you need to also set the scroll snap alignment on the children.
Use the snap-mandatory utility to force a snap container to always come to rest on a snap point:
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center">
<div className="w-4 shrink-0 sm:w-37"></div>
</div>
</div>
</div>
} </Example>
<!-- [!code classes:snap-mandatory] -->
<div class="snap-x snap-mandatory ...">
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
</div>
Use the snap-proximity utility to make a snap container come to rest on snap points that are close in proximity:
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center first:pl-8 last:pr-8">
</div>
<div className="shrink-0 snap-center">
<div className="w-4 shrink-0 sm:w-37"></div>
</div>
</div>
</div>
} </Example>
<!-- [!code classes:snap-proximity] -->
<div class="snap-x snap-proximity ...">
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
<div class="snap-center ...">
</div>
</div>