| name | css |
| description | Modern CSS with Grid, Flexbox, and custom properties. Trigger: When writing CSS styles, implementing layouts, or using modern features. |
| license | Apache 2.0 |
| metadata | {"version":"1.1","type":"domain","skills":["a11y"],"allowed-tools":["file-reader"]} |
CSS Modern
Maintainable CSS with Grid, Flexbox, custom properties, container queries, cascade layers.
When to Use
Use when:
- Writing CSS styles for layouts and components
- Implementing responsive designs with Grid/Flexbox
- Using custom properties, container queries,
@layer
- Creating animations and transitions
Don't use for Tailwind (tailwindcss skill) or MUI sx (mui skill).
Critical Patterns
✅ REQUIRED: Custom Properties for Theming
:root {
--color-primary: #0066cc;
--spacing: 1rem;
}
.button {
background: var(--color-primary);
padding: var(--spacing);
}
.button {
background: #0066cc;
padding: 1rem;
}
✅ REQUIRED: Grid/Flexbox Over Floats
.container {
display: flex;
gap: 1rem;
justify-content: space-between;
}
.container {
float: left;
clear: both;
}
✅ REQUIRED: Respect prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
✅ REQUIRED: Modern Responsive Patterns
h1 { font-size: clamp(2rem, 5vw, 4rem); }
@container (min-width: 400px) {
.card { display: grid; grid-template-columns: 1fr 2fr; }
}
.video-container { aspect-ratio: 16 / 9; }
✅ REQUIRED: Modern Selectors
:is(h1, h2, h3) { color: var(--color-heading); }
:where(ul, ol) { padding-left: 1rem; }
.card:has(img) { display: grid; }
✅ REQUIRED: Cascade Layers
@layer reset, base, components, utilities;
@layer reset {
* { margin: 0; padding: 0; box-sizing: border-box; }
}
@layer base {
body { font-family: system-ui, sans-serif; }
}
@layer components {
.button { padding: 0.5rem 1rem; }
}
@layer utilities {
.text-center { text-align: center; }
}
Decision Tree
One-dimensional layout?
→ Flexbox
Two-dimensional layout?
→ Grid
Responsive sizing?
→ clamp(), min(), max()
Theme values?
→ :root custom properties + var()
Center element?
→ Flexbox place-content: center or Grid place-items: center
Hide element?
→ display: none (removes), visibility: hidden (keeps space), opacity: 0 (transitions)
Responsive breakpoints?
→ Container queries (component), media queries (viewport)
Example
:root {
--color-primary: #0066cc;
--spacing-unit: 0.5rem;
}
.card {
display: flex;
flex-direction: column;
gap: calc(var(--spacing-unit) * 2);
padding: var(--spacing-unit);
border-radius: 0.5rem;
background-color: var(--color-primary);
}
@media (prefers-reduced-motion: reduce) {
* { animation-duration: 0.01ms !important; }
}
Edge Cases
- Handle print stylesheets with
@media print
- Support dark mode via
prefers-color-scheme
- Test with different font sizes and zoom levels
- Verify with color blindness simulators
- Avoid
!important except in utility layers
Checklist
Resources