Breadcrumb 面包屑
告诉人“我在哪”,并能一步回到上面的任何一级。层级有三层以上时才值得放;它是辅助导航,不代替主导航。
基本用法
items 按从外到内的顺序给出路径,最后一项是当前页,不是链接。窄于 520px 时自动只留首尾,中间折成一个“…”按钮,点开后露出全部。
总是折叠
路径很深时用 maxItems:项数超过它,任何宽度下都折叠中间项。点“…”展开后焦点会落到第一个露出来的中间项上。
按钮项与自定义分隔符
条目只有 onClick 没有 href 时渲染成按钮(用于不改变地址的场合);两者都没有就是纯文字。separator 换掉默认的箭头。
接口
Breadcrumb
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
items* | BreadcrumbItem[] | — | 路径,最后一项是当前页。 |
label | string | '面包屑' | 导航地标的名字。 |
maxItems | number | — | 超过这个数量时任何宽度下都折叠中间项。默认只在窄屏(< 520px)折叠。 |
separator | ReactNode | — | 分隔符,默认右箭头。 |
BreadcrumbItem
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
label* | ReactNode | — | 文字。 |
href | string | — | 链接地址。 |
onClick | (e: MouseEvent) => void | — | 点击时。没有 href 时条目渲染成按钮。 |
无障碍
- 外层是
nav地标(名字默认“面包屑”),里面是有序列表ol;最后一项带aria-current="page"。 - 分隔符是装饰,对读屏隐藏,不会被读成“大于号”。
- 各级是普通的链接或按钮:Tab 依次聚焦,Enter 触发(按钮还有空格)。
- 折叠按钮的名字是“显示中间的 N 级路径”,带
aria-expanded;展开后按钮消失,焦点自动移到第一个露出来的中间项,不会丢。 - 被折叠的中间项对读屏和键盘同样隐藏,展开前不会 Tab 到。