结论:divide-x 需配合 flex/grid 布局及相邻兄弟元素才生效,否则不渲染;失效主因是布局非弹性、DOM 节点干扰、多列布局或样式遮盖;配色/宽/样式需组合 divide-{size}、divide-{color}、divide-{style};响应式须全属性带断点前缀。

直接说结论:用 divide-x 加 divide-{color} 和 divide-{style} 就能实现垂直方向的分栏分割线,但必须满足容器是 flex 或 grid 布局,且子元素是相邻兄弟关系——否则它不会渲染任何线条。
为什么 divide-x 没反应?常见失效场景
这不是 bug,是设计约束。Tailwind 的 divide-x 本质是给「每个子元素的左侧」加 border(* + *:before 伪元素或相邻选择器逻辑),所以:
- 父容器没设
display: flex或display: grid→ 子元素不是相邻兄弟流,divide-x完全不生效 - 子元素之间有注释、文本节点或空格(比如换行缩进)→ 破坏相邻兄弟关系,中间那条线就断了
- 用了
columns-3这类多列布局 →divide-x对column-count无效,因为内容是流式分段,不是 DOM 兄弟节点 - 子元素设置了
margin-left或transform→ 可能视觉上遮盖 border,实际线还在,只是被挤偏了
divide-x 的颜色、宽度、样式怎么配?
它本身不控制线宽,线宽由子元素的 border-l-{n} 决定(divide-x 只触发 border 左侧),所以必须组合使用:
- 线宽:加
border-l-0清除默认边框,再用divide-x-2(等价于border-l-2)显式设宽;divide-x-4就是 4px 左边框 - 颜色:紧接写
divide-gray-300,注意不是border-l-gray-300——divide-{color}会自动作用于同个元素的 border-left - 样式:加
divide-dashed或divide-dotted,它和divide-solid(默认)一样,只影响 border-left 的border-style - 完整示例:
flex divide-x-2 divide-gray-200 divide-dashed→ 每个子项左侧出现 2px 灰色虚线
响应式下怎么让竖线只在桌面显示?
不能只写 md:divide-x,因为 divide-x 默认是 solid,而响应式前缀只覆盖「是否启用」,不覆盖样式。要真正控制断点行为,得把宽度、颜色、样式都带上前缀:
立即学习“前端免费学习笔记(深入)”;
- 错的写法:
divide-x md:divide-x-0→ 移动端仍有线(divide-x默认生效),只是桌面清除了 - 对的写法:
divide-x-0 sm:divide-x-2 sm:divide-gray-300→ 移动端无线,从 sm 起才有 2px 灰线 - 如果还想在 lg 上变虚线:
divide-x-0 sm:divide-x-2 sm:divide-gray-300 lg:divide-dashed - 注意:所有
divide-类必须在同一元素上声明,否则层叠顺序会导致意外覆盖
和 border-r 手动加线比,divide-x 有什么坑?
它省代码,但隐含两个容易忽略的细节:
- 第一项永远没左边框,最后一项永远没右边框 —— 因为它是「A + B」选择器,所以首尾项天然无分割线。若需要首尾也带线,得额外给父容器加
pl-2 pr-2或用border-x包裹 - 它不支持圆角分割线。比如想让每条竖线顶部圆角,
divide-x无法控制单个 border 的border-top-left-radius,只能退回到手动写border-r+:first-child/:last-child - Flex 下子项若用了
flex-grow或min-width,分割线位置可能被挤压变形,此时不如用grid+gap更可控


















