Skip to content

Tailwind CSS - 轮廓偏移

Tailwind CSS 中的 outline-offset 工具类用于控制元素轮廓与其边框之间的空间。这对于创建具有视觉吸引力且无障碍的焦点指示器特别有用,它们不会与元素内容重叠。

虽然你可以使用 Tailwind Play CDN 进行快速演示,但现代 Web 开发依赖于构建时(build-time)流程。这涉及到将 Tailwind CSS 作为 Node.js 依赖项安装,并使用 Vite、Next.js 或 PostCSS CLI 等工具将其集成到你的项目中。这种方法可以释放 Tailwind 的全部潜力,包括:

  • 定制: 在 tailwind.config.js 中修改主题、添加新工具类或更改默认值。
  • 性能: 清理未使用的 CSS,以创建最小化的生产构建文件。
  • 插件: 使用官方和第三方插件扩展 Tailwind,以实现容器查询(container queries)或宽高比(aspect ratio)等功能。
  • 指令: 在你的 CSS 中使用 @apply 等指令来实现自定义抽象(custom abstractions)。

本教程中的所有示例都假定 Tailwind 已正确配置为现代设置。代码片段将只显示相关的 HTML 标记。

以下是 Tailwind CSS 提供的默认轮廓偏移工具类列表。

类名CSS 属性
outline-offset-0outline-offset: 0px;
outline-offset-1outline-offset: 1px;
outline-offset-2outline-offset: 2px;
outline-offset-4outline-offset: 4px;
outline-offset-8outline-offset: 8px;

outline 和 outline-offset 最主要、最重要的用途是为按钮、链接和表单输入框等交互元素创建清晰、可见的焦点环。这对于使用键盘浏览网站的用户至关重要。

为此,请使用 focus-visible 变体。这是一个现代的伪类(pseudo-class),它只在用户使用键盘(例如,使用 Tab 键)导航时应用焦点样式,从而防止在鼠标点击时出现不美观的环。

示例:带有自定义焦点环的无障碍按钮

Section titled “示例:带有自定义焦点环的无障碍按钮”

此示例演示如何创建一个具有清晰悬停效果和独特、无障碍焦点环的按钮,该焦点环在键盘导航时出现。outline-offset-2 类提供了间距,因此焦点环不会挤压按钮。

<!-- 假设已进行现代 Tailwind CSS 设置 -->
<div class="flex items-center justify-center p-8 bg-gray-100 dark:bg-slate-900">
<button class="px-6 py-3 font-semibold text-white bg-blue-600 rounded-lg
hover:bg-blue-700 transition-colors duration-300
focus:outline-none focus-visible:outline-4 focus-visible:outline-offset-2
focus-visible:outline-blue-400 dark:focus-visible:outline-blue-500">
Click or Tab to Me
</button>
</div>

轮廓(outline)非常适合表单输入框,因为它们不像边框(border)那样会影响元素的大小或布局。在这里,我们在焦点时使用 outline-offset-0 将轮廓直接绘制在边框上,有效地改变其颜色和宽度,而不会导致布局偏移。

<div class="w-full max-w-sm p-8 mx-auto space-y-2">
<label for="email" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Email Address</label>
<input type="email" id="email"
class="w-full px-4 py-2 text-gray-900 bg-white border border-gray-300 rounded-md
dark:bg-slate-800 dark:text-gray-100 dark:border-slate-600
transition-all duration-200
focus:outline-none focus:ring-0
focus:border-blue-500
focus:outline-2 focus:outline-offset-0 focus:outline-blue-500"
placeholder="you@example.com">
</div>
  • 轮廓未显示? 轮廓需要样式和颜色才能可见。Tailwind 中的 outline 工具类设置了 outline-style: solid;。你还需要一个 outline-color 类(例如 outline-blue-500)。
  • 优先使用 focus-visible 而非 focus: 这通过只向需要焦点的用户(键盘导航者)显示焦点环来提供更好的用户体验。
  • 保持一致性: 在网站上的所有交互元素中使用相同的轮廓偏移和样式,以获得统一且可预测的用户体验。