Utilities

Flexbox & Grid

Create flexbox and grid layout utilities for building responsive layouts with full type safety.

Overview

Flexbox and grid utilities help you create flexible, responsive layouts. These utilities cover flex properties, grid templates, gap spacing, and alignment controls.

Why Use Flexbox & Grid Utilities?

Flexbox and grid utilities help you:

  • Build responsive layouts: Create flexible layouts that adapt to different screen sizes
  • Control alignment: Position items precisely within containers
  • Manage spacing: Use gap utilities for consistent spacing between items
  • Integrate with design tokens: Reference spacing values from your design system

Flex Utilities

useFlexUtility

The useFlexUtility() function creates utility classes for the flex shorthand property.

styleframe.config.ts
import { styleframe } from "styleframe";
import { useFlexUtility } from "@styleframe/theme";

const s = styleframe();

// Uses built-in defaults: 1, auto, initial, none
useFlexUtility(s);

export default s;

Default Flex Values

KeyValueDescription
11 1 0%Grow and shrink, ignore initial size
auto1 1 autoGrow and shrink based on content
initial0 1 autoDon't grow, but shrink if needed
nonenoneDon't grow or shrink

useFlexGrowUtility & useFlexShrinkUtility

Control individual flex grow and shrink properties.

import { useFlexGrowUtility, useFlexShrinkUtility } from "@styleframe/theme";

useFlexGrowUtility(s, { '0': '0', '1': '1' });
useFlexShrinkUtility(s, { '0': '0', '1': '1' });

useFlexBasisUtility

Set the initial size of flex items.

import { useFlexBasisUtility } from "@styleframe/theme";

useFlexBasisUtility(s, {
    '0': '0px',
    auto: 'auto',
    '1/2': '50%',
    '1/3': '33.333333%',
    '2/3': '66.666667%',
    full: '100%',
});

useFlexDirectionUtility

Control the direction of flex items.

styleframe.config.ts
import { styleframe } from "styleframe";
import { useFlexDirectionUtility } from "@styleframe/theme";

const s = styleframe();

useFlexDirectionUtility(s, {
    row: 'row',
    'row-reverse': 'row-reverse',
    col: 'column',
    'col-reverse': 'column-reverse',
});

export default s;

useFlexWrapUtility

Control how flex items wrap.

import { useFlexWrapUtility } from "@styleframe/theme";

useFlexWrapUtility(s, {
    wrap: 'wrap',
    'wrap-reverse': 'wrap-reverse',
    nowrap: 'nowrap',
});

Grid Utilities

useGridTemplateColumnsUtility

Define grid column templates.

styleframe.config.ts
import { styleframe } from "styleframe";
import { useGridTemplateColumnsUtility } from "@styleframe/theme";

const s = styleframe();

useGridTemplateColumnsUtility(s, {
    '1': 'repeat(1, minmax(0, 1fr))',
    '2': 'repeat(2, minmax(0, 1fr))',
    '3': 'repeat(3, minmax(0, 1fr))',
    '4': 'repeat(4, minmax(0, 1fr))',
    '6': 'repeat(6, minmax(0, 1fr))',
    '12': 'repeat(12, minmax(0, 1fr))',
    none: 'none',
    subgrid: 'subgrid',
});

export default s;

useGridColumnUtility

Control how elements span grid columns.

import { useGridColumnUtility, useGridColumnStartUtility, useGridColumnEndUtility } from "@styleframe/theme";

useGridColumnUtility(s, {
    auto: 'auto',
    'span-1': 'span 1 / span 1',
    'span-2': 'span 2 / span 2',
    'span-3': 'span 3 / span 3',
    'span-full': '1 / -1',
});

useGridColumnStartUtility(s, { '1': '1', '2': '2', '3': '3', auto: 'auto' });
useGridColumnEndUtility(s, { '1': '1', '2': '2', '3': '3', auto: 'auto' });

useGridAutoFlowUtility

Control how auto-placed items flow in the grid.

styleframe.config.ts
import { styleframe } from "styleframe";
import { useGridAutoFlowUtility } from "@styleframe/theme";

const s = styleframe();

