Foundations
Layout
Container widths, breakpoints, and composition patterns for responsive layouts.
Containers
Maximum widths for constraining content at different scales.
Prose width:
--container-prose uses 65ch (65 characters),
the optimal line length for reading comfort. This is typography-aware, scaling with font size.Breakpoints
Mobile-first breakpoints aligned with Tailwind's defaults.
@media (min-width: 640px)@media (min-width: 768px)@media (min-width: 1024px)@media (min-width: 1280px)@media (min-width: 1536px)Mobile-first: Start with mobile styles, then add complexity at larger breakpoints.
This ensures fast initial load on constrained devices.
Grid Patterns
Common layout patterns using CSS Grid and Flexbox with Canon spacing.
Responsive Card Grid
Card 1
Card 2
Card 3
Card 4
Card 5
Card 6
Stack Layout
Item 1
Item 2
Item 3
Flex Row
Left
Center (grows)
Right
Layout Composition
Combine container, grid, and spacing tokens for complete layouts.
layout-patterns.css
/* Centered container */
.container {
max-width: var(--container-xl);
margin-inline: auto;
padding-inline: var(--space-md);
}
/* Prose container for articles */
.article {
max-width: var(--container-prose);
margin-inline: auto;
}
/* Responsive grid */
.grid {
display: grid;
gap: var(--space-md);
grid-template-columns: 1fr;
}
@media (min-width: 640px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1024px) {
.grid {
grid-template-columns: repeat(3, 1fr);
}
}Grid Utilities
grid-utilities.css
/* CSS Grid with Canon spacing */
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--space-md);
}
/* Flexbox layout */
.flex-row {
display: flex;
gap: var(--space-sm);
align-items: center;
}
/* Stack layout */
.stack {
display: flex;
flex-direction: column;
gap: var(--space-md);
}Guidelines
Use max-width, not width
Containers should shrink on smaller screens. Always max-width.
Margin-inline for centering
Use margin-inline: auto to center containers horizontally.
Gap over margin
Use gap in Grid/Flexbox instead of margins between children.
Fluid grids
Prefer auto-fill/auto-fit with minmax() for natural responsiveness.