Menu

Tailwind CSS Scroll Margin

Scroll Margin in CSS is the distance that will remain between the screen and the element when it’s being scrolled into view.

With Tailwind CSS, you can easily implement scroll margin properties, apply conditional states & breakpoints, and even customize the values to suit specific project requirements. Let’s dive deep into the utility classes for scroll margin and learn how to manage it effectively.

ClassPropertiesExample
scroll-m-0scroll-margin: 0px;<div className="scroll-m-0"></div>
scroll-mx-0scroll-margin-left: 0px; scroll-margin-right: 0px;<div className="scroll-mx-0"></div>
scroll-my-0scroll-margin-top: 0px; scroll-margin-bottom: 0px;<div className="scroll-my-0"></div>
scroll-ms-0scroll-margin-inline-start: 0px;<div className="scroll-ms-0"></div>
scroll-me-0scroll-margin-inline-end: 0px;<div className="scroll-me-0"></div>
scroll-mt-0scroll-margin-top: 0px;<div className="scroll-mt-0"></div>
scroll-mr-0scroll-margin-right: 0px;<div className="scroll-mr-0"></div>
scroll-mb-0scroll-margin-bottom: 0px;<div className="scroll-mb-0"></div>
scroll-ml-0scroll-margin-left: 0px;<div className="scroll-ml-0"></div>
scroll-m-pxscroll-margin: 1px;<div className="scroll-m-px"></div>
scroll-mx-pxscroll-margin-left: 1px; scroll-margin-right: 1px;<div className="scroll-mx-px"></div>
scroll-my-pxscroll-margin-top: 1px; scroll-margin-bottom: 1px;<div className="scroll-my-px"></div>
scroll-ms-pxscroll-margin-inline-start: 1px;<div className="scroll-ms-px"></div>
scroll-me-pxscroll-margin-inline-end: 1px;<div className="scroll-me-px"></div>
scroll-mt-pxscroll-margin-top: 1px;<div className="scroll-mt-px"></div>
scroll-mr-pxscroll-margin-right: 1px;<div className="scroll-mr-px"></div>
scroll-mb-pxscroll-margin-bottom: 1px;<div className="scroll-mb-px"></div>
scroll-ml-pxscroll-margin-left: 1px;<div className="scroll-ml-px"></div>
scroll-m-0.5scroll-margin: 0.125rem; <div className="scroll-m-0.5"></div>
scroll-mx-0.5scroll-margin-left: 0.125rem; scroll-margin-right: 0.125rem; <div className="scroll-mx-0.5"></div>
scroll-my-0.5scroll-margin-top: 0.125rem; scroll-margin-bottom: 0.125rem; <div className="scroll-my-0.5"></div>
scroll-ms-0.5scroll-margin-inline-start: 0.125rem; <div className="scroll-ms-0.5"></div>
scroll-me-0.5scroll-margin-inline-end: 0.125rem; <div className="scroll-me-0.5"></div>
scroll-mt-0.5scroll-margin-top: 0.125rem; <div className="scroll-mt-0.5"></div>
scroll-mr-0.5scroll-margin-right: 0.125rem; <div className="scroll-mr-0.5"></div>
scroll-mb-0.5scroll-margin-bottom: 0.125rem; <div className="scroll-mb-0.5"></div>
scroll-ml-0.5scroll-margin-left: 0.125rem; <div className="scroll-ml-0.5"></div>
scroll-m-1scroll-margin: 0.25rem; <div className="scroll-m-1"></div>
scroll-mx-1scroll-margin-left: 0.25rem; scroll-margin-right: 0.25rem; <div className="scroll-mx-1"></div>
scroll-my-1scroll-margin-top: 0.25rem; scroll-margin-bottom: 0.25rem; <div className="scroll-my-1"></div>
scroll-ms-1scroll-margin-inline-start: 0.25rem; <div className="scroll-ms-1"></div>
scroll-me-1scroll-margin-inline-end: 0.25rem; <div className="scroll-me-1"></div>
scroll-mt-1scroll-margin-top: 0.25rem; <div className="scroll-mt-1"></div>
scroll-mr-1scroll-margin-right: 0.25rem; <div className="scroll-mr-1"></div>
scroll-mb-1scroll-margin-bottom: 0.25rem; <div className="scroll-mb-1"></div>
scroll-ml-1scroll-margin-left: 0.25rem; <div className="scroll-ml-1"></div>
scroll-m-1.5scroll-margin: 0.375rem; <div className="scroll-m-1.5"></div>
scroll-mx-1.5scroll-margin-left: 0.375rem; scroll-margin-right: 0.375rem; <div className="scroll-mx-1.5"></div>
scroll-my-1.5scroll-margin-top: 0.375rem; scroll-margin-bottom: 0.375rem; <div className="scroll-my-1.5"></div>
scroll-ms-1.5scroll-margin-inline-start: 0.375rem; <div className="scroll-ms-1.5"></div>
scroll-me-1.5scroll-margin-inline-end: 0.375rem; <div className="scroll-me-1.5"></div>
scroll-mt-1.5scroll-margin-top: 0.375rem; <div className="scroll-mt-1.5"></div>
scroll-mr-1.5scroll-margin-right: 0.375rem; <div className="scroll-mr-1.5"></div>
scroll-mb-1.5scroll-margin-bottom: 0.375rem; <div className="scroll-mb-1.5"></div>
scroll-ml-1.5scroll-margin-left: 0.375rem; <div className="scroll-ml-1.5"></div>
scroll-m-2scroll-margin: 0.5rem; <div className="scroll-m-2"></div>
scroll-mx-2scroll-margin-left: 0.5rem; scroll-margin-right: 0.5rem; <div className="scroll-mx-2"></div>
scroll-my-2scroll-margin-top: 0.5rem; scroll-margin-bottom: 0.5rem; <div className="scroll-my-2"></div>
scroll-ms-2scroll-margin-inline-start: 0.5rem; <div className="scroll-ms-2"></div>
scroll-me-2scroll-margin-inline-end: 0.5rem; <div className="scroll-me-2"></div>
scroll-mt-2scroll-margin-top: 0.5rem; <div className="scroll-mt-2"></div>
scroll-mr-2scroll-margin-right: 0.5rem; <div className="scroll-mr-2"></div>
scroll-mb-2scroll-margin-bottom: 0.5rem; <div className="scroll-mb-2"></div>
scroll-ml-2scroll-margin-left: 0.5rem; <div className="scroll-ml-2"></div>
scroll-m-2.5scroll-margin: 0.625rem; <div className="scroll-m-2.5"></div>
scroll-mx-2.5scroll-margin-left: 0.625rem; scroll-margin-right: 0.625rem; <div className="scroll-mx-2.5"></div>
scroll-my-2.5scroll-margin-top: 0.625rem; scroll-margin-bottom: 0.625rem; <div className="scroll-my-2.5"></div>
scroll-ms-2.5scroll-margin-inline-start: 0.625rem; <div className="scroll-ms-2.5"></div>
scroll-me-2.5scroll-margin-inline-end: 0.625rem; <div className="scroll-me-2.5"></div>
scroll-mt-2.5scroll-margin-top: 0.625rem; <div className="scroll-mt-2.5"></div>
scroll-mr-2.5scroll-margin-right: 0.625rem; <div className="scroll-mr-2.5"></div>
scroll-mb-2.5scroll-margin-bottom: 0.625rem; <div className="scroll-mb-2.5"></div>
scroll-ml-2.5scroll-margin-left: 0.625rem; <div className="scroll-ml-2.5"></div>
scroll-m-3scroll-margin: 0.75rem; <div className="scroll-m-3"></div>
scroll-mx-3scroll-margin-left: 0.75rem; scroll-margin-right: 0.75rem; <div className="scroll-mx-3"></div>
scroll-my-3scroll-margin-top: 0.75rem; scroll-margin-bottom: 0.75rem; <div className="scroll-my-3"></div>
scroll-ms-3scroll-margin-inline-start: 0.75rem; <div className="scroll-ms-3"></div>
scroll-me-3scroll-margin-inline-end: 0.75rem; <div className="scroll-me-3"></div>
scroll-mt-3scroll-margin-top: 0.75rem; <div className="scroll-mt-3"></div>
scroll-mr-3scroll-margin-right: 0.75rem; <div className="scroll-mr-3"></div>
scroll-mb-3scroll-margin-bottom: 0.75rem; <div className="scroll-mb-3"></div>
scroll-ml-3scroll-margin-left: 0.75rem; <div className="scroll-ml-3"></div>
scroll-m-3.5scroll-margin: 0.875rem; <div className="scroll-m-3.5"></div>
scroll-mx-3.5scroll-margin-left: 0.875rem; scroll-margin-right: 0.875rem; <div className="scroll-mx-3.5"></div>
scroll-my-3.5scroll-margin-top: 0.875rem; scroll-margin-bottom: 0.875rem; <div className="scroll-my-3.5"></div>
scroll-ms-3.5scroll-margin-inline-start: 0.875rem; <div className="scroll-ms-3.5"></div>
scroll-me-3.5scroll-margin-inline-end: 0.875rem; <div className="scroll-me-3.5"></div>
scroll-mt-3.5scroll-margin-top: 0.875rem; <div className="scroll-mt-3.5"></div>
scroll-mr-3.5scroll-margin-right: 0.875rem; <div className="scroll-mr-3.5"></div>
scroll-mb-3.5scroll-margin-bottom: 0.875rem; <div className="scroll-mb-3.5"></div>
scroll-ml-3.5scroll-margin-left: 0.875rem; <div className="scroll-ml-3.5"></div>
scroll-m-4scroll-margin: 1rem; <div className="scroll-m-4"></div>
scroll-mx-4scroll-margin-left: 1rem; scroll-margin-right: 1rem; <div className="scroll-mx-4"></div>
scroll-my-4scroll-margin-top: 1rem; scroll-margin-bottom: 1rem; <div className="scroll-my-4"></div>
scroll-ms-4scroll-margin-inline-start: 1rem; <div className="scroll-ms-4"></div>
scroll-me-4scroll-margin-inline-end: 1rem; <div className="scroll-me-4"></div>
scroll-mt-4scroll-margin-top: 1rem; <div className="scroll-mt-4"></div>
scroll-mr-4scroll-margin-right: 1rem; <div className="scroll-mr-4"></div>
scroll-mb-4scroll-margin-bottom: 1rem; <div className="scroll-mb-4"></div>
scroll-ml-4scroll-margin-left: 1rem; <div className="scroll-ml-4"></div>
scroll-m-5scroll-margin: 1.25rem; <div className="scroll-m-5"></div>
scroll-mx-5scroll-margin-left: 1.25rem; scroll-margin-right: 1.25rem; <div className="scroll-mx-5"></div>
scroll-my-5scroll-margin-top: 1.25rem; scroll-margin-bottom: 1.25rem; <div className="scroll-my-5"></div>
scroll-ms-5scroll-margin-inline-start: 1.25rem; <div className="scroll-ms-5"></div>
scroll-me-5scroll-margin-inline-end: 1.25rem; <div className="scroll-me-5"></div>
scroll-mt-5scroll-margin-top: 1.25rem; <div className="scroll-mt-5"></div>
scroll-mr-5scroll-margin-right: 1.25rem; <div className="scroll-mr-5"></div>
scroll-mb-5scroll-margin-bottom: 1.25rem; <div className="scroll-mb-5"></div>
scroll-ml-5scroll-margin-left: 1.25rem; <div className="scroll-ml-5"></div>
scroll-m-6scroll-margin: 1.5rem; <div className="scroll-m-6"></div>
scroll-mx-6scroll-margin-left: 1.5rem; scroll-margin-right: 1.5rem; <div className="scroll-mx-6"></div>
scroll-my-6scroll-margin-top: 1.5rem; scroll-margin-bottom: 1.5rem; <div className="scroll-my-6"></div>
scroll-ms-6scroll-margin-inline-start: 1.5rem; <div className="scroll-ms-6"></div>
scroll-me-6scroll-margin-inline-end: 1.5rem; <div className="scroll-me-6"></div>
scroll-mt-6scroll-margin-top: 1.5rem; <div className="scroll-mt-6"></div>
scroll-mr-6scroll-margin-right: 1.5rem; <div className="scroll-mr-6"></div>
scroll-mb-6scroll-margin-bottom: 1.5rem; <div className="scroll-mb-6"></div>
scroll-ml-6scroll-margin-left: 1.5rem; <div className="scroll-ml-6"></div>
scroll-m-7scroll-margin: 1.75rem; <div className="scroll-m-7"></div>
scroll-mx-7scroll-margin-left: 1.75rem; scroll-margin-right: 1.75rem; <div className="scroll-mx-7"></div>
scroll-my-7scroll-margin-top: 1.75rem; scroll-margin-bottom: 1.75rem; <div className="scroll-my-7"></div>
scroll-ms-7scroll-margin-inline-start: 1.75rem; <div className="scroll-ms-7"></div>
scroll-me-7scroll-margin-inline-end: 1.75rem; <div className="scroll-me-7"></div>
scroll-mt-7scroll-margin-top: 1.75rem; <div className="scroll-mt-7"></div>
scroll-mr-7scroll-margin-right: 1.75rem; <div className="scroll-mr-7"></div>
scroll-mb-7scroll-margin-bottom: 1.75rem; <div className="scroll-mb-7"></div>
scroll-ml-7scroll-margin-left: 1.75rem; <div className="scroll-ml-7"></div>
scroll-m-8scroll-margin: 2rem; <div className="scroll-m-8"></div>
scroll-mx-8scroll-margin-left: 2rem; scroll-margin-right: 2rem; <div className="scroll-mx-8"></div>
scroll-my-8scroll-margin-top: 2rem; scroll-margin-bottom: 2rem; <div className="scroll-my-8"></div>
scroll-ms-8scroll-margin-inline-start: 2rem; <div className="scroll-ms-8"></div>
scroll-me-8scroll-margin-inline-end: 2rem; <div className="scroll-me-8"></div>
scroll-mt-8scroll-margin-top: 2rem; <div className="scroll-mt-8"></div>
scroll-mr-8scroll-margin-right: 2rem; <div className="scroll-mr-8"></div>
scroll-mb-8scroll-margin-bottom: 2rem; <div className="scroll-mb-8"></div>
scroll-ml-8scroll-margin-left: 2rem; <div className="scroll-ml-8"></div>
scroll-m-9scroll-margin: 2.25rem; <div className="scroll-m-9"></div>
scroll-mx-9scroll-margin-left: 2.25rem; scroll-margin-right: 2.25rem; <div className="scroll-mx-9"></div>
scroll-my-9scroll-margin-top: 2.25rem; scroll-margin-bottom: 2.25rem; <div className="scroll-my-9"></div>
scroll-ms-9scroll-margin-inline-start: 2.25rem; <div className="scroll-ms-9"></div>
scroll-me-9scroll-margin-inline-end: 2.25rem; <div className="scroll-me-9"></div>
scroll-mt-9scroll-margin-top: 2.25rem; <div className="scroll-mt-9"></div>
scroll-mr-9scroll-margin-right: 2.25rem; <div className="scroll-mr-9"></div>
scroll-mb-9scroll-margin-bottom: 2.25rem; <div className="scroll-mb-9"></div>
scroll-ml-9scroll-margin-left: 2.25rem; <div className="scroll-ml-9"></div>
scroll-m-10scroll-margin: 2.5rem; <div className="scroll-m-10"></div>
scroll-mx-10scroll-margin-left: 2.5rem; scroll-margin-right: 2.5rem; <div className="scroll-mx-10"></div>
scroll-my-10scroll-margin-top: 2.5rem; scroll-margin-bottom: 2.5rem; <div className="scroll-my-10"></div>
scroll-ms-10scroll-margin-inline-start: 2.5rem; <div className="scroll-ms-10"></div>
scroll-me-10scroll-margin-inline-end: 2.5rem; <div className="scroll-me-10"></div>
scroll-mt-10scroll-margin-top: 2.5rem; <div className="scroll-mt-10"></div>
scroll-mr-10scroll-margin-right: 2.5rem; <div className="scroll-mr-10"></div>
scroll-mb-10scroll-margin-bottom: 2.5rem; <div className="scroll-mb-10"></div>
scroll-ml-10scroll-margin-left: 2.5rem; <div className="scroll-ml-10"></div>
scroll-m-11scroll-margin: 2.75rem; <div className="scroll-m-11"></div>
scroll-mx-11scroll-margin-left: 2.75rem; scroll-margin-right: 2.75rem; <div className="scroll-mx-11"></div>
scroll-my-11scroll-margin-top: 2.75rem; scroll-margin-bottom: 2.75rem; <div className="scroll-my-11"></div>
scroll-ms-11scroll-margin-inline-start: 2.75rem; <div className="scroll-ms-11"></div>
scroll-me-11scroll-margin-inline-end: 2.75rem; <div className="scroll-me-11"></div>
scroll-mt-11scroll-margin-top: 2.75rem; <div className="scroll-mt-11"></div>
scroll-mr-11scroll-margin-right: 2.75rem; <div className="scroll-mr-11"></div>
scroll-mb-11scroll-margin-bottom: 2.75rem; <div className="scroll-mb-11"></div>
scroll-ml-11scroll-margin-left: 2.75rem; <div className="scroll-ml-11"></div>
scroll-m-12scroll-margin: 3rem; <div className="scroll-m-12"></div>
scroll-mx-12scroll-margin-left: 3rem; scroll-margin-right: 3rem; <div className="scroll-mx-12"></div>
scroll-my-12scroll-margin-top: 3rem; scroll-margin-bottom: 3rem; <div className="scroll-my-12"></div>
scroll-ms-12scroll-margin-inline-start: 3rem; <div className="scroll-ms-12"></div>
scroll-me-12scroll-margin-inline-end: 3rem; <div className="scroll-me-12"></div>
scroll-mt-12scroll-margin-top: 3rem; <div className="scroll-mt-12"></div>
scroll-mr-12scroll-margin-right: 3rem; <div className="scroll-mr-12"></div>
scroll-mb-12scroll-margin-bottom: 3rem; <div className="scroll-mb-12"></div>
scroll-ml-12scroll-margin-left: 3rem; <div className="scroll-ml-12"></div>
scroll-m-14scroll-margin: 3.5rem; <div className="scroll-m-14"></div>
scroll-mx-14scroll-margin-left: 3.5rem; scroll-margin-right: 3.5rem; <div className="scroll-mx-14"></div>
scroll-my-14scroll-margin-top: 3.5rem; scroll-margin-bottom: 3.5rem; <div className="scroll-my-14"></div>
scroll-ms-14scroll-margin-inline-start: 3.5rem; <div className="scroll-ms-14"></div>
scroll-me-14scroll-margin-inline-end: 3.5rem; <div className="scroll-me-14"></div>
scroll-mt-14scroll-margin-top: 3.5rem; <div className="scroll-mt-14"></div>
scroll-mr-14scroll-margin-right: 3.5rem; <div className="scroll-mr-14"></div>
scroll-mb-14scroll-margin-bottom: 3.5rem; <div className="scroll-mb-14"></div>
scroll-ml-14scroll-margin-left: 3.5rem; <div className="scroll-ml-14"></div>
scroll-m-16scroll-margin: 4rem; <div className="scroll-m-16"></div>
scroll-mx-16scroll-margin-left: 4rem; scroll-margin-right: 4rem; <div className="scroll-mx-16"></div>
scroll-my-16scroll-margin-top: 4rem; scroll-margin-bottom: 4rem; <div className="scroll-my-16"></div>
scroll-ms-16scroll-margin-inline-start: 4rem; <div className="scroll-ms-16"></div>
scroll-me-16scroll-margin-inline-end: 4rem; <div className="scroll-me-16"></div>
scroll-mt-16scroll-margin-top: 4rem; <div className="scroll-mt-16"></div>
scroll-mr-16scroll-margin-right: 4rem; <div className="scroll-mr-16"></div>
scroll-mb-16scroll-margin-bottom: 4rem; <div className="scroll-mb-16"></div>
scroll-ml-16scroll-margin-left: 4rem; <div className="scroll-ml-16"></div>
scroll-m-20scroll-margin: 5rem; <div className="scroll-m-20"></div>
scroll-mx-20scroll-margin-left: 5rem; scroll-margin-right: 5rem; <div className="scroll-mx-20"></div>
scroll-my-20scroll-margin-top: 5rem; scroll-margin-bottom: 5rem; <div className="scroll-my-20"></div>
scroll-ms-20scroll-margin-inline-start: 5rem; <div className="scroll-ms-20"></div>
scroll-me-20scroll-margin-inline-end: 5rem; <div className="scroll-me-20"></div>
scroll-mt-20scroll-margin-top: 5rem; <div className="scroll-mt-20"></div>
scroll-mr-20scroll-margin-right: 5rem; <div className="scroll-mr-20"></div>
scroll-mb-20scroll-margin-bottom: 5rem; <div className="scroll-mb-20"></div>
scroll-ml-20scroll-margin-left: 5rem; <div className="scroll-ml-20"></div>
scroll-m-24scroll-margin: 6rem; <div className="scroll-m-24"></div>
scroll-mx-24scroll-margin-left: 6rem; scroll-margin-right: 6rem; <div className="scroll-mx-24"></div>
scroll-my-24scroll-margin-top: 6rem; scroll-margin-bottom: 6rem; <div className="scroll-my-24"></div>
scroll-ms-24scroll-margin-inline-start: 6rem; <div className="scroll-ms-24"></div>
scroll-me-24scroll-margin-inline-end: 6rem; <div className="scroll-me-24"></div>
scroll-mt-24scroll-margin-top: 6rem; <div className="scroll-mt-24"></div>
scroll-mr-24scroll-margin-right: 6rem; <div className="scroll-mr-24"></div>
scroll-mb-24scroll-margin-bottom: 6rem; <div className="scroll-mb-24"></div>
scroll-ml-24scroll-margin-left: 6rem; <div className="scroll-ml-24"></div>
scroll-m-28scroll-margin: 7rem; <div className="scroll-m-28"></div>
scroll-mx-28scroll-margin-left: 7rem; scroll-margin-right: 7rem; <div className="scroll-mx-28"></div>
scroll-my-28scroll-margin-top: 7rem; scroll-margin-bottom: 7rem; <div className="scroll-my-28"></div>
scroll-ms-28scroll-margin-inline-start: 7rem; <div className="scroll-ms-28"></div>
scroll-me-28scroll-margin-inline-end: 7rem; <div className="scroll-me-28"></div>
scroll-mt-28scroll-margin-top: 7rem; <div className="scroll-mt-28"></div>
scroll-mr-28scroll-margin-right: 7rem; <div className="scroll-mr-28"></div>
scroll-mb-28scroll-margin-bottom: 7rem; <div className="scroll-mb-28"></div>
scroll-ml-28scroll-margin-left: 7rem; <div className="scroll-ml-28"></div>
scroll-m-32scroll-margin: 8rem; <div className="scroll-m-32"></div>
scroll-mx-32scroll-margin-left: 8rem; scroll-margin-right: 8rem; <div className="scroll-mx-32"></div>
scroll-my-32scroll-margin-top: 8rem; scroll-margin-bottom: 8rem; <div className="scroll-my-32"></div>
scroll-ms-32scroll-margin-inline-start: 8rem; <div className="scroll-ms-32"></div>
scroll-me-32scroll-margin-inline-end: 8rem; <div className="scroll-me-32"></div>
scroll-mt-32scroll-margin-top: 8rem; <div className="scroll-mt-32"></div>
scroll-mr-32scroll-margin-right: 8rem; <div className="scroll-mr-32"></div>
scroll-mb-32scroll-margin-bottom: 8rem; <div className="scroll-mb-32"></div>
scroll-ml-32scroll-margin-left: 8rem; <div className="scroll-ml-32"></div>
scroll-m-36scroll-margin: 9rem; <div className="scroll-m-36"></div>
scroll-mx-36scroll-margin-left: 9rem; scroll-margin-right: 9rem; <div className="scroll-mx-36"></div>
scroll-my-36scroll-margin-top: 9rem; scroll-margin-bottom: 9rem; <div className="scroll-my-36"></div>
scroll-ms-36scroll-margin-inline-start: 9rem; <div className="scroll-ms-36"></div>
scroll-me-36scroll-margin-inline-end: 9rem; <div className="scroll-me-36"></div>
scroll-mt-36scroll-margin-top: 9rem; <div className="scroll-mt-36"></div>
scroll-mr-36scroll-margin-right: 9rem; <div className="scroll-mr-36"></div>
scroll-mb-36scroll-margin-bottom: 9rem; <div className="scroll-mb-36"></div>
scroll-ml-36scroll-margin-left: 9rem; <div className="scroll-ml-36"></div>
scroll-m-40scroll-margin: 10rem; <div className="scroll-m-40"></div>
scroll-mx-40scroll-margin-left: 10rem; scroll-margin-right: 10rem; <div className="scroll-mx-40"></div>
scroll-my-40scroll-margin-top: 10rem; scroll-margin-bottom: 10rem; <div className="scroll-my-40"></div>
scroll-ms-40scroll-margin-inline-start: 10rem; <div className="scroll-ms-40"></div>
scroll-me-40scroll-margin-inline-end: 10rem; <div className="scroll-me-40"></div>
scroll-mt-40scroll-margin-top: 10rem; <div className="scroll-mt-40"></div>
scroll-mr-40scroll-margin-right: 10rem; <div className="scroll-mr-40"></div>
scroll-mb-40scroll-margin-bottom: 10rem; <div className="scroll-mb-40"></div>
scroll-ml-40scroll-margin-left: 10rem; <div className="scroll-ml-40"></div>
scroll-m-44scroll-margin: 11rem; <div className="scroll-m-44"></div>
scroll-mx-44scroll-margin-left: 11rem; scroll-margin-right: 11rem; <div className="scroll-mx-44"></div>
scroll-my-44scroll-margin-top: 11rem; scroll-margin-bottom: 11rem; <div className="scroll-my-44"></div>
scroll-ms-44scroll-margin-inline-start: 11rem; <div className="scroll-ms-44"></div>
scroll-me-44scroll-margin-inline-end: 11rem; <div className="scroll-me-44"></div>
scroll-mt-44scroll-margin-top: 11rem; <div className="scroll-mt-44"></div>
scroll-mr-44scroll-margin-right: 11rem; <div className="scroll-mr-44"></div>
scroll-mb-44scroll-margin-bottom: 11rem; <div className="scroll-mb-44"></div>
scroll-ml-44scroll-margin-left: 11rem; <div className="scroll-ml-44"></div>
scroll-m-48scroll-margin: 12rem; <div className="scroll-m-48"></div>
scroll-mx-48scroll-margin-left: 12rem; scroll-margin-right: 12rem; <div className="scroll-mx-48"></div>
scroll-my-48scroll-margin-top: 12rem; scroll-margin-bottom: 12rem; <div className="scroll-my-48"></div>
scroll-ms-48scroll-margin-inline-start: 12rem; <div className="scroll-ms-48"></div>
scroll-me-48scroll-margin-inline-end: 12rem; <div className="scroll-me-48"></div>
scroll-mt-48scroll-margin-top: 12rem; <div className="scroll-mt-48"></div>
scroll-mr-48scroll-margin-right: 12rem; <div className="scroll-mr-48"></div>
scroll-mb-48scroll-margin-bottom: 12rem; <div className="scroll-mb-48"></div>
scroll-ml-48scroll-margin-left: 12rem; <div className="scroll-ml-48"></div>
scroll-m-52scroll-margin: 13rem; <div className="scroll-m-52"></div>
scroll-mx-52scroll-margin-left: 13rem; scroll-margin-right: 13rem; <div className="scroll-mx-52"></div>
scroll-my-52scroll-margin-top: 13rem; scroll-margin-bottom: 13rem; <div className="scroll-my-52"></div>
scroll-ms-52scroll-margin-inline-start: 13rem; <div className="scroll-ms-52"></div>
scroll-me-52scroll-margin-inline-end: 13rem; <div className="scroll-me-52"></div>
scroll-mt-52scroll-margin-top: 13rem; <div className="scroll-mt-52"></div>
scroll-mr-52scroll-margin-right: 13rem; <div className="scroll-mr-52"></div>
scroll-mb-52scroll-margin-bottom: 13rem; <div className="scroll-mb-52"></div>
scroll-ml-52scroll-margin-left: 13rem; <div className="scroll-ml-52"></div>
scroll-m-56scroll-margin: 14rem; <div className="scroll-m-56"></div>
scroll-mx-56scroll-margin-left: 14rem; scroll-margin-right: 14rem; <div className="scroll-mx-56"></div>
scroll-my-56scroll-margin-top: 14rem; scroll-margin-bottom: 14rem; <div className="scroll-my-56"></div>
scroll-ms-56scroll-margin-inline-start: 14rem; <div className="scroll-ms-56"></div>
scroll-me-56scroll-margin-inline-end: 14rem; <div className="scroll-me-56"></div>
scroll-mt-56scroll-margin-top: 14rem; <div className="scroll-mt-56"></div>
scroll-mr-56scroll-margin-right: 14rem; <div className="scroll-mr-56"></div>
scroll-mb-56scroll-margin-bottom: 14rem; <div className="scroll-mb-56"></div>
scroll-ml-56scroll-margin-left: 14rem; <div className="scroll-ml-56"></div>
scroll-m-60scroll-margin: 15rem; <div className="scroll-m-60"></div>
scroll-mx-60scroll-margin-left: 15rem; scroll-margin-right: 15rem; <div className="scroll-mx-60"></div>
scroll-my-60scroll-margin-top: 15rem; scroll-margin-bottom: 15rem; <div className="scroll-my-60"></div>
scroll-ms-60scroll-margin-inline-start: 15rem; <div className="scroll-ms-60"></div>
scroll-me-60scroll-margin-inline-end: 15rem; <div className="scroll-me-60"></div>
scroll-mt-60scroll-margin-top: 15rem; <div className="scroll-mt-60"></div>
scroll-mr-60scroll-margin-right: 15rem; <div className="scroll-mr-60"></div>
scroll-mb-60scroll-margin-bottom: 15rem; <div className="scroll-mb-60"></div>
scroll-ml-60scroll-margin-left: 15rem; <div className="scroll-ml-60"></div>
scroll-m-64scroll-margin: 16rem; <div className="scroll-m-64"></div>
scroll-mx-64scroll-margin-left: 16rem; scroll-margin-right: 16rem; <div className="scroll-mx-64"></div>
scroll-my-64scroll-margin-top: 16rem; scroll-margin-bottom: 16rem; <div className="scroll-my-64"></div>
scroll-ms-64scroll-margin-inline-start: 16rem; <div className="scroll-ms-64"></div>
scroll-me-64scroll-margin-inline-end: 16rem; <div className="scroll-me-64"></div>
scroll-mt-64scroll-margin-top: 16rem; <div className="scroll-mt-64"></div>
scroll-mr-64scroll-margin-right: 16rem; <div className="scroll-mr-64"></div>
scroll-mb-64scroll-margin-bottom: 16rem; <div className="scroll-mb-64"></div>
scroll-ml-64scroll-margin-left: 16rem; <div className="scroll-ml-64"></div>
scroll-m-72scroll-margin: 18rem; <div className="scroll-m-72"></div>
scroll-mx-72scroll-margin-left: 18rem; scroll-margin-right: 18rem; <div className="scroll-mx-72"></div>
scroll-my-72scroll-margin-top: 18rem; scroll-margin-bottom: 18rem; <div className="scroll-my-72"></div>
scroll-ms-72scroll-margin-inline-start: 18rem; <div className="scroll-ms-72"></div>
scroll-me-72scroll-margin-inline-end: 18rem; <div className="scroll-me-72"></div>
scroll-mt-72scroll-margin-top: 18rem; <div className="scroll-mt-72"></div>
scroll-mr-72scroll-margin-right: 18rem; <div className="scroll-mr-72"></div>
scroll-mb-72scroll-margin-bottom: 18rem; <div className="scroll-mb-72"></div>
scroll-ml-72scroll-margin-left: 18rem; <div className="scroll-ml-72"></div>
scroll-m-80scroll-margin: 20rem; <div className="scroll-m-80"></div>
scroll-mx-80scroll-margin-left: 20rem; scroll-margin-right: 20rem; <div className="scroll-mx-80"></div>
scroll-my-80scroll-margin-top: 20rem; scroll-margin-bottom: 20rem; <div className="scroll-my-80"></div>
scroll-ms-80scroll-margin-inline-start: 20rem; <div className="scroll-ms-80"></div>
scroll-me-80scroll-margin-inline-end: 20rem; <div className="scroll-me-80"></div>
scroll-mt-80scroll-margin-top: 20rem; <div className="scroll-mt-80"></div>
scroll-mr-80scroll-margin-right: 20rem; <div className="scroll-mr-80"></div>
scroll-mb-80scroll-margin-bottom: 20rem; <div className="scroll-mb-80"></div>
scroll-ml-80scroll-margin-left: 20rem; <div className="scroll-ml-80"></div>
scroll-m-96scroll-margin: 24rem; <div className="scroll-m-96"></div>
scroll-mx-96scroll-margin-left: 24rem; scroll-margin-right: 24rem; <div className="scroll-mx-96"></div>
scroll-my-96scroll-margin-top: 24rem; scroll-margin-bottom: 24rem; <div className="scroll-my-96"></div>
scroll-ms-96scroll-margin-inline-start: 24rem; <div className="scroll-ms-96"></div>
scroll-me-96scroll-margin-inline-end: 24rem; <div className="scroll-me-96"></div>
scroll-mt-96scroll-margin-top: 24rem; <div className="scroll-mt-96"></div>
scroll-mr-96scroll-margin-right: 24rem; <div className="scroll-mr-96"></div>
scroll-mb-96scroll-margin-bottom: 24rem; <div className="scroll-mb-96"></div>
scroll-ml-96scroll-margin-left: 24rem; <div className="scroll-ml-96"></div>

