--- name: shadcn-layouts description: "Generate correct shadcn/Tailwind layouts by applying CSS mental models. This skill should be used when the user asks to 'create a shadcn layout', 'fix layout issues', 'debug CSS height problems', 'make scrolling work', or has issues with Tailwind flex/grid. Keywords: shadcn, Tailwind, layout, CSS, flex, grid, height, scroll, overflow." license: MIT compatibility: Works with shadcn/ui, Tailwind CSS v3/v4, React, Next.js. metadata: author: jwynia version: "1.0" type: utility mode: generative domain: development --- # shadcn/Tailwind Layouts Help generate shadcn/Tailwind components that render correctly the first time. Most agent-generated UI fails due to missing mental models about how CSS layout works—not syntax errors, but assumption gaps. ## When to Use This Skill Use this skill when: - Creating shadcn/Tailwind layouts - Debugging height/scroll issues - Fixing flex/grid problems - Setting up full-page app shells Do NOT use this skill when: - Writing backend code - Working on non-Tailwind CSS projects - Designing (use frontend-design first) ## Core Principle **CSS layout flows from constraints. Height flows down from explicit ancestors. Width flows up from content. Agents fail because they apply classes without understanding the constraint chain.** ## Critical Mental Models ### Model 1: Height Inheritance Chain `h-full` means `height: 100%`. 100% of what? **100% of the parent's computed height.** ``` BROKEN (chain incomplete):
WORKING (chain complete):
``` **Rule:** Trace from element up to ``. Every ancestor needs explicit height, OR use viewport units (`h-screen`) to break the chain. ### Model 2: Flex Overflow Gotcha Flex children have implicit `min-height: auto`, preventing shrinking below content size. ```tsx // BROKEN (won't scroll)
{/* Can't shrink! */} // WORKING (scrolls correctly)
{/* Can shrink */} ``` **Rule:** Flex children that scroll need `min-h-0`. Children that shouldn't shrink need `shrink-0`. ### Model 3: Grid Parent/Child Separation Grid is defined on the **parent**. Children just occupy cells. ```tsx // BROKEN
{/* Missing 'grid'! */} // WORKING
{/* 'grid' enables grid-cols-* */} ``` **Rule:** `flex` or `grid` must be declared on parent before direction/template classes work. ### Model 4: Scroll Container Dimensions Scroll containers need **explicit dimensions** to know when to scroll. ```tsx // BROKEN (never scrolls) {/* No height constraint */} // WORKING (flex-constrained)
``` ## Diagnostic States ### SL1: Height Chain Broken **Symptoms:** Elements collapse, `h-full` not working **Fix:** Trace to html, add heights or use `h-screen` ### SL2: Flex Overflow Blocked **Symptoms:** Scroll doesn't work, content overflows **Fix:** Add `min-h-0` to flex children that scroll ### SL3: Grid Structure Wrong **Symptoms:** Items stack vertically instead of columns **Fix:** Ensure `grid grid-cols-*` on parent ### SL4: Styles Not Applying **Symptoms:** Unstyled components, colors wrong **Fix:** Check Tailwind content paths, CSS variables in globals.css ### SL5: Component Dependencies Missing **Symptoms:** "Module not found", functionality broken **Fix:** `npx shadcn add [component]`, install peer deps ## Common Layout Patterns ### Full-Page App Shell ```tsx // layout.tsx {children} // page.tsx
{children}
``` ### Dashboard with Header ```tsx
...
{children}
``` ### Card Grid ```tsx
{items.map(item => ( {item.title} {item.content} ))}
``` ## Anti-Patterns ### The Height Assumption Using `h-full` without verifying ancestor chain. **Fix:** Trace to html. Use `h-screen` to break chain. ### The Overflow Ignorance Adding `overflow-y-auto` without `min-h-0` on flex children. **Fix:** Flex children need `min-h-0` to shrink. ### The Import Guess Guessing import paths like `shadcn/ui`. **Fix:** Check `components.json` for alias. Usually `@/components/ui/*`. ### The Flat Compound Flattening compound components (Dialog without DialogTrigger/DialogContent). **Fix:** Maintain required nesting structure. ## Pre-Generation Checklist - [ ] Import alias known (`@/components/ui/*`) - [ ] html has `h-full` - [ ] body has `h-full` or `min-h-full` - [ ] Scroll containers have explicit height - [ ] Flex scroll children have `min-h-0` - [ ] Fixed elements have `shrink-0` ## Related Skills - **frontend-design** - Design decisions before implementation - **react-pwa** - PWA features for React apps