返回目录
组件详情入口
导航
@vean/ui
SBreadcrumb

Breadcrumb

Breadcrumb 属于 导航 分类。建议先看演示与用法,再对照 API 表格完成接入和样式调整。

先用快捷跳转面板找到概述、用法、演示和 API,再往下细读完整文档内容。

快速跳转

同分类组件

如果你在同一类交互里做组合,这些组件通常会一起出现。

Breadcrumb

概述

Breadcrumb(面包屑)允许用户按照页面层级结构进行导航,展示当前在应用结构中的位置。

功能

  • 数据驱动的 compact 组合 — SBreadcrumb 从 items 数组渲染条目;Aria BreadcrumbCompact 负责迭代、默认内容与内部组合(root → list → items → separators)。
  • 链接 vs 当前页 — 带 to / href 的条目渲染为 BreadcrumbLink(复用 Link 原语);末尾无目标条目的渲染为 BreadcrumbPage,带 aria-current="page" 与 aria-disabled。
  • 省略号折叠 — ellipsis: true 在条目数 ≥5 时将所有中间条目折叠为省略号;ellipsis: [start, end] 支持自定义折叠范围(自动归一化:start 0 → 1、end length → length - 1)。
  • 带条目数据的点击事件 — click 事件携带完整的被激活条目对象;disabled 条目永不触发。
  • 完整 ARIA 语义 — nav 携带本地化 aria-label;分隔符与省略号为 role="presentation" + aria-hidden;当前页使用 aria-current="page"。
  • 区域级属性透传 — listProps、itemProps、linkProps、pageProps、separatorProps、ellipsisProps 透传属性到各区域。
  • 八个自定义槽 — default、ellipsis、ellipsis-icon、separator、item-leading、item-link、item-label、item-trailing,带类型化的 scoped props(item、index、ellipsisItems)。
  • 图标支持 — 每个条目可携带 icon(经 item-leading 槽默认内容渲染),使用 IconValue 类型。
  • 禁用条目 — 条目上的 disabled: true 会禁用链接并抑制 click 事件。
  • 尺寸缩放 — size(xs…2xl)经 breadcrumbVariants 缩放字号与间距。
  • Aria 组合 — BreadcrumbRoot / BreadcrumbList / BreadcrumbItem / BreadcrumbLink / BreadcrumbPage / BreadcrumbSeparator / BreadcrumbEllipsis 从 @vean/aria/breadcrumb 导出,可完全自定义样式构建。

用法

SBreadcrumb 将列表聚合委托给 Aria BreadcrumbCompact。如需无样式的数据驱动组合,请从 @vean/aria/breadcrumb 导入 BreadcrumbCompact。

演示

基础

分隔符

链接

条目下拉

省略下拉

API

Aria 层

11

Breadcrumb<T>

11 属性1 事件8 插槽
属性
属性名类型默认值描述
class
ClassValue
—
根类
size
ThemeSize
—
组件的视觉尺寸。
ui
Partial<BreadcrumbUi>
—
该组件的按槽类重写。
items
T[]
—
由该组件渲染的项。
ellipsis
true | [number, number] | null
—
显示省略号的项目范围。 当项目数量超过 4 个时,将显示省略号。
listProps
BreadcrumbListProps
—
转发给列表元素的属性。
itemProps
BreadcrumbItemProps
—
转发给 item 元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
pageProps
BreadcrumbPageProps
—
转发给页面元素的属性。
separatorProps
BreadcrumbSeparatorProps
—
转发给分隔符元素的属性。
ellipsisProps
BreadcrumbEllipsisProps
—
转发给省略号元素的属性。
事件
事件名参数描述
click
T
在发生点击时触发。
插槽
插槽名参数描述
default
BreadcrumbCompactItemSlotProps<T>
默认插槽的自定义内容。
ellipsis
BreadcrumbCompactEllipsisSlotProps<T>
省略号位置的自定义内容。
ellipsis-icon
—
省略号图标位置的自定义内容。
separator
—
分隔符槽位的自定义内容。
item-leading
BreadcrumbCompactItemSlotProps<T>
用于项目引导槽位的自定义内容。
item-link
BreadcrumbCompactItemSlotProps<T>
项目链接槽位的自定义内容。
item-label
BreadcrumbCompactItemSlotProps<T>
针对项目标签插槽的自定义内容。
item-trailing
BreadcrumbCompactItemSlotProps<T>
用于项目尾部槽位的自定义内容。

