我很难从Material UI TextField组件中删除自动填充上的黄色背景。
在旧版本中,我是这样进行的:
const inputStyle = { WebkitBoxShadow: '0 0 0 1000px white inset' };
<TextField
...
inputStyle={inputStyle}
/>
但是在最新版本中,删除了
inputStyle
道具并添加了InputProps
。我试图用这种方法将其删除,但是黄色背景颜色仍然出现:
import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import TextField from "@material-ui/core/TextField";
const styles = {
root: {
':-webkit-autofill': {
WebkitBoxShadow: '0 0 0 1000px white inset',
backgroundColor: 'red !important'
}
},
input: {
':-webkit-autofill': {
WebkitBoxShadow: '0 0 0 1000px white inset',
backgroundColor: 'red !important'
}
}
};
const renderTextField = (props) => {
const {
classes,
label,
input,
meta: { touched, error },
...custom
} = props;
return (
<TextField
label={label}
placeholder={label}
error={touched && error}
helperText={touched && error}
className={classes.root}
InputProps={{
className: classes.input
}}
{...input}
{...custom}
/>
);
}
renderTextField.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(styles)(renderTextField);
最佳答案
inputStyle
的替换为inputProps
:
const inputStyle = { WebkitBoxShadow: "0 0 0 1000px white inset" };
<TextField name="last_name" inputProps={{ style: inputStyle }} />
InputProps
与inputProps
是常见的混淆点。大写字母“ I” InputProps
为TextField
中的Input元素提供道具(Input
将本机input
包装在div
中)。小写的“ i” inputProps
为在input
组件中呈现的本机Input
元素提供了支持。如果要向本机input
元素提供内联样式,则上面的代码示例将解决问题。还有其他几种使用方法通过
withStyles
使用类。如果要使用
className
属性,则必须再次在input
上(而不是将其包裹的div上)才能获得所需的效果。因此,以下内容也将起作用:const styles = {
input: {
WebkitBoxShadow: "0 0 0 1000px white inset"
}
};
const MyTextField = ({classes}) => {
return <TextField name="email" inputProps={{ className: classes.input }} />;
}
export default withStyles(styles)(MyTextField);
如果要利用“:-webkit-autofill”伪类,只需调整JSS语法并添加"&" to reference the selector of the parent rule:
const styles = {
input: {
"&:-webkit-autofill": {
WebkitBoxShadow: "0 0 0 1000px white inset"
}
}
};
const MyTextField = ({classes}) => {
return <TextField name="email" inputProps={{ className: classes.input }} />;
}
export default withStyles(styles)(MyTextField);
您还可以利用以下两种方法之一,但通过
InputProps
属性使用大写的“ I” classes
:const styles = {
input: {
WebkitBoxShadow: "0 0 0 1000px white inset"
}
};
const MyTextField = ({classes}) => {
return <TextField name="email" InputProps={{ classes: { input: classes.input } }} />;
}
export default withStyles(styles)(MyTextField);
这是使用所有这些方法的有效示例: