Skip to content
API 风格:

Breadcrumb 빵조각 내비게이션 ​

계층 경로 내비게이션입니다. 네이티브 nav + ol 의미를 기반으로 하며, 현재 페이지는 자동으로 aria-current="page"로 표시되고 클릭할 수 없습니다. 커스텀 구분 기호와 초과 항목 접기를 지원합니다.

기본 사용법 ​

기본 사용법
vue
<script setup lang="ts">
</script>

<template>
  <LhBreadcrumb>
    <LhBreadcrumbItem>홈</LhBreadcrumbItem>
    <LhBreadcrumbItem>컴포넌트</LhBreadcrumbItem>
    <LhBreadcrumbItem>Breadcrumb</LhBreadcrumbItem>
  </LhBreadcrumb>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBreadcrumb>
    <LhBreadcrumbItem>홈</LhBreadcrumbItem>
    <LhBreadcrumbItem>컴포넌트</LhBreadcrumbItem>
    <LhBreadcrumbItem>Breadcrumb</LhBreadcrumbItem>
  </LhBreadcrumb>
</template>

링크 내비게이션 ​

링크 내비게이션
replace 모드
vue
<script setup lang="ts">
</script>

<template>
  <!-- 링크 내비게이션 -->
  <LhBreadcrumb>
    <LhBreadcrumbItem to="/">홈</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/guide">가이드</LhBreadcrumbItem>
    <LhBreadcrumbItem>현재 페이지</LhBreadcrumbItem>
  </LhBreadcrumb>
  <!-- replace 모드 -->
  <LhBreadcrumb>
    <LhBreadcrumbItem to="/" replace>히스토리 대체</LhBreadcrumbItem>
    <LhBreadcrumbItem>현재 페이지</LhBreadcrumbItem>
  </LhBreadcrumb>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- 링크 내비게이션 -->
  <LhBreadcrumb>
    <LhBreadcrumbItem to="/">홈</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/guide">가이드</LhBreadcrumbItem>
    <LhBreadcrumbItem>현재 페이지</LhBreadcrumbItem>
  </LhBreadcrumb>
  <!-- replace 모드 -->
  <LhBreadcrumb>
    <LhBreadcrumbItem to="/" replace>히스토리 대체</LhBreadcrumbItem>
    <LhBreadcrumbItem>현재 페이지</LhBreadcrumbItem>
  </LhBreadcrumb>
</template>

to가 전달된 항목은 <a>로 렌더링됩니다. vue-router가 감지되면 라우터 이동을 사용하고(replace로 히스토리 교체 여부를 제어), 그렇지 않으면 네이티브 내비게이션을 유지합니다. 마지막 항목은 항상 현재 페이지 텍스트로 렌더링됩니다.

커스텀 구분 기호 ​

커스텀 구분 기호
vue
<script setup lang="ts">
</script>

<template>
  <LhBreadcrumb separator="·">
    <LhBreadcrumbItem to="/">홈</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/components">컴포넌트</LhBreadcrumbItem>
    <LhBreadcrumbItem>
      <template #separator>➜</template>
      개별 구분 기호
    </LhBreadcrumbItem>
  </LhBreadcrumb>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBreadcrumb separator="·">
    <LhBreadcrumbItem to="/">홈</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/components">컴포넌트</LhBreadcrumbItem>
    <LhBreadcrumbItem>
      <template #separator>➜</template>
      개별 구분 기호
    </LhBreadcrumbItem>
  </LhBreadcrumb>
</template>

초과 항목 접기 ​

초과 항목 접기
vue
<script setup lang="ts">
</script>

<template>
  <LhBreadcrumb :max-items="3">
    <LhBreadcrumbItem to="/">홈</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/a">1차 디렉터리 A</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/a/b">2차 디렉터리 B</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/a/b/c">3차 디렉터리 C</LhBreadcrumbItem>
    <LhBreadcrumbItem>현재 페이지</LhBreadcrumbItem>
  </LhBreadcrumb>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhBreadcrumb :max-items="3">
    <LhBreadcrumbItem to="/">홈</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/a">1차 디렉터리 A</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/a/b">2차 디렉터리 B</LhBreadcrumbItem>
    <LhBreadcrumbItem to="/a/b/c">3차 디렉터리 C</LhBreadcrumbItem>
    <LhBreadcrumbItem>현재 페이지</LhBreadcrumbItem>
  </LhBreadcrumb>
</template>

maxItems를 초과하면 첫 항목 + 말줄임표 + 마지막 몇 개 항목을 유지합니다. 말줄임표를 클릭하면 전체가 펼쳐집니다.

Props ​

속성설명타입기본값
separator구분 기호 문자string'/'
maxItems최대 보이는 항목 수(첫 항목 + 말줄임표 + 마지막 몇 개 항목), 초과 시 접기number0
sxsx 빠른 레이아웃 속성LhSxProps—

LhBreadcrumbItem Props ​

속성설명타입기본값
to이동 주소. 존재하고 마지막 항목이 아닐 때 링크로 렌더링string—
replacevue-router로 이동할 때 replace 방식 사용 여부booleanfalse

Slots ​

슬롯설명적용 컴포넌트
default빵조각 항목LhBreadcrumb
default항목 내용LhBreadcrumbItem
separator커스텀 구분 기호(전역 separator를 덮어씀)LhBreadcrumbItem

접근성 ​

  • 루트 요소는 <nav aria-label>(언어 팩 breadcrumb.label 사용)이 <ol>을 감싸며, 의미 순서가 문서 순서와 같습니다
  • 현재 페이지(마지막 항목)는 텍스트로 렌더링되고 자동으로 aria-current="page"가 설정되며, to를 전달해도 클릭할 수 없습니다
  • 구분 기호는 aria-hidden="true"이며 접근성 트리에 들어가지 않습니다
  • 접힌 말줄임표는 실제 <button>이며, aria-label은 언어 팩 breadcrumb.more를 사용하고 클릭 시 전체를 펼칩니다

타입 정의 ​

이 컴포넌트가 외부로 내보내는 TypeScript 타입 구조는 다음과 같습니다(packages/components/breadcrumb/src/types.ts와 @lh-ui/share/core/* 소스에서 자동 추출, 각 항목을 펼쳐 전체 정의를 확인하세요. 속성 설명은 위쪽 Props 표를 참고하세요).

LhBreadcrumbProps
ts
export interface LhBreadcrumbProps {
  /** 구분 기호 문자 */
  separator?: string
  /** 최대 보이는 항목 수(첫 항목 + 말줄임표 + 마지막 몇 개 항목), 초과 시 접기. 0이거나 전달하지 않으면 접지 않음 */
  maxItems?: number
  /** sx 빠른 레이아웃 속성 */
  sx?: LhSxProps
}
LhBreadcrumbItemProps
ts
export interface LhBreadcrumbItemProps {
  /** 이동 주소. 존재하고 마지막 항목이 아닐 때 링크로 렌더링(vue-router가 감지되면 라우터 이동, 그렇지 않으면 네이티브 내비게이션) */
  to?: string
  /** vue-router로 이동할 때 replace 방식 사용 여부(라우터가 없으면 효과 없음) */
  replace?: boolean
}

국풍의 아름다움으로 코드의 토대를 세웁니다