// Uses built-in defaults
useGridAutoFlowUtility(s);

export default s;

Gap Utilities

useGapUtility

Set the gap between flex or grid items.

styleframe.config.ts
import { styleframe } from "styleframe";
import { useSpacing } from "@styleframe/theme";
import { useGapUtility, useGapXUtility, useGapYUtility } from "@styleframe/theme";

const s = styleframe();
const { ref } = s;

const { spacingSm, spacingMd, spacingLg } = useSpacing(s, {
    sm: '0.5rem',
    md: '1rem',
    lg: '1.5rem',
} as const);

useGapUtility(s, {
    '0': '0',
    sm: ref(spacingSm),
    md: ref(spacingMd),
    lg: ref(spacingLg),
});

useGapXUtility(s, {
    sm: ref(spacingSm),
    md: ref(spacingMd),
});

useGapYUtility(s, {
    sm: ref(spacingSm),
    md: ref(spacingMd),
});

export default s;

Alignment Utilities

useJustifyContentUtility

Align items along the main axis.

styleframe.config.ts
import { styleframe } from "styleframe";
import { useJustifyContentUtility } from "@styleframe/theme";

const s = styleframe();

// Uses built-in defaults
useJustifyContentUtility(s);

export default s;

Alignment Utilities Reference

UtilityCSS PropertyPurpose
useJustifyContentUtilityjustify-contentAlign items on main axis
useJustifyItemsUtilityjustify-itemsAlign grid items on inline axis
useJustifySelfUtilityjustify-selfAlign individual item on inline axis
useAlignContentUtilityalign-contentAlign rows on cross axis
useAlignItemsUtilityalign-itemsAlign items on cross axis
useAlignSelfUtilityalign-selfAlign individual item on cross axis
usePlaceContentUtilityplace-contentShorthand for align + justify content
usePlaceItemsUtilityplace-itemsShorthand for align + justify items
usePlaceSelfUtilityplace-selfShorthand for align + justify self

useOrderUtility

Control the order of flex and grid items.

import { useOrderUtility } from "@styleframe/theme";

useOrderUtility(s, {
    first: '-9999',
    last: '9999',
    none: '0',
    '1': '1',
    '2': '2',
});

Examples

Responsive Card Grid

styleframe.config.ts
import { styleframe } from "styleframe";
import { useDisplayUtility } from "@styleframe/theme";
import { useGridTemplateColumnsUtility, useGapUtility } from "@styleframe/theme";

const s = styleframe();

useDisplayUtility(s);
useGridTemplateColumnsUtility(s, {
    '1': 'repeat(1, minmax(0, 1fr))',
    '2': 'repeat(2, minmax(0, 1fr))',
    '3': 'repeat(3, minmax(0, 1fr))',
});
useGapUtility(s, { md: '1rem', lg: '1.5rem' });

export default s;

Usage in HTML:

<div class="_display:grid _grid-cols:1 _gap:md md:_grid-cols:2 lg:_grid-cols:3 lg:_gap:lg">
    <div>Card 1</div>
    <div>Card 2</div>
    <div>Card 3</div>
</div>

Centered Flex Container

styleframe.config.ts
import { styleframe } from "styleframe";
import { useDisplayUtility, useJustifyContentUtility, useAlignItemsUtility } from "@styleframe/theme";

const s = styleframe();

useDisplayUtility(s);
useJustifyContentUtility(s);
useAlignItemsUtility(s);

export default s;

Usage in HTML:

<div class="_display:flex _justify:center _align-items:center" style="height: 100vh;">
    <div>Centered content</div>
</div>

Best Practices

  • Use gap instead of margins: Gap utilities are cleaner and don't require negative margins
  • Leverage design tokens: Reference spacing values for consistent gaps
  • Use semantic column counts: Define columns by purpose (1, 2, 3) rather than arbitrary numbers
  • Combine flex and grid: Use flexbox for one-dimensional layouts, grid for two-dimensional
  • Test wrapping behavior: Ensure layouts work when items wrap to new lines
  • Consider RTL support: Alignment values like start and end work in both LTR and RTL

FAQ