npx skills add ...
npx skills add flornkm/skills --skill prefer-container-queries
Enforce Tailwind container queries over viewport breakpoints for responsive components. Use when writing or reviewing responsive Tailwind code, when a component needs to adapt to its available space (cards, sidebars, lists, panels, anything reused in different layouts), or when migrating sm:/md:/lg: classes to @container variants.
npx skills add flornkm/skills --skill prefer-container-queries
Components should respond to the space they are in, not to the viewport. A card that lives in a sidebar has maybe 300px of width even on a huge screen, and a viewport breakpoint like md:flex-row will get that wrong every time. Container queries fix this: the component asks "how wide am I?" instead of "how wide is the window?".
When writing responsive Tailwind, default to container queries. Viewport breakpoints are the exception, not the rule.
Mark the parent as a container, then use @-prefixed variants on its children:
@md: here means "when the container is at least 28rem wide", regardless of viewport size. This card works in a sidebar, a modal, and a full-width grid without changing a single class.
Two rules that trip people up:
@container class goes on the parent. The @md: variants go on descendants. An element cannot query its own size.@container. If styles are not applying, check which container you are actually querying.Tailwind v4 ships container queries in core. The sizes:
| Variant | Min width |
|---|---|
@3xs | 16rem (256px) |
@2xs | 18rem (288px) |
@xs | 20rem (320px) |
@sm | 24rem (384px) |
@md | 28rem (448px) |
@lg | 32rem (512px) |
@xl | 36rem (576px) |
@2xl | 42rem (672px) |
@3xl | 48rem (768px) |
@4xl | 56rem (896px) |
@5xl | 64rem (1024px) |
@6xl | 72rem (1152px) |
@7xl | 80rem (1280px) |
Also available:
@max-md: styles below a container size.@min-[475px]: arbitrary values when the scale does not fit.@container/sidebar plus @md/sidebar:flex-row to name a container and query it from deeper in the tree, past other containers.The full docs for this can be found here.
On Tailwind v3, the same syntax needs the @tailwindcss/container-queries plugin. Check the Tailwind version before writing classes.
Do not convert these:
Everything inside those layout regions, meaning cards, forms, media objects, stat blocks, table-to-list switches, should use container queries.
sm:, md:, lg:).@container to the component's root or the wrapper that owns the available space.md: to @md: blindly; md is 768px of viewport, @md is 448px of container. Resize the container, not the window, to find the real breakpoint.md:flex-row on a component that is rendered inside a sidebar or modal. It will stay stacked or break depending on the viewport, not its actual space.@md: variants used with no @container ancestor. They silently never apply.@container and a @md: variant on the same element. The element cannot query itself; move the variant to a child or the container class to the parent.