Skip to main content
U.S. Flag

An official website of the United States government

CMS Design System

Text Field

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.

Examples

Single line field

Loading

Multiline field

Loading

Error field

Loading

Success field

Loading

Disabled field

Loading

Code

React

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

React Properties Documentation
NameTypeDefaultDescription
ariaLabelstringApply an aria-label to the text field to provide additional context to assistive devices.
defaultValueTextFieldDefaultValueSets the initial value. Use this for an uncontrolled component; otherwise, use the value property.
disabledboolean
fieldClassNamestring
autoFocusboolean
idstringA unique id to be used on the text field.
inputRef(...args: any[]) => anyAccess a reference to the input or textarea element
requirementLabelReactNodeText showing the requirement ("Required", "Optional", etc.). See Required and Optional Fields.
inversedbooleanApplies the "inverse" UI theme
labelMask(rawInput: string, valueOnly?: boolean) => stringApplies 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.
maskTextFieldMaskApply 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.
multilinebooleanWhether or not the text field is a multiline text field
namerequiredstring
numericbooleanSets 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
rowsTextFieldRowsOptionally specify the number of visible text lines for the field. Only applicable if this is a multiline field.
sizeTextFieldSizeSet the max-width of the input either to 'small' or 'medium'.
typestringtextHTML input type attribute. If you are using type=number please use the numeric prop instead.
valueTextFieldValueSets the input's value. Use this in combination with onChange for a controlled component; otherwise, set defaultValue.
classNamestringAdditional classes to be added to the root element.
labelrequiredReactNodeLabel for the field.
errorMessageReactNodeEnable the error state by providing an error message.
errorMessageClassNamestringAdditional classes to be added to the error message
errorIdstringThe ID of the error message applied to this field.
hintReactNodeAdditional hint text to display
textClassNamestringAdditional classes to be added to the label text.
errorPlacement"top" | "bottom"Location of the error message relative to the field input
labelClassNamestringAdditional classes to be added to the field label
labelIdstringA unique id to be used on the field label. If one isn't provided, a unique ID will be generated.

Styles

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

CSS variables for text-input
VariableDefault Core Theme Value
--text-input__line-height1.3
--text-input__background-color--disabledhex value: #d9d9d9--color-border
--text-input__border-width2px
--text-input__border-width--error3px
--text-input__border-width--success3px
--text-input__border-colorhex value: #262626--color-base
--text-input__border-color--disabledhex value: #a6a6a6--color-gray-light
--text-input__border-color--errorhex value: #e31c3d--color-error
--text-input__border-color--error--inversehex value: #f7bbc5--color-error-lighter
--text-input__border-color--inversehex value: #000000--color-black
--text-input__border-color--successhex value: #59ac56--color-secondary-light
--text-input__colorhex value: #262626--color-base
--text-input__divider-colorhex value: #a6a6a6--color-gray-light
--text-input__padding8px
--text-input__border-radius3px

Form components

This component also makes use of form field styles, which can be customized by the following variables:

CSS variables for form
VariableDefault Core Theme Value
--form-label__color--inversehex value: #ffffff--color-white
--form__max-width460px
--form__max-width--small6em
--form__max-width--medium12em
--form-hint__colorhex value: #5a5a5a--color-gray-dark
--form-hint__color--inversehex value: #e9ecf1--color-muted-inverse
--form-error__colorhex value: #e31c3d--color-error
--form-error__color--inversehex value: #f7bbc5--color-error-lighter

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.

Learn more

Component maturity

For more information about how we tested and validated our work for each checklist item, read our component maturity documentation.

Accessibility

  • Color

    Meets AA color contrast standards for accessibility and color blindness.
    Complete
  • Forced Colors Mode (FCM)

    While using FCM the components text is legible and improves readability.
    Complete
  • WCAG 2.1 Level AA Conformance

    All Axe checks for WCAG AA compliance have passed.
    Complete
  • Screen readers

    VoiceOver, NVDA, and JAWS screen readers provide concise communication and interaction.
    Complete
  • Keyboard navigation

    Component is fully navigable with a keyboard.
    Complete

Code

  • Storybook

    Component has stories to cover all defined props.
    Complete
  • Responsive

    Component designed to work in all responsive breakpoints.
    Complete
  • Spanish translations

    Includes Spanish translations for default text content.
    Not applicable

Tokens

  • Code

    Tokens implemented in code.
    Complete
  • Design

    Tokens implemented in the Sketch.
    Complete