BreadcrumbCompact<T>

8 属性1 事件8 插槽
属性
属性名类型默认值描述
items
T[]
—
由该组件渲染的项。
ellipsis
true | [number, number] | null
—
显示省略号的项目范围。 当项目数量超过 4 个时,将显示省略号。
listProps
BreadcrumbListProps
—
转发给列表元素的属性。
itemProps
BreadcrumbItemProps
—
转发给 item 元素的属性。
linkProps
LinkExtraProps
—
传递给 link 元素的属性。
pageProps
BreadcrumbPageProps
—
转发给页面元素的属性。
separatorProps
BreadcrumbSeparatorProps
—
转发给分隔符元素的属性。
ellipsisProps
BreadcrumbEllipsisProps
—
转发给省略号元素的属性。
事件
事件名参数描述
click
T
在发生点击时触发。
插槽
插槽名参数描述
default
BreadcrumbCompactItemSlotProps<T>
默认插槽的自定义内容。
ellipsis
BreadcrumbCompactEllipsisSlotProps<T>
省略号位置的自定义内容。
ellipsis-icon
—
省略号图标位置的自定义内容。
separator
—
分隔符槽位的自定义内容。
item-leading
BreadcrumbCompactItemSlotProps<T>
用于项目引导槽位的自定义内容。
item-link
BreadcrumbCompactItemSlotProps<T>
项目链接槽位的自定义内容。
item-label
BreadcrumbCompactItemSlotProps<T>
针对项目标签插槽的自定义内容。
item-trailing
BreadcrumbCompactItemSlotProps<T>
用于项目尾部槽位的自定义内容。

BreadcrumbCompactEllipsis

BreadcrumbCompactItem

BreadcrumbEllipsis

BreadcrumbItem

BreadcrumbLink

20 属性
属性
属性名类型默认值描述
to
string | import("vue-router").RouteLocationAsRelativeGeneric | import("vue-router").RouteLocationAsPathGeneric
—
Route Location:点击该链接后应跳转到的位置。
replace
boolean
—
调用 `router.replace` 而不是 `router.push`。
href
string
—
点击链接时应跳转到的 URL。
disabled
boolean
—
当值为 `true` 时,该链接将被禁用。
activeClass
string
—
当链接处于活动状态时应用的类
exactActiveClass
string
—
当链接完全有效时应用的类
inactiveClass
string
—
链接处于非活动状态时应应用的类。
prefetchedClass
string
—
一个用于标记已预取链接的类。
external
boolean
—
强制将链接视为外部链接(true)或内部链接(false)。这有助于处理边界情况
ariaCurrentValue
'true' | 'false' | 'page' | 'date' | 'time' | 'step' | 'location'
`'page'`
当链接处于活动状态时,传递给 `aria-current` 属性的值。
viewTransition
boolean
—
如果支持,请将 `router.push()` 返回的 Promise 传递给 `document.startViewTransition()`。
target
(string & {}) | '_blank' | '_parent' | '_self' | '_top' | null
—
将链接的 URL 作为浏览上下文的名称显示在何处。
rel
(string & {}) | 'noopener' | 'noreferrer' | 'nofollow' | 'sponsored' | 'ugc' | null
'noopener noreferrer'
应用于链接的 rel 属性值。对于外部链接,默认值为“noopener noreferrer”。
noRel
boolean
—
如果设置为 true,则不会在链接中添加 rel 属性
prefetch
boolean
—
启用后,将预取视口内链接的中间件、布局和有效载荷。
prefetchOn
'visibility' | 'interaction' | Partial<{ visibility: boolean; interaction: boolean; }>
—
允许控制何时预取链接。默认情况下,仅在可见性发生变化时才会触发预取。
noPrefetch
boolean
—
用于禁用 `prefetch` 属性的逃逸机制。
trailingSlash
'append' | 'remove'
—
一个用于在此特定链接的 `href` 中添加或移除尾部斜杠的选项。 如果提供了此选项,将覆盖全局 `trailingSlash` 选项。
asChild
boolean
—
将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。
as
AsTag | Component
'div'
该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。

BreadcrumbList

BreadcrumbPage

BreadcrumbRoot

BreadcrumbSeparator

注意事项

架构与行业对标

