必须在 tailwind.config.js 中启用 experimental: { containerQueries: true } 并配置 theme.containerScreens,否则 @container 语法无效且无报错;容器元素还需显式设置 container-type: size。

直接启用 @container 查询前,必须确认 Tailwind 已开启实验性 containerQueries 支持——否则所有 @container 语法会被忽略,且不报错,调试时极易误判为 CSS 写法或 HTML 结构问题。
tailwind.config.js 必须显式启用 containerQueries
默认配置下 @container 完全不可用。即使你写了 class="@lg/main:w-1/3",也不会生成任何对应 CSS 规则。
- 在
tailwind.config.js中添加experimental: { containerQueries: true },不是可选,是硬性前提 - 该选项在 Tailwind v3.2+ 后稳定可用,但未进入默认开启列表,不能依赖“新版自动支持”
- 若使用 JIT 模式(默认),需确保
content配置已覆盖含@container的模板文件路径,否则类不会被扫描生成 - 重启开发服务器(如 Vite 或 Webpack)才能生效;热更新通常不触发容器查询相关 CSS 重建
@container 类名必须配合 container-type 属性才生效
@container 不是媒体查询替代品,它依赖元素自身是否被声明为容器。写 class="@md:w-1/2" 却没设 container-type,等于没写。
- 容器元素需显式声明
container-type: size(或inline-size),推荐用class="container-type-[size]"(注意方括号语法) - 不要写
container这个 class——Tailwind 默认不提供它,那是旧版或自定义的命名,容易和container布局类混淆 - 一个元素只能有一个
container-type;size用于基于宽高响应,inline-size仅基于行内方向(更常用) - 嵌套容器需注意层级:子容器的查询只作用于其直接父容器,不继承外层容器尺寸
响应式断点前缀在 @container 中含义不同
md:w-1/2 是屏幕宽度 ≥768px 时生效;但 @md:w-1/2 是“当该元素所在容器宽度 ≥768px 时生效”——两者触发条件完全独立,混用会逻辑错乱。
-
@前缀后的断点(如@md)由theme.containerScreens控制,**不是**复用theme.screens - 默认无
containerScreens配置,必须手动定义,例如:theme: { containerScreens: { sm: '300px', md: '640px', lg: '960px' } } - 如果不配,
@md会 fallback 到空值,导致整个规则失效,且控制台无提示 - 建议与
screens分开管理:屏幕断点管布局全局,容器断点管组件内部,避免语义污染
与传统媒体查询共存时的优先级和调试技巧
容器查询和媒体查询可同时存在,但它们作用域、触发时机、调试方式完全不同,强行合并易引发样式覆盖难定位。
- 浏览器 DevTools 中,
@container规则显示在“Styles”面板里,但不会出现在“Computed”中尺寸变化的监听列表里——要手动 hover 容器元素,看右上角是否出现尺寸提示小标 - Chrome 117+ 支持
container面板(Elements → 右键容器元素 → “Show container query info”),能实时查看当前匹配的断点 - 不要用
@container替代所有md:——适合组件封装(如卡片、图表、表单组),不适合页面级栅格或导航栏这类强依赖视口的结构 - 服务端渲染(SSR)项目中,
@container在首次 hydration 前不生效,需结合useContainerQuery等 React/Vue Hook 做降级处理
最常被跳过的一步是漏配 containerScreens,它不像 screens 那样有默认值;其次是把 container-type 当成 class 直接写进 HTML 而不加 [size],导致属性根本没被解析。这两处不修正,其他所有 @ 写法都只是静态字符串。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











