본문으로 건너뛰기

Fieldset

하나의 질문에 함께 답하는 컨트롤 묶음이고, 그 묶음에 이름이 붙습니다. 자기 표면은 그리지 않고 컨트롤을 묶기만 합니다.

tsx
import { Fieldset, TextField } from 'neba';

<Fieldset legend="Billing address" description="Where the card statement goes.">
  <TextField label="Street" name="street" />
  <TextField label="City" name="city" />
</Fieldset>;

Props

Prop타입기본값설명
legendReactNode묶음의 이름. 안의 모든 컨트롤의 접근 가능한 이름이 되므로, 각 컨트롤 앞에 붙여 읽어도 말이 되는 구절이어야 합니다
descriptionReactNodelegend 아래 한 줄
disabledbooleanfalse안의 모든 컨트롤을 한 번에 비활성화합니다. 진짜 fieldset만 할 수 있는 일입니다
size공통'xs' | 'sm' | 'md' | 'lg' | 'xl''md'legend의 타입 스케일과 컨트롤 사이의 간격. 컨트롤 자체에는 닿지 않습니다
childrenReactNode묶이는 컨트롤들

<fieldset>의 모든 속성이 color를 제외하고 그대로 전달됩니다. 브라우저 자체의 테두리·여백·마진은 지워집니다. 표면이 필요하면 CardBox 안에 두세요.

예시

legend · description

legend는 안에 있는 모든 컨트롤의 접근 가능한 이름이 됩니다. 그래서 각 컨트롤 앞에 붙여 읽어도 말이 되는 구절이어야 합니다. "Where should we send it?"이 아니라 "Billing address"입니다. description은 그 아래 한 줄입니다.

disabled

진짜 <fieldset>만 할 수 있는 일입니다. 안의 모든 컨트롤에 닿습니다. 세 단계 아래의 컴포넌트가 렌더링해 이 fieldset의 존재조차 모르는 컨트롤까지 포함해서입니다.

size

size는 legend의 타입 스케일과 컨트롤이 놓이는 간격입니다. 컨트롤 자체에는 닿지 않습니다. sm field들의 묶음은 sm field로 직접 쓰면 됩니다.

접근성

  • role="group"을 가진 진짜 <fieldset>으로 렌더링되고, aria-labelledby로 legend와 연결됩니다.
  • 스크린 리더는 안의 컨트롤마다 legend를 먼저 읽습니다. legend를 질문이 아니라 구절로 쓰는 이유입니다.

Released under the MIT License