Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build responsive layouts with CSS Grid, Flexbox, and container queries. Use when creating responsive designs, fixing layout issues, or building mobile-first layouts.
.claude/skills/onewave-ai-responsive-layout-builder/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✓→✗ | ▼ Worse | -4% | 0% |
| case-23 | ✓→✓ | = Same ✓ | 126% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 198% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 75% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 133% | 0% |
When building responsive layouts:
css/* Tailwind defaults */ sm: 640px /* Small devices */ md: 768px /* Tablets */ lg: 1024px /* Laptops */ xl: 1280px /* Desktops */ 2xl: 1536px /* Large screens */ /* Custom CSS */ @media (min-width: 640px) { } @media (min-width: 768px) { } @media (min-width: 1024px) { }
tsx// Tailwind CSS <div className="min-h-screen flex flex-col"> <header className="h-16 bg-white border-b">Header</header> <div className="flex-1 flex"> <aside className="hidden md:block w-64 bg-gray-50 border-r"> Sidebar </aside> <main className="flex-1 p-6"> Main Content </main> </div> <footer className="h-16 bg-white border-t">Footer</footer> </div>
css/* Plain CSS */ .layout { display: grid; grid-template-rows: auto 1fr auto; grid-template-columns: 1fr; min-height: 100vh; } @media (min-width: 768px) { .layout { grid-template-columns: 250px 1fr; } .header, .footer { grid-column: 1 / -1; } }
tsx// Tailwind - Auto-fit cards <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6"> {items.map(item => ( <Card key={item.id} {...item} /> ))} </div> // Auto-fill with minimum width <div className="grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-6"> {items.map(item => ( <Card key={item.id} {...item} /> ))} </div>
css/* Plain CSS */ .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1.5rem; }
tsx// Fixed sidebar, scrollable content <div className="flex h-screen"> <aside className="w-64 flex-shrink-0 overflow-y-auto border-r bg-gray-50"> <nav className="p-4">Sidebar Nav</nav> </aside> <main className="flex-1 overflow-y-auto"> <div className="p-6">Main Content</div> </main> </div> // Collapsible sidebar <div className="flex h-screen"> <aside className={cn( "flex-shrink-0 overflow-y-auto border-r bg-gray-50 transition-all", isOpen ? "w-64" : "w-16" )}> <nav className="p-4">...</nav> </aside> <main className="flex-1 overflow-y-auto p-6">...</main> </div>
tsx<section className="relative min-h-[60vh] flex items-center justify-center px-4"> {/* Background */} <div className="absolute inset-0 bg-gradient-to-br from-blue-600 to-purple-700" /> {/* Content */} <div className="relative z-10 max-w-4xl mx-auto text-center text-white"> <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold"> Headline Here </h1> <p className="mt-6 text-lg md:text-xl opacity-90 max-w-2xl mx-auto"> Subheadline text goes here with more details. </p> <div className="mt-8 flex flex-col sm:flex-row gap-4 justify-center"> <button className="px-8 py-3 bg-white text-blue-600 rounded-lg font-semibold"> Primary CTA </button> <button className="px-8 py-3 border-2 border-white rounded-lg font-semibold"> Secondary CTA </button> </div> </div> </section>
tsx// CSS Columns approach <div className="columns-1 sm:columns-2 lg:columns-3 gap-6 space-y-6"> {items.map(item => ( <div key={item.id} className="break-inside-avoid"> <Card {...item} /> </div> ))} </div>
tsx<header className="sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b"> <nav className="max-w-7xl mx-auto px-4 h-16 flex items-center justify-between"> <Logo /> <NavLinks className="hidden md:flex" /> <MobileMenuButton className="md:hidden" /> </nav> </header>
css/* Define container */ .card-container { container-type: inline-size; } /* Query the container */ @container (min-width: 400px) { .card { display: flex; flex-direction: row; } }
tsx// Tailwind v3.2+ <div className="@container"> <div className="flex flex-col @md:flex-row"> <img className="w-full @md:w-48" /> <div className="p-4">Content</div> </div> </div>
| Use Flexbox | Use Grid | |-------------|----------| | Navigation bars | Page layouts | | Card content alignment | Card grids | | Centering content | Complex 2D layouts | | Space distribution | Overlapping elements | | Unknown item count | Defined structure |
tsx// Fluid typography with clamp <h1 className="text-[clamp(2rem,5vw,4rem)]"> Responsive Heading </h1> // Tailwind responsive <h1 className="text-2xl sm:text-3xl md:text-4xl lg:text-5xl"> Responsive Heading </h1>
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-23 | pass→pass | 11,667 | 15,002 | +29% | 1 | 1 | 0% | 2,259 | 5,095 | +126% | 0 | 0 | — |
case-01 | fail→fail | 9,876 | 9,944 | +1% | 1 | 1 | 0% | 1,925 | 3,787 | +97% | 0 | 0 | — |
case-02 | pass→fail | 35,290 | 20,009 | -43% | 1 | 1 | 0% | 6,486 | 6,247 | -4% | 0 | 0 | — |
case-03 | fail→fail | 4,912 | 7,139 | +45% | 1 | 1 | 0% | 853 | 3,118 | +266% | 0 | 0 | — |
case-04 | pass→pass | 4,194 | 3,213 | -23% | 1 | 1 | 0% | 815 | 2,432 | +198% | 0 | 0 | — |
case-05 | pass→pass | 11,562 | 9,742 | -16% | 1 | 1 | 0% | 2,126 | 3,719 | +75% | 0 | 0 | — |
case-06 | pass→pass | 8,064 | 7,902 | -2% | 1 | 1 | 0% | 1,436 | 3,347 | +133% | 0 | 0 | — |
case-07 | pass→pass | 13,456 | 14,775 | +10% | 1 | 1 | 0% | 2,976 | 5,106 | +72% | 0 | 0 | — |
case-08 | pass→pass | 21,846 | 25,107 | +15% | 1 | 1 | 0% | 4,541 | 7,437 | +64% | 0 | 0 | — |
case-09 | pass→pass | 10,185 | 8,297 | -19% | 1 | 1 | 0% | 1,826 | 3,313 | +81% | 0 | 0 | — |
case-10 | pass→pass | 14,282 | 11,655 | -18% | 1 | 1 | 0% | 2,968 | 4,058 | +37% | 0 | 0 | — |
case-11 | pass→pass | 10,192 | 10,730 | +5% | 1 | 1 | 0% | 1,981 | 4,029 | +103% | 0 | 0 | — |
case-12 | pass→pass | 24,249 | 15,692 | -35% | 1 | 1 | 0% | 5,513 | 5,028 | -9% | 0 | 0 | — |
case-13 | pass→pass | 7,927 | 9,704 | +22% | 1 | 1 | 0% | 1,568 | 3,774 | +141% | 0 | 0 | — |
case-14 | pass→pass | 2,309 | 3,798 | +64% | 1 | 1 | 0% | 432 | 2,502 | +479% | 0 | 0 | — |
case-15 | pass→pass | 2,150 | 1,682 | -22% | 1 | 1 | 0% | 377 | 2,090 | +454% | 0 | 0 | — |
case-16 | pass→pass | 15,876 | 9,994 | -37% | 1 | 1 | 0% | 2,629 | 3,532 | +34% | 0 | 0 | — |
case-17 | pass→pass | 10,951 | 10,410 | -5% | 1 | 1 | 0% | 2,007 | 3,778 | +88% | 0 | 0 | — |
case-18 | pass→pass | 8,160 | 5,964 | -27% | 1 | 1 | 0% | 1,356 | 2,778 | +105% | 0 | 0 | — |
case-19 | pass→pass | 11,135 | 11,572 | +4% | 1 | 1 | 0% | 1,818 | 3,768 | +107% | 0 | 0 | — |
case-20 | pass→pass | 17,906 | 16,369 | -9% | 1 | 1 | 0% | 2,967 | 4,735 | +60% | 0 | 0 | — |
case-21 | pass→pass | 4,573 | 3,711 | -19% | 1 | 1 | 0% | 885 | 2,523 | +185% | 0 | 0 | — |
case-22 | pass→pass | 14,439 | 12,642 | -12% | 1 | 1 | 0% | 2,879 | 4,396 | +53% | 0 | 0 | — |
case-24 | fail→fail | 7,228 | 6,317 | -13% | 1 | 1 | 0% | 1,379 | 2,941 | +113% | 0 | 0 | — |
case-25 | pass→pass | 8,734 | 8,574 | -2% | 1 | 1 | 0% | 1,693 | 3,469 | +105% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of -100 percentage points is the difference between those two pass rates over the 25 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Other measured skills in the registry, with their headline benchmark lift.