跳到内容
+

输入框

Input 组件为用户提供了一个输入和编辑文本的字段。

介绍

输入框是一个接受用户文本数据的 UI 元素。Input 组件取代了原生的 HTML <input> 标签,并提供了扩展的自定义和可访问性功能。它也可以根据需要转换为 <textarea>

组件

import { Input } from '@mui/base/Input';

Input 的行为类似于原生的 HTML <input>,除了它嵌套在根 <div> 中——详见 结构

以下演示展示了如何创建和样式化输入组件,包括 placeholder 文本

结构

Input 组件由一个根 <div> 插槽组成,该插槽容纳一个内部 <input> 插槽

<div class="base-Input-root">
  <input class="base-Input-input" />
</div>

自定义结构

使用 slots 属性覆盖根插槽或任何其他内部插槽

<Input slots={{ root: 'aside', input: CustomInput }} />

使用 slotProps 属性将自定义属性传递给内部插槽。以下代码片段将一个名为 my-input 的 CSS 类应用于 input 插槽

<Input slotProps={{ input: { className: 'my-input' } }} />

与 TypeScript 一起使用

在 TypeScript 中,您可以将 slots.root 中使用的自定义组件类型指定为非样式化组件的泛型参数。这样,您可以安全地在组件上直接提供自定义根组件的属性

<Input<typeof CustomComponent> slots={{ root: CustomComponent }} customProp />

这同样适用于特定于自定义原始元素的属性

<Input<'textarea'> slots={{ root: 'textarea' }} rows={2} />

Hook

import { useInput } from '@mui/base/useInput';

useInput Hook 让您可以将 Input 的功能应用于完全自定义的组件。它返回要放置在自定义组件上的属性,以及表示组件内部状态的字段。

Hook 不支持 插槽属性,但它们支持自定义属性

下面的演示展示了如何使用 useInput Hook 创建一个接收所有必要属性的自定义输入组件

自定义

装饰

您可以使用 startAdornmentendAdornment 属性向 Input 添加前缀、后缀或操作。装饰的常见用例包括

  • 当 Input 接收到特定的计量单位(如重量或货币)时
  • 当图标按钮切换显示/隐藏密码时

以下演示展示了这两种用例的示例

kg

多行

multiline 属性将 <input> 字段转换为 <textarea> 元素,如下所示

Enter 开始编辑

如果您希望 <textarea> 随着内容增长,您可以在输入框中使用 Textarea Autosize 组件。

当使用 Textarea Autosize 时,除非您设置 rows 属性,否则 <textarea> 元素的高度会动态匹配其内容。要设置最小和最大尺寸,请添加 minRowsmaxRows 属性。

以下演示展示了如何将 Textarea Autosize 组件插入到 Input 中,使其高度随着内容长度增长

Enter 开始编辑

常见示例

OTP 输入框

以下演示展示了如何使用 Input 构建一次性密码组件。

-
-
-
-
已输入的值
Enter 开始编辑