Email field

An email field takes an address and checks that it is well formed before the form is sent. Choose one address or a comma-separated list, and the same field checks every address, so you write no format check of your own. Below, one field reports a malformed address while another switches itself off.

Send invites Save draft Import list Done

Reference docs⁠

BlazorReactWebOverviewExamplesAPIStylingAccessibility

Choosing a text field⁠

Seven components share the text field's form. Each suits a different kind of value:

  • Text field: one line of free text, such as a name, a title, or a city.
  • Text area: several lines of free text, such as a comment, a description, or a delivery note.
  • Email field: an email address, which the form checks is well formed before it is sent, with the email keyboard on a phone.
  • Password field: a secret the screen hides as it is typed, such as a password or a PIN.
  • Number field: an exact number, shown formatted for the reader's locale, such as a quantity, a price, or a percentage.
  • Phone number field: a telephone number, with the dial pad on a phone.
  • Search field: a query that filters or searches as the reader types, with the search icon in place.

Two jobs belong elsewhere. A choice from a fixed list is a select, and a number picked by feel rather than typed exactly is a slider.

Choosing a variant⁠

Three variants, from most emphasis to least:

  • Filled: the most emphasis, for a field that must hold its own among other content, such as the one email field on a sign-in page.
  • Outlined: less emphasis, for a form with many fields, such as an invitation list or a checkout.
  • Text: no container and no visible label, for a field whose surroundings already say what it is, such as a recipient line.

Built in⁠

  • The browser's email check runs when the form validates, so a value without an @ and a domain is reported as an error.
  • multiple accepts several comma-separated addresses, and the same check covers each one.
  • inputmode offers the email keyboard on a phone without any setting from you.
  • error-text replaces supporting-text while an error shows, and the filled and outlined variants announce it when it appears.
  • required adds the asterisk to the label, so the label needs no * of its own.
  • Enter submits the owning form, after committing an edited value.
  • input-event-mode paces the input event, from every keystroke to an adaptive wait for your server (Input pacing).

Using email fields well⁠

  • Keep one variant within a form: all filled or all outlined.
  • Make the label a name such as "Work email", and put guidance in supporting-text.
  • Keep the name in label and use placeholder only for an example address.
  • Write error text that says how to fix the address, since it replaces the supporting text while it shows.
  • Put an icon that does something in the icon slot as a button; an icon with no action is decoration.

Theming fields⁠

Set one design token and every field of that variant follows it: text fields, text areas, selects, and the email, number, password, search, and telephone fields alike.

  • --ct-field-filled-* themes filled fields, --ct-field-outlined-* outlined fields, and --ct-field-text-* fields with no container.
  • A token set on the page, or on any element that contains fields, reaches every field of its variant inside it.
  • To restyle email fields only, set the token on the element in your own CSS:
cw-email-field {
  --ct-field-outlined-corner-shape: square;
}
content_copy

The Styling tab lists every token and its default.

These rules follow Material 3 Expressive's guidance for text fields, on material.io.

Variants⁠

Omit variant and the field takes the variant from your style configuration, which is filled unless you have changed it. The text variant has no container, no visible label, no supporting text, and no counter, so its label is only the accessible name.

Labels and hints⁠

label rests in the input's place and floats above it once the field has focus or a value. placeholder shows an example address while the field is empty. supporting-text sits below the field and is read as part of its description.

Several addresses⁠

multiple lets one field hold a comma-separated list. The browser's email check then covers each address, so the field reports an error when any one of them is malformed. The button in the demo shows the error state the page sets with error.

Icons⁠

leading-icon-name and trailing-icon-name name a Material Symbols icon. The leading-icon and trailing-icon slots do the same job with your own content, and a slot wins over a name, with a warning logged. An icon alone never names the field, so an icon that does something belongs in a button.

Badges⁠

badge-value puts text on a badge, badge-dot shows a dot with no text, and badge-concealed hides the badge while keeping its settings.

Errors⁠

error puts the field in its error state, and error-text replaces the supporting text while it shows. An empty error-text leaves the supporting text in place. A form's own validation reaches the same state when it reports validity.

Forms⁠

name is the name the field's value is submitted under. required blocks a submit while the field is empty and adds an asterisk to the label. minlength, maxlength, and pattern add further limits, and maxlength also shows a character counter. autocomplete with the value email lets the browser fill the address.

Pressing Enter in the field commits an edit and submits the owning form, and with no form it does nothing. The preview below blocks real submits, so its button reports the click instead.

Disabled and read only⁠

disabled turns the field off, and a disabled fieldset around it does the same. readonly keeps the value fixed while the user can still focus the field and select its text.

Density⁠

density takes five values, from 0 for standard height to 4 for the tightest. Omit it and the field takes the density from your style configuration, which is standard unless you have changed it. The filled variant hides its label at density 2 and above, and the label stays as the accessible name. The text variant ignores density.

Input pacing⁠

input-event-mode decides when the field fires input. immediate, the default, fires on every keystroke. debounced fires once typing pauses for input-rate-limit-delay, 300 milliseconds unless you set it, and throttled fires at most once per interval while typing continues. adaptive waits for a pause measured from how this user types and how fast asyncSink answers, never shorter than input-rate-limit-delay. Only the event waits: value is current on every keystroke.

asyncSink and sink-duty-cycle work as on the text field. Event pacing compares the modes across every component that paces an event.

Input mode⁠

inputmode picks the virtual keyboard a phone offers. Omit it and the field takes the keyboard from your app configuration, which is email unless you have changed it. A phone shows the keyboard and the preview does not, so this demo shows the attributes only.

Text direction⁠

