【问题标题】:How can i apply my own css style in ui Material Textfield?如何在 ui Material Textfield 中应用我自己的 CSS 样式?
【发布时间】:2026-02-12 07:30:01
【问题描述】:

我正在开发下一个 js 项目,我应该创建一个表单以使用特定样式进行注册。

问题是我不知道如何用我自己的 css 自定义 textField。我尝试使用makeStyles 函数,但问题是我应该将对象传递给makeStyles,并且某些属性不存在,例如背景颜色、边框半径等...

这是我要应用的 css:

.Name {
  width: 535px;
  height: 61px;
  flex-grow: 0;
  margin: 40px 100px 20px 0;
  padding: 19px 329px 20px 20px;
  border-radius: 8px;
  border: solid 1px var(--select-border);
  background-color: #ffffff;
}

我把这个 css 放在一个文件中,我将它作为样式导入到我的组件中,并在 className 中调用它 这个:

   <TextField
        className={styles.Name}
        placeholder='Nom de votre restaurant'
       > 

我用这种方式尝试了 makeStyles:

const useStyles = makeStyles({
nameStyles: {
width:' 535px',
height:' 61px',
flexGrow:'0',
margin:'40px 100px 20px 0',
padding: '19px 329px 20px 20px',
border: '8px',
border: 'solid 1px var(--select-border)',
backgroundColor:' #ffffff',
})
   
   export default function RestaurantRegistration() {
   const classes = useStyles()

   return (
    <React.Fragment>
  
  
   <TextField
    className={classes.nameStyles}
    placeholder='Restaurant Name'
   >
 

   </TextField>
 )
 }

使用第二种方法,我不得不更改名称中包含“-”的属性,因为我遇到了语法错误。例如,我将 flex-grow 更改为 flexGrow,将背景色更改为 backroundColor。我不知道这是否正确。谁能帮帮我?

【问题讨论】:

  • 如果您刚刚复制粘贴了代码,这会给您一个错误,因为您缺少一个用于“nameStyles”的右大括号。据我所知,您的语法是正确的,并且需要使用 camelCase 命名这些变量的方式,因为您使用 ts 编写,稍后会转换为 css。向您的代码添加更详细的分析(控制台日志等)更有可能得到答案。
  • 另外,我刚刚看到的是,如果你不在 Textfield 中写任何东西,这个应该是一个自闭合标签,语法如下:
  • 我尝试了很多方法,但我没有得到我想要的结果我现在不知道是什么问题

标签: css reactjs material-ui next.js


【解决方案1】:

要成功使用className,您需要使用StylesProvider 和属性injectFirst 包装您的组件。

另外,如果您检查TextField API,您可以使用classes prop,它是一个可以覆盖或扩展其样式的对象。您可以使用 root 规则名称将您的样式传递给 TextField。

带有 css 模块和样式提供者:

  <StylesProvider injectFirst> 
    <TextField
        className={styles.Name}
        placeholder='Nom de votre restaurant'
       >
  </StylesProvider>

使用 makeStyles:

const useStyles = makeStyles({
  root: {
    width:'535px',
    height:'61px',
    flexGrow:'0',
    margin:'40px 100px 20px 0',
    padding: '19px 329px 20px 20px',
    border: '8px',
    border: 'solid 1px var(--select-border)',
    backgroundColor:'#ffffff',
}})
   
export default function RestaurantRegistration() {
   const classes = useStyles()

   return (
    <TextField
      classes={classes}
      placeholder='Restaurant Name'
    />
 )
}

【讨论】:

  • 这两种方法都不适合我,再加上第二种方法我没有一个 textField 我有很多所以我必须为每个设置不同的样式,所以 classes={classes} 不会做工作。
  • @Ghost 我为这两种情况创建了一个沙箱
  • 您实际上可以使用StylesProvider 首先注入您的类名,我添加到答案中
  • 对于 makestyle,您可以添加不同于 root 的名称而不是传递为 classes={{ root: classes.firstStyle }} 等等
  • 这好多了,但是您知道如何删除 Input 内的行吗?就像你把 TextField 放在一个盒子里
最近更新 更多