units

All CSS units supported by Atomic CSS and core unit rules. Correct unit selection is the foundation of a consistent design system.

Unit Rules

Atomic CSS operates based on html { font-size: 10px }. Therefore 1rem = 10px.

Core Rule

Under 20pxpxuse
20px and aboveremuse
SizeUnitExampleValue
4pxpxgap4pxgap: 4px
8pxpxp8pxpadding: 8px
12pxpxbr12pxborder-radius: 12px
16pxpxmb16pxmargin-bottom: 16px
20pxremgap2remgap: 2rem (20px)
32pxremp3-2rempadding: 3.2rem (32px)
48pxremmt4-8remmargin-top: 4.8rem (48px)
100pxremw10remwidth: 10rem (100px)
<!-- Under 20px: use px -->
<div class="gap8px p12px br4px mb16px">Small values use px</div>

<!-- 20px and above: use rem -->
<div class="gap2rem p3-2rem mt4-8rem w10rem">Large values use rem</div>

<!-- Mixed usage (common) -->
<div class="p2rem gap8px br8px mb3-2rem">
  <p class="fs14px mb8px">Properly mixing px and rem</p>
</div>

Supported Units

Atomic CSS supports all standard CSS units. Units append directly after values.

UnitDescriptionExampleCSS
pxPixel (absolute unit)w100pxwidth: 100px
pPercent (% → p)w50pwidth: 50%
remroot em (1rem = 10px)fs1-5remfont-size: 1.5rem
emBased on parent font-sizep1empadding: 1em
vhviewport heighth100vhheight: 100vh
vwviewport widthw100vwwidth: 100vw
vminViewport minimumw50vminwidth: 50vmin
vmaxViewport maximumw50vmaxwidth: 50vmax
frFraction (Grid only)gtc1fr-2frgrid-template-columns: 1fr 2fr

rem Conversion Table

Based on html { font-size: 10px }, 1rem = 10px. Memorize this for quick class naming.

Class Notation

Decimals use hyphens (-). Ex: 0.4rem → 0-4rem, 1.6rem → 1-6rem

rempxClass NotationExample
0.4rem4px0-4remp0-4rem
0.8rem8px0-8remgap0-8rem
1.2rem12px1-2remmt1-2rem
1.6rem16px1-6remmb1-6rem
2rem20px2remgap2rem
2.4rem24px2-4remp2-4rem
3.2rem32px3-2remmt3-2rem
4rem40px4remw4rem
4.8rem48px4-8remmt4-8rem
6.4rem64px6-4remp6-4rem
8rem80px8remw8rem
10rem100px10remw10rem
12rem120px12remmaxw12rem

Spacing Value Rules

Spacing values use multiples of 4. A design principle for consistent rhythm.

Recommended spacing values (multiples of 4)

4px8px12px16px20px24px32px40px48px64px80px100px
ValueUnitgappaddingmargin-top
4pxpxgap4pxp4pxmt4px
8pxpxgap8pxp8pxmt8px
12pxpxgap12pxp12pxmt12px
16pxpxgap16pxp16pxmt16px
20pxremgap2remp2remmt2rem
24pxremgap2-4remp2-4remmt2-4rem
32pxremgap3-2remp3-2remmt3-2rem
40pxremgap4remp4remmt4rem
48pxremgap4-8remp4-8remmt4-8rem
64pxremgap6-4remp6-4remmt6-4rem
80pxremgap8remp8remmt8rem
100pxremgap10remp10remmt10rem

Decimal Notation

CSS decimals (.) are hyphens (-) in class names, since dots can't be used.

CSS ValueClass NotationExample ClassCSS Output
0.8rem0-8remgap0-8remgap: 0.8rem
1.5rem1-5remfs1-5remfont-size: 1.5rem
2.4rem2-4remp2-4rempadding: 2.4rem
3.2rem3-2remmt3-2remmargin-top: 3.2rem
4.8rem4-8remmb4-8remmargin-bottom: 4.8rem
<!-- Decimal point: use hyphen -->
<p class="fs1-5rem lh1-7 mb1-6rem">1.5rem, line-height 1.7, margin-bottom 1.6rem</p>

<!-- Same for gap, padding -->
<div class="df gap0-8rem p2-4rem">
  <span>Gap 0.8rem, Padding 2.4rem</span>
</div>

Unit Details

pxpixel

Absolute unit. For precise small values under 20px.

When to use?

- Border width: b1pxsolidDDDDDD, bw2px

- Small spacing: gap4px, gap8px, p12px

- Small border-radius: br4px, br8px

- Precise font-size: fs12px, fs14px

