Skip to content
TrademarkTrademark
Docs
Basics

Spacing

Updated: May 4, 2025

Once UI utilizes a spacing system based on a custom 8px grid to provide options for setting white spaces effortlessly and consistently.

Spacing system

Once UI relies on the type called SpacingToken to define static and responsive spaces. It's used for margins, paddings, gaps, and position distances. Static spaces are set in REMs and can be referenced with their pixel value calculated with a 16px root font size. For a more illustrative example, visit the Structure page. These spacings will slightly adjust based on your --font-scaling variables.

0
1
2
4
8
12
16
20
24
32
40
48
56
64
80
104
128
160

Responsive spaces are also set in REMs, but they are rescaled at the m and s breakpoints. They can be accessed through the T-shirt size model.

xs
s
m
l
xl

Breakpoints

Once UI uses a custom PostCSS config with custom-media to define and use breakpoints globally. Breakpoints are defined in the styles/breakpoints.scss file.

Breakpoint
Variable
Value
--s@custom-media --s (max-width: 768px)max-width: 768px
--m@custom-media --m (max-width: 1024px)max-width: 1024px
We recommend setting paddings and margins with the Flex and Grid components. Flex props are exposed on most Once UI components to prevent unnecessary nesting.

Margin

You can set the static and responsive spacing tokens for different margin properties on any element with utility classes or inline-styles.

Static margin

