Это вопрос получения CSS специфичности для вашего переопределения. Один простой способ повысить специфичность - повторить класс.
В приведенном ниже примере я использую &&& $input
, что эквивалентно .MuiOutlinedInput-root.MuiOutlinedInput-root.MuiOutlinedInput-root .MuiOutlinedInput-input
:
const theme = createMuiTheme({
overrides: {
MuiOutlinedInput: {
root: {
"& $notchedOutline": {
borderColor: "green"
},
"&:hover $notchedOutline": {
borderColor: "red"
},
"&$focused $notchedOutline": {
borderColor: "purple"
},
"&&& $input": {
padding: "1px"
}
}
}
}
});
Другой вариант, который немного уродливее, но делает более очевидным, какой стиль по умолчанию вы переопределяете, следующий:
const theme = createMuiTheme({
overrides: {
MuiOutlinedInput: {
root: {
"& $notchedOutline": {
borderColor: "green"
},
"&:hover $notchedOutline": {
borderColor: "red"
},
"&$focused $notchedOutline": {
borderColor: "purple"
}
}
},
MuiAutocomplete: {
inputRoot: {
'&&[class*="MuiOutlinedInput-root"] $input': {
padding: 1
}
}
}
}
});
Обратите внимание, что вам все еще нужно удвоить &
, чтобы получить специфичность, которая побеждает стили по умолчанию. Эта версия указывает c на автоматическое заполнение, а не на все выделенные входные данные.
Если вы не хотите применять это переопределение ко всему приложению в вашей теме, вы можете просто настроить компонент автозаполнения, используя withStyles
как показано ниже:
import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";
import { withStyles } from "@material-ui/core/styles";
const NoPaddingAutocomplete = withStyles({
inputRoot: {
'&&[class*="MuiOutlinedInput-root"] $input': {
padding: 1
},
"& .MuiOutlinedInput-notchedOutline": {
borderColor: "green"
},
"&:hover .MuiOutlinedInput-notchedOutline": {
borderColor: "red"
},
"&.Mui-focused .MuiOutlinedInput-notchedOutline": {
borderColor: "purple"
}
},
input: {}
})(Autocomplete);
export default function CountrySelect() {
return (
<NoPaddingAutocomplete
id="country-select-demo"
style={{ width: 300 }}
options={countries}
getOptionLabel={option => option.label}
renderInput={params => (
<TextField {...params} label={"Countries"} variant="outlined" />
)}
/>
);
}