Skip to main content
U.S. Flag

An official website of the United States government

CMS Design System

Text field

Jump to Guidance
View related guidance in the U.S. Web Design System

Text fields allow users to enter any combination of letters, numbers, or symbols of their choosing (unless otherwise restricted). Text fields can span single or multiple lines.

<TextField>

A TextField component renders an input field as well as supporting UI elements like a label, error message, and hint text.

View Source File

Single line field

Code snippet

Multiline field

Code snippet

Error field

Code snippet

Success field

Code snippet

Disabled field

Code snippet

Props

React Properties Documentation
NameTypeDefaultDescription
ariaLabelstring

Apply an aria-label to the text field to provide additional context to assistive devices.

classNamestring

Additional classes to be added to the root div element

defaultValuestring | number

Sets the initial value. Use this for an uncontrolled component; otherwise, use the value property.

disabledboolean
errorMessageReact.ReactNode
errorMessageClassNamestring

Additional classes to be added to the error message

errorPlacement'top' | 'bottom'

Location of the error message relative to the field input

fieldClassNamestring

Additional classes to be added to the field element

focusTriggerboolean

Used to focus input on componentDidMount()

hintReact.ReactNode

Additional hint text to display

idstring

A unique id to be used on the text field.

inputRef(...args: any[]) => any

Access a reference to the input or textarea element

requirementLabelReact.ReactNode

Text showing the requirement ("Required", "Optional", etc.). See Required and Optional Fields.

inversedboolean

Applies the "inverse" UI theme

labelrequiredReact.ReactNode

Label for the input

labelMask(rawInput: string, valueOnly?: boolean) => string

Applies date format masking to the input value entered and renders to a text field above the input. Passing true to valueOnly will return just the formatted value entered.

labelClassNamestring

Additional classes to be added to the FormLabel.

labelIdstring

A unique id to be used on the label field.

mask'currency' | 'phone' | 'ssn' | 'zip'

Apply formatting to the field that's unique to the value you expect to be entered. Depending on the mask, the field's appearance and functionality may be affected.

multilineboolean

Whether or not the text field is a multiline text field

namerequiredstring
numericboolean

Sets inputMode, type, and pattern to improve accessibility and consistency for number fields. Use this prop instead of type="number", see here for more information.

onBlur(...args: any[]) => any
onChange(...args: any[]) => any
rowsnumber | string

Optionally specify the number of visible text lines for the field. Only applicable if this is a multiline field.

size'small' | 'medium'

Set the max-width of the input either to 'small' or 'medium'.

typestring'text'

HTML input type attribute. If you are using type=number please use the numeric prop instead.

valuestring | number

Sets the input's value. Use this in combination with onChange for a controlled component; otherwise, set defaultValue.

Guidance

When to use

  • If you can’t reasonably predict a user’s answer to a prompt and there might be wide variability in users’ answers.
  • When using another type of input will make answering more difficult. For example, birthdays and other known dates are easier to type in than they are to select from a calendar picker.
  • When users want to paste in a response.

When to consider alternatives

Usage

  • Don't use placeholder text in form fields. Use hint text instead, if you need to provide contextual information. Placeholder text disappears after a user types a value, therefore users will no longer have that text available when they need to review their entries. People who have cognitive or visual disabilities have additional problems with placeholder text.
  • The length of the text field provides a hint to users as to how much text to write. Do not require users to write paragraphs of text into a single-line input box; use a textarea instead.
  • Text fields are among the easiest type of input for desktop users but are more difficult for mobile users.
  • Only show error messages or styling after a user has interacted with a particular field.

View the "Forms" guidelines for additional guidance and best practices.

Accessibility

  • Group each set of thematically related controls in a fieldset element. Use the legend element to offer a label within each fieldset. The fieldset and legend elements make it easier for screen reader users to navigate the form.
  • Keep your form blocks in a vertical pattern. This approach is ideal, from an accessibility standpoint, because of limited vision that makes it hard to scan from left to right.

Customization

The following Sass variables can be overridden to customize Input/Form components:

VariableDefault Core Theme Value
$text-input__line-height1.3
$text-input__background-color--disabled$color-border
$text-input__border-width2px
$text-input__border-color$color-base
$text-input__border-color--disabled$color-gray-light
$text-input__border-color--error$color-error
$text-input__border-color--error--inverse$color-error-light
$text-input__border-color--inverse$color-black
$text-input__border-color--success$color-green-light
$text-input__color$color-base
$text-input__padding8px
$text-input__border-radius3px

Form components

VariableDefault Core Theme Value
$form-label__color--inverse$color-white
$form__max-width460px
$form__max-width--small6em
$form__max-width--medium12em
$form-hint__color$color-gray
$form-hint__color--inverse$color-muted-inverse
$form-error__color$color-error
$form-error__color--inverse$color-error-light

Learn more