Class
Variable
Value
margin
.m-0var(--static-space-0)0
.m-1var(--static-space-1)1px
.m-2var(--static-space-2)0.125rem
.m-4var(--static-space-4)0.25rem
.m-8var(--static-space-8)0.5rem
.m-12var(--static-space-12)0.75rem
.m-16var(--static-space-16)1rem
.m-20var(--static-space-20)1.25rem
.m-24var(--static-space-24)1.5rem
.m-32var(--static-space-32)2rem
.m-40var(--static-space-40)2.5rem
.m-48var(--static-space-48)3rem
.m-56var(--static-space-56)3.5rem
.m-64var(--static-space-64)4rem
.m-80var(--static-space-80)5rem
.m-104var(--static-space-104)6.5rem
.m-128var(--static-space-128)8rem
.m-160var(--static-space-160)10rem
margin-left + margin-right
.mx-0var(--static-space-0)0
.mx-1var(--static-space-1)1px
.mx-2var(--static-space-2)0.125rem
.mx-4var(--static-space-4)0.25rem
.mx-8var(--static-space-8)0.5rem
.mx-12var(--static-space-12)0.75rem
.mx-16var(--static-space-16)1rem
.mx-20var(--static-space-20)1.25rem
.mx-24var(--static-space-24)1.5rem
.mx-32var(--static-space-32)2rem
.mx-40var(--static-space-40)2.5rem
.mx-48var(--static-space-48)3rem
.mx-56var(--static-space-56)3.5rem
.mx-64var(--static-space-64)4rem
.mx-80var(--static-space-80)5rem
.mx-104var(--static-space-104)6.5rem
.mx-128var(--static-space-128)8rem
.mx-160var(--static-space-160)10rem
margin-top + margin-bottom
.my-0var(--static-space-0)0
.my-1var(--static-space-1)1px
.my-2var(--static-space-2)0.125rem
.my-4var(--static-space-4)0.25rem
.my-8var(--static-space-8)0.5rem
.my-12var(--static-space-12)0.75rem
.my-16var(--static-space-16)1rem
.my-20var(--static-space-20)1.25rem
.my-24var(--static-space-24)1.5rem
.my-32var(--static-space-32)2rem
.my-40var(--static-space-40)2.5rem
.my-48var(--static-space-48)3rem
.my-56var(--static-space-56)3.5rem
.my-64var(--static-space-64)4rem
.my-80var(--static-space-80)5rem
.my-104var(--static-space-104)6.5rem
.my-128var(--static-space-128)8rem
.my-160var(--static-space-160)10rem
margin-top
.mt-0var(--static-space-0)0
.mt-1var(--static-space-1)1px
.mt-2var(--static-space-2)0.125rem
.mt-4var(--static-space-4)0.25rem
.mt-8var(--static-space-8)0.5rem
.mt-12var(--static-space-12)0.75rem
.mt-16var(--static-space-16)1rem
.mt-20var(--static-space-20)1.25rem
.mt-24var(--static-space-24)1.5rem
.mt-32var(--static-space-32)2rem
.mt-40var(--static-space-40)2.5rem
.mt-48var(--static-space-48)3rem
.mt-56var(--static-space-56)3.5rem
.mt-64var(--static-space-64)4rem
.mt-80var(--static-space-80)5rem
.mt-104var(--static-space-104)6.5rem
.mt-128var(--static-space-128)8rem
.mt-160var(--static-space-160)10rem
margin-right
.mr-0var(--static-space-0)0
.mr-1var(--static-space-1)1px
.mr-2var(--static-space-2)0.125rem
.mr-4var(--static-space-4)0.25rem
.mr-8var(--static-space-8)0.5rem
.mr-12var(--static-space-12)0.75rem
.mr-16var(--static-space-16)1rem
.mr-20var(--static-space-20)1.25rem
.mr-24var(--static-space-24)1.5rem
.mr-32var(--static-space-32)2rem
.mr-40var(--static-space-40)2.5rem
.mr-48var(--static-space-48)3rem
.mr-56var(--static-space-56)3.5rem
.mr-64var(--static-space-64)4rem
.mr-80var(--static-space-80)5rem
.mr-104var(--static-space-104)6.5rem
.mr-128var(--static-space-128)8rem
.mr-160var(--static-space-160)10rem
margin-bottom
.mb-0var(--static-space-0)0
.mb-1var(--static-space-1)1px
.mb-2var(--static-space-2)0.125rem
.mb-4var(--static-space-4)0.25rem
.mb-8var(--static-space-8)0.5rem
.mb-12var(--static-space-12)0.75rem
.mb-16var(--static-space-16)1rem
.mb-20var(--static-space-20)1.25rem
.mb-24var(--static-space-24)1.5rem
.mb-32var(--static-space-32)2rem
.mb-40var(--static-space-40)2.5rem
.mb-48var(--static-space-48)3rem
.mb-56var(--static-space-56)3.5rem
.mb-64var(--static-space-64)4rem
.mb-80var(--static-space-80)5rem
.mb-104var(--static-space-104)6.5rem
.mb-128var(--static-space-128)8rem
.mb-160var(--static-space-160)10rem
margin-left
.ml-0var(--static-space-0)0
.ml-1var(--static-space-1)1px
.ml-2var(--static-space-2)0.125rem
.ml-4var(--static-space-4)0.25rem
.ml-8var(--static-space-8)0.5rem
.ml-12var(--static-space-12)0.75rem
.ml-16var(--static-space-16)1rem
.ml-20var(--static-space-20)1.25rem
.ml-24var(--static-space-24)1.5rem
.ml-32var(--static-space-32)2rem
.ml-40var(--static-space-40)2.5rem
.ml-48var(--static-space-48)3rem
.ml-56var(--static-space-56)3.5rem
.ml-64var(--static-space-64)4rem
.ml-80var(--static-space-80)5rem
.ml-104var(--static-space-104)6.5rem
.ml-128var(--static-space-128)8rem
.ml-160var(--static-space-160)10rem

Responsive margin

