본문으로 건너뛰기

PlFieldset

한 질문에 함께 답하는 컨트롤 묶음이고, 그 위에 이름이 붙습니다. 표면은 그리지 않습니다. 묶음은 시트가 아니고, 시트는 이미 있습니다.

React
tsx
import { PlFieldset, PlTextField } from 'plass-ui';

<PlFieldset legend="Billing address" description="Where the invoice goes.">
  <PlTextField label="Street" />
  <PlTextField label="City" />
</PlFieldset>;
dart
import 'package:plass_ui/plass_ui.dart';

PlFieldset(
  legend: const Text('Billing address'),
  description: const Text('Where the invoice goes.'),
  children: <Widget>[streetField, cityField],
);

Props

Prop타입기본값설명
legendReactNode이 묶음의 이름. 안에 든 모든 컨트롤의 접근 가능한 이름에 들어가므로, 각각 앞에 놓아도 말이 되는 구절이어야 합니다 — "받는 주소"이지 "어디로 보낼까요?"가 아닙니다
descriptionReactNodelegend 아래 한 줄
disabledbooleanfalse안의 모든 컨트롤을 한 번에 끕니다. <fieldset>이 늘 해 온 그대로입니다
size공통'xs' | 'sm' | 'md' | 'lg' | 'xl''md'legend의 타입 스케일과 컨트롤 사이의 간격
childrenReactNode한 질문에 함께 답하는 컨트롤들
Prop타입기본값설명
children * List<Widget>한 질문에 함께 답하는 컨트롤들
legendWidget?이 묶음의 이름. 안에 든 모든 컨트롤의 접근 가능한 이름에 들어가므로, 각각 앞에 놓아도 말이 되는 구절이어야 합니다 — "받는 주소"이지 "어디로 보낼까요?"가 아닙니다
descriptionWidget?legend 아래 한 줄
disabledboolfalse안의 모든 것에서 포인터와 focus를 거두고 묶음을 비웁니다. 브라우저의 fieldset 같은 cascade가 여기에는 없습니다
size공통PlassSizePlassSize.mdlegend의 타입 스케일과 컨트롤 사이의 간격

네이티브 <fieldset> 속성은 모두 그대로 전달됩니다. color는 fieldset에 색을 칠할 표면이 없어서 제외됩니다.

공용 축이 라이브러리 전체에서 무엇을 뜻하는지는 prop 규약에 있습니다.

이 컴포넌트가 쥐는 세 가지

셋뿐입니다.

  • legend. 안에 든 모든 컨트롤의 접근 가능한 이름에 들어갑니다. 각각 앞에 놓아도 말이 되는 구절이어야 하는 이유가 그것입니다. "받는 주소"이지 "어디로 보낼까요?"가 아닙니다.
  • 간격. 컨트롤이 서는 거리이고, 시트 사다리를 씁니다.
  • disabled. 진짜 <fieldset>만 할 수 있는 그 하나입니다. 안의 모든 컨트롤에 닿습니다: 세 단계 아래의 컴포넌트가 그리고 이쪽이 존재조차 모르는 것까지.

표면을 그리지 않고 color, variant, elevation도 받지 않습니다. 필드의 묶음은 묶음입니다. 시트가 필요하면 PlCardPlBox 안에 넣으세요.

Examples

disabled

<div> 대신 fieldset을 쓰는 이유입니다. 켜면 안의 모든 컨트롤이 tab 순서에서도 폼에서도 빠집니다. fieldset이 그것들이 무엇인지 알 필요 없이.

React

size

legend의 타입 스케일과 컨트롤 사이의 간격이고, 시트 사다리를 씁니다. PlCard가 섹션을 나눌 때 쓰는 그 사다리인데, fieldset은 폼 안의 컨트롤이 아니라 폼의 한 섹션이기 때문입니다.

React

시트 안에서

카드 하나에 fieldset 둘이 흔한 배치이고, 표면을 그리지 않는 규칙이 값을 하는 자리가 거기입니다. 카드가 시트이고, 각 묶음은 그 위의 이름과 간격입니다.

React

되돌린 브라우저 기본값 둘

<fieldset>은 자기만의 border, padding, margin을 갖고 도착하는데, 셋 다 이 라이브러리의 것이 아닙니다. 전부 되돌립니다.

min-width: min-content도 마찬가지입니다. 모든 브라우저가 fieldset에만 주는 값이고, 넓은 표를 담은 fieldset이 flex row 안에서 줄어들기를 거부하는 이유가 그것입니다. min-w-0이 그것을 되돌립니다.

React 빌드와 다른 점

ReactFlutter이유
네이티브 <fieldset> 속성인 disabled포인터를 거두고, focus를 거두고, 묶음을 비움Flutter에는 그런 cascade가 없습니다. 그 속성이 실제로 사 주는 세 가지를 대신 합니다. 못 하는 것은 안의 필드가 스스로 "쓸 수 없음"이라고 말하게 하는 것이라, 그렇게 알려야 하는 필드에는 자기 disabled를 주세요.
브라우저의 border·padding·margin·min-width를 되돌린 <fieldset>Column되돌릴 것이 없습니다.
모든 컨트롤의 접근 가능한 이름에 들어가는 legend이름 있는 컨테이너 위의 heading인 legend물려받을 <fieldset>/<legend> 짝이 Flutter에는 없고, 컨트롤 이름마다 앞에 붙이면 묶음의 이름을 컨트롤 수만큼 말하게 됩니다.
childrenchildren: List<Widget>스택을 여기서 배치하므로 받은 것을 셉니다.
className, style, 네이티브 속성전달할 class 목록도 style 속성도 없습니다.

Accessibility

  • 진짜 <fieldset>이고, 그것이 group이며, legend가 이름을 냅니다.
  • legend는 그려진 <legend>가 아니라 aria-labelledby가 가리키는 <div>입니다. Base UI의 결정이고, 그 덕에 묶음이 평범한 flex 컨테이너가 됩니다. 진짜 <legend>는 모든 브라우저가 fieldset의 content box 밖으로 들어 올리므로, gap이 그 아래에 아무 공간도 만들지 못합니다.
  • fieldset의 disabled는 네이티브 속성이라 플랫폼이 하는 방식으로 자손을 비활성화합니다. context도, prop을 꿰는 일도, 나중에 추가된 컨트롤에서 잊을 것도 없습니다.
  • legenddescription도 없는 fieldset은 heading 블록을 아예 그리지 않습니다. 빈 이름은 없는 것보다 나쁩니다. 모든 컨트롤 이름 앞에 공백을 붙이기 때문입니다.

Released under the MIT License