2.0 alpha
These docs describe 2.0. Install it with @once-ui-system/core@alpha.
On 1.8.x? Read the 1.x docs
TrademarkTrademarkDocs
Ctrl k
Search 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. 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
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
You can set the static and responsive spacing tokens for different margin properties on any element with utility classes or inline-styles.
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
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
You can set the static and responsive spacing tokens for different padding properties on any element with utility classes or inline-styles.
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
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
You can set the static and responsive spacing tokens for different gap properties on any element with utility classes or inline-styles.
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
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
TrademarkTrademark
Built with curiosity by Lorant One and the Design Engineers Club