Breadcrumb

面包屑导航,展示当前页面在层级结构中的位置。字段/API 对齐 Semi:routes 元素为 Route 对象({name, path, href, icon})或纯字符串。支持数据驱动 routes 与声明式 Item 两种用法。

设计文档

如何引入

import { Breadcrumb, BreadcrumbItem } from '@chenzy-design/svelte';

基础用法

通过 routes 数组配置面包屑路径,href 字段渲染为链接,末项为当前页不加链接。

自定义分隔符

用 separator 替换默认的 "/",可传入任意字符串(如 >、·、→)。

带图标

声明式 <Breadcrumb.Item> 通过 icon snippet 在文本前渲染前置图标。

数据驱动与选中

routes 数据驱动渲染,配合 onClick 与受控 activeIndex 高亮当前选中项。

当前选中(activeIndex=1):—

超长折叠

maxItemCount(默认 4)超出时中间折叠为三点图标;moreType 控制展开方式:default 点击就地展开,popover 悬浮弹出可点击菜单。

moreType="default"(默认):点击三点图标就地展开全部
moreType="popover":悬浮三点图标弹出可点击的折叠项菜单 点击折叠项:—

截断与 Tooltip

showTooltip 令超长项截断,hover 显示完整名;对象配置 width(截断宽度)与 ellipsisPos(end 末尾省略 / middle 中间省略)。

默认行为:超出 150px 截断,hover 显示完整名
自定义宽度:showTooltip={ width: 220 }
从中间省略:showTooltip={ ellipsisPos: "middle" }

尺寸

默认 compact 紧凑;compact={false} 使图标与文字尺寸增大(对齐 Semi,仅 compact 布尔驱动,无独立 size)。

自定义省略号区域

renderMore 接管折叠 … 区域的渲染(对齐 Semi renderMore),参数为被折叠的路由列表;此处用 Popover 弹出完整折叠项。

路由对象

routes 支持 Route 对象 { name, path, href, icon } 或字符串组成的数组;字符串即 name,对象字段驱动链接/图标渲染。

API 参考

Breadcrumb

Props

属性说明类型默认值
routes数据驱动的路由项,元素为 Route 对象或纯字符串(字符串即 name);最后一项为当前页(aria-current=page)(BreadcrumbRoute | string)[][]
separator分隔符,字符串或 Snippet(对齐 Semi separator: ReactNode,支持传图标)string | Snippet'/'
maxItemCount超出时中间折叠(对齐 Semi;<=0 不折叠)number4
showTooltip项文本超出 width(默认 150)被截断时,hover 用 Tooltip 展示完整名;对象配置 width/ellipsisPos(对齐 Semi showToolTipProps)boolean | { width?: number|string; ellipsisPos?: 'end'|'middle'; opts?: object }false
moreType折叠 … 的浮层类型(对齐 Semi):default 点击三点图标就地展开全部;popover 悬浮弹出可点击跳转的折叠项菜单'default'|'popover''default'
ariaLabel无障碍标签,默认取 i18n Breadcrumb.ariaLabel;传入覆盖(对齐 Semi aria-label)stringundefined
style根节点内联样式(对齐 Semi style)stringundefined
compact紧凑模式;false 时根元素附加 cd-breadcrumb--loose 类(更大字号/间距)booleantrue
autoCollapse超出 maxItemCount 时是否自动折叠;false 时始终展示全部项booleantrue
activeIndex受控选中项索引(配合 onClick 使用,令对应项高亮)numberundefined
renderItem自定义路由项渲染(routes 模式);传入时替换默认的链接/文本/当前页渲染逻辑(对齐 Semi renderItem(route))Snippet<[route: BreadcrumbRoute]>undefined
renderMore自定义折叠 … 区域渲染;传入时接管折叠展示(替代 moreType 内置浮层),参数为被折叠路由列表(restItems: CollapsedRoute[]) => Snippetundefined
classstring''
children声明式 <Breadcrumb.Item> 列表;项间分隔符按 separator 纯 CSS 自动插入,最后一项后无分隔符Snippetundefined
onClick单击事件(对齐 Semi onClick(route, event))(route: BreadcrumbRoute, event: MouseEvent) => voidundefined

BreadcrumbItem

声明式面包屑项;项间分隔符由父级纯 CSS 自动插入,最后一项自动渲染为当前页(不可点 + aria-current=page)

Props

属性说明类型默认值
href链接地址;最后一项忽略 hrefstringundefined
separator覆盖父级 separator,仅对本项末尾分隔符生效(通过内联 CSS 变量实现)stringundefined
noLink禁止链接/按钮行为,渲染为普通 span(不可点击);忽略 href 和 onClick;末项始终无链接booleanfalse
icon项前置图标 snippet,渲染在 children 之前Snippetundefined
classstring''
childrenSnippetundefined
onClick点击/键盘激活回调;最后一项及 noLink=true 时不触发(e: MouseEvent) => voidundefined

Accessibility

ARIA rolenavigation
键盘交互EnterSpace
  • nav[aria-label] 下直接放扁平 span/a(对齐 Semi,无 ol/li 列表包裹)
  • 最后一项 aria-current=page,不可点击
  • 无 href 的中间项用 role=link + tabindex=0 + 键盘可激活
  • 分隔符 aria-hidden=true

设计变量

变量默认值用法
--cd-breadcrumb-color var(--cd-color-breadcrumb-default-text-default)面包屑根文字颜色(组件消费)
--cd-breadcrumb-color-active var(--cd-color-breadcrumb-active-text-default)当前页 / 选中项文字颜色(组件消费)
--cd-breadcrumb-color-link var(--cd-color-breadcrumb-default-text-default)可点击项文字颜色 - 常态(对齐 Semi item 常态灰,组件消费)
--cd-breadcrumb-color-link-active var(--cd-color-breadcrumb-default-text-active)可点击项文字颜色 - 按下(对齐 Semi item-link:active,组件消费)
--cd-breadcrumb-color-link-hover var(--cd-color-breadcrumb-default-text-hover)可点击项文字颜色 - 悬浮(对齐 Semi item-link:hover,组件消费)
--cd-breadcrumb-restitem-color var(--cd-color-breadcrumb-restitem-text-default)折叠 … 触发器 / restItem 文字颜色(对齐 Semi restItem,组件消费)
--cd-breadcrumb-separator-color var(--cd-color-breadcrumb-sepearator-default-icon-default)分割符颜色(组件消费)
--cd-color-breadcrumb-active-text-active var(--cd-color-text-0)面包屑文字颜色 - 选中激活
--cd-color-breadcrumb-active-text-default var(--cd-color-text-0)面包屑文字颜色 - 选中
--cd-color-breadcrumb-default-text-active var(--cd-color-link-hover)面包屑文字颜色 - 按下