We\'d like to change the text color, outline, and padding on a Material-ui Autocomplete component.
The code looks like this:
Here is the approach you tried (which worked as far as styling, but broke the Autocomplete functionality):
renderInput={params => (
<TextField
{...params}
label=""
InputProps={{
className: classes.inputColor
}}
variant="outlined"
fullWidth
/>
)}
The above approach causes problems because the Autocomplete component passes InputProps as part of the params passed to TextField so the InputProps passed explicitly will completely replace the InputProps in params.
Instead, you should leverage the inputRoot CSS class for the Autocomplete component:
<Autocomplete classes={{inputRoot: classes.inputRoot}} .../>
Below is a working example that sets the text color and customizes the outline colors.
import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles(theme => ({
inputRoot: {
color: "purple",
"& .MuiOutlinedInput-notchedOutline": {
borderColor: "green"
},
"&:hover .MuiOutlinedInput-notchedOutline": {
borderColor: "red"
},
"&.Mui-focused .MuiOutlinedInput-notchedOutline": {
borderColor: "purple"
}
}
}));
export default function ComboBox() {
const classes = useStyles();
return (
<Autocomplete
id="combo-box-demo"
classes={classes}
options={top100Films}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => {
return (
<TextField
{...params}
label="Combo box"
variant="outlined"
fullWidth
/>
);
}}
/>
);
}
const top100Films = [
{ title: "The Shawshank Redemption", year: 1994 },
{ title: "The Godfather", year: 1972 },
// Plus a bunch more
];
Related answer: