Get startedFoundationsComponentsPatternsRules

Menu

메뉴는 사용자가 이동하거나 실행할 수 있는 선택지를 목록으로 보여줘요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/steel/menu.json

Examples

Menu 는 화면에 놓이는 목록 자체예요. 버튼으로 펼치는 메뉴가 필요하면 Dropdown Menu 를, 메뉴를 직접 띄우고 싶으면 Popup 안에 넣어요.

MenuGroup 이 전체를 감싸고, Section 이 관련 항목을 묶어요. Section 에 title 을 주면 제목이 생기고, hasSeparator 를 주면 위에 1px 구분선이 생겨요. 제목을 직접 배치하려면 HeadingItem 을 쓰고 섹션의 aria-labelledby 와 연결해요.

Button item

다른 곳으로 이동하지 않는 액션(복사, 삭제 등)에는 ButtonItem 을 써요. iconBefore·iconAfter, description, isSelected, isDisabled 를 지원해요. 선택된 항목은 왼쪽에 2px 선택 막대가 생겨요.

다른 페이지나 리소스로 보낼 때는 LinkItem 을 써요. 선택된 링크는 aria-current="page" 로 알려줘요. 라우터 링크처럼 직접 만든 요소가 필요하면 CustomItem 의 component 를 써요.

Density

MenuGroup 의 spacing 을 compact 로 바꾸면 항목 높이가 40px 에서 32px 로 줄고 여백도 좁아져요.

Skeleton

내용을 불러오는 동안 SkeletonItem, SkeletonHeadingItem 으로 자리를 채워요. hasAvatar·hasIcon 으로 앞 요소 모양을 정하고, isShimmering 으로 깜빡이게 해요.

Usage guidelines

메뉴는 사용자가 실행하거나 이동할 선택지를 보여줄 때 써요. 섹션, 구분선, 섹션 제목, 메뉴 항목으로 이루어지고, 항목은 설명과 앞뒤 아이콘을 선택적으로 가져요.

Do· 액션은 ButtonItem, 이동은 LinkItem
항목이 하는 일에 맞는 요소를 골라 키보드·스크린 리더 사용자가 결과를 예상할 수 있게 해요.
Don't· 링크를 버튼처럼
LinkItem 으로 액션을 실행하거나, ButtonItem 으로 다른 페이지로 보내지 않아요.
  • 새 리소스로 이동하는 항목에는 아이콘을 붙여 이동한다는 것을 알려줘요.
  • 라벨은 24자 안쪽으로 짧게 쓰고, 가장 중요한 단어를 앞에 둬요. 불필요한 동사, 전문 용어, 대화체는 빼요.
  • 중요도와 사용 빈도 순으로 정렬해요. 항목을 늘린다고 더 많이 쓰이지는 않으니 꼭 필요한 것만 남겨요.
  • 메뉴가 나오는 곳이 달라도 항목 순서와 노출 여부는 같게 유지해요.

Accessibility

  • 섹션이 하나뿐이어도 Section 으로 감싸요. 각 섹션은 role="group" 이라 보조 기술 사용자가 그룹 단위로 건너뛸 수 있어요.
  • 섹션 제목은 기본 h2 수준(aria-level=2)이에요. 페이지의 제목 순서에 맞춰 HeadingItem 의 headingLevel 을 조정하고 수준을 건너뛰지 않아요.
  • 항목은 되도록 비활성으로 두지 말고, 쓸 수 없는 이유를 시각적 단서나 메시지로 알려줘요.
  • 아이콘이 의미를 전달한다면 대체 텍스트를 함께 제공해요.
  • 포커스 링은 항목 안쪽 2px border.focused 색으로 그려져요.

Props

Prop

Type

Section

Prop

Type

ButtonItem · LinkItem · CustomItem

Prop

Type

HeadingItem

Prop

Type

SkeletonItem · SkeletonHeadingItem

Prop

Type

On this page