Class
Variable
Value
margin
.m-xsvar(--responsive-space-xs)80 / 64 / 40
.m-svar(--responsive-space-s)40 / 24 / 16
.m-mvar(--responsive-space-m)24 / 16 / 12
.m-lvar(--responsive-space-l)16 / 12 / 8
.m-xlvar(--responsive-space-xl)12 / 8 / 4
margin-left + margin-right
.mx-xsvar(--responsive-space-xs)80 / 64 / 40
.mx-svar(--responsive-space-s)40 / 24 / 16
.mx-mvar(--responsive-space-m)24 / 16 / 12
.mx-lvar(--responsive-space-l)16 / 12 / 8
.mx-xlvar(--responsive-space-xl)12 / 8 / 4
margin-top + margin-bottom
.my-xsvar(--responsive-space-xs)80 / 64 / 40
.my-svar(--responsive-space-s)40 / 24 / 16
.my-mvar(--responsive-space-m)24 / 16 / 12
.my-lvar(--responsive-space-l)16 / 12 / 8
.my-xlvar(--responsive-space-xl)12 / 8 / 4
margin-top
.mt-xsvar(--responsive-space-xs)80 / 64 / 40
.mt-svar(--responsive-space-s)40 / 24 / 16
.mt-mvar(--responsive-space-m)24 / 16 / 12
.mt-lvar(--responsive-space-l)16 / 12 / 8
.mt-xlvar(--responsive-space-xl)12 / 8 / 4
margin-right
.mr-xsvar(--responsive-space-xs)80 / 64 / 40
.mr-svar(--responsive-space-s)40 / 24 / 16
.mr-mvar(--responsive-space-m)24 / 16 / 12
.mr-lvar(--responsive-space-l)16 / 12 / 8
.mr-xlvar(--responsive-space-xl)12 / 8 / 4
margin-bottom
.mb-xsvar(--responsive-space-xs)80 / 64 / 40
.mb-svar(--responsive-space-s)40 / 24 / 16
.mb-mvar(--responsive-space-m)24 / 16 / 12
.mb-lvar(--responsive-space-l)16 / 12 / 8
.mb-xlvar(--responsive-space-xl)12 / 8 / 4
margin-left
.ml-xsvar(--responsive-space-xs)80 / 64 / 40
.ml-svar(--responsive-space-s)40 / 24 / 16
.ml-mvar(--responsive-space-m)24 / 16 / 12
.ml-lvar(--responsive-space-l)16 / 12 / 8
.ml-xlvar(--responsive-space-xl)12 / 8 / 4

Auto margin

Every margin prop also takes "auto", at the base and in a breakpoint object: marginLeft="auto" pushes an item to the end of its row, and marginX="auto" centres a block with a width. The classes are .m-auto, .mx-auto, .my-auto, .mt-auto, .mr-auto, .mb-auto and .ml-auto, with an .s-ml-auto-style variant at each breakpoint. Padding and gap have no auto.

Padding

You can set the static and responsive spacing tokens for different padding properties on any element with utility classes or inline-styles.

Static padding

