You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何降低Material UI与Formik中<Select>输入框的高度及尺寸

解决Formik + MUI Select与TextField高度不一致问题

问题表现

表单中Select输入框高度比普通TextField输入框更高,效果如下:
表单界面效果

问题原因

你当前仅通过小写inputProps修改原生输入框的样式,但是当TextField开启select属性时,MUI内部会渲染Select专属容器,该容器为了容纳下拉箭头默认会有更高的内边距,仅修改内部原生输入框样式无法影响外层容器高度,导致两个组件高度不一致。

解决方法

统一给两个组件的InputProps(大写I,作用于MUI外层Input容器)设置固定高度,同时保持内部原生输入框样式一致即可。

修改后的InputField组件代码

import { Field } from "formik";
import { TextField } from "formik-material-ui";

const inputInnerStyle = {
    padding: 7,
    fontSize: "0.75rem",
};

// 统一外层容器高度,可根据实际需要调整数值
const inputContainerStyle = {
    height: "38px"
};

export default (props: any) => {
    return (
        <Field
            component={TextField}
            InputProps={{
                style: inputContainerStyle,
                inputProps: {
                    style: inputInnerStyle,
                }
            }}
            size="small"
            margin="none"
            variant="outlined"
            {...props}
        >
            {props.children}
        </Field>
    );
};

修改后的Select Field组件代码

import { Field } from "formik";
import { TextField } from "formik-material-ui";
import { MenuItem } from "@mui/material"; // 补充缺失的MenuItem导入

const inputInnerStyle = {
    padding: 7,
    fontSize: "0.75rem",
};

// 和普通TextField保持相同的外层容器高度
const inputContainerStyle = {
    height: "38px"
};

export default (props: any) => {
    return (
        <Field
            component={TextField}
            InputProps={{
                style: inputContainerStyle,
                inputProps: {
                    style: inputInnerStyle,
                }
            }}
            select={true}
            align="left"
            size="small"
            fullWidth
            margin="none"
            variant="outlined"
            {...props}
        >
              <MenuItem value={1}>A</MenuItem>
              <MenuItem value={2}>B</MenuItem>
              <MenuItem value={3}>C</MenuItem>
        </Field>
    );
};

补充说明

如果不想固定外层容器高度,也可以通过SelectProps调整下拉箭头的边距,减少额外高度占用:

<Field
  // 其他属性保持不变
  SelectProps={{
    sx: {
      '& .MuiSelect-icon': {
        padding: 2, // 缩小图标内边距
      }
    }
  }}
/>

内容的提问来源于stack exchange,提问作者Harsh Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:36:03