Input
The Input component facilitates the entry of text data from the user.
Introduction
The Input component enhances the functionality of the native HTML <input>
tag by providing expanded customization options and accessibility features.
<Input />
Playground
Basics
import Input from '@mui/joy/Input';
The Input component provides a customizable input field that can be used to collect user information, such as name, email, password, or other types of data.
Customization
Variants
The Input component supports Joy UI's four global variants: solid
(default), soft
, outlined
, and plain
.
Form props
You can add standard form attributes such as required
and disabled
to the Input component:
Focused ring
Provide these CSS variables to sx
prop to control the focused ring appearance:
--Input-focusedInset
: the focused ring's position, either inside(inset
) or outside(var(--any, )
) of the Input.--Input-focusedThickness
: the size of the focused ring.--Input-focusedHighlight
: the color of the focused ring.
Debugging the focus ring
To display the Input's focus ring by simulating user's focus, inspect the Input element and toggle the pseudostate panel.
- If you inspect the Input's root element, with
.MuiInput-root
class, you have to toggle on the:focus-within
state. - If you inspect the
<input>
element, you can toggle with either:focus
or:focus-within
states.
Triggering the focus ring
To trigger the focus ring programmatically, set the CSS variable --Input-focused: 1
.
Decorators
The startDecorator
and endDecorator
props can be used to add supporting icons or elements to the input.
With inputs, decorators are typically located at the top and/or bottom of the input field.
Inner HTML input
If you need to pass props to the inner HTML <input>
, use slotProps={{ input: { ...props } }}
.
These props may include HTML attributes such as ref
, min
, max
, and autocomplete
.
Common examples
Focus outline
This example shows how to replace the default focus ring (using ::before
) with CSS outline
.
Floating label
To create a floating label input, a custom component (combination of <input>
and <label>
) is required to replace the default input slot.
CSS variable playground
Play around with the CSS variables available to the Input component to see how the design changes.
You can use these to customize the component with both the sx
prop and the theme.
<Input
startDecorator={<MailIcon />}
endDecorator={<Button>Message</Button>}
>
CSS Variables
Accessibility
All inputs should have a descriptive label linked to help users understand its purpose.
The Form Control component automatically generates a unique ID that links the Input with the Form Label and Form Helper Text components:
Alternatively, you can do this manually by targeting the input slotāsee inner HTML input for details:
<label htmlFor="unique-id">Label</label>
<Input
slotProps={{
input: {
id: 'unique-id',
}
}}
/>
Anatomy
The Input component is composed of a root <div>
with an <input>
nested inside:
<div class="MuiInput-root">
<input class="MuiInput-input" />
</div>