Overview of Scroll Margin

Adding the Scroll Margin

Tailwind's scroll-margin utilities can be applied for individual sides (top, right, bottom, left) or collectively. To add scroll-margin to an element, use the utilities like- scroll-m-*, scroll-mx-*, scroll-my-*, etc.

This is a live editor. Play around with it!
export default function ScrollMarginDemo() {
  return (
    <div className="snap-y snap-mandatory flex flex-col gap-4 items-center overflow-auto h-screen px-10 pt-10 bg-gray-50">
      <div className="snap-start scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

Adding the Negative Scroll Margin

Tailwind also lets you assign negative values to scroll margin. To add a negative scroll margin, use utilities like- -scroll-m-*, -scroll-mx-*, -scroll-my-*, etc.

This is a live editor. Play around with it!
export default function NegativeMarginDemo() {
  return (
        <div className="snap-y snap-mandatory flex flex-col gap-4 items-center overflow-auto h-screen px-10 pt-10 bg-gray-50">
      <div className="snap-start -scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start -scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start -scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start -scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start -scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start -scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

Adding the Logical Scroll Margin

Tailwind also provides logical property support, where scroll margins can be adjusted based on the text direction- left-to-right or right-to-left. To add these logical properties to your code- use scroll-ms-* and scroll-me-* utilities.

This is a live editor. Play around with it!
export default function LogicalMarginDemo() {
  return (
    <div dir="rtl" className="w-full snap-x snap-mandatory flex gap-4 items-center overflow-auto h-screen px-10 bg-gray-50">
      <div className="snap-start scroll-ms-10 min-w-72 h-48">
        <img src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-ms-12 min-w-72 h-48">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-ms-12 min-w-72 h-48">
        <img src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-ms-12 min-w-72 h-48">
        <img src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-ms-12 min-w-72 h-48">
        <img src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-ms-12 min-w-72 h-48">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

States and Responsiveness

Hover and Focus States

Tailwind also provides state modifiers to conditionally apply scroll margins. To apply scroll margins on states such as hover or focus, prepend the modifiers to the utilities, e.g., hover:scroll-mt-*, hover:scroll-mb-*, etc.

This is a live editor. Play around with it!
export default function InteractiveMargin() {
  return (
    <div className="snap-y snap-mandatory flex flex-col gap-4 items-center overflow-auto h-screen px-10 pt-10 bg-gray-50">
      <div className="snap-start hover:scroll-mt-10 h-96">
        <img
          src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start h-96">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start h-96">
        <img
          src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start h-96">
        <img
          src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start h-96">
        <img
          src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start h-96">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

Breakpoint Modifiers

Tailwind lets you apply scroll margins to different screen sizes by using breakpoint modifiers- sm, md, lg, etc. To apply scroll margins on specific breakpoints, prepend the modifiers to the utilities, e.g., md:scroll-mt-*, lg:scroll-mb-*, etc.

This is a live editor. Play around with it!
export default function ResponsiveMargin() {
  return (
    <div className="snap-y snap-mandatory flex flex-col gap-4 items-center overflow-auto h-screen px-10 pt-10 bg-gray-50">
      <div className="snap-start scroll-mt-4 sm:scroll-mt-6 lg:scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-4 sm:scroll-mt-6 lg:scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-4 sm:scroll-mt-6 lg:scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-4 sm:scroll-mt-6 lg:scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-4 sm:scroll-mt-6 lg:scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-4 sm:scroll-mt-6 lg:scroll-mt-12 h-96">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

Custom Scroll Margin

Extending the Theme

To implement specific scroll-margin values not available by default in Tailwind, you can extend the theme configuration. Then apply the custom scroll-margin values via the utility class:

This is a live editor. Play around with it!
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

export default function CustomMargin() {
  return (
    <div className="snap-y snap-mandatory flex flex-col gap-4 items-center overflow-auto h-screen px-10 pt-10 bg-gray-50">
      <div className="snap-start scroll-mt-25 h-96">
        <img
          src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-25 h-96">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-25 h-96">
        <img
          src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-25 h-96">
        <img
          src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-25 h-96">
        <img
          src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-25 h-96">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

Using Arbitrary Values

Tailwind CSS also supports arbitrary values for scroll margins where predefined classes don't suffice. Here, custom values are passed directly in square brackets, making arbitrary values quick to use without customization in the config file.

This is a live editor. Play around with it!
export default function ArbitraryMargin() {
  return (
    <div className="snap-y snap-mandatory flex flex-col gap-4 items-center overflow-auto h-screen px-10 pt-10 bg-gray-50">
      <div className="snap-start scroll-mt-[6.5rem] h-96">
        <img
          src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-[6.5rem] h-96">
        <img
          src="https://images.unsplash.com/photo-1487017159836-4e23ece2e4cf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-[6.5rem] h-96">
        <img
          src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-[6.5rem] h-96">
        <img
          src="https://images.unsplash.com/photo-1489269637500-aa0e75768394"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-[6.5rem] h-96">
        <img
          src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
      <div className="snap-start scroll-mt-[6.5rem] h-96">
        <img
          src="https://images.unsplash.com/photo-1527443224154-c4a3942d3acf"
          className="w-full h-full object-cover shadow-md"
        />
      </div>
    </div>
  );
}

Real World Examples

A step-by-step recipe guide with horizontal scrolling and proper scroll margin for each instruction card.

This is a live editor. Play around with it!
const RecipeScroller = () => {
  const steps = [
    {
      id: 1,
      title: "Prepare Ingredients",
      instruction: "Gather all ingredients and measure them accurately",
      src: "https://images.unsplash.com/photo-1506368083636-6defb67639a7",
      alt: "Ingredients laid out on cutting board"
    },
    {
      id: 2,
      title: "Mix Dry Ingredients",
      instruction: "Combine flour, sugar, and spices in a large bowl",
      src: "https://images.unsplash.com/photo-1589367920969-ab8e050bbb04",
      alt: "Mixing dry ingredients"
    },
    {
      id: 3,
      title: "Add Wet Ingredients",
      instruction: "Pour in milk, eggs, and vanilla extract",
      src: "https://images.unsplash.com/photo-1607920591413-4ec007e70023",
      alt: "Adding wet ingredients"
    },
    {
      id: 4,
      title: "Mix Well",
      instruction: "Whisk until smooth and no lumps remain",
      src: "https://images.unsplash.com/photo-1607662256021-751dc3939f2b",
      alt: "Whisking batter"
    },
    {
      id: 5,
      title: "Pour & Bake",
      instruction: "Transfer to baking pan and bake at 350°F",
      src: "https://images.unsplash.com/photo-1624715188184-506e76b47537",
      alt: "Pouring batter into pan"
    },
    {
      id: 6,
      title: "Cool & Serve",
      instruction: "Let cool completely before serving",
      src: "https://images.unsplash.com/photo-1563729784474-d77dbb933a9e",
      alt: "Finished dessert cooling"
    }
  ];

  return (
    <div className="bg-stone-100 h-screen">
      <div className="overflow-x-auto snap-x snap-mandatory whitespace-nowrap">
        {steps.map((step) => (
          <div
            key={step.id}
            className="inline-block w-[300px] scroll-ml-12 snap-start p-4"
          >
            <div className="bg-white rounded-xl shadow-lg overflow-hidden">
              <img
                src={step.src}
                alt={step.alt}
                className="w-full h-40 object-cover"
              />
              <div className="p-4">
                <span className="inline-block px-3 py-1 bg-amber-100 text-amber-800 rounded-full text-sm mb-2">
                  Step {step.id}
                </span>
                <h3 className="font-bold text-lg mb-2">{step.title}</h3>
                <p className="text-gray-600">{step.instruction}</p>
              </div>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
};

export default RecipeScroller;

Team Member Profiles

A horizontal scrolling list of team member profiles with proper scroll margin and snap points.

This is a live editor. Play around with it!
const TeamScroller = () => {
  const team = [
    {
      id: 1,
      name: "Sarah Johnson",
      role: "CEO",
      src: "https://images.unsplash.com/photo-1580489944761-15a19d654956",
      alt: "Sarah Johnson profile picture",
      quote: "Driving innovation through leadership"
    },
    {
      id: 2,
      name: "Michael Chen",
      role: "CTO",
      src: "https://images.unsplash.com/photo-1567515004624-219c11d31f2e",
      alt: "Michael Chen profile picture",
      quote: "Building the future of technology"
    },
    {
      id: 3,
      name: "Emily Rodriguez",
      role: "Design Director",
      src: "https://images.unsplash.com/photo-1573497019940-1c28c88b4f3e",
      alt: "Emily Rodriguez profile picture",
      quote: "Creating meaningful experiences"
    },
    {
      id: 4,
      name: "David Kim",
      role: "Product Manager",
      src: "https://images.unsplash.com/photo-1600486913747-55e5470d6f40",
      alt: "David Kim profile picture",
      quote: "Solving complex problems simply"
    },
    {
      id: 5,
      name: "Lisa Thompson",
      role: "Marketing Lead",
      src: "https://images.unsplash.com/photo-1587614387466-0a72ca909e16",
      alt: "Lisa Thompson profile picture",
      quote: "Connecting brands with people"
    },
    {
      id: 6,
      name: "James Wilson",
      role: "Sales Director",
      src: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e",
      alt: "James Wilson profile picture",
      quote: "Building lasting partnerships"
    }
  ];

  return (
    <div className="bg-gradient-to-r from-purple-50 to-pink-50 p-6">
      <div className="overflow-x-auto snap-x snap-mandatory">
        <div className="flex gap-6">
          {team.map((member) => (
            <div
              key={member.id}
              className="flex-none w-72 scroll-ml-4 snap-start bg-white rounded-2xl shadow-xl overflow-hidden"
            >
              <div className="relative h-80">
                <img
                  src={member.src}
                  alt={member.alt}
                  className="absolute inset-0 w-full h-full object-cover"
                />
                <div className="absolute inset-0 bg-gradient-to-t from-black/70 to-transparent" />
                <div className="absolute bottom-0 p-6 text-white">
                  <h3 className="text-xl font-bold">{member.name}</h3>
                  <p className="text-purple-200">{member.role}</p>
                </div>
              </div>
              <div className="p-6">
                <p className="text-gray-600 italic">&quot;{member.quote}&quot;</p>
              </div>
            </div>
          ))}
        </div>
      </div>
    </div>
  );
};

export default TeamScroller;

A horizontal scrolling image gallery with proper scroll margins.

This is a live editor. Play around with it!
export default function ImageGallery() {
  const images = [
    {
      src: "https://images.unsplash.com/photo-1516483638261-f4dbaf036963",
      alt: "Italy landscape",
      title: "Beautiful Italy"
    },
    {
      src: "https://images.unsplash.com/photo-1523906834658-6e24ef2386f9",
      alt: "Venice canals",
      title: "Venice"
    },
    {
      src: "https://images.unsplash.com/photo-1515859005217-8a1f08870f59",
      alt: "Rome architecture",
      title: "Rome"
    },
    {
      src: "https://images.unsplash.com/photo-1534445867742-43195f401b6c",
      alt: "Florence vista",
      title: "Florence"
    },
    {
      src: "https://images.unsplash.com/photo-1537799943037-f5da89a65689",
      alt: "Milan cathedral",
      title: "Milan"
    },
  ];

  return (
    <div className="w-full overflow-x-auto snap-x snap-mandatory">
      <div className="flex">
        {images.map((image, index) => (
          <div
            key={index}
            className="scroll-ml-6 snap-start flex-shrink-0 w-80 h-64 p-2"
          >
            <img
              src={image.src}
              alt={image.alt}
              className="w-full h-full object-cover rounded-lg"
            />
            <p className="mt-2 text-center font-medium">{image.title}</p>
          </div>
        ))}
      </div>
    </div>
  );
}

Timeline Component

A vertical timeline with scroll margin for smooth anchor navigation.

This is a live editor. Play around with it!
function TimelineEvents() {
  const data = [
    {
      id: '2024',
      year: '2024',
      title: 'Global Expansion',
      description: 'Opened offices in 5 new countries...'
    },
    {
      id: '2023',
      year: '2023',
      title: 'Product Launch',
      description: 'Released our flagship product...'
    },
    {
      id: '2022',
      year: '2022',
      title: 'Series B Funding',
      description: 'Secured $50M in Series B funding...'
    },
    {
      id: '2021',
      year: '2021',
      title: 'Team Growth',
      description: 'Expanded team to 100 employees...'
    },
    {
      id: '2020',
      year: '2020',
      title: 'Company Founded',
      description: 'Started with a small team of 5...'
    },
    {
      id: '2019',
      year: '2019',
      title: 'Initial Concept',
      description: 'Developed the initial concept...'
    }
  ];

  return (
    <div className="w-full h-screen flex flex-col">
      <nav className="fixed top-0 w-full bg-white border-b z-10 p-4">
        <ul className="flex justify-between">
          {data.map(event => (
            <li key={event.id}>
              <a
                href={`#${event.id}`}
                className="text-green-600 hover:text-green-800"
              >
                {event.year}
              </a>
            </li>
          ))}
        </ul>
      </nav>

      {/* Ensure scrollable container */}
      <div className="mt-16 flex-1 overflow-y-auto snap-y snap-mandatory scroll-smooth p-4">
        {data.map(event => (
          <div
            key={event.id}
            id={event.id}
            className="snap-start scroll-mt-20 flex flex-col items-start border-l-2 border-green-500 pl-8 pb-16 min-h-screen"
          >
            <div className="w-4 h-4 bg-green-500 rounded-full -ml-2" />
            <div className="bg-white p-4 rounded-lg shadow">
              <h3 className="text-xl font-bold">{event.year}</h3>
              <h4 className="text-lg text-green-600">{event.title}</h4>
              <p className="text-gray-600">{event.description}</p>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

export default TimelineEvents;

A responsive card carousel with scroll margin and snap points.

This is a live editor. Play around with it!
export default function ProductCarousel() {
  const products = [
    {
      id: 1,
      name: "Wireless Headphones",
      price: "$199",
      image: "https://images.unsplash.com/photo-1505740420928-5e560c06d30e",
      category: "Electronics"
    },
    {
      id: 2,
      name: "Smart Watch",
      price: "$299",
      image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30",
      category: "Accessories"
    },
    {
      id: 3,
      name: "Camera Lens",
      price: "$799",
      image: "https://images.unsplash.com/photo-1516035069371-29a1b244cc32",
      category: "Photography"
    },
    {
      id: 4,
      name: "Gaming Console",
      price: "$499",
      image: "https://images.unsplash.com/photo-1486401899868-0e435ed85128",
      category: "Gaming"
    },
    {
      id: 5,
      name: "Laptop",
      price: "$1299",
      image: "https://images.unsplash.com/photo-1496181133206-80ce9b88a853",
      category: "Computers"
    },
    {
      id: 6,
      name: "Smartphone",
      price: "$899",
      image: "https://images.unsplash.com/photo-1511707171634-5f897ff02aa9",
      category: "Mobile"
    }
  ];

  return (
    <div className="w-full overflow-x-auto snap-x snap-mandatory">
      <div className="flex gap-4 p-4">
        {products.map((product) => (
          <div
            key={product.id}
            className="scroll-ml-6 snap-start flex-shrink-0 w-72 bg-white rounded-xl shadow-lg overflow-hidden"
          >
            <img
              src={product.image}
              alt={product.name}
              className="w-full h-48 object-cover"
            />
            <div className="p-4">
              <span className="text-sm text-blue-600">{product.category}</span>
              <h3 className="font-bold text-xl mt-1">{product.name}</h3>
              <p className="text-2xl font-bold text-gray-900 mt-2">
                {product.price}
              </p>
              <button className="w-full mt-4 bg-blue-600 text-white py-2 rounded-lg hover:bg-blue-700">
                Add to Cart
              </button>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

Customization Examples

A horizontal scrolling image gallery where each image snaps to custom scroll points.

This is a live editor. Play around with it!
// App.js
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

const HorizontalGallery = () => {
  return (
    <div className="overflow-x-auto snap-x snap-mandatory bg-amber-100 h-screen">
      <div className="flex gap-4">
        {[1, 2, 3, 4].map((item) => (
          <img
            key={item}
            src="https://images.unsplash.com/photo-1537799943037-f5da89a65689"
            alt={`Gallery item ${item}`}
            className="mt-24 w-64 h-48 object-cover rounded-lg flex-shrink-0 snap-start scroll-ml-18"
          />
        ))}
      </div>
    </div>
  );
};

export default HorizontalGallery;

Vertical Content Steps

A vertical stepper component where each step snaps to a custom top margin, providing better visibility when scrolling through content.

This is a live editor. Play around with it!
// App.js
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;

const VerticalStepper = () => {
  return (
    <div className="w-[350px] h-[500px] overflow-y-auto snap-y snap-mandatory">
      <div className="space-y-8 p-4">
        {['Start', 'Process', 'Review', 'Complete'].map((step, index) => (
          <div 
            key={index}
            className="snap-start scroll-mt-custom bg-gradient-to-r from-blue-500 to-purple-500 p-6 rounded-xl text-white min-h-[200px] flex items-center justify-center"
          >
            <div className="flex flex-col items-center">
              <h3 className="text-xl font-bold">{step}</h3>
              {step === 'Start' && (
                <p className="mt-2 text-center">
                  Begin your journey by laying out your goals, gathering necessary resources, and setting a clear direction.
                </p>
              )}
              {step === 'Process' && (
                <p className="mt-2 text-center">
                  Dive into the tasks at hand, execute your plan with focus, and adjust your approach as challenges arise.
                </p>
              )}
              {step === 'Review' && (
                <p className="mt-2 text-center">
                  Evaluate your progress, reflect on feedback, and fine-tune your methods to improve outcomes.
                </p>
              )}
              {step === 'Complete' && (
                <p className="mt-2 text-center">
                  Finalize your work, celebrate your achievements, and document key learnings for future projects.
                </p>
              )}
            </div>
          </div>
        ))}
      </div>
    </div>
  );
};

export default VerticalStepper;

Article Section

A reading interface where article sections snap to custom margins.

This is a live editor. Play around with it!
// App.js
import tailwindConfig from "./tailwind.config.js";
tailwind.config = tailwindConfig;
const ArticleReader = () => {
  return (
    <div className="w-[350px] h-screen overflow-y-auto snap-y snap-mandatory bg-gray-50 p-4">
      {['Introduction', 'Main Content', 'Discussion', 'Conclusion'].map((section, index) => (
        <section 
          key={index}
          className="snap-start scroll-mt-article mb-12 bg-white p-6 rounded-xl shadow-lg"
        >
          <h2 className="text-xl font-bold mb-4">{section}</h2>
          <p className="text-gray-600 leading-relaxed">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do 
            eiusmod tempor incididunt ut labore et dolore magna aliqua. 
            Ut enim ad minim veniam, quis nostrud exercitation ullamco.
          </p>
        </section>
      ))}
    </div>
  );
};

export default ArticleReader;

Best Practices

Maintain Design Consistency

Consistency is a cornerstone of good design, particularly when working with utilities like scroll-margin in Tailwind CSS. It's important to ensure that scroll margins are applied uniformly across similar components or sections.

For example, using consistent scroll margin values for sections such as headers, navigation anchors, or content blocks creates a predictable and visually consistent experience for users. This can be achieved by pre-defined scroll margins like- scroll-mt-*, scroll-mx-*, etc., or custom utilities added via the Tailwind theme configuration.

Focusing on consistency not only improves the UX but also simplifies collaboration and project maintainability for teams working on large-scale projects.

Build Responsive Design

Responsive design requires adjustments to scroll-margin values based on screen size. Tailwind CSS provides responsive variants that enable designers to define scroll behavior across different breakpoints. Defining larger scroll margins on larger screens and smaller ones for smaller screens helps maintain proportionate spacing without disrupting usability.

For instance, a scroll-mt-16 value may work well on desktop layouts but might be too excessive for mobile views. Using variants such as sm:scroll-mt-4 lg:scroll-mt-8 provides more precise control while ensuring consistency across devices. This technique helps prevent unnecessary whitespace on mobile while retaining a polished layout on larger screens.

Accessibility Considerations

Enhance Readability and Navigability

Ensuring sufficient scroll margins prevents content from appearing too close to the viewport’s edge when scrolled into view, maintaining a comfortable reading experience.

For users with motion sensitivity, abrupt scrolling changes caused by improper scroll-margin values can be disruptive. To mitigate this, keeping scroll margins moderate and consistent helps maintain a steady user experience without causing visual discomfort. Additionally, combining scroll-margin with focus-visible ensures that navigable elements remain clearly distinguishable when accessed through keyboard navigation.

Focus on High Contrast

While scroll margin primarily affects spacing, it indirectly influences contrast and readability by ensuring sufficient separation between different sections. When text or interactive elements are too close to the screen edges or other content, users may struggle to differentiate between distinct sections. Properly applied scroll margins create a balanced layout where each section is visually distinct, improving the user experience for individuals with visual impairments.

Users with low vision or color perception deficiencies benefit from layouts that avoid overcrowding. The combination of scroll-m-* with appropriate background contrast and text styling ensures that content remains legible under different accessibility settings, such as high-contrast mode.