Textarea

Multi-line text input with optional label, hint, and error state

Category: inputs · WCAG 2.2-AA · form, text, multiline

States

Props

PropTypeDefaultDescription
labelstringText label for the control (standalone use). Omit it when wrapping the Textarea in a Field — the Field owns the label, and setting both double-labels the control.
hintstringSupplementary hint text shown with the control.
errorstringError message shown when the value is invalid.
rowsnumber4Number of visible text rows.
resize'none' | 'vertical' | 'both'verticalWhich directions the textarea can be resized ('none' | 'vertical' | 'both').
autosizebooleanfalseGrow the control with its content instead of holding the fixed rows height. rows becomes the minimum and --cascivo-textarea-max-block-size (default 20lh) the ceiling. Pure CSS (field-sizing: content) — no measurement and no listener; where unsupported the fixed rows height is kept.
disabledbooleanfalseWhen true, disables the control and removes it from the tab order.
ariaLabelstringInvisible accessible name, for when a visible element outside this component already labels it and `label` would render that text a second time. ⚠ `label` on this component is **visible**; `IconButton.label`/`Sparkline.label` are invisible names, which is the prior that costs adopters a duplicated label. The raw DOM `aria-label` still wins over this.

Design tokens

When to use

When not to use

How to build an accessible Textarea in React →

Examples

With label

<Textarea label="Message" placeholder="Type here…" />

With error

<Textarea label="Bio" error="Bio is required" />

Related components

← Back to docs