Label
ํผ ํ๋์ฉ ์ ์ ํ ์คํธ ๋ผ๋ฒจ ์ปดํฌ๋ํธ
๋ชฉ์ฐจ
ํผ ํ๋ ์ ๋๋ ์์ ํ์ํ๋ ์ ์ ํ
์คํธ ๋ผ๋ฒจ ์ปดํฌ๋ํธ์
๋๋ค. ์ ํ์ ์ผ๋ก leading ์์ด์ฝ๊ณผ ํ์ ํ๋ ํ์(*)๋ฅผ ์ง์ํ๋ฉฐ, ๋นํ์ฑ ์ํ(disabled)๋ ์์ชฝ ํ๋ซํผ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
Label ๋จ๋
์ผ๋ก๋ ํผ ์ปจํธ๋กค๊ณผ ์ฐ๊ฒฐ๋์ง ์์ต๋๋ค. ๋ผ๋ฒจ๊ณผ ์
๋ ฅ์ ์ค์ ๋ก ์ฐ๊ฒฐ(ํด๋ฆญ ์ ํฌ์ปค์ค ์ด๋, ์คํฌ๋ฆฐ ๋ฆฌ๋ ๊ด๊ณ)ํ๋ ค๋ฉด FormField ๋ฅผ ์ฐ์ธ์ โ Flutter Semantics container+label, Web aria-labelledby ๋ก ์ด๋ฏธ ๊ทธ ์ฐ๊ฒฐ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (Basic Usage)#
// ๋จ์ ๋ผ๋ฒจ
const Label(text: 'Email')
// ํ์ ํ๋
const Label(text: 'Email', isRequired: true)
// ์์ด์ฝ ํจ๊ป
const Label(
text: 'Email',
icon: Icon(LucideIcons.mail),
)
// ๋นํ์ฑ ์ํ
const Label(text: 'Email', disabled: true)
// ๋จ์ ๋ผ๋ฒจ
const Label(text: 'Email')
// ํ์ ํ๋
const Label(text: 'Email', isRequired: true)
// ์์ด์ฝ ํจ๊ป
const Label(
text: 'Email',
icon: Icon(LucideIcons.mail),
)
// ๋นํ์ฑ ์ํ
const Label(text: 'Email', disabled: true)
๋น ๋ฅธ ์ค๋ฒ๋ผ์ด๋ (Chain)#
์ด๋ฏธ ๋ง๋ Label ์ธ์คํด์ค์ ์คํ์ผ์ ๋น ๋ฅด๊ฒ ๋ง๋ถ์ด๊ณ ์ถ๋ค๋ฉด withStyle ์ฒด์ธ์ ์ธ ์ ์์ต๋๋ค. ์์ฑ์์ style ์ฌ๋กฏ ์ธ์์ ๋์ผํ๊ฒ ๋์ํ์ง๋ง, ์ด๋ฏธ ๊ตฌ์ฑ๋ ์์ ฏ ์์์ ๋ฐ๋ก ์ด์ด ์ธ ์ ์์ต๋๋ค.
class LabelChainExample extends StatelessWidget {
const LabelChainExample({super.key});
@override
Widget build(BuildContext context) {
return const Label(text: 'Email', isRequired: true).withStyle(
const CoreLabelStyle(
textStyle: CoreTextStyle.token(
CoreTextStyles.titleMedium,
color: CoreColor.token(CoreColors.primary),
),
requiredColor: CoreColor.token(CoreColors.tertiary),
labelRequiredGapStyle: CoreGapStyle(size: CoreSpace.space12),
disabledOpacity: CoreOpacity.opacity50,
),
);
}
}
class LabelChainExample extends StatelessComponent {
const LabelChainExample({super.key});
@override
Component build(BuildContext context) {
return const Label(text: 'Email', isRequired: true).withStyle(
const CoreLabelStyle(
textStyle: CoreTextStyle.token(
CoreTextStyles.titleMedium,
color: CoreColor.token(CoreColors.primary),
),
requiredColor: CoreColor.token(CoreColors.tertiary),
labelRequiredGapStyle: CoreGapStyle(size: CoreSpace.space12),
disabledOpacity: CoreOpacity.opacity50,
),
);
}
}
Live Preview#
์ฝ๋ ๋ณด๊ธฐ
class LabelDefaultExample extends StatelessComponent {
const LabelDefaultExample({super.key});
@override
Component build(BuildContext context) {
return const Label(text: 'Email');
}
}
class LabelDefaultExample extends StatelessWidget {
const LabelDefaultExample({super.key});
@override
Widget build(BuildContext context) {
return const Label(text: 'Email');
}
}
์ฌ์ฉ ์๊ธฐ (When to Use)#
์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ธ์:
- Input / Textarea / Checkbox ๋ฑ ํผ ์ปจํธ๋กค ์์ ๋ผ๋ฒจ ํ ์คํธ๊ฐ ํ์ํ ๋
- ํ์ ํ๋(
*)๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํ ๋ - ๋ผ๋ฒจ์ leading ์์ด์ฝ(๋ฉ์ผ, ์ฌ์ฉ์ ์์ด์ฝ ๋ฑ)์ ํจ๊ป ํ์ํ ๋
- ํผ ํ๋์ ์ํ(
disabled)๋ฅผ ๋ผ๋ฒจ์์๋ ํจ๊ป ๋ฐ์ํ ๋
๋์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ธ์:
- Text: ํผ๊ณผ ๋ฌด๊ดํ ์ผ๋ฐ ํ ์คํธ ํ์
- FormField: ์ ๋ ฅ๊ณผ ๋ผ๋ฒจยท์ค๋ช ยท์ค๋ฅยท๊ฒ์ฆ ์ปจํ ์คํธ๋ฅผ ํจ๊ป ๊ตฌ์ฑํด์ผ ํ ๋. ๋ผ๋ฒจ ํด๋ฆญ์ผ๋ก ์ ๋ ฅ์ ํฌ์ปค์คํ๋ ๋์์ ์๋ ๋ณด์ฅํ๋ ๋ํผ๋ ์๋๋๋ค
- Fieldset: ์ฌ๋ฌ ๋ผ๋ฒจยท์ ๋ ฅ์ ๊ณตํต legendยท๋นํ์ฑ ์ค์ฝํ๊ฐ ํ์ํ ๋
- ValidationBadge: ํ๋ ์ด๋ฆ ๋์ valid/invalid ์ํ๋ฅผ ํ์ํ ๋
Props / Parameters#
W ๋ Flutter์ Widget, Web์ Jaspr Component ์
๋๋ค. W?
๋ ์ ํ ์ฌ๋กฏ์
๋๋ค.
| ์์ฑ | ํ์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|---|
text | String | ํ์ | ๋ผ๋ฒจ ํ ์คํธ |
icon |
W? |
null |
leading ์์ด์ฝ (์ ํ) |
isRequired |
bool |
false |
ํ์ ํ๋ ํ์(*) |
disabled |
bool |
false |
๋นํ์ฑ ์ํ (์ ์ฉ disabledContent ํ
์คํธ ์) |
semanticLabel |
String? |
null |
์คํฌ๋ฆฐ ๋ฆฌ๋์ฉ ๋ผ๋ฒจ (Flutter Semantics, Web aria-label) |
htmlFor |
String? |
null |
Deprecated โ ์ด๋ ํ๋ซํผ์์๋ ๋ผ๋ฒจโ์ปจํธ๋กค์ ์์ง ์์ต๋๋ค. ๋์ FormField ๋ฅผ ์ฐ์ธ์. |
labelStyle |
CoreLabelStyle? |
null |
icon size / spacing / ํ ์คํธ chrome override |
์คํ์ผ ์์คํ (Style System)#
๋ชจ๋ chrome / dimensional / ํ
์คํธ override ๋ labelStyle ์ฌ๋กฏ ํ๋๋ก ํ๋ฆ
๋๋ค.
CoreLabelStyle ํ๋#
| ํ๋ | ํ์ | ์ค๋ช |
|---|---|---|
iconStyle |
CoreIconStyle? |
Leading icon style override. size defers to [defaultIconStyle]. |
iconLabelGapStyle |
CoreGapStyle? |
Nested [CoreGapStyle] slot for the gap between the leading icon and the label text โ forwarded straight to
Gap(gapStyle: โฆ)
.
Gap
runs its own resolve / scaling step so this slot is passed raw (pre-scaling) by the parent resolver.
|
labelRequiredGapStyle |
CoreGapStyle? |
Nested [CoreGapStyle] slot for the gap between the label text and the required indicator (
*
) โ forwarded straight to
Gap(gapStyle: โฆ)
.
Gap
runs its own resolve / scaling step so this slot is passed raw (pre-scaling) by the parent resolver.
|
disabledOpacity |
double? |
Opacity applied when disabled is true. |
requiredColor |
CoreColor? |
Required indicator (
*
) colour override for the enabled state. While
disabled
the
*
follows the colour of [disabledTextStyle].
|
textStyle |
CoreTextStyle? |
Text style override for the label text (enabled state). Text colour is carried via [CoreTextStyle.color] inside this slot (sb8 โ raw
textColor
field removed).
|
disabledTextStyle |
CoreTextStyle? |
Text style override for the label text when
disabled
is
true
. Mirrors [textStyle] but applies only in the disabled state โ the resolver layers this on top of [defaultDisabledTextStyle]. Text colour is carried via [CoreTextStyle.color] inside this slot (sb8 โ raw
disabledTextColor
field removed).
|
Resolve chain#
design system default (CoreLabelStyle.defaultX)
โ CoreLabelTheme.style // ํ๋ก์ ํธ ๊ณตํต
โ parent component slot override
โ widget.labelStyle // ์ธ์คํด์ค๋ณ
๋์ ์คํ (Behavior)#
์ธํฐ๋์ #
- ํ์ ์ ์ฉ ์ปดํฌ๋ํธ โ ํด๋ฆญ/ํธ๋ฒ ์ธํฐ๋์ ์์
-
disabled์ผ ๋ ์ ์ฉdisabledContent์ (CoreLabelStyle.defaultDisabledTextStyle) ์ด ์ ์ฉ๋๊ณ , ์ปค์๋forbidden์ผ๋ก ๋ฐ๋๋๋ค -
๊ธ์ ยท ํ์ ํ์(
*) ยท ์์ด์ฝ์ ์ด ๋นํ์ฑ ๊ธ์ ์คํ์ผ(disabledTextStyle)์ ์ ํ๋๋ฅผ ๋ฐ๋ฆ ๋๋ค. ๊ทธ๋์disabledTextStyle์ ์์ ๋ฐ๊พธ๋ฉด ์ ์ด ํจ๊ป ๋ฐ๋๊ณ ,requiredColor๋ ํ์ฑ ์ํ์์๋ง ์ฐ์ ๋๋ค โ ๋นํ์ฑ ํ๋์ ๋ถ์*๊ฐ ๋จ์ "์ง๊ธ ์ ๋ ฅํด์ผ ํ๋ค"๋ ์๋ชป๋ ์ ํธ๋ฅผ ์ฃผ์ง ์์ต๋๋ค -
disabledOpacity๊ธฐ๋ณธ๊ฐ์1โ ๋นํ์ฑ ๋ผ๋ฒจ์ ์ด๋ฏธ ์ ์ฉ ์์ ๋ค๊ณ ์์ด์ ํฌ๋ช ๋๋ฅผ ๋ ๊ณฑํ๋ฉด ๋๋น๊ฐ ๋์ธ ๋ฐฐ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ํ๋ฉดlabelStyle๋ก ๋ฎ์ถ ์ ์์ต๋๋ค
๋ ์ด์์#
- ๋ฃจํธ๋
inline-flexrow โ leading ์์ด์ฝ โ ํ ์คํธ โ ํ์(*) ์์ - ์์ด์ฝ ํฌ๊ธฐ:
CoreLabelStyle.defaultIconStyle(CoreIconSize.size16, 16px) - ์์ด์ฝ-ํ
์คํธ ๊ฐ๊ฒฉ:
CoreSpace.space6 - ํ
์คํธ-ํ์(
*) ๊ฐ๊ฒฉ:CoreSpace.space4
ํ ํฐ#
| ํญ๋ชฉ | Flutter | Web |
|---|---|---|
| ํฐํธ | labelLarge ์ญํ | text-${ts.labelLarge} |
| ๊ตต๊ธฐ | CoreFontWeight.medium |
font-${CoreFontWeight.scale.medium} |
| ์์ (๊ธฐ๋ณธ) | colorScheme.onSurface |
text-${cs.onSurface} |
| ์์ (disabled) | colorScheme.disabledContent |
text-${cs.disabledContent} |
ํ์(*) ์์ |
colorScheme.error |
text-${cs.error} |
ํ์(*) ์์ (disabled) |
colorScheme.disabledContent (๊ธ์์๊ณผ ๊ฐ์) |
text-${cs.disabledContent} (๊ธ์์๊ณผ ๊ฐ์) |
์ฌ์ฉ ๊ฐ์ด๋๋ผ์ธ (Usage Guidelines)#
โ Do#
disabled ๋ฅผ ์ค์ ํผ ์ปจํธ๋กค์ ์ํ์ ๋๊ธฐํ
Label(text: 'Email', disabled: !emailField.enabled)
์ด์ : Label ์ ํด๋ฆญ/ํธ๋ฒ ์ธํฐ๋์
์ด ์๋ ํ์ ์ ์ฉ ์ปดํฌ๋ํธ๋ผ disabled ๋ ์๊ฐ์ ์์๋ง ๋ฐ๊ฟ๋๋ค. ์ค์ ์
๋ ฅ ํ๋์ ํ์ฑ ์ํ์ ๋ฐ๋ก ๊ด๋ฆฌํ๋ฉด ๋ผ๋ฒจ๊ณผ ํ๋๊ฐ ์๋ก ๋ค๋ฅธ ์ํ๋ก ๋ณด์ฌ ์ฌ์ฉ์์๊ฒ ํผ๋์ ์ค๋๋ค.
โ Don't#
Label ์ ํผ ์ปจํธ๋กค ์์ ์๊ฐ์ ์ผ๋ก๋ง ๋ฐฐ์นํ๊ณ ์ฐ๊ฒฐ๋๋ค๊ณ ๊ฐ์ ํ์ง ์๊ธฐ
// โ Label ์ ์ปจํธ๋กค๊ณผ ์ฐ๊ฒฐ๋์ง ์๋๋ค โ htmlFor ๋ฅผ ์ค๋ ๋ง์ฐฌ๊ฐ์ง
Column(
children: [
const Label(text: 'Email'),
TextField(id: 'email-input'),
],
)
// โ
FormField ๊ฐ ๋ผ๋ฒจ-์ปจํธ๋กค ์ฐ๊ฒฐ์ ์ค์ ๋ก ๋ง๋ ๋ค
FormField(
label: 'Email',
child: TextField(),
)
์ด์ : Label ์ ์ ์ ํ
์คํธ ํ์ ์ปดํฌ๋ํธ๋ผ ๋ผ๋ฒจ์ ํด๋ฆญ/ํญํด๋ ์ปจํธ๋กค์ด ํฌ์ปค์ค๋ฅผ ๋ฐ์ง ๋ชปํ๊ณ , ์คํฌ๋ฆฐ ๋ฆฌ๋๋ ๋ผ๋ฒจ๊ณผ ํ๋์ ๊ด๊ณ๋ฅผ ์ ์ ์์ต๋๋ค. ๊ทธ ์ฐ๊ฒฐ์ FormField ๊ฐ ๋ด๋นํฉ๋๋ค.
์ ๊ทผ์ฑ (Accessibility)#
์ญํ #
-
Flutter โ role ์์.
semanticLabel์ ์ฃผ๋ฉดSemantics(label:)๋ก,htmlFor๋ฅผ ์ฃผ๋ฉดSemantics(identifier:)๋ก ํ ๊ฒน์ฉ ๊ฐ์ธ์ง์ง๋ง ์ด๋ ์ชฝ๋ role ์ ์ธ์ฐ์ง ์์ต๋๋ค. -
Web โ ๋ฃจํธ ํ๊ทธ๊ฐ
<span>์ผ๋ก ๊ณ ์ ์ด๊ณrole์ ๋ถ์ด์ง ์์ต๋๋ค.htmlFor๋ ๊ทธ<span>์for์์ฑ์ผ๋ก,semanticLabel์aria-label๋ก ์ค๋ฆฝ๋๋ค. ๋ด๋ถ์ ์์ด์ฝ ๋ํผ์ ํ์ ํ์(*)<span>์๋ ์ญํ ์ด ์์ต๋๋ค.
ํค๋ณด๋#
์์. ๋ผ๋ฒจ์ ์ด๋ ํ๋ซํผ์์๋ ํฌ์ปค์ค๋ฅผ ๋ฐ์ง ์์ต๋๋ค โ Flutter ๊ตฌํ์
Focus / FocusNode ๊ฐ ์๊ณ Web <span>
์ tabindex ๊ฐ ๋ถ์ง ์์ tab stop ์ด
์๋๋ฉฐ, ํค ํธ๋ค๋ฌ๋ ์์ชฝ ๋ชจ๋ ์์ต๋๋ค. ๋ผ๋ฒจ์ ๋๋ฌ ์ฐ๊ฒฐ๋ ์ปจํธ๋กค๋ก ๋์ด๊ฐ๋
๋์๋ ์์ต๋๋ค(โ ์๋ ค์ง ์ ์ฝ).
์คํฌ๋ฆฐ ๋ฆฌ๋#
-
์ ๊ทผ ๊ฐ๋ฅํ ์ด๋ฆ์ ์ถ์ฒ๋ ํ์ ํ
์คํธ(
text)์ ๋๋ค.semanticLabel์ ์ฃผ๋ฉด ๊ทธ ๊ฐ์ด ๋์ ์ฝํ๋๋ค โ Flutter ๋Semantics(label:), Web ์aria-label๋ก ๋๊ฐ๋ฉฐ Web ์ชฝ ๋๋ฌ์ฑ์๋ ์ ์ฝ์ด ์์ต๋๋ค(โ ์๋ ค์ง ์ ์ฝ). -
isRequired: true๋*๊ธ๋ฆฌํ ํ๋๋ก๋ง ํํ๋ฉ๋๋ค.aria-required๊ฐ์ ์ํ๋ "ํ์" ๋ผ๋ ํ ์คํธ๋ก๋ ๋๊ฐ์ง ์์ผ๋ฏ๋ก, ํ์์์ ํ์คํ ์๋ ค์ผ ํ๋ฉดsemanticLabel: 'Email (ํ์)'์ฒ๋ผ ์ด๋ฆ์ ์ง์ ๋ด์ผ์ธ์. - ์ํ ํต๋ณด ์์ โ ๋ผ๋ฒจ์ ์ ์ ํ ์คํธ์ด๊ณ live region ์ด ์๋๋๋ค.
ํฌ์ปค์ค ๊ด๋ฆฌ#
ํด๋น ์์. ์ค๋ฒ๋ ์ด๊ฐ ์๋๊ณ ํฌ์ปค์ค๋ฅผ ๋ฐ์ง๋ ์์ผ๋ฏ๋ก ์ง์
ยท์ดํยทํธ๋ฉ ๋ชจ๋
๋์์ด ์๋๋๋ค. Tab ์ ๋ผ๋ฒจ์ ๊ฑด๋๋๋๋ค.
์๋ ค์ง ์ ์ฝ#
-
htmlFor๋ ์ด๋ ํ๋ซํผ์์๋ ๋ผ๋ฒจ๊ณผ ์ปจํธ๋กค์ ์ค์ ๋ก ์์ง ์์ต๋๋ค. Web ์ ๋ฃจํธ๋tag: 'span'์ผ๋ก ๊ณ ์ ์ธ๋ฐfor๋<label>/<output>์์๋ง ์๋ฏธ๋ฅผ ๊ฐ๋ ์์ฑ์ด๋ผ<span for="...">๋ ์๋ฌด ๊ด๊ณ๋ ๋ง๋ค์ง ์๊ณ , Flutter ๋ ๊ทธ ๊ฐ์Semantics(identifier:)๋ฉํ๋ก๋ง ์ค์ ๋ฟ์ ๋๋ค. ๋ ๊ตฌํ ๋ชจ๋ ํญ/ํด๋ฆญ ํธ๋ค๋ฌ๊ฐ ์์ด ๋ผ๋ฒจ์ ๋๋ฌ๋ ์ปจํธ๋กค์ด ํฌ์ปค์ค๋ฅผ ๋ฐ์ง ์์ต๋๋ค. ๋ฃจํธ ํ๊ทธ๋ ํธ์ถ๋ถ๊ฐ ๋ฐ๊ฟ ์ ์์ผ๋ฏ๋ก ์ฐํํ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.htmlFor๋ deprecated ์ด๋ฉฐ, ์ค์ ๋ผ๋ฒจ-์ปจํธ๋กค ์ฐ๊ฒฐ์ด ํ์ํ๋ฉด FormField ๋ฅผ ์ฐ์ธ์. -
Web ์
semanticLabel์role์ด ์๋<span>์aria-label๋ก ์ค๋ฆฝ๋๋ค. ARIA ๋ ์ ๋ค๋ฆญ ์์์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ ๊ธ์งํ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ๊ฐ์ ์ ๊ทผ์ฑ ํธ๋ฆฌ์ ๋ ธ์ถํ์ง ์์ ์ ์์ต๋๋ค. Flutter ๋Semantics(label:)๋ก ๊ฐ์ธ ๊ฐ์ ๊ทธ๋๋ก ์ ๋ฌํ๋ฏ๋ก ๊ฐ์ ์ฝ๋๊ฐ ๋ ํ๋ซํผ์์ ๋ค๋ฅด๊ฒ ์ฝํ๋๋ค. -
disabled: true๋ ์ํ๋ก ํต๋ณด๋์ง ์๊ณ ์๊ฐ์ผ๋ก๋ง ์ ๋ฌ๋ฉ๋๋ค. Web ์cursor-not-allowed์ ํ ์คํธ ์์ ๋ฐ๊พธ๊ณdisabledOpacity๋ฅผ ์ธ๋ผ์ธopacity๋ก ๋ด๋ณด๋ด๋ฉฐ, Flutter ๋SystemMouseCursors.forbidden๊ณผOpacity๋ฅผ ์์๋๋ค. ํ์ง๋ง ์ด๋ ์ชฝ๋aria-disabled๋Semantics(enabled: false)๋ฅผ ์ธ์ฐ์ง ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋์๋ ํ์ฑ ๋ผ๋ฒจ๊ณผ ๊ตฌ๋ณ๋์ง ์์ต๋๋ค. ๊ฒ๋ค๊ฐdisabledOpacity์ ๊ธฐ๋ณธ๊ฐ์ดCoreOpacity.opacity100(= 1) ์ด๋ผ ๊ธฐ๋ณธ ๊ฒฝ๋ก์์๋ ์ํ ๊ฐ์ ๊ฐ ์ผ์ด๋์ง ์๊ณ , ๋จ๋ ์๊ฐ ์ฐจ์ด๋ ์ ํ ํฐ(onSurfaceโdisabledContent)๊ณผ ์ปค์๋ฟ์ ๋๋ค โ ์ ๊ฐ์ ๋ชจ๋์์๋ ๋ ์์ด ๊ฐ์ ์์คํ ์์ผ๋ก ์ ํ๊ณ ์ปค์๋ ๋ง์ฐ์ค ์ฌ์ฉ์์๊ฒ๋ง ๋ณด์ ๋๋ค. ๊ฐ์ ๊ฐ ํ์ํ๋ฉดCoreLabelStyle(disabledOpacity: โฆ)๋ก ์ง์ ๋ฎ์ถ์ธ์.
ํฌ๋ก์ค ํ๋ซํผ ์ฐจ์ด์ (Platform Differences)#
| ํญ๋ชฉ | Flutter | Web |
|---|---|---|
| ํ์ ๋ฃจํธ | Row | label ํ๊ทธ๊ฐ ์๋ span |
| semanticLabel | Semantics.label | generic span์ aria-label |
| deprecated htmlFor | ์๋งจํฑ identifier | span์ for ์์ฑ. ์ ๋ ฅ ์ฐ๊ฒฐ ํจ๊ณผ๋ ์์ |
| ๋นํ์ฑ ํ์ | ํด์๋ ํ ์คํธ ์ยท์ ํ์ Opacityยท์ปค์ | CSS ๋นํ์ฑ ์ยทopacityยท์ปค์ |
๊ด๋ จ ์ปดํฌ๋ํธ (Related Components)#
- Form: ํผ ํ๋ ๊ทธ๋ฃนํ + ๊ฒ์ฆ
- FormField: ๋ผ๋ฒจ-์ปจํธ๋กค์ ์ค์ ๋ก ์ฐ๊ฒฐํ๋ ํผ ํ๋ ๋ํผ
- Fieldset: ์ฌ๋ฌ ๋ผ๋ฒจ/์ ๋ ฅ์ ๊ทธ๋ฃน ์ปจํ ์ด๋
- ValidationBadge: ๋ผ๋ฒจ ์ valid/invalid ์ธ๋์ผ์ดํฐ