
Responsive Patterns
Ship component layouts that respond to their parent container—not only the viewport—using modern CSS container queries and Tailwind v4 `@container` utilities.
Install
npx skills add https://github.com/yonatangross/orchestkit --skill responsive-patternsWhat is this skill?
- Reference for container-type, container-name, and shorthand `container` declarations
- min/max width and named `@container` query patterns with logical inline/block sizes
- Container query length units: cqi, cqb, cqmin, cqmax (with legacy cqw/cqh called out)
- Tailwind CSS v4 built-in `@container`, breakpoint-style `@md:`/`@lg:`, and named `@container/card` examples
Adoption & trust: 683 installs on skills.sh; 183 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
Responsive layout decisions belong in the build phase when solo builders implement UI that must work in sidebars, cards, and nested panels. Container-query syntax, units (cqi/cqb), and Tailwind integration are frontend CSS concerns referenced while coding components.
Common Questions / FAQ
Is Responsive Patterns safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Responsive Patterns
# Container Queries Reference ## Container Types ```css /* Size queries (width/height) */ container-type: inline-size; /* Query inline dimension */ container-type: size; /* Query both dimensions */ container-type: normal; /* No containment (default) */ /* Named container */ container-name: card; /* Shorthand */ container: card / inline-size; ``` ## Query Syntax ```css /* Width queries */ @container (min-width: 400px) { } @container (max-width: 399px) { } @container (width > 400px) { } @container (400px <= width <= 800px) { } /* Named container queries */ @container card (min-width: 400px) { } /* Logical properties */ @container (min-inline-size: 400px) { } @container (min-block-size: 300px) { } ``` ## Container Query Units ```css /* Inline dimension (usually width) */ cqi /* 1% of container inline size */ /* Block dimension (usually height) */ cqb /* 1% of container block size */ /* Min/max of cqi and cqb */ cqmin cqmax /* Legacy (avoid - not logical) */ cqw /* Container width */ cqh /* Container height */ ``` ## Tailwind CSS v4 Integration Container queries are built into Tailwind CSS v4 - no plugin required. ```html <!-- Enable container with @container --> <div class="@container"> <div class="flex flex-col @md:flex-row @lg:gap-8"> <!-- Responsive to container, not viewport --> </div> </div> <!-- Named containers --> <div class="@container/card"> <div class="@lg/card:grid-cols-2"> <!-- Queries the 'card' container --> </div> </div> ``` ```css /* app.css - Tailwind v4 CSS-first approach */ @import "tailwindcss"; @theme { /* Custom container breakpoints (optional) */ --container-3xs: 16rem; --container-2xs: 18rem; --container-xs: 20rem; /* Default breakpoints: @sm (20rem), @md (28rem), @lg (32rem), etc. */ } ``` ## Best Practices ```css /* ✅ Use logical units */ .card-title { font-size: clamp(1rem, 5cqi, 2rem); padding: 2cqi; } /* ✅ Nest containers carefully */ .outer { container: outer / inline-size; } .inner { container: inner / inline-size; } @container inner (min-width: 200px) { } /* ❌ Don't query non-container */ .no-container { /* No container-type set */ } @container (min-width: 400px) { /* This won't work! */ } ``` ## Feature Detection ```css @supports (container-type: inline-size) { .card-container { container-type: inline-size; } } ``` # Fluid Typography Reference ## The clamp() Formula ```css /* Syntax: clamp(min, preferred, max) */ font-size: clamp(1rem, 0.5rem + 2vw, 2rem); /* Breakdown: min: 1rem (16px at default) preferred: 0.5rem + 2vw (scales with viewport) max: 2rem (32px at default) */ ``` ## Accessible Fluid Scale ```css :root { /* Always include rem to respect user preferences */ --text-xs: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem); --text-sm: clamp(0.875rem, 0.8rem + 0.375vw, 1rem); --text-base: clamp(1rem, 0.9rem + 0.5vw, 1.125rem); --text-lg: clamp(1.125rem, 1rem + 0.625vw, 1.25rem); --text-xl: clamp(1.25rem, 1rem + 1.25vw, 1.75rem); --text-2xl: clamp(1.5rem, 1rem + 2.5vw, 2.5rem); --text-3xl: clamp(1.875rem, 1rem + 4.375vw, 3.5rem); --text-4xl: clamp(2.25rem, 1rem + 6.25vw, 4.5rem); } h1 { font-size: var(--text-4xl); } h2 { font-size: var(--text-3xl); } h3 { font-size: var(--text-2xl); } h4 { font-size: var(--text-xl); } p { font-size: var(--text-base); } small { font-size: var(--text-sm); } ``` ## Container-Based Fluid Type ```css /* For component-scoped scaling */ .card { container-type: inline-size; } .card-title { /* Scales with card width, not viewport */ font-size: clamp(1rem, 0.5rem + 5cqi, 1.75rem); } .card-body { font-size: clamp(0.875rem, 0.5rem + 3cqi, 1rem); } ``` ## Calculating Fluid Values ``` Target: 16px at 320px viewport → 24px at 1200px viewport Formula: preferred = min + (max - min) × (viewport - min-viewport) / (max-viewport - min-viewport) Step 1: Convert to vw (24 - 16) / (1200 - 320) = 8 / 880 = 0.909% per px 0.909 × 100 = 0.909vw Step