text-direction sets which way the text runs as it is typed. Leave it unset to follow the page, or set LTR to keep an address left to right inside right-to-left text.

Properties⁠

PropertyAttributeTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input pacing.
autocompleteautocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbadge-concealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbadge-dotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuebadge-valuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densitydensity0, 1, 2, 3, 4DensityDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disableddisabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read only.
errorerrorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Several addresses, Errors.
errorTexterror-textstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors.
formread-onlyHTMLFormElementThe form the component belongs to, or null when it has none.
hasLeadingIconhas-leading-iconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leading-icon slot and leadingIconName; set it yourself only when the field is rendered on the server.
hasTrailingIconhas-trailing-iconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailing-icon slot and trailingIconName; set it yourself only when the field is rendered on the server.
inputEventModeinput-event-modeimmediate, adaptive, debounced, throttledInputEventModeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input pacing.
inputModeinputmodenone, decimal, email, numeric, search, tel, text, urlInputModeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Email, from the app configurationThe virtual keyboard to offer on a touch screen. An email field offers the email keyboard unless the inputmode attribute says otherwise. See Input mode.
inputRateLimitDelayinput-rate-limit-delaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input pacing.
labellabelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
labelsread-onlyNodeListThe <label> elements associated with the element.
leadingIconNameleading-icon-namestringA leading Material Symbols icon name. This is an alternative to using the leading-icon slot. If both are provided, the leading-icon slot will take precedence, and a warning will be logged. See Icons.
maxLengthmaxlengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Forms.
minLengthminlengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Forms.
multiplemultiplebooleandefault falseLets an email field accept several comma-separated addresses.See MDN: email input multiple attribute. See Several addresses.
namenamestringThe name the element's value is submitted under with its form. See Forms.
patternpatternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Forms.
placeholderplaceholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints.
prefixTextprefix-textstringAn optional prefix to display before the input value.
readOnlyreadonlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read only.
requiredrequiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Forms.
selectionEndnumberThe position where the text selection ends.
selectionStartnumberThe position where the text selection starts.
sinkDutyCyclesink-duty-cyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input pacing.
suffixTextsuffix-textstringAn optional suffix to display after the input value.
supportingTextsupporting-textstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectiontext-direction"", auto, LTR, RTLTextDirectionTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNametrailing-icon-namestringA trailing Material Symbols icon name. This is an alternative to using the trailing-icon slot. If both are provided, the trailing-icon slot will take precedence, and a warning will be logged. See Icons.
validationMessageread-onlystringThe message describing why the element is invalid, or an empty string when it is valid.
validityread-onlyValidityStateThe element's ValidityState.
valuevaluestringThe field's current value, always as a string. See Forms, Input pacing.
variantvariantfilled, outlined, textFieldVariantFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.
willValidateread-onlybooleanWhether the element takes part in constraint validation. False while it is disabled or read-only.

Slots⁠

SlotDescription
containerCustom background content.
leading-iconThe leading icon, intended for a cw-icon or equivalent.
trailing-iconThe trailing icon, intended for a cw-icon or equivalent.

Events⁠

EventTypeDetailDescription
selectEvent—Dispatched when the user selects text in the field. It bubbles.
changeEvent—Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
inputInputEvent—Dispatched each time the user edits the value. It bubbles and is composed.

Methods⁠

MethodReturnsDescription
checkValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches an invalid event; nothing changes on screen.
reportValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches a cancelable invalid event and, unless a listener cancels it, shows validationMessage as the field's error text and focuses the field.
reset()voidRestores the value the value attribute holds, or an empty string, and clears any error reportValidity() showed.
select()voidSelects all the text in the field.See MDN: HTMLInputElement.select() and MDN: HTMLTextAreaElement.select().
setCustomValidity(error: string)voidSets a custom validation message, which makes the element invalid. An empty string clears it.
setRangeText(replacement: string, start?: number, end?: number, selectionMode?: string)voidReplaces a range of the field's text and updates value to match. With only a replacement, it replaces the current selection; with a start and end, it replaces that range.
setSelectionRange(start: number, end: number, direction?: string)voidSets the start and end positions of the selection in the field.See MDN: HTMLInputElement.setSelectionRange() and MDN: HTMLTextAreaElement.setSelectionRange().

Props⁠

PropTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input pacing.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Several addresses, Errors.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors.
formread-only (ref)HTMLFormElementThe form the component belongs to, or null when it has none.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the slot="leading-icon" child and leadingIconName; set it yourself only when the field is rendered on the server.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the slot="trailing-icon" child and trailingIconName; set it yourself only when the field is rendered on the server.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input pacing.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Email, from the app configurationThe virtual keyboard to offer on a touch screen. An email field offers the email keyboard unless the inputMode attribute says otherwise. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input pacing.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
labelsread-only (ref)NodeListThe <label> elements associated with the element.
leadingIconNamestringA leading Material Symbols icon name. This is an alternative to using the slot="leading-icon" child. If both are provided, the slot="leading-icon" child will take precedence, and a warning will be logged. See Icons.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Forms.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Forms.
multiplebooleandefault falseLets an email field accept several comma-separated addresses.See MDN: email input multiple attribute. See Several addresses.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Forms.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Forms.
selectionEndthrough the refnumberThe position where the text selection ends.
selectionStartthrough the refnumberThe position where the text selection starts.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input pacing.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the slot="trailing-icon" child. If both are provided, the slot="trailing-icon" child will take precedence, and a warning will be logged. See Icons.
validationMessageread-only (ref)stringThe message describing why the element is invalid, or an empty string when it is valid.
validityread-only (ref)ValidityStateThe element's ValidityState.
valuestringThe field's current value, always as a string. See Forms, Input pacing.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.
willValidateread-only (ref)booleanWhether the element takes part in constraint validation. False while it is disabled or read-only.

