Get startedFoundationsComponentsPatternsRules

Checkbox

체크박스는 여러 선택지 중 하나 이상을 고르거나, 설정을 명시적으로 확인받을 때 써요.

설치

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

Examples

States

체크박스 하나는 선택·미선택 두 가지 상태를 가져요. 묶음으로 쓸 때는 일부만 선택된 상태(isIndeterminate)가 더해져요. isDisabled 를 주면 회색으로 바뀌고 클릭할 수 없어요.

Indeterminate

하위 항목 중 일부만 선택됐을 때 상위 체크박스를 일부 선택 상태로 보여줘요. isIndeterminate 는 모양만 바꾸고 isChecked 값은 바꾸지 않으니, 상위 항목을 눌렀을 때의 동작은 직접 구현해요.

Controlled

isChecked 와 onChange 로 상태를 직접 관리해요. 새 값은 e.currentTarget.checked 로 읽어요. 상태를 관리할 필요가 없으면 defaultChecked 만 줘도 돼요.

Invalid

isInvalid 를 주면 테두리가 danger 색으로 바뀌어요. 색만으로는 오류를 알기 어려우니 오류 메시지를 함께 보여줘요.

Required

isRequired 를 주면 라벨 뒤에 * 가 붙어요. 제출할 때 확인해서 선택하지 않았다면 isInvalid 와 오류 메시지로 알려줘요.

Usage guidelines

체크박스는 관련된 목록에서 하나 이상을 고르게 할 때 써요. 주로 폼 안에서 쓰고, 아무것도 고르지 않거나 여러 개를 골라도 괜찮은 상황에 맞아요. 설정을 적용하기 전에 사용자의 명시적인 동의를 받을 때도 좋아요.

  • 하나만 골라야 한다면 Radio 나 드롭다운 메뉴를 써요.
  • 무언가를 즉시 켜고 끄는 설정이라면 Toggle 을 써요.
  • 상위 체크박스는 하위 항목이 모두 선택되면 선택, 일부만 선택되면 일부 선택, 하나도 없으면 미선택으로 보여줘요.
Do· 짧고 분명한 라벨
무엇을 고르는지 바로 알 수 있게 짧게 써요. (예: "이 이슈 지켜보기")
Don't· 라벨 끝 문장 부호
라벨 끝에 마침표나 쉼표를 붙이지 않아요.
  • 탭 순서에 남아 있어야 하는 체크박스는 비활성으로 만들지 말고, 유효성 검사 메시지로 왜 선택할 수 없는지 알려줘요.

Accessibility

  • 실제 컨트롤은 role="checkbox" 를 가진 요소예요. 라벨 전체가 클릭 영역이라 라벨을 눌러도 체크돼요.
  • Tab 으로 포커스를 옮기고 Space 로 체크를 바꿔요. 포커스가 있으면 상자에 2px 포커스 링이 보여요.
  • 일부 선택 상태는 aria-checked="mixed" 로, 오류 상태는 aria-invalid 로 스크린 리더에 전달돼요.
  • 필수·오류 상황에는 "항목을 선택해 주세요" 같은 오류 메시지를 보여주고 aria-describedby 로 연결해요.
  • 보이는 라벨이 없다면 aria-label 을 꼭 지정해요.

Props

Prop

Type

On this page