修复 React 中的 TextField 对齐

Posted

技术标签:

【中文标题】修复 React 中的 TextField 对齐【英文标题】:Fix TextField Alignment in React 【发布时间】:2020-10-19 03:57:15 【问题描述】:

我需要解决我的 React 应用程序样式中的一个简单问题。我想知道为什么我的 react 应用程序中的 CVC TextField 与卡号不一致。

请检查此代码框链接

CLICK HERE

<div style= display: 'flex' >
  <TextField
    variant="outlined"
    label="Expiration Month"
    name="expiryMonth"
    type="text"
    value=values.expiryMonth
    onChange=handleChange
    onBlur=handleBlur
    helperText=touched.expiryMonth ? errors.expiryMonth : ''
    error=touched.expiryMonth && Boolean(errors.expiryMonth)
    fullWidth
    className=classes.margin
    style= flex: 1 
  />

  <TextField
    variant="outlined"
    label="Expiration Year"
    name="expiryYear"
    type="text"
    value=values.expiryYear
    onChange=handleChange
    onBlur=handleBlur
    helperText=touched.expiryYear ? errors.expiryYear : ''
    error=touched.expiryYear && Boolean(errors.expiryYear)
    fullWidth
    className=classes.margin
    style= flex: 1 
  />

  <TextField
    variant="outlined"
    label="CVC"
    name="cvc"
    type="number"
    value=values.cvc
    onChange=handleChange
    onBlur=handleBlur
    helperText=touched.cvc ? errors.cvc : ''
    error=touched.cvc && Boolean(errors.cvc)
    fullWidth
    className=classes.margin
    style= flex: 1 
  />
</div>;

【问题讨论】:

您能否详细说明您的问题?只有 CVC 字段或其他类似到期日期字段也是全宽的? 【参考方案1】:

默认情况下,每个TextField 有 8px 的边距,因此三个文本字段(月、年和 CVV)的 flex 行与它们的子元素有 8 px 的间隙。

有多个修复,第一个是

<div style= display: "flex",  >

这将强制行占用超过 100% 的 16px,因为我们在 TextField 两侧都有 8px 的边距,所以它将帮助我们克服两边的 8px 边距 另一种解决方案是在右侧添加 16px 的负边距

<div style= display: "flex",  margin: "-16px" >

我建议你使用 MUI 中的Grid 组件,因为它还可以帮助你实现响应式设计,下面是使用 Grid 作为容器的代码,为了使其具有响应性,你需要将每个子组件 TextField 包装在Grid项目组件

<Grid
          style= display: "flex", margin: 0 
          container
          direction="row"
          justify="center"
          alignItems="center"
          spacing=2
        >

Sand-box-project-1 Sand-box-project-2

【讨论】:

谢谢。只需使用网格。您能否确定它们是否在移动设备上,到期月份、到期年份和 cvc 将有自己的行,因为很难编写,因为移动设备上的输入非常少。谢谢 我已经更新了Second code box project。现在所有三个文本字段都将在桌面上单独一行,在移动设备上单独一行 谢谢。但是,您可以使每个 TextField 中的间距相同吗?到期年份和CVC在手机屏幕上有很大的差距。请让他们与其他人统一。谢谢 我做了一些改变,但最终你必须根据自己的需要自定义样式,它只是 CSS 没什么大不了的。我强烈建议您了解 MUI 的 styling 并了解如何自定义/覆盖样式,它是一个高度可配置的 UI 库

以上是关于修复 React 中的 TextField 对齐的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose 中的 Android 基本 TextField 对齐

在 Flutter 中对齐多行 TextField 中的提示文本

Jetpack Compose 在 TextField 中对齐输入文本

TextField后缀动画对齐

Flutter TextField 提示文本对齐

如何在 panGesture 之后修复新的 textField 位置?