Children⁠

ChildDescription
a child with slot="container"Custom background content.
a child with slot="leading-icon"The leading icon, intended for a CrIcon or equivalent.
a child with slot="trailing-icon"The trailing icon, intended for a CrIcon or equivalent.

Events⁠

PropArgumentDescription
onSelectEventDispatched when the user selects text in the field. It bubbles.
onChangeReact.ChangeEvent<HTMLInputElement>Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
onInputReact.ChangeEvent<HTMLInputElement>Dispatched each time the user edits the value. It bubbles and is composed.

Methods⁠

Call these on the element the ref holds.

MethodReturnsDescription
checkValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches an invalid event; nothing changes on screen.
reportValidity()booleanChecks the element's validity and returns true if it is valid. If not, it dispatches a cancelable invalid event and, unless a listener cancels it, shows validationMessage as the field's error text and focuses the field.
reset()voidRestores the value the value attribute holds, or an empty string, and clears any error reportValidity() showed.
select()voidSelects all the text in the field.See MDN: HTMLInputElement.select() and MDN: HTMLTextAreaElement.select().
setCustomValidity(error: string)voidSets a custom validation message, which makes the element invalid. An empty string clears it.
setRangeText(replacement: string, start?: number, end?: number, selectionMode?: string)voidReplaces a range of the field's text and updates value to match. With only a replacement, it replaces the current selection; with a start and end, it replaces that range.
setSelectionRange(start: number, end: number, direction?: string)voidSets the start and end positions of the selection in the field.See MDN: HTMLInputElement.setSelectionRange() and MDN: HTMLTextAreaElement.setSelectionRange().

Parameters⁠

ParameterTypeDescription
AsyncSinkValueChangeSink?The async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input pacing.
Autocompletestring?Describes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
BadgeConcealedbool?default falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
BadgeDotbool?default falseShows the badge as a small dot with no text, whether or not BadgeValue is set. See Badges.
BadgeValuestring?The badge's text. While it is empty and BadgeDot is not set, no badge renders. Ignored if BadgeDot is set. See Badges.
DensityDensity?Density.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
Disabledbool?Whether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read only.
Errorbool?default falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Several addresses, Errors.
ErrorTextstring?The error message that replaces supporting text when Error is true. If ErrorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors.
HasLeadingIconbool?default falseWhether the field reserves space for a leading icon. Set automatically from the LeadingIcon render fragment and LeadingIconName; set it yourself only when the field is rendered on the server.
HasTrailingIconbool?default falseWhether the field reserves space for a trailing icon. Set automatically from the TrailingIcon render fragment and TrailingIconName; set it yourself only when the field is rendered on the server.
InputEventModeInputEventMode?InputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by InputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what AsyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input pacing.
InputModeInputMode?InputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Email, from the app configurationThe virtual keyboard to offer on a touch screen. An email field offers the email keyboard unless the InputMode attribute says otherwise. See Input mode.
InputRateLimitDelayint?default 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input pacing.
Labelstring?The field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
LeadingIconNamestring?A leading Material Symbols icon name. This is an alternative to using the LeadingIcon render fragment. If both are provided, the LeadingIcon render fragment will take precedence, and a warning will be logged. See Icons.
MaxLengthint?default -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Forms.
MinLengthint?default -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Forms.
Multiplebool?default falseLets an email field accept several comma-separated addresses.See MDN: email input multiple attribute. See Several addresses.
Namestring?The name the element's value is submitted under with its form. See Forms.
Patternstring?A regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Forms.
Placeholderstring?Placeholder text for when the field is empty. Unlike Label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints.
PrefixTextstring?An optional prefix to display before the input value.
ReadOnlybool?default falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read only.
Requiredbool?default falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Forms.
SinkDutyCycledouble?default 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input pacing.
SuffixTextstring?An optional suffix to display after the input value.
SupportingTextstring?Conveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
TextDirectionTextDirection?TextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
TrailingIconNamestring?A trailing Material Symbols icon name. This is an alternative to using the TrailingIcon render fragment. If both are provided, the TrailingIcon render fragment will take precedence, and a warning will be logged. See Icons.
Valuestring?The field's current value, always as a string. See Forms, Input pacing.
ValueExpressionExpression<Func<string>>?Gets or sets an expression that identifies the bound value.
VariantFieldVariant?FieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Render fragments⁠

ParameterTypeDescription
ContainerRenderFragment?Custom background content.
LeadingIconRenderFragment?The leading icon, intended for a CbIcon or equivalent.
TrailingIconRenderFragment?The trailing icon, intended for a CbIcon or equivalent.

Event callbacks⁠

ParameterTypeDescription
OnSelectEventCallbackDispatched when the user selects text in the field. It bubbles.
OnChangeEventCallback<ChangeEventArgs>Dispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
OnInputEventCallback<ChangeEventArgs>Dispatched each time the user edits the value. It bubbles and is composed.

Inputs⁠

InputTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input pacing.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Several addresses, Errors.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leading-icon slot and leadingIconName; set it yourself only when the field is rendered on the server.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailing-icon slot and trailingIconName; set it yourself only when the field is rendered on the server.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input pacing.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Email, from the app configurationThe virtual keyboard to offer on a touch screen. An email field offers the email keyboard unless the inputMode attribute says otherwise. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input pacing.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
leadingIconNamestringA leading Material Symbols icon name. This is an alternative to using the leading-icon slot. If both are provided, the leading-icon slot will take precedence, and a warning will be logged. See Icons.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Forms.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Forms.
multiplebooleandefault falseLets an email field accept several comma-separated addresses.See MDN: email input multiple attribute. See Several addresses.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Forms.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Forms.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input pacing.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the trailing-icon slot. If both are provided, the trailing-icon slot will take precedence, and a warning will be logged. See Icons.
valuestringThe field's current value, always as a string. See Forms, Input pacing.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Content projection⁠

