Я пытаюсь изменить цвет фона всплывающего меню. Но я не могу удалить paddingtop и paddingBottom из пункта меню. Это немного раздражает, потому что некоторые компоненты materialui наследуют стили от бумаги, списка, меню и т. д. Есть ли чистый и эффективный способ обойти это? Например, использование переопределений в теме и т. д.
У меня есть эксперимент, и я знаю, что это можно сделать с помощью встроенных стилей/классов, но я не хочу использовать этот метод. Я пробовал использовать ListProps = {{disablePadding: true}}, MenuProps = {{{disablePadding: true}}. Но это не работает.
<FormControl className = {classes.formControl}>
<Select
value = {value.groupId}
onChange = {handleChangeEvent}
MenuProps = {{
getContentAnchorEl: null,
anchorOrigin: {
vertical: "bottom",
horizontal: "left",
},
}}
classes = {{
icon: isDarkMode ? classes.iconLight :classes.icon,
}}
ListProps = {{disablePadding: true}}
inputProps = {{
name: 'groupId',
id: 'group-machines',
}}
>
{
equipmentgroups.map(equipmentgroup =>
<MenuItem
style = {isDarkMode ? {backgroundColor: theme.palette.primary.dark} :
{backgroundColor: theme.palette.secondary.main}}
className = {classes.menuItemDisplay}
value = {equipmentgroup.groupId}
key = {equipmentgroup.groupId}
>{equipmentgroup.groupName}</MenuItem>
)
}
</Select>
</FormControl>
Я все еще ПОЛУЧАЮ это, когда проверяю элемент.
.MuiList-padding-370 {
padding-top: 8px;
padding-bottom: 8px;
}
Вам нужно MenuProps = {{ MenuListProps: { disablePadding: true } }}
.
Вот рабочий пример:
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import InputLabel from "@material-ui/core/InputLabel";
import MenuItem from "@material-ui/core/MenuItem";
import FormControl from "@material-ui/core/FormControl";
import Select from "@material-ui/core/Select";
const useStyles = makeStyles(theme => ({
root: {
display: "flex",
flexWrap: "wrap"
},
formControl: {
margin: theme.spacing(1),
minWidth: 120
},
selectEmpty: {
marginTop: theme.spacing(2)
}
}));
function SimpleSelect() {
const classes = useStyles();
const [values, setValues] = React.useState({
age: "",
name: "hai"
});
const inputLabel = React.useRef(null);
function handleChangeEvent(event) {
setValues(oldValues => ({
...oldValues,
[event.target.name]: event.target.value
}));
}
return (
<form className = {classes.root} autoComplete = "off">
<FormControl className = {classes.formControl}>
<InputLabel htmlFor = "age-simple">Age</InputLabel>
<Select
value = {values.age}
onChange = {handleChangeEvent}
MenuProps = {{ MenuListProps: { disablePadding: true } }}
inputProps = {{
name: "age",
id: "age-simple"
}}
>
<MenuItem value = "">
<em>None</em>
</MenuItem>
<MenuItem value = {10}>Ten</MenuItem>
<MenuItem value = {20}>Twenty</MenuItem>
<MenuItem value = {30}>Thirty</MenuItem>
</Select>
</FormControl>
</form>
);
}
export default SimpleSelect;
Использование темы — это хорошо, но точный подход, который вы используете, повлияет на все элементы List, а не только на Select/Menu. Если это то, чего вы хотите, то все в порядке.
Спасибо! Я не знал, что нужно пройти через столько слоев. Элемент проверки только что указал MUIList. Есть ли совет, как сделать это быстрее? Я нашел и другой метод. Добавляя, переопределяет: { MuiList: { padding: { paddingTop: 0, paddingBottom: 0 } } в мою тему createMUI. Целесообразен ли этот метод?