Skip to content

Tailwind CSS - 分割线宽度

Tailwind CSS 中的 分隔线宽度 工具类提供了一种强大的方式,可以在子元素之间添加边框,而无需在标记中增加额外的元素。这非常适合样式化列表、按钮组或任何需要视觉分隔符的项目序列。

分隔线工具类的工作原理是,针对父容器内的所有直接子元素(第一个除外),并为其应用边框。例如,divide-y 会为除第一个子元素外的所有子元素添加 border-top,从而创建水平线。divide-x 会为除第一个子元素外的所有子元素添加 border-left,从而创建垂直线。这种方法简洁、高效,并利用了现代 CSS 特性。

虽然你可以使用 Tailwind Play CDN 进行快速演示,但实际项目会受益于构建流程。这能释放 Tailwind 的全部功能,包括自定义、插件和性能优化。以下是使用 Vite 的典型设置:

# 1. 使用 Vite 创建新项目
npm create vite@latest my-tailwind-project -- --template vanilla
cd my-tailwind-project
# 2. 安装 Tailwind CSS 依赖
npm install -D tailwindcss postcss autoprefixer
# 3. 初始化 Tailwind CSS
npx tailwindcss init -p
# 4. 在 tailwind.config.js 中配置模板路径
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}

最后,将 Tailwind 指令添加到你的主 CSS 文件中(例如,src/style.css):

@tailwind base;
@tailwind components;
@tailwind utilities;

以下是控制分隔线宽度的主要类。你还可以将它们与 divide-color 和 divide-style 工具类(例如 divide-slate-200、divide-dashed)结合使用。

| 类名 | CSS 属性 (简化版) | | divide-x-{amount} | > :not([hidden]) ~ :not([hidden]) { border-left-width: {amount}; } | | divide-y-{amount} | > :not([hidden]) ~ :not([hidden]) { border-top-width: {amount}; } | | divide-x | 在水平项目之间设置 1px 的左边框。 | | divide-y | 在垂直项目之间设置 1px 的上边框。 | | divide-x-0 / divide-y-0 | 移除所有分隔线。 | | divide-x-reverse | 反转顺序,将边框应用于右侧。 | | divide-y-reverse | 反转顺序,将边框应用于底部。 |

让我们在一个现代项目结构中看看这些工具类的实际应用。

此示例创建了一个简单的设置菜单,其中项目由一条细微的水平线分隔。我们还使分隔线具有响应性,使其仅在大屏幕上显示。

<div class="max-w-sm mx-auto my-8">
<h3 class="text-lg font-semibold text-slate-800 mb-2">Settings</h3>
<div class="flex flex-col bg-white rounded-lg shadow-md divide-y divide-slate-200">
<a href="#" class="p-4 hover:bg-slate-50 transition-colors">Profile</a>
<a href="#" class="p-4 hover:bg-slate-50 transition-colors">Notifications</a>
<a href="#" class="p-4 hover:bg-slate-50 transition-colors">Security</a>
<a href="#" class="p-4 text-red-600 hover:bg-red-50 transition-colors">Log Out</a>
</div>
</div>

在这里,我们使用 divide-x 来分隔按钮组中的按钮。在从右到左(RTL)布局中,使用 divide-x-reverse 会很有用。

<div class="flex my-8 justify-center">
<!-- 标准顺序 -->
<div class="flex rounded-md shadow-sm ring-1 ring-slate-300 divide-x divide-slate-300">
<button class="px-4 py-2 rounded-l-md bg-white hover:bg-slate-100">Edit</button>
<button class="px-4 py-2 bg-white hover:bg-slate-100">Share</button>
<button class="px-4 py-2 rounded-r-md bg-white hover:bg-slate-100">Delete</button>
</div>
</div>
<div class="flex my-8 justify-center">
<!-- 反转顺序 (适用于 RTL 或特定样式) -->
<div dir="rtl" class="flex rounded-md shadow-sm ring-1 ring-slate-300 divide-x divide-x-reverse divide-slate-300">
<button class="px-4 py-2 rounded-r-md bg-white hover:bg-slate-100">تعديل (Edit)</button>
<button class="px-4 py-2 bg-white hover:bg-slate-100">مشاركة (Share)</button>
<button class="px-4 py-2 rounded-l-md bg-white hover:bg-slate-100">حذف (Delete)</button>
</div>
</div>
  • **分隔线未显示?**请确保父元素具有 flex 或 grid 布局。分隔线仅对直接子元素有效,嵌套元素不会受影响。
  • **样式化第一个/最后一个项目:**由于分隔线是使用 ~(后续兄弟)选择器应用的,因此第一个项目永远不会被选中。如果你需要在第一个项目上添加边框,请直接使用 border-* 工具类。
  • **响应式分隔线:**要仅在特定断点处应用分隔线,请使用 md:divide-y 等响应式前缀。要在小屏幕上移除它们,你可能需要指定 divide-y-0 md:divide-y。

divide 工具类创建的是纯粹的视觉分隔符。它们不会被屏幕阅读器播报。如果元素之间的分隔在语义上很重要,请考虑使用 <hr> 元素作为水平分隔线,或使用 ARIA 角色来定义列表中元素之间的关系。