能,但需满足三个硬性条件:jit模式开启(v3.0+默认)、mt-前缀已注册(默认支持)、值内部无空格或未转义字符;单位必须显式写出,且不能动态拼接。

arbitrary values 能不能直接写 mt-[3.75rem] 这种值?
能,但必须满足三个硬性条件:JIT 模式开启(v3.0+ 默认开)、mt- 前缀已注册(默认支持)、值内部无非法空格或未转义字符。比如 mt-[3.75rem] 合法,mt-[3.75 rem](含空格)或 mt-[3.75r em](单位拆开)会静默失效。Tailwind 不报错,但生成的 CSS 里根本找不到这条规则。
为什么写了 mb-[1.875rem] 却没生效?
常见原因不是语法错,而是构建时被 PurgeCSS 清掉了——它只保留源码中「字面量出现」的类名。mb-[1.875rem] 必须作为完整字符串出现在 HTML、JSX 或 CSS 文件里,不能靠运行时拼接:className={`mb-[${size}rem]`} 无效;className="mb-[1.875rem]" 才有效。
- 若需复用,优先在
tailwind.config.js的theme.spacing下注册命名值,比如'sm-3': '1.875rem',然后用mb-sm-3 - 临时调试时,可加到
safelist数组里:safelist: ['mb-[1.875rem]'] - 注意单位必须显式写出:
mb-[1.875]不合法,mb-[1.875rem]或mb-[30px]才行
gap-[1.25rem] 和 space-y-[1.25rem] 哪个更合适?
看容器布局方式:gap- 只对 flex 或 grid 容器生效,space-y- 只对普通文档流中的块级兄弟元素生效。二者不兼容,也不能混用。
- 父容器是
flex flex-col→ 用gap-[1.25rem](推荐,语义清晰,且 gap 优先级高于 margin) - 父容器是普通
div,子元素是div块级标签 → 用space-y-[1.25rem] - 如果用了
space-y-[1.25rem]却没反应,先检查子元素是否被设为inline、float或position: absolute——这些都会让 space-y 失效
多个任意值叠加时,特异性冲突怎么破?
比如同时写 mt-4 mt-[3.75rem],后者未必覆盖前者,因为两个都是单类选择器,实际生效取决于 CSS 规则在最终样式表里的定义顺序,不可控。
- 最稳妥的解法是用任意变体:
[&]:mt-[3.75rem],它会生成高特异性选择器,确保覆盖 - 避免用
!mt-[3.75rem]:虽能强制生效,但破坏原子类逻辑,且在部分 JIT 配置下可能被忽略 - 如果该值会高频使用,别硬扛 arbitrary —— 直接进
theme.spacing注册,一劳永逸
真正容易被忽略的是:arbitrary values 不是“补丁”,它是 JIT 编译期静态生成的规则。你写的每个 [...] 都得在构建时被扫描到,否则就是空气。动态拼接、条件渲染里的字符串模板、甚至带注释的写法(如 /<em> mt-[3.75rem] </em>/)都会让它消失。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