ContentDescription
an element with slot="container"Custom background content.
an element with slot="leading-icon"The leading icon, intended for a CaIcon or equivalent.
an element with slot="trailing-icon"The trailing icon, intended for a CaIcon or equivalent.

Outputs⁠

OutputEventDescription
cwSelectEventDispatched when the user selects text in the field. It bubbles.
cwChangeEventDispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
cwInputInputEventDispatched each time the user edits the value. It bubbles and is composed.

Props⁠

PropTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input pacing.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Several addresses, Errors.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leading-icon slot and leadingIconName; set it yourself only when the field is rendered on the server.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailing-icon slot and trailingIconName; set it yourself only when the field is rendered on the server.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input pacing.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Email, from the app configurationThe virtual keyboard to offer on a touch screen. An email field offers the email keyboard unless the inputMode attribute says otherwise. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input pacing.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
leadingIconNamestringA leading Material Symbols icon name. This is an alternative to using the leading-icon slot. If both are provided, the leading-icon slot will take precedence, and a warning will be logged. See Icons.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Forms.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Forms.
multiplebooleandefault falseLets an email field accept several comma-separated addresses.See MDN: email input multiple attribute. See Several addresses.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Forms.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Forms.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input pacing.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the trailing-icon slot. If both are provided, the trailing-icon slot will take precedence, and a warning will be logged. See Icons.
valuestringThe field's current value, always as a string. See Forms, Input pacing.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Slots⁠

SlotDescription
containerCustom background content.
leading-iconThe leading icon, intended for a CvIcon or equivalent.
trailing-iconThe trailing icon, intended for a CvIcon or equivalent.

Events⁠

EventTypeDescription
selectEventDispatched when the user selects text in the field. It bubbles.
changeEventDispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
inputInputEventDispatched each time the user edits the value. It bubbles and is composed.

Props⁠

PropTypeDescription
asyncSinkValueChangeSinkThe async work, such as a request to a server, that the field paces input against. It is called whenever the field delivers an input event, in every mode, and Adaptive also uses it to set how soon the next one comes. A slow sink is asked less often, and is not called once per keystroke. Read the field's value inside it, as an input listener would. See Input pacing.
autocompletestringDescribes what, if any, type of autocomplete functionality the input should provide.See MDN: autocomplete attribute. See Forms.
badgeConcealedbooleandefault falseHides the badge while keeping its value and dot setting, so clearing this property shows the same badge again. See Badges.
badgeDotbooleandefault falseShows the badge as a small dot with no text, whether or not badgeValue is set. See Badges.
badgeValuestringThe badge's text. While it is empty and badgeDot is not set, no badge renders. Ignored if badgeDot is set. See Badges.
densityDensityTypeDensity.Standard, .Dense1, .Dense2, .Dense3, .Dense4default Density.Standard, from the style configurationThe field's density level.Ignored for Text variants. See Density.
disabledbooleanWhether the element is disabled. Also reads true while a disabled <fieldset> contains it. See Disabled and read only.
errorbooleandefault falseShows the field in its error state and marks the input invalid for assistive technology.This error state overrides the error state controlled by reportValidity(). See Several addresses, Errors.
errorTextstringThe error message that replaces supporting text when error is true. If errorText is an empty string, then the supporting text will continue to show.This error message overrides the error message displayed by reportValidity(). See Errors.
hasLeadingIconbooleandefault falseWhether the field reserves space for a leading icon. Set automatically from the leadingIconSnippet snippet and leadingIconName; set it yourself only when the field is rendered on the server.
hasTrailingIconbooleandefault falseWhether the field reserves space for a trailing icon. Set automatically from the trailingIconSnippet snippet and trailingIconName; set it yourself only when the field is rendered on the server.
inputEventModeInputEventModeTypeInputEventMode.Immediate, .Adaptive, .Debounced, .Throttleddefault InputEventMode.ImmediateWhen the field fires input. Debounced and Throttled pace it by inputRateLimitDelay, and Adaptive paces it to the user's own typing rhythm and to what asyncSink can keep up with. A cleared or unrecognized value is treated as the field's default. See Input pacing.
inputModeInputModeTypeInputMode.None, .Decimal, .Email, .Numeric, .Search, .Tel, .Text, .Urldefault InputMode.Email, from the app configurationThe virtual keyboard to offer on a touch screen. An email field offers the email keyboard unless the inputMode attribute says otherwise. See Input mode.
inputRateLimitDelaynumberdefault 300The pacing interval for input, in milliseconds: the pause after the last keystroke for Debounced, the minimum gap between events for Throttled, and the shortest allowed pause for Adaptive. Immediate ignores it. A value that is not a finite number is treated as the default, and a negative one as 0. See Input pacing.
labelstringThe field's label, which rests in the input's place and floats above it when the field has focus or a value. It is also the input's accessible name unless aria-label is set. Hidden in the filled variant at density 2 and above, where it is only the accessible name.Learn more about floating labels from the Material Design 3: text fields guidelines.For Text variants, only sets the ARIA label. See Variants, Labels and hints.
leadingIconNamestringA leading Material Symbols icon name. This is an alternative to using the leadingIconSnippet snippet. If both are provided, the leadingIconSnippet snippet will take precedence, and a warning will be logged. See Icons.
maxLengthnumberdefault -1The most characters the field accepts, or -1 for no limit. When set, a character counter shows below the field and is read as part of its description.See MDN: input maxlength attribute. See Forms.
minLengthnumberdefault -1The fewest characters the value may have to pass constraint validation, checked once the user has edited it. Set to -1 for none.See MDN: input minlength attribute. See Forms.
multiplebooleandefault falseLets an email field accept several comma-separated addresses.See MDN: email input multiple attribute. See Several addresses.
namestringThe name the element's value is submitted under with its form. See Forms.
patternstringA regular expression that the field's value must match to pass constraint validation.See MDN: input pattern attribute. See Forms.
placeholderstringPlaceholder text for when the field is empty. Unlike label, the placeholder never floats, and it is hidden once the field has a value.See MDN: placeholder attribute. See Labels and hints.
prefixTextstringAn optional prefix to display before the input value.
readOnlybooleandefault falseIndicates whether or not a user should be able to edit the field's value.See MDN: input readonly attribute. See Disabled and read only.
requiredbooleandefault falseIndicates that the user must specify a value for the input before the owning form can be submitted and will render an error state when reportValidity() is invoked when value is empty. Additionally the floating label will render an asterisk "*" when true.See MDN: required attribute. See Forms.
sinkDutyCyclenumberdefault 1The share of the sink's time this field may occupy, above 0 and up to 1, in every input event mode. At 1 the next call goes out as soon as the last one finishes; at 0.25 the field leaves three quarters of the time idle. A value below 0.01 is treated as 0.01, and an assignment outside the range is ignored. See Input pacing.
suffixTextstringAn optional suffix to display after the input value.
supportingTextstringConveys additional information below the field, such as how it should be used. The text variant does not show it, but still reads it as part of the input's description. See Labels and hints.
textDirectionTextDirectionTypeTextDirection.Default, .Auto, .LTR, .RTLdefault TextDirection.DefaultOverride the input text CSS direction. Useful for RTL languages that use LTR notation for fractions. See Text direction.
trailingIconNamestringA trailing Material Symbols icon name. This is an alternative to using the trailingIconSnippet snippet. If both are provided, the trailingIconSnippet snippet will take precedence, and a warning will be logged. See Icons.
valuestringThe field's current value, always as a string. See Forms, Input pacing.
variantFieldVariantTypeFieldVariant.Filled, .Outlined, .Textdefault FieldVariant.Filled, from the style configurationThe field's variant. Unset, the style configuration's default field variant applies, else Filled. See Variants.

