Zazz Design Framework
baseUtilities

Utilities

Atomic utility classes in @layer zazz.utilities, zero-specificity architecture, and composition variables.

Utilities in Zazz are atomic classes declared in @layer zazz.utilities. They override component styles by layer position and are wrapped in :where() for zero specificity.

Loading components…

Rules

  1. Layer precedence: Layer order is variables, reset, legacy, zazz.components, zazz.utilities, migrations. Utilities override component styles without !important.
  2. Zero specificity: Each rule uses :where(.utility) { ... } with (0,0,0) specificity so custom selectors can override them easily.

Utility families

GroupCoverage
Layoutdisplay, position, overflow, z-index, aspect-ratio, object-fit, order, container bands
Flexbox, Grid, Gap & basiscontainers, alignment, spans, subgrid, gaps, basis fractions
Spacing, Sizingpadding, margin, negative margins, width, height, size, min/max constraints
Text color, Text & fontrole colors, text alignment, transform, wrap, clamp, font families
Backgrounds, Borderssurface colors, overlays, borders, border-radius
Effects, Color opacityshadows, opacity, scale, transitions, channel-specific alpha
Interactivity, Hover statescursor, focus ring, screen readers, hover: variant prefixes
Responsive design@xs:, @sm:, @md:, @lg:, @xl: container query prefixes

Internal composition and coordination variables

Non-inheriting composition variables

Padding, margin, radius, and color-alpha utilities use @property-registered variables with inherits: false. Setting an edge or channel on an element does not leak into child elements:

/* Shared composing rule */
:where(.p-0, .p-xs, .p-sm, .p-md, .p-lg, .p-xl, [class*="px-"], [class*="pl-"], [class*="pr-"]) {
  padding-inline: var(--_padding-inline-start) var(--_padding-inline-end);
}

/* Side utility sets only its target variable */
:where(.pl-0) {
  --_padding-inline-start: 0;
}
VariableSyntaxInitialManaged by
--_padding-{inline,block}-{start,end}<length-percentage>0p-*, px-*, py-*, pt-*, pr-*, pb-*, pl-*
--_margin-{inline,block}-{start,end}<length-percentage> | auto0m-*, mx-*, my-*, mt-*, -m-*, mx-auto
--_radius-{top-left,top-right,bottom-right,bottom-left}<length-percentage>0rounded-*, rounded-t-*, rounded-tl-*
--_text-alpha, --_background-alpha, --_border-alpha<number>1text-opacity-*, bg-opacity-*, border-opacity-*

Inheriting coordination variables

Unregistered variables that pass layout settings from container to children:

VariableDefaultSet byConsumed by
--_gap0pxgap-*basis-1/2 to basis-1/6, auto-fill grid
--_gap-x, --_gap-yNonegap-x-*, gap-y-*column-gap, row-gap
--_grid-cols, --_grid-rows1grid-cols-N, grid-rows-Ncol-span-*, row-span-*, auto-fill grid
--_grid-col-minmin(100%, 25ch).gridgrid-flow-row auto-fill floor

Responsive and state prefixes

Layout utilities support @xs: to @xl: container query prefixes. Color, opacity, and scale utilities support hover: prefixes.

<div class="flex flex-col @md:flex-row gap-md">
  <aside class="@md:basis-1/3">Sidebar</aside>
  <main class="flex-1 hover:bg-muted transition">Content</main>
</div>

On this page