<script lang="ts">
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
import * as DropdownMenu from "$lib/components/ui/dropdown-menu/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<DropdownMenu.Root>
<DropdownMenu.Trigger class="flex items-center gap-1">
<Breadcrumb.Ellipsis class="size-4" />
<span class="sr-only">메뉴 토글</span>
</DropdownMenu.Trigger>
<DropdownMenu.Content align="start">
<DropdownMenu.Item>문서</DropdownMenu.Item>
<DropdownMenu.Item>테마</DropdownMenu.Item>
<DropdownMenu.Item>GitHub</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="/docs/components">컴포넌트</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> 설치
다음 코드를 복사하여 프로젝트에 붙여넣으세요.
사용법
<script lang="ts">
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script> <Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="/components">컴포넌트</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Page>브레드크럼</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> 예제
커스텀 구분자
<Breadcrumb.Separator />의 <slot>에 커스텀 컴포넌트를 사용하여 커스텀 구분자를 만들 수 있습니다.
<script lang="ts">
import SlashIcon from "@lucide/svelte/icons/slash";
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<SlashIcon />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.Link href="/components">컴포넌트</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<SlashIcon />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> <script lang="ts">
import SlashIcon from "@lucide/svelte/icons/slash";
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<SlashIcon />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.Link href="/components">컴포넌트</Breadcrumb.Link>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> 드롭다운
<Breadcrumb.Item />을 <DropdownMenu />와 결합하여 브레드크럼에 드롭다운을 만들 수 있습니다.
<script lang="ts">
import ChevronDownIcon from "@lucide/svelte/icons/chevron-down";
import SlashIcon from "@lucide/svelte/icons/slash";
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
import * as DropdownMenu from "$lib/components/ui/dropdown-menu/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<SlashIcon />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<DropdownMenu.Root>
<DropdownMenu.Trigger class="flex items-center gap-1">
컴포넌트
<ChevronDownIcon class="size-4" />
</DropdownMenu.Trigger>
<DropdownMenu.Content align="start">
<DropdownMenu.Item>문서</DropdownMenu.Item>
<DropdownMenu.Item>테마</DropdownMenu.Item>
<DropdownMenu.Item>GitHub</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Breadcrumb.Item>
<Breadcrumb.Separator>
<SlashIcon />
</Breadcrumb.Separator>
<Breadcrumb.Item>
<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> <script lang="ts">
import ChevronDownIcon from "@lucide/svelte/icons/chevron-down";
import SlashIcon from "@lucide/svelte/icons/slash";
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
import * as DropdownMenu from "$lib/components/ui/dropdown-menu/index.js";
</script>
<!-- ... -->
<Breadcrumb.Item>
<DropdownMenu.Root>
<DropdownMenu.Trigger class="flex items-center gap-1">
컴포넌트
<ChevronDownIcon class="size-4" />
</DropdownMenu.Trigger>
<DropdownMenu.Content align="start">
<DropdownMenu.Item>문서</DropdownMenu.Item>
<DropdownMenu.Item>테마</DropdownMenu.Item>
<DropdownMenu.Item>GitHub</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
</Breadcrumb.Item> 축약
브레드크럼이 너무 길 때 축약된 상태를 표시하기 위한 <Breadcrumb.Ellipsis /> 컴포넌트를 제공합니다.
<script lang="ts">
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Ellipsis />
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="/docs/components">컴포넌트</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> <script lang="ts">
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
{/* ... */}
<Breadcrumb.Item>
<Breadcrumb.Ellipsis />
</Breadcrumb.Item>
{/* ... */}
</Breadcrumb.List>
</Breadcrumb.Root> 링크 컴포넌트
라우팅 라이브러리의 커스텀 링크 컴포넌트를 사용하려면 <Breadcrumb.Link />에 asChild prop을 사용할 수 있습니다.
<script lang="ts">
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Link href="/components">컴포넌트</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
<Breadcrumb.Item>
<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root> <script lang="ts">
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">홈</Breadcrumb.Link>
</Breadcrumb.Item>
{/* ... */}
</Breadcrumb.List>
</Breadcrumb.Root> 반응형
<Breadcrumb.Item />을 <Breadcrumb.Ellipsis />, <DropdownMenu />, <Drawer />와 결합한 반응형 브레드크럼의 예제입니다.
데스크톱에서는 드롭다운을 표시하고 모바일에서는 드로어를 표시합니다.
<script lang="ts">
import { MediaQuery } from "svelte/reactivity";
import * as Breadcrumb from "$lib/components/ui/breadcrumb/index.js";
import * as Drawer from "$lib/components/ui/drawer/index.js";
import * as DropdownMenu from "$lib/components/ui/dropdown-menu/index.js";
import { buttonVariants } from "$lib/components/ui/button/index.js";
const items = [
{ href: "#", label: "홈" },
{ href: "#", label: "문서" },
{ href: "#", label: "애플리케이션 빌드" },
{ href: "#", label: "데이터 가져오기" },
{ label: "캐싱 및 재검증" }
];
const ITEMS_TO_DISPLAY = 3;
let open = $state(false);
const isDesktop = new MediaQuery("(min-width: 768px)");
</script>
<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href={items[0].href}>
{items[0].label}
</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
{#if items.length > ITEMS_TO_DISPLAY}
<Breadcrumb.Item>
{#if isDesktop.current}
<DropdownMenu.Root bind:open>
<DropdownMenu.Trigger
class="flex items-center gap-1"
aria-label="Toggle menu"
>
<Breadcrumb.Ellipsis class="size-4" />
</DropdownMenu.Trigger>
<DropdownMenu.Content align="start">
{#each items.slice(1, -2) as item, i (i)}
<DropdownMenu.Item>
<a href={item.href ? item.href : "#"}>
{item.label}
</a>
</DropdownMenu.Item>
{/each}
</DropdownMenu.Content>
</DropdownMenu.Root>
{:else}
<Drawer.Root bind:open>
<Drawer.Trigger aria-label="메뉴 토글">
<Breadcrumb.Ellipsis class="size-4" />
</Drawer.Trigger>
<Drawer.Content>
<Drawer.Header class="text-start">
<Drawer.Title>이동</Drawer.Title>
<Drawer.Description
>이동할 페이지를 선택하세요.</Drawer.Description
>
</Drawer.Header>
<div class="grid gap-1 px-4">
{#each items.slice(1, -2) as item, i (i)}
<a href={item.href ? item.href : "#"} class="py-1 text-sm">
{item.label}
</a>
{/each}
</div>
<Drawer.Footer class="pt-4">
<Drawer.Close class={buttonVariants({ variant: "outline" })}>
닫기
</Drawer.Close>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
{/if}
</Breadcrumb.Item>
<Breadcrumb.Separator />
{/if}
{#each items.slice(-ITEMS_TO_DISPLAY + 1) as item (item.label)}
<Breadcrumb.Item>
{#if item.href}
<Breadcrumb.Link
href={item.href}
class="max-w-20 truncate md:max-w-none"
>
{item.label}
</Breadcrumb.Link>
<Breadcrumb.Separator />
{:else}
<Breadcrumb.Page class="max-w-20 truncate md:max-w-none">
{item.label}
</Breadcrumb.Page>
{/if}
</Breadcrumb.Item>
{/each}
</Breadcrumb.List>
</Breadcrumb.Root>