Snippets⁠

SnippetDescription
containerSnippetCustom background content.
leadingIconSnippetThe leading icon, intended for a CsIcon or equivalent.
trailingIconSnippetThe trailing icon, intended for a CsIcon or equivalent.

Events⁠

PropTypeDescription
onSelectEventDispatched when the user selects text in the field. It bubbles.
onChangeEventDispatched when the user commits a change to the value, such as by leaving the field after editing it. It bubbles.
onInputInputEventDispatched each time the user edits the value. It bubbles and is composed.

Each attribute value has its own tokens; a cell shows its token's value, and selecting the cell shows the token's fallback path, with each name and value ready to copy. For example, the filled column's active-indicator-color row is --ct-field-filled-active-indicator-color, which defaults to --ct-sys-color-on-surface-variant.

Variant⁠

Namefilledoutlinedtext
active-indicator-color--ct-sys-color-on-surface-variant --ct-field-filled-active-indicator-color——
active-indicator-height1px --ct-field-filled-active-indicator-height——
bottom-space16px --ct-field-filled-bottom-space16px --ct-field-outlined-bottom-space—
caret-color--ct-sys-color-primary --ct-field-filled-caret-color--ct-sys-color-primary --ct-field-outlined-caret-color--ct-sys-color-primary --ct-field-text-caret-color
container-color--ct-sys-color-surface-container-highest --ct-field-filled-container-color——
container-end-end-radius—--ct-sys-corner-radius-extra-small --ct-field-outlined-container-end-end-radius—
container-end-start-radius—--ct-sys-corner-radius-extra-small --ct-field-outlined-container-end-start-radius—
container-start-end-radius--ct-sys-corner-radius-extra-small --ct-field-filled-container-start-end-radius--ct-sys-corner-radius-extra-small --ct-field-outlined-container-start-end-radius—
container-start-start-radius--ct-sys-corner-radius-extra-small --ct-field-filled-container-start-start-radius--ct-sys-corner-radius-extra-small --ct-field-outlined-container-start-start-radius—
content-color--ct-sys-color-on-surface --ct-field-filled-content-color--ct-sys-color-on-surface --ct-field-outlined-content-color--ct-sys-color-on-surface --ct-field-text-content-color
content-font--ct-sys-typescale-body-large-font --ct-field-filled-content-font--ct-sys-typescale-body-large-font --ct-field-outlined-content-font--ct-sys-typescale-body-large-font --ct-field-text-content-font
content-line-height--ct-sys-typescale-body-large-line-height --ct-field-filled-content-line-height--ct-sys-typescale-body-large-line-height --ct-field-outlined-content-line-height--ct-sys-typescale-body-large-line-height --ct-field-text-content-line-height
content-placeholder-color--ct-sys-color-on-surface-variant --ct-field-filled-content-placeholder-color--ct-sys-color-on-surface-variant --ct-field-outlined-content-placeholder-color--ct-sys-color-on-surface-variant --ct-field-text-content-placeholder-color
content-prefix-color--ct-sys-color-on-surface-variant --ct-field-filled-content-prefix-color--ct-sys-color-on-surface-variant --ct-field-outlined-content-prefix-color--ct-sys-color-on-surface-variant --ct-field-text-content-prefix-color
content-prefix-trailing-space2px --ct-field-filled-content-prefix-trailing-space2px --ct-field-outlined-content-prefix-trailing-space2px --ct-field-text-content-prefix-trailing-space
content-size--ct-sys-typescale-body-large-size --ct-field-filled-content-size--ct-sys-typescale-body-large-size --ct-field-outlined-content-size--ct-sys-typescale-body-large-size --ct-field-text-content-size
content-space16px --ct-field-filled-content-space16px --ct-field-outlined-content-space—
content-suffix-color--ct-sys-color-on-surface-variant --ct-field-filled-content-suffix-color--ct-sys-color-on-surface-variant --ct-field-outlined-content-suffix-color--ct-sys-color-on-surface-variant --ct-field-text-content-suffix-color
content-suffix-leading-space2px --ct-field-filled-content-suffix-leading-space2px --ct-field-outlined-content-suffix-leading-space2px --ct-field-text-content-suffix-leading-space
content-tracking--ct-sys-typescale-body-large-tracking --ct-field-filled-content-tracking--ct-sys-typescale-body-large-tracking --ct-field-outlined-content-tracking--ct-sys-typescale-body-large-tracking --ct-field-text-content-tracking
content-weight--ct-sys-typescale-body-large-weight --ct-field-filled-content-weight--ct-sys-typescale-body-large-weight --ct-field-outlined-content-weight--ct-sys-typescale-body-large-weight --ct-field-text-content-weight
label-text-color--ct-sys-color-on-surface-variant --ct-field-filled-label-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-label-text-color—
label-text-font--ct-sys-typescale-body-large-font --ct-field-filled-label-text-font--ct-sys-typescale-body-large-font --ct-field-outlined-label-text-font—
label-text-line-height--ct-sys-typescale-body-large-line-height --ct-field-filled-label-text-line-height--ct-sys-typescale-body-large-line-height --ct-field-outlined-label-text-line-height—
label-text-padding-bottom—8px --ct-field-outlined-label-text-padding-bottom—
label-text-populated-line-height--ct-sys-typescale-body-small-line-height --ct-field-filled-label-text-populated-line-height--ct-sys-typescale-body-small-line-height --ct-field-outlined-label-text-populated-line-height—
label-text-populated-size--ct-sys-typescale-body-small-size --ct-field-filled-label-text-populated-size--ct-sys-typescale-body-small-size --ct-field-outlined-label-text-populated-size—
label-text-size--ct-sys-typescale-body-large-size --ct-field-filled-label-text-size--ct-sys-typescale-body-large-size --ct-field-outlined-label-text-size—
label-text-weight--ct-sys-typescale-body-large-weight --ct-field-filled-label-text-weight--ct-sys-typescale-body-large-weight --ct-field-outlined-label-text-weight—
leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-leading-content-color—
leading-content-size24px --ct-field-filled-leading-content-size24px --ct-field-outlined-leading-content-size24px --ct-field-text-leading-content-size
leading-space16px --ct-field-filled-leading-space16px --ct-field-outlined-leading-space—
outline-color—--ct-sys-color-outline --ct-field-outlined-outline-color—
outline-label-padding—4px --ct-field-outlined-outline-label-padding—
outline-width—1px --ct-field-outlined-outline-width—
supporting-text-color--ct-sys-color-on-surface-variant --ct-field-filled-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-supporting-text-color—
supporting-text-font--ct-sys-typescale-body-small-font --ct-field-filled-supporting-text-font--ct-sys-typescale-body-small-font --ct-field-outlined-supporting-text-font—
supporting-text-leading-space16px --ct-field-filled-supporting-text-leading-space16px --ct-field-outlined-supporting-text-leading-space—
supporting-text-line-height--ct-sys-typescale-body-small-line-height --ct-field-filled-supporting-text-line-height--ct-sys-typescale-body-small-line-height --ct-field-outlined-supporting-text-line-height—
supporting-text-size--ct-sys-typescale-body-small-size --ct-field-filled-supporting-text-size--ct-sys-typescale-body-small-size --ct-field-outlined-supporting-text-size—
supporting-text-top-space4px --ct-field-filled-supporting-text-top-space4px --ct-field-outlined-supporting-text-top-space—
supporting-text-tracking--ct-sys-typescale-body-small-tracking --ct-field-filled-supporting-text-tracking--ct-sys-typescale-body-small-tracking --ct-field-outlined-supporting-text-tracking—
supporting-text-trailing-space16px --ct-field-filled-supporting-text-trailing-space16px --ct-field-outlined-supporting-text-trailing-space—
supporting-text-weight--ct-sys-typescale-body-small-weight --ct-field-filled-supporting-text-weight--ct-sys-typescale-body-small-weight --ct-field-outlined-supporting-text-weight—
top-space16px --ct-field-filled-top-space16px --ct-field-outlined-top-space—
trailing-content-color--ct-sys-color-on-surface-variant --ct-field-filled-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-trailing-content-color—
trailing-content-size24px --ct-field-filled-trailing-content-size24px --ct-field-outlined-trailing-content-size24px --ct-field-text-trailing-content-size
trailing-space16px --ct-field-filled-trailing-space16px --ct-field-outlined-trailing-space—
with-label-bottom-space8px --ct-field-filled-with-label-bottom-space——
with-label-top-space8px --ct-field-filled-with-label-top-space——
with-leading-content-leading-space12px --ct-field-filled-with-leading-content-leading-space12px --ct-field-outlined-with-leading-content-leading-space—
with-trailing-content-trailing-space12px --ct-field-filled-with-trailing-content-trailing-space12px --ct-field-outlined-with-trailing-content-trailing-space—
hover-active-indicator-color--ct-sys-color-on-surface --ct-field-filled-hover-active-indicator-color——
hover-active-indicator-height1px --ct-field-filled-hover-active-indicator-height——
hover-content-color--ct-sys-color-on-surface --ct-field-filled-hover-content-color--ct-sys-color-on-surface --ct-field-outlined-hover-content-color—
hover-label-text-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-label-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-label-text-color—
hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-leading-content-color—
hover-outline-color—--ct-sys-color-on-surface --ct-field-outlined-hover-outline-color—
hover-outline-width—1px --ct-field-outlined-hover-outline-width—
hover-state-layer-color--ct-sys-color-on-surface --ct-field-filled-hover-state-layer-color--ct-sys-color-on-surface --ct-field-outlined-hover-state-layer-color—
hover-state-layer-opacity--ct-sys-state-hover-state-layer-opacity --ct-field-filled-hover-state-layer-opacity--ct-sys-state-hover-state-layer-opacity --ct-field-outlined-hover-state-layer-opacity—
hover-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-supporting-text-color—
hover-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-filled-hover-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-hover-trailing-content-color—
focus-active-indicator-color--ct-sys-color-primary --ct-field-filled-focus-active-indicator-color——
focus-active-indicator-height3px --ct-field-filled-focus-active-indicator-height——
focus-caret-color--ct-sys-color-primary --ct-field-filled-focus-caret-color--ct-sys-color-primary --ct-field-outlined-focus-caret-color--ct-sys-color-primary --ct-field-text-focus-caret-color
focus-content-color--ct-sys-color-on-surface --ct-field-filled-focus-content-color--ct-sys-color-on-surface --ct-field-outlined-focus-content-color—
focus-label-text-color--ct-sys-color-primary --ct-field-filled-focus-label-text-color--ct-sys-color-primary --ct-field-outlined-focus-label-text-color—
focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-focus-leading-content-color—
focus-outline-color—--ct-sys-color-primary --ct-field-outlined-focus-outline-color--ct-sys-color-primary --ct-field-text-focus-outline-color
focus-outline-width—2px --ct-field-outlined-focus-outline-width2px --ct-field-text-focus-outline-width
focus-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-filled-focus-supporting-text-color--ct-sys-color-on-surface-variant --ct-field-outlined-focus-supporting-text-color—
focus-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-filled-focus-trailing-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-focus-trailing-content-color—
disabled-active-indicator-color--ct-sys-color-on-surface --ct-field-filled-disabled-active-indicator-color——
disabled-active-indicator-height1px --ct-field-filled-disabled-active-indicator-height——
disabled-active-indicator-opacity0.38 --ct-field-filled-disabled-active-indicator-opacity——
disabled-container-color--ct-sys-color-on-surface --ct-field-filled-disabled-container-color——
disabled-container-opacity0.04 --ct-field-filled-disabled-container-opacity——
disabled-content-color--ct-sys-color-on-surface --ct-field-filled-disabled-content-color--ct-sys-color-on-surface --ct-field-outlined-disabled-content-color--ct-sys-color-on-surface --ct-field-text-disabled-content-color
disabled-content-opacity0.38 --ct-field-filled-disabled-content-opacity0.38 --ct-field-outlined-disabled-content-opacity0.38 --ct-field-text-disabled-content-opacity
disabled-label-text-color--ct-sys-color-on-surface --ct-field-filled-disabled-label-text-color--ct-sys-color-on-surface --ct-field-outlined-disabled-label-text-color—
disabled-label-text-opacity0.38 --ct-field-filled-disabled-label-text-opacity0.38 --ct-field-outlined-disabled-label-text-opacity—
disabled-leading-content-color--ct-sys-color-on-surface --ct-field-filled-disabled-leading-content-color--ct-sys-color-on-surface --ct-field-outlined-disabled-leading-content-color—
disabled-leading-content-opacity0.38 --ct-field-filled-disabled-leading-content-opacity0.38 --ct-field-outlined-disabled-leading-content-opacity—
disabled-outline-color—--ct-sys-color-on-surface --ct-field-outlined-disabled-outline-color—
disabled-outline-opacity—0.12 --ct-field-outlined-disabled-outline-opacity—
disabled-outline-width—1px --ct-field-outlined-disabled-outline-width—
disabled-supporting-text-color--ct-sys-color-on-surface --ct-field-filled-disabled-supporting-text-color--ct-sys-color-on-surface --ct-field-outlined-disabled-supporting-text-color—
disabled-supporting-text-opacity0.38 --ct-field-filled-disabled-supporting-text-opacity0.38 --ct-field-outlined-disabled-supporting-text-opacity—
disabled-trailing-content-color--ct-sys-color-on-surface --ct-field-filled-disabled-trailing-content-color--ct-sys-color-on-surface --ct-field-outlined-disabled-trailing-content-color—
disabled-trailing-content-opacity0.38 --ct-field-filled-disabled-trailing-content-opacity0.38 --ct-field-outlined-disabled-trailing-content-opacity—
error-active-indicator-color--ct-sys-color-error --ct-field-filled-error-active-indicator-color——
error-content-color--ct-sys-color-on-surface --ct-field-filled-error-content-color--ct-sys-color-on-surface --ct-field-outlined-error-content-color--ct-sys-color-on-surface --ct-field-text-error-content-color
error-focus-active-indicator-color--ct-sys-color-error --ct-field-filled-error-focus-active-indicator-color——
error-focus-caret-color--ct-sys-color-error --ct-field-filled-error-focus-caret-color--ct-sys-color-error --ct-field-outlined-error-focus-caret-color--ct-sys-color-error --ct-field-text-error-focus-caret-color
error-focus-content-color--ct-sys-color-on-surface --ct-field-filled-error-focus-content-color--ct-sys-color-on-surface --ct-field-outlined-error-focus-content-color—
error-focus-label-text-color--ct-sys-color-error --ct-field-filled-error-focus-label-text-color--ct-sys-color-error --ct-field-outlined-error-focus-label-text-color—
error-focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-error-focus-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-error-focus-leading-content-color—
error-focus-outline-color—--ct-sys-color-error --ct-field-outlined-error-focus-outline-color--ct-sys-color-error --ct-field-text-error-focus-outline-color
error-focus-supporting-text-color--ct-sys-color-error --ct-field-filled-error-focus-supporting-text-color--ct-sys-color-error --ct-field-outlined-error-focus-supporting-text-color—
error-focus-trailing-content-color--ct-sys-color-error --ct-field-filled-error-focus-trailing-content-color--ct-sys-color-error --ct-field-outlined-error-focus-trailing-content-color—
error-hover-active-indicator-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-active-indicator-color——
error-hover-content-color--ct-sys-color-on-surface --ct-field-filled-error-hover-content-color--ct-sys-color-on-surface --ct-field-outlined-error-hover-content-color—
error-hover-label-text-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-label-text-color--ct-sys-color-on-error-container --ct-field-outlined-error-hover-label-text-color—
error-hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-error-hover-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-error-hover-leading-content-color—
error-hover-outline-color—--ct-sys-color-on-error-container --ct-field-outlined-error-hover-outline-color—
error-hover-state-layer-color--ct-sys-color-on-surface --ct-field-filled-error-hover-state-layer-color——
error-hover-state-layer-opacity--ct-sys-state-hover-state-layer-opacity --ct-field-filled-error-hover-state-layer-opacity——
error-hover-supporting-text-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-supporting-text-color--ct-sys-color-on-error-container --ct-field-outlined-error-hover-supporting-text-color—
error-hover-trailing-content-color--ct-sys-color-on-error-container --ct-field-filled-error-hover-trailing-content-color--ct-sys-color-on-error-container --ct-field-outlined-error-hover-trailing-content-color—
error-label-text-color--ct-sys-color-error --ct-field-filled-error-label-text-color--ct-sys-color-error --ct-field-outlined-error-label-text-color—
error-leading-content-color--ct-sys-color-on-surface-variant --ct-field-filled-error-leading-content-color--ct-sys-color-on-surface-variant --ct-field-outlined-error-leading-content-color—
error-outline-color—--ct-sys-color-error --ct-field-outlined-error-outline-color—
error-supporting-text-color--ct-sys-color-error --ct-field-filled-error-supporting-text-color--ct-sys-color-error --ct-field-outlined-error-supporting-text-color—
error-trailing-content-color--ct-sys-color-error --ct-field-filled-error-trailing-content-color--ct-sys-color-error --ct-field-outlined-error-trailing-content-color—

