【问题标题】:Remove / Override default styles from materialui components从 materialui 组件中删除/覆盖默认样式
【发布时间】:2019-10-14 13:48:28
【问题描述】:

我正在尝试更改菜单项弹出框的背景颜色。但我无法从 menuitem 中删除 paddingtop 和 paddingBottom。这有点烦人,因为一些 materialui 组件继承了纸张、列表、菜单等的样式。有没有一种干净有效的方法来解决这个问题?例如,在主题等中使用覆盖。

我有实验,我知道可以使用内联样式/类来完成,但我不想使用那种方法。我试过使用 ListProps={{disablePadding: true}}, MenuProps={{{disablePadding: true}}。但它不起作用。

       <FormControl className={classes.formControl}>
            <Select
            value={value.groupId}
            onChange={handleChange}
            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;
         }

【问题讨论】:

    标签: reactjs styles overriding material-ui


    【解决方案1】:

    你需要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 handleChange(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={handleChange}
              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;
    

    【讨论】:

    • 谢谢!我不知道你必须经历这么多层。检查元素刚刚声明了 MUIList。有什么建议可以更快地做到这一点吗?我也找到了另一种方法。通过添加,覆盖: { MuiList:{ padding: { paddingTop: 0, paddingBottom: 0 } },到我的 createMUItheme。这种方法可取吗?
    • 使用主题很好,但您使用的确切方法将影响所有列表元素——不仅仅是选择/菜单。如果这是你想要的,那就没问题了。
    猜你喜欢
    • 2019-11-21
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多