Skip to content
+

Textarea

Textarea component gives you a textarea HTML element that automatically adjusts its height to match the length of the content within.

Introduction

Joy UI's textarea component is built on top of the Base UI TextareaAutoSize component.

<Textarea minRows={2} />

Playground


Component

After installation, you can start building with this component using the following basic elements:

import Textarea from '@mui/joy/Textarea';

export default function MyApp() {
  return <Textarea placeholder="Type anything…" />;
}

Variants

The textarea component supports the four global variants: solid (default), soft, outlined, and plain.

Press Enter to start editing

Sizes

The textarea component comes with three sizes out of the box: sm, md (the default), and lg.

Press Enter to start editing

Colors

Toggle the palette that's being used to color the by text field by using the color prop.

Form props

Standard form attributes are supported e.g. required, disabled, etc.

Press Enter to start editing

Focused ring

Provide these CSS variables to sx prop to control the focused ring appearance:

  • --Textarea-focusedInset: the focused ring's position, either inside(inset) or outside(var(--any, )) of the Textarea.
  • --Textarea-focusedThickness: the size of the focused ring.
  • --Textarea-focusedHighlight: the color of the focused ring.
Press Enter to start editing

Debugging the focus ring

To display the Textarea's focus ring by simulating user's focus, inspect the Textarea element and toggle the pseudostate panel.

  • If you inspect the Textarea's root element, with .MuiTextarea-root class, you have to toggle on the :focus-within state.
  • If you inspect the <input> element, you have to toggle on the :focus state.

Triggering the focus ring

To trigger the focus ring programmatically, set the CSS variable --Textarea-focused: 1.

Press Enter to start editing

Validation

To toggle the error state, use the error prop.

Press Enter to start editing

Note that using the color prop with danger as value gets the same result:

<Textarea color="danger" />

Rows

Use the minRows to set the minimum number of lines to show and maxRows to limit the number of lines that users will see.

Press Enter to start editing

Decorators

Use the startDecorator and/or endDecorator props to add supporting icons or elements to the textarea. It's usually more common to see textarea components using decorators at the top and bottom.

0 character(s)

HTML textarea ref

Use the slotProps.textarea attribute to pass props to the ref and other supported HTML attributes to the textarea element.

Press Enter to start editing

Accessibility

In order for the textarea to be accessible, it should be linked to a label.

The FormControl automatically generates a unique id that links the textarea with the FormLabel component:

This is a helper text.
Press Enter to start editing

Alternatively, you can do it manually by targeting the textarea slot:

<label htmlFor="unique-id">Label</label>
<Textarea
  slotProps={{
    textarea: {
      id: 'unique-id',
    }
  }}
/>

Common examples

Focus outline

This example shows how to replace the default focus ring appearance with CSS outline.

Press Enter to start editing

Floating label

To create a floating label textarea, a custom component (combination of <textarea> and <label>) is required to replace the default textarea slot.

Press Enter to start editing

Underline input

Comment box

Unstyled

Use the Base UI Textarea for complete ownership of the component's design, with no Material UI or Joy UI styles to override. This unstyled version of the component is the ideal choice for heavy customization with a smaller bundle size.

API

See the documentation below for a complete reference to all of the props and classes available to the components mentioned here.