Names and states⁠

The field behaves as a native email input, and no WAI-ARIA Authoring Practices pattern applies.

  • The accessible name is the field's aria-label when set, otherwise label.
  • Any aria-* attribute on the field other than aria-label, aria-describedby included, has no effect.
  • The input's description is the supporting text, or the error text while an error shows, followed by the character counter when maxlength is set.
  • A screen reader announces the field as invalid in the error state, whether error sets it or validation reports it. In the filled and outlined variants the error text is announced when it appears.
  • required makes a screen reader announce the field as required and adds an asterisk to the visible label.
  • placeholder is a hint and never the name. The text variant shows no label, so give it a label for its accessible name.
  • Leading and trailing icons are hidden from assistive technology and never name the field. Put an icon that does something in the slot as a button, and give that button its own name.

Keyboard and focus⁠

Key Action
Tab Moves focus into the field, and out of it with Shift+Tab.
Enter Commits an edited value, firing change, then submits the owning form. With no form, nothing happens.
Arrow keys, Home, End, Backspace, Delete Move the caret and edit the text.

Typing and editing keys are the native input's own behavior. During input method composition, Enter is left to the input method.

  • Focus thickens the active indicator in the filled variant and the outline in the outlined variant. The text variant draws a focus ring around the text.
  • A disabled field, or one inside a disabled fieldset, is skipped by Tab. A read-only field stays in the Tab order.