关注点VeanUIshadcn-vue BreadcrumbAnt Design BreadcrumbElement Plus Breadcrumb
Aria / 样式分离✅ @vean/aria/breadcrumb + scv()❌ 单一包❌ 单一包❌ 单一包
数据驱动 compact API✅ items + ellipsis + click❌ 仅槽/组件组合✅ routes / items✅ breadcrumb-item 循环
省略号折叠✅ true(≥5 条)或自定义 [start, end]❌ 手动省略号条目✅ ellipsis(≥4 条)❌ 手动
链接 vs 当前页✅ to/href → Link;末尾 → aria-current 页✅ 独立 BreadcrumbLink/BreadcrumbPage✅ 末尾项即当前页✅ 末尾项自动当前
携带数据的点击事件✅ click(item);disabled 抑制❌ 仅原生链接✅ onClick(route)✅ select 事件
禁用条目✅ 条目数据上的 disabled—✅—
本地化 aria-label✅ locale 注册表硬编码仅 itemRender—
区域级属性透传✅ 6 组 props各部件 asChilditemRenderseparator 槽
自定义槽✅ 8 个类型化槽✅ 5 部件 + separator 槽itemRender✅ separator / title 槽
尺寸缩放✅ xs…2xl✅ 固定✅ size—

运行时注意事项

  1. 省略号索引数学 — getEllipsisRange 在条目 <5 时返回 null;true 对应 [1, len-2];用户范围被归一化(start 0 → 1、end length → length - 1)以保证首尾条目始终可见。
  2. 省略号位置 — 折叠的省略号渲染在新数组索引等于 start 的位置,即首个折叠后可见条目之前;省略号后跟随一个分隔符。
  3. 禁用点击抑制 — handleItemClick 忽略 disabled: true 的条目,因此 click 事件永不携带禁用条目(链接点击也被 Link 原语拦截)。
  4. 链接路由 — BreadcrumbLink 继承 Link 原语,to(router-link)与 href / external(锚点)均可用;target 生效。
  5. 当前页语义 — 末尾无 to/href 的条目渲染为 BreadcrumbPage(role="link" + aria-disabled="true" + aria-current="page"),辅助技术用户可识别其不可导航。
  6. Locale 回退 — nav 的 aria-label 来自 useLocaleMessages;缺失的 locale 键回退到默认英文包。

常见问题

省略号何时出现?

使用 ellipsis: true 时,仅当条目数 ≥5 才渲染省略号;首尾条目始终可见,中间折叠。使用 ellipsis: [start, end] 可精确指定折叠范围(两个端点均被归一化以保持边缘可见)。

如何区分链接条目与当前页?

带 to(路由)或 href/external(锚点)的条目渲染为链接。末尾无目标的条目渲染为带 aria-current="page" 的当前页。若要让非末尾条目也显示为纯标签,请省略其 to/href。

为什么点击 disabled 条目不触发任何事件?

禁用条目有意保持惰性:链接被 Link 原语禁用,compact 组件对 disabled: true 条目抑制 click 事件,符合预期的面包屑行为。

可以自定义分隔符吗?

可以 — 使用 separator 槽。每个分隔符(含省略号后的那个)都会渲染你的内容。如需区域级样式,可传入 separatorProps 或 ui 配方类。

条目槽接收哪些 scoped props?

item-leading、item-link、item-label、item-trailing 与默认槽接收 { item, index };ellipsis 槽接收 { ellipsisItems }。UI wrapper 原样转发给你的自定义槽内容。

面包屑可访问吗?

可以 — 根为带本地化 aria-label 的 nav,列表为 ol,分隔符与省略号对辅助技术隐藏,当前页通过 aria-current="page" 播报。

可以构建完全自定义的面包屑吗?

可以 — 用 @vean/aria/breadcrumb 组合 BreadcrumbRoot / BreadcrumbList / BreadcrumbItem / BreadcrumbLink / BreadcrumbPage / BreadcrumbSeparator / BreadcrumbEllipsis,并通过 provideBreadcrumbUi(或 SBreadcrumb 的 ui prop)注入样式。

更新日志

版本记录按发布版本分组,便于快速查看这个组件在不同版本里的实际变更。

v0.0.7

2025-12-09

对比版本

样式

调整列表变量中的填充,改进布局

范围: breadcrumb作者: soybeanjs查看提交88be2