Breadcrumb
- 组件说明:面包屑导航,显示用户当前位置层级路径,支持快速返回上级。
- 交互特征:非当前项可点击,hover 显示灰色背景;当前项不可点击。
- 实现约定:推荐优先使用
items数据源;如需自定义节点样式,使用itemRender,不再对外暴露底层组合件。 - Figma 规范
基础用法
结果
Loading...
实时编辑器
render( <Breadcrumb items={[ { title: 'Home', href: '#' }, { title: 'Category', href: '#' }, { title: 'Current Page' }, ]} />, )
Icon Text 样式
Figma 支持 3 种 Style:Icon Text(图标+文字)、Icon(仅图标)、Text(仅文字)。
结果
Loading...
实时编辑器
render( <Breadcrumb items={[ { title: 'Home', href: '#', icon: <IconPlaceholder size={20} /> }, { title: 'Category', href: '#', icon: <IconPlaceholder size={20} /> }, { title: 'Current Page', icon: <IconPlaceholder size={20} /> }, ]} />, )
Icon 样式
仅图标时,通过 itemRender 自定义渲染内容。
结果
Loading...
实时编辑器
render( <Breadcrumb itemRender={({ isCurrent, item }) => { const content = <IconPlaceholder size={20} /> if (isCurrent) { return ( <span aria-label={String(item.title)} className="inline-flex items-center justify-center" > {content} </span> ) } return ( <a href={item.href} aria-label={String(item.title)} className="inline-flex items-center justify-center" > {content} </a> ) }} items={[ { title: 'Home', href: '#' }, { title: 'Category', href: '#' }, { title: 'Current' }, ]} />, )
带省略号(4+ 级)
超过 4 级时自动折叠成 前二 + ... + 后二。...(Figma Style=Compressed)可交互:hover/点击高亮,选中后展开下拉,列出被折叠的中间项并按层级缩进。
结果
Loading...
实时编辑器
render( <Breadcrumb items={[ { title: 'Home', href: '#' }, { title: 'Category', href: '#' }, { title: 'Sub Category', href: '#' }, { title: 'Deep', href: '#' }, { title: 'Workspace', href: '#' }, { title: 'Current Page' }, ]} />, )
超长 title 截断
使用 items API 默认渲染时,title 文本最大宽度为 260px(Figma Label maxWidth=260 + textTruncation=ENDING),超出部分以末尾省略号显示。当 title 为 string 时,会自动设置原生 title 属性,hover 可查看全文。组合模式(直接传入 children)不受影响,由使用方自行控制截断。
结果
Loading...
实时编辑器
render( <Breadcrumb items={[ { title: '这是一段明显超过 260px 最大宽度的面包屑标题文本,用于演示末尾省略号截断效果', href: '#', }, { title: '当前页' }, ]} />, )
Figma 样式矩阵
| Style | 说明 | 推荐实现方式 |
|---|---|---|
| Icon Text | 图标+文字 | items + icon |
| Icon | 仅图标 | items + itemRender |
| Text | 仅文字 | items |
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
items | BreadcrumbItemData[] | - | 推荐用法,数据驱动渲染面包屑 |
itemRender | ({ item, index, isCurrent, items }) => ReactNode | - | 自定义节点渲染 |
separator | ReactNode | - | 自定义分隔符 |
className | string | - | 自定义样式类 |
数据结构
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
key | React.Key | - | 唯一标识,未提供时回退为索引 |
title | ReactNode | - | 当前层级显示内容 |
href | string | - | 点击跳转地址 |
icon | ReactNode | - | 前置图标 |
current | boolean | false | 是否标记为当前页 |
separator | ReactNode | - | 当前项后使用的自定义分隔符 |
type | 'item' | 'ellipsis' | 'item' | 数据类型,ellipsis 用于省略占位 |
高级用法
当默认节点不满足需求时,通过 itemRender 统一接管单项渲染,而不是直接操作底层结构组件。
结果
Loading...
实时编辑器
render( <Breadcrumb itemRender={({ isCurrent, item }) => ( <span className="inline-flex items-center gap-[var(--Spacing_8)] text-[length:var(--Font-Size-Body)] leading-[var(--Line-Height-Body)]" style={{ fontWeight: isCurrent ? 600 : 400 }} > <span className="flex items-center justify-center">{item.icon}</span> {item.title} </span> )} items={[ { title: 'Home', href: '#', icon: <IconPlaceholder size={20} /> }, { title: 'Projects', href: '#', icon: <IconPlaceholder size={20} /> }, { title: 'Current', icon: <IconPlaceholder size={20} /> }, ]} />, )