Pointer and touch⁠

  • density changes the field's height, so check an icon that acts as a button against WCAG 2.5.8 (24 by 24 CSS pixels) at the density you choose.

Display settings⁠

  • Forced colors: a disabled field's label, content, supporting text, and indicator take GrayText, the outlined border is redrawn as a real border, and the text variant's focus ring is Highlight.
  • Reduced motion: the label's float between resting and floating animates for 150 milliseconds, and nothing in the field checks the preference.
  • Right-to-left: the icons and padding follow the page direction. text-direction leaves the layout alone and turns only the typed text.

Standards⁠

With its defaults, the email field meets two WCAG 2.2 success criteria:

Six more depend on how you use it:

  • 1.1.1 Non-text Content (A): give an image in an icon slot an alt, or mark a decorative one.
  • 1.3.5 Identify Input Purpose (AA): set autocomplete to email where the field asks for the user's own address.
  • 2.5.8 Target Size (Minimum) (AA): make an icon button in a slot at least 24 by 24 CSS pixels.
  • 3.3.1 Error Identification (A): write error-text that names the problem and how to fix it.
  • 3.3.2 Labels or Instructions (A): set label, or aria-label on the field.
  • 4.1.2 Name, Role, Value (A): give every field a label, or an aria-label where no label shows.