<!-- Borders, small gaps, border-radius -->
<div class="b1pxsolidDDDDDD br4px p8px gap4px">
  <span class="fs12px">Small text</span>
</div>

<!-- Small margins and gaps -->
<div class="df gap8px mb16px">
  <button class="py8px px16px br8px fs14px">Button 1</button>
  <button class="py8px px16px br8px fs14px">Button 2</button>
</div>

remroot em (1rem = 10px)

Proportional to root font-size. With html { font-size: 10px }, 1rem = 10px. For layout/spacing/sizing 20px+.

When to use?

- layout spacing:gap2rem(20px), gap3-2rem(32px)

- Large padding: p2rem(20px), p4rem(40px)

- Large font-size: fs2-4rem(24px), fs3-6rem(36px)

- width/height:w25rem(250px), maxw120rem(1200px)

<!-- Large layout gaps -->
<div class="dg gtcr3-1fr gap2rem p3-2rem">
  <div class="bg18181B p2rem br8px">Card 1</div>
  <div class="bg18181B p2rem br8px">Card 2</div>
  <div class="bg18181B p2rem br8px">Card 3</div>
</div>

<!-- Large typography -->
<h1 class="fs3-6rem fw800 mb2-4rem">Title (36px)</h1>
<p class="fs1-6rem lh1-7 mb2rem">Body text (16px)</p>

<!-- Center aligned container -->
<div class="mxa maxw120rem px2rem">
  Max 1200px, center aligned
</div>

ppercent (% → p)

CSS % is p in Atomic CSS. For relative sizes based on parent.

When to use?

- responsive width:w50p(50%), w100p(100%)

- height:h100p(100%)

- border-radius: br50p (circle)

- position: t50p, l50p

<!-- Responsive Width -->
<div class="w100p">Full width</div>
<div class="w50p">Half width</div>

<!-- Circular avatar -->
<img class="w6rem h6rem br50p ofc" src="avatar.jpg" alt="Avatar" />

<!-- Center aligned (position) -->
<div class="pa t50p l50p" >
  Absolute position center
</div>

vhvwviewport height / viewport width

Units based on viewport height/width. For full-screen layouts.

UnitDescriptionExampleCSS
vhviewport height %h100vhheight: 100vh
vwviewport width %w100vwwidth: 100vw
vminSmaller of vh, vww50vminwidth: 50vmin
vmaxLarger of vh, vww50vmaxwidth: 50vmax
<!-- Fullscreen hero -->
<div class="h100vh df jcc aic">
  <h1>Fullscreen hero section</h1>
</div>

<!-- Fullscreen layout (header-main-footer) -->
<div class="dg gtrauto-1fr-auto h100vh">
  <header>Header</header>
  <main>Content (takes up all remaining space)</main>
  <footer>Footer</footer>
</div>

<!-- Full width banner -->
<div class="w100vw bg18181B p2rem">
  Banner spanning full screen width
</div>

frfraction (Grid only)

fr is a Grid-only ratio unit. Distributes remaining space proportionally. Used with gtc/gtr.

ClassCSSDescription
gtc1frgrid-template-columns: 1fr1 column (full width)
gtc1fr-1frgrid-template-columns: 1fr 1fr2 equal columns
gtc1fr-2frgrid-template-columns: 1fr 2fr1:2 ratio
gtc1fr-2fr-1frgrid-template-columns: 1fr 2fr 1fr1:2:1 ratio (sidebar layout)
gtcr3-1frgrid-template-columns: repeat(3, 1fr)3 equal columns repeated
gtc25rem-1frgrid-template-columns: 25rem 1frFixed sidebar + flexible main
<!-- 3-column equal cards -->
<div class="dg gtcr3-1fr gap2rem">
  <div>Card 1</div>
  <div>Card 2</div>
  <div>Card 3</div>
</div>

<!-- 1:2 ratio sidebar + main -->
<div class="dg gtc1fr-2fr gap2rem">
  <aside>Sidebar (1fr)</aside>
  <main>Main Content (2fr)</main>
</div>

<!-- Fixed sidebar + flexible main -->
<div class="dg gtc25rem-1fr gap2rem">
  <aside>Sidebar (250px Fixed)</aside>
  <main>Main (all remaining)</main>
</div>

Tips & Notes

Use rem as default unit

Use rem for 20px+. 1rem = 10px makes calculation simple and layouts scalable.

px only for small precise values

For border thickness, small gap/padding, small border-radius under 20px. Large px values hinder maintenance.

Spacing in multiples of 4

4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100... Consistent values create design rhythm.

Memorize the rem conversion table

Common values: 2rem=20px, 2-4rem=24px, 3-2rem=32px, 4rem=40px, 4-8rem=48px. Memorize these 5.