导航组件
Breadcrumb 面包屑
路径导航组件,帮助用户了解当前页面在层级结构中的位置,支持链接、当前页和省略号。
安装
bash
npx polyui add breadcrumb基础
使用 Breadcrumb、BreadcrumbList、BreadcrumbItem、BreadcrumbLink、BreadcrumbPage 和 BreadcrumbSeparator 组合构建面包屑导航。
Basic
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
export function BreadcrumbBasic() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Basic</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}斜线分隔符
Slash Separator
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { HomeIcon } from "lucide-react"
export function BreadcrumbSlashSeparator() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Slash Separator</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#" className="flex items-center gap-2">
<HomeIcon className="size-4" />
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator> / </BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator> / </BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}图标选项
Icon Items
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { HomeIcon, FolderIcon, FileIcon } from "lucide-react"
export function BreadcrumbIconItems() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Icon Items</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">
<HomeIcon className="size-4" />
<span className="sr-only">Home</span>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#" className="flex items-center gap-2">
<FolderIcon className="size-4" />
Documents
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage className="flex items-center gap-2">
<FileIcon className="inline size-4" />
Add Document
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}点分隔符
Dot Separator
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
export function BreadcrumbDotSeparator() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Dot Separator</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator>·</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator>·</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}徽章样式
Badge Style
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { Badge } from "@polyui/react/badge"
export function BreadcrumbBadgeStyle() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Badge Style</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">
<Badge variant="outline" className="text-muted-foreground hover:text-foreground">
Home
</Badge>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">
<Badge variant="outline" className="text-muted-foreground hover:text-foreground">
Documents
</Badge>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>
<Badge variant="outline" className="border-primary text-primary">
Add Document
</Badge>
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}带省略
当路径层级较深时,使用 BreadcrumbEllipsis 折叠中间层级。
With Ellipsis
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from "@polyui/react/breadcrumb"
export function BreadcrumbWithEllipsis() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">With Ellipsis</p>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbEllipsis />
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}带下拉
With Dropdown
tsx
export function BreadcrumbWithDropdown() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">With Dropdown</p>
<BreadcrumbDropdownInner />
</div>
)
}描边容器
Outline Container
tsx
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@polyui/react/breadcrumb"
import { HomeIcon } from "lucide-react"
export function BreadcrumbOutlineContainer() {
return (
<div className="space-y-2">
<p className="text-xs font-mono text-muted-foreground uppercase tracking-widest">Outline Container</p>
<Breadcrumb>
<BreadcrumbList className="h-8 gap-2 rounded-md border px-3 text-sm">
<BreadcrumbItem>
<BreadcrumbLink href="#">
<HomeIcon className="size-4" />
<span className="sr-only">Home</span>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="#">Documents</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Add Document</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
)
}属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Breadcrumb | React.ComponentProps<"nav"> | — | 根容器,渲染为 <nav aria-label="breadcrumb">。 |
BreadcrumbLink › href | string | — | 链接地址,支持 render prop 替换为 Next.js Link 等。 |
BreadcrumbPage | React.ComponentProps<"span"> | — | 当前页标记,aria-current="page",无链接交互。 |
BreadcrumbSeparator › children | React.ReactNode | ArrowRight01Icon | 分隔符内容,默认为右箭头图标,可自定义。 |