"Modern CSS with Grid, Flexbox, and custom properties. Trigger: When writing CSS styles, implementing layouts, or using modern features."
Install
npx skillscat add joabgonzalez/ai-agents-skills/css Install via the SkillsCat registry.
CSS Modern Skill
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
/* CORRECT */
:root {
--color-primary: #0066cc;
--spacing: 1rem;
}
.button {
background: var(--color-primary);
padding: var(--spacing);
}
/* WRONG: hardcoded values */
.button {
background: #0066cc;
padding: 1rem;
}✅ REQUIRED: Grid/Flexbox Over Floats
/* CORRECT */
.container {
display: flex;
gap: 1rem;
justify-content: space-between;
}
/* WRONG: floats */
.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
/* Fluid typography */
h1 { font-size: clamp(2rem, 5vw, 4rem); }
/* Container queries */
@container (min-width: 400px) {
.card { display: grid; grid-template-columns: 1fr 2fr; }
}
/* Modern aspect ratio (not padding hack) */
.video-container { aspect-ratio: 16 / 9; }✅ REQUIRED: Modern Selectors
:is(h1, h2, h3) { color: var(--color-heading); }
:where(ul, ol) { padding-left: 1rem; } /* zero specificity */
.card:has(img) { display: grid; } /* parent selection */✅ 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
!importantexcept in utility layers
Checklist
- Custom properties for all theme values
- Grid/Flexbox for layout (no floats)
-
prefers-reduced-motionrespected -
@layerfor cascade control - Logical properties used (
margin-inline,padding-block) - Modern selectors (
:is(),:where(),:has()) -
clamp()/min()/max()for fluid sizing -
aspect-ratiofor media containers - BEM or consistent naming convention
- Tested across target browsers