Class
Variable
Value
padding
.p-0var(--static-space-0)0
.p-1var(--static-space-1)1px
.p-2var(--static-space-2)0.125rem
.p-4var(--static-space-4)0.25rem
.p-8var(--static-space-8)0.5rem
.p-12var(--static-space-12)0.75rem
.p-16var(--static-space-16)1rem
.p-20var(--static-space-20)1.25rem
.p-24var(--static-space-24)1.5rem
.p-32var(--static-space-32)2rem
.p-40var(--static-space-40)2.5rem
.p-48var(--static-space-48)3rem
.p-56var(--static-space-56)3.5rem
.p-64var(--static-space-64)4rem
.p-80var(--static-space-80)5rem
.p-104var(--static-space-104)6.5rem
.p-128var(--static-space-128)8rem
.p-160var(--static-space-160)10rem
padding-left + padding-right
.mp-0var(--static-space-0)0
.mp-1var(--static-space-1)1px
.mp-2var(--static-space-2)0.125rem
.mp-4var(--static-space-4)0.25rem
.mp-8var(--static-space-8)0.5rem
.mp-12var(--static-space-12)0.75rem
.mp-16var(--static-space-16)1rem
.mp-20var(--static-space-20)1.25rem
.mp-24var(--static-space-24)1.5rem
.mp-32var(--static-space-32)2rem
.mp-40var(--static-space-40)2.5rem
.mp-48var(--static-space-48)3rem
.mp-56var(--static-space-56)3.5rem
.mp-64var(--static-space-64)4rem
.mp-80var(--static-space-80)5rem
.mp-104var(--static-space-104)6.5rem
.mp-128var(--static-space-128)8rem
.mp-160var(--static-space-160)10rem
padding-top + padding-bottom
.py-0var(--static-space-0)0
.py-1var(--static-space-1)1px
.py-2var(--static-space-2)0.125rem
.py-4var(--static-space-4)0.25rem
.py-8var(--static-space-8)0.5rem
.py-12var(--static-space-12)0.75rem
.py-16var(--static-space-16)1rem
.py-20var(--static-space-20)1.25rem
.py-24var(--static-space-24)1.5rem
.py-32var(--static-space-32)2rem
.py-40var(--static-space-40)2.5rem
.py-48var(--static-space-48)3rem
.py-56var(--static-space-56)3.5rem
.py-64var(--static-space-64)4rem
.py-80var(--static-space-80)5rem
.py-104var(--static-space-104)6.5rem
.py-128var(--static-space-128)8rem
.py-160var(--static-space-160)10rem
padding-top
.pt-0var(--static-space-0)0
.pt-1var(--static-space-1)1px
.pt-2var(--static-space-2)0.125rem
.pt-4var(--static-space-4)0.25rem
.pt-8var(--static-space-8)0.5rem
.pt-12var(--static-space-12)0.75rem
.pt-16var(--static-space-16)1rem
.pt-20var(--static-space-20)1.25rem
.pt-24var(--static-space-24)1.5rem
.pt-32var(--static-space-32)2rem
.pt-40var(--static-space-40)2.5rem
.pt-48var(--static-space-48)3rem
.pt-56var(--static-space-56)3.5rem
.pt-64var(--static-space-64)4rem
.pt-80var(--static-space-80)5rem
.pt-104var(--static-space-104)6.5rem
.pt-128var(--static-space-128)8rem
.pt-160var(--static-space-160)10rem
padding-right
.pr-0var(--static-space-0)0
.pr-1var(--static-space-1)1px
.pr-2var(--static-space-2)0.125rem
.pr-4var(--static-space-4)0.25rem
.pr-8var(--static-space-8)0.5rem
.pr-12var(--static-space-12)0.75rem
.pr-16var(--static-space-16)1rem
.pr-20var(--static-space-20)1.25rem
.pr-24var(--static-space-24)1.5rem
.pr-32var(--static-space-32)2rem
.pr-40var(--static-space-40)2.5rem
.pr-48var(--static-space-48)3rem
.pr-56var(--static-space-56)3.5rem
.pr-64var(--static-space-64)4rem
.pr-80var(--static-space-80)5rem
.pr-104var(--static-space-104)6.5rem
.pr-128var(--static-space-128)8rem
.pr-160var(--static-space-160)10rem
padding-bottom
.pb-0var(--static-space-0)0
.pb-1var(--static-space-1)1px
.pb-2var(--static-space-2)0.125rem
.pb-4var(--static-space-4)0.25rem
.pb-8var(--static-space-8)0.5rem
.pb-12var(--static-space-12)0.75rem
.pb-16var(--static-space-16)1rem
.pb-20var(--static-space-20)1.25rem
.pb-24var(--static-space-24)1.5rem
.pb-32var(--static-space-32)2rem
.pb-40var(--static-space-40)2.5rem
.pb-48var(--static-space-48)3rem
.pb-56var(--static-space-56)3.5rem
.pb-64var(--static-space-64)4rem
.pb-80var(--static-space-80)5rem
.pb-104var(--static-space-104)6.5rem
.pb-128var(--static-space-128)8rem
.pb-160var(--static-space-160)10rem
padding-left
.pl-0var(--static-space-0)0
.pl-1var(--static-space-1)1px
.pl-2var(--static-space-2)0.125rem
.pl-4var(--static-space-4)0.25rem
.pl-8var(--static-space-8)0.5rem
.pl-12var(--static-space-12)0.75rem
.pl-16var(--static-space-16)1rem
.pl-20var(--static-space-20)1.25rem
.pl-24var(--static-space-24)1.5rem
.pl-32var(--static-space-32)2rem
.pl-40var(--static-space-40)2.5rem
.pl-48var(--static-space-48)3rem
.pl-56var(--static-space-56)3.5rem
.pl-64var(--static-space-64)4rem
.pl-80var(--static-space-80)5rem
.pl-104var(--static-space-104)6.5rem
.pl-128var(--static-space-128)8rem
.pl-160var(--static-space-160)10rem

