在Material-UI的TextField中更改边框颜色

12

这应该很简单,但出于某些原因我无法弄清楚如何更改TextField的边框颜色

<TextField style={{ borderColor: 'white', width: '100px' }} variant="outlined" />

基本上只是从文档中复制的,在大纲上是白色的,所以我无法弄清楚可能会在我的端口混乱。

我尝试在jsfiddle或其他一些地方重新生成,但找不到可以导入TextField模块的内容

screencap


TextField来自哪里?你在使用什么? - Aziz.G
@G.aziz 不好意思,我更新了问题并加入了信息。@material-ui/core/TextField - Joshua Ohana
1个回答

36
下面是一个v4版本的示例(v5示例在下面),演示如何覆盖TextField的轮廓、标签和输入文本的颜色,这显示了使用三种不同的颜色:默认颜色为绿色,悬停时颜色为红色,当输入具有焦点时颜色为紫色。
import React from "react";
import ReactDOM from "react-dom";

import TextField from "@material-ui/core/TextField";
import { makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles({
  root: {
    "& .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline": {
      borderColor: "green"
    },
    "&:hover .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline": {
      borderColor: "red"
    },
    "& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline": {
      borderColor: "purple"
    },
    "& .MuiOutlinedInput-input": {
      color: "green"
    },
    "&:hover .MuiOutlinedInput-input": {
      color: "red"
    },
    "& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-input": {
      color: "purple"
    },
    "& .MuiInputLabel-outlined": {
      color: "green"
    },
    "&:hover .MuiInputLabel-outlined": {
      color: "red"
    },
    "& .MuiInputLabel-outlined.Mui-focused": {
      color: "purple"
    }
  }
});

function App() {
  const classes = useStyles();
  return (
    <div className="App">
      <TextField
        className={classes.root}
        defaultValue="My Default Value"
        variant="outlined"
        label="My Label"
      />
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

编辑TextField outlined(分支)


下面是使用 MUI v5 的类似示例。此示例使用 styled 而非 makeStyles,并利用一种更加类型安全的方式(在 v5 中添加)引用全局类名(例如 .${outlinedInputClasses.root}),但继续硬编码全局类名(例如 .MuiOutlinedInput-root)也可以正常工作(硬编码时语法更简单,但更容易出现拼写错误且没有自动完成帮助)。

import React from "react";
import ReactDOM from "react-dom";

import TextField from "@mui/material/TextField";
import { outlinedInputClasses } from "@mui/material/OutlinedInput";
import { inputLabelClasses } from "@mui/material/InputLabel";
import { styled } from "@mui/material/styles";

const StyledTextField = styled(TextField)({
  [`& .${outlinedInputClasses.root} .${outlinedInputClasses.notchedOutline}`]: {
    borderColor: "green"
  },
  [`&:hover .${outlinedInputClasses.root} .${outlinedInputClasses.notchedOutline}`]: {
    borderColor: "red"
  },
  [`& .${outlinedInputClasses.root}.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]: {
    borderColor: "purple"
  },
  [`& .${outlinedInputClasses.input}`]: {
    color: "green"
  },
  [`&:hover .${outlinedInputClasses.input}`]: {
    color: "red"
  },
  [`& .${outlinedInputClasses.root}.${outlinedInputClasses.focused} .${outlinedInputClasses.input}`]: {
    color: "purple"
  },
  [`& .${inputLabelClasses.outlined}`]: {
    color: "green"
  },
  [`&:hover .${inputLabelClasses.outlined}`]: {
    color: "red"
  },
  [`& .${inputLabelClasses.outlined}.${inputLabelClasses.focused}`]: {
    color: "purple"
  }
});

function App() {
  return (
    <div className="App">
      <StyledTextField
        defaultValue="My Default Value"
        variant="outlined"
        label="My Label"
      />
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

编辑 TextField outlined

相关回答:


4
你是真正的MVP。 - insivika
你有关于 TextAreaTextAreaAutoSize 的解决方案吗? - Kelsey Hannan
1
@KelseyHannan 我总是通过在 TextField 中使用 multiline 属性来使用它们,这个答案中的样式仍然有效。 - Ryan Cogswell
@KelseyHannan 当您指定multiline属性时,TextField在内部使用TextareaAutosize - Ryan Cogswell
你提供的解决方案运行良好。但我很好奇 MUI 内部使用了哪个 CSS 属性,并将其应用于哪个元素以创建边框?我已经验证了 TextField 的所有嵌套元素,但无法找到任何具有与边框相关的属性的元素。 - undefined
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接