Skip to content

Layout

Live demo: demo/foundations/layout.html.

Composable building blocks that replace hand-rolled flex/grid. Prefixed .l-* so they never collide with consumer markup. Universal — defined in kits/base.css, imported by every kit. Gap is token-driven via --gap (default per primitive); set it inline (style="--gap:var(--space-2)") or with a .gap-1…7 helper.

Class Does Knobs
.l-container Max-width + centered + inline padding --container (def 72rem), --gutter (def --space-5)
.l-stack Vertical flow with gap --gap (def --space-4)
.l-row Horizontal, wraps, align-items:center --gap (def --space-3) + .between/.center/.end/.start/.baseline
.l-grid Responsive auto-fit grid --gap (def --space-4), --col (min col, def 16rem)
.l-spacer Flexible space (flex:1) — push items apart in .l-row —

.l-grid uses repeat(auto-fit, minmax(min(var(--col),100%), 1fr)) — intrinsically responsive with no media queries, and min(…,100%) means it never overflows a narrow viewport.

<!-- toolbar: items left, action pushed right -->
<div class="l-row gap-3">
<span>Logo</span><span>Nav</span>
<span class="l-spacer"></span>
<button class="btn btn-primary">Action</button>
</div>
<!-- responsive card grid, wider min column -->
<div class="l-grid" style="--col:18rem">
<div class="card">…</div><div class="card">…</div><div class="card">…</div>
</div>

Gaps map to the spacing scale (.gap-1→--space-1 … .gap-7→--space-7); keep gaps on the scale rather than hardcoding px.