Responsive padding

Class
Variable
Value
padding
.p-xsvar(--responsive-space-xs)80 / 64 / 40
.p-svar(--responsive-space-s)40 / 24 / 16
.p-mvar(--responsive-space-m)24 / 16 / 12
.p-lvar(--responsive-space-l)16 / 12 / 8
.p-xlvar(--responsive-space-xl)12 / 8 / 4
padding-left + padding-right
.px-xsvar(--responsive-space-xs)80 / 64 / 40
.px-svar(--responsive-space-s)40 / 24 / 16
.px-mvar(--responsive-space-m)24 / 16 / 12
.px-lvar(--responsive-space-l)16 / 12 / 8
.px-xlvar(--responsive-space-xl)12 / 8 / 4
padding-top + padding-bottom
.py-xsvar(--responsive-space-xs)80 / 64 / 40
.py-svar(--responsive-space-s)40 / 24 / 16
.py-mvar(--responsive-space-m)24 / 16 / 12
.py-lvar(--responsive-space-l)16 / 12 / 8
.py-xlvar(--responsive-space-xl)12 / 8 / 4
padding-top
.pt-xsvar(--responsive-space-xs)80 / 64 / 40
.pt-svar(--responsive-space-s)40 / 24 / 16
.pt-mvar(--responsive-space-m)24 / 16 / 12
.pt-lvar(--responsive-space-l)16 / 12 / 8
.pt-xlvar(--responsive-space-xl)12 / 8 / 4
padding-right
.pr-xsvar(--responsive-space-xs)80 / 64 / 40
.pr-svar(--responsive-space-s)40 / 24 / 16
.pr-mvar(--responsive-space-m)24 / 16 / 12
.pr-lvar(--responsive-space-l)16 / 12 / 8
.pr-xlvar(--responsive-space-xl)12 / 8 / 4
padding-bottom
.pb-xsvar(--responsive-space-xs)80 / 64 / 40
.pb-svar(--responsive-space-s)40 / 24 / 16
.pb-mvar(--responsive-space-m)24 / 16 / 12
.pb-lvar(--responsive-space-l)16 / 12 / 8
.pb-xlvar(--responsive-space-xl)12 / 8 / 4
padding-left
.pl-xsvar(--responsive-space-xs)80 / 64 / 40
.pl-svar(--responsive-space-s)40 / 24 / 16
.pl-mvar(--responsive-space-m)24 / 16 / 12
.pl-lvar(--responsive-space-l)16 / 12 / 8
.pl-xlvar(--responsive-space-xl)12 / 8 / 4

Gap

You can set the static and responsive spacing tokens for different gap properties on any element with utility classes or inline-styles.

Static gap

Class
Variable
Value
.g-0var(--static-space-0)0
.g-1var(--static-space-1)1px
.g-2var(--static-space-2)0.125rem
.g-4var(--static-space-4)0.25rem
.g-8var(--static-space-8)0.5rem
.g-12var(--static-space-12)0.75rem
.g-16var(--static-space-16)1rem
.g-20var(--static-space-20)1.25rem
.g-24var(--static-space-24)1.5rem
.g-32var(--static-space-32)2rem
.g-40var(--static-space-40)2.5rem
.g-48var(--static-space-48)3rem
.g-56var(--static-space-56)3.5rem
.g-64var(--static-space-64)4rem
.g-80var(--static-space-80)5rem
.g-104var(--static-space-104)6.5rem
.g-128var(--static-space-128)8rem
.g-160var(--static-space-160)10rem

Responsive gap

Class
Variable
Value
.g-xsvar(--responsive-space-xs)80 / 64 / 40
.g-svar(--responsive-space-s)40 / 24 / 16
.g-mvar(--responsive-space-m)24 / 16 / 12
.g-lvar(--responsive-space-l)16 / 12 / 8
.g-xlvar(--responsive-space-xl)12 / 8 / 4
Edit this page on GitHub