如何在禁用时更改material-ui滑块拇指样式

Ste*_*n G 7 html javascript css reactjs material-ui

我可以Slider使用以下方法修改样式withStyles

const CustomSlider = withStyles(theme => ({
  disabled: {
    color: theme.palette.primary.main
  },
  thumb: {
    height: 24,
    width: 24,
  },
}))(Slider);
Run Code Online (Sandbox Code Playgroud)

但拇指的height和仅当组件为 时才适用。widthdisabled={false}

有没有一种简单的方法来更改滑块heightwidth打开disabled={true}

演示: https://codesandbox.io/s/slide-thumb-size-gxb4g?file =/demo.js

kei*_*kai 4

原因

样式被 className 覆盖Mui-disabled

您可以看到颜色会保留。

在此输入图像描述

如何解决

MuiSlider-thumb覆盖or的样式Mui-disabled

一种选择:使用 MUI className嵌套选择器

"& .MuiSlider-thumb": {
  height: 24,
  width: 24
}
Run Code Online (Sandbox Code Playgroud)

注意withStyles属性指的是 CSS API,您可以使用 className + style hooks 来自定义 CSS API 不公开的 className

完整代码:

import React from "react";
import Slider from "@material-ui/core/Slider";
import Paper from "@material-ui/core/Paper";
import { withStyles, makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles(theme => ({
  margin: {
    margin: theme.spacing(10),
    "& .MuiSlider-thumb": {
      height: 24,
      width: 24
    }
  }
}));

const CustomSlider = withStyles(theme => ({
  disabled: {
    color: theme.palette.primary.main
  },
  thumb: {
    // color: "red"
  }
}))(Slider);

export default function MyCustomSlider() {
  const classes = useStyles();
  return (
    <div>
      <Paper className={classes.margin}>
        <CustomSlider
          defaultValue={[10, 15]}
          min={0}
          max={20}
          valueLabelDisplay="on"
          disabled={true}
        />{" "}
        <CustomSlider
          defaultValue={[5, 7]}
          min={0}
          max={20}
          valueLabelDisplay="on"
          disabled={false}
        />{" "}
      </Paper>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


更新

对于 withStyles

const styles = theme =>
  createStyles({
    margin: {
      margin: theme.spacing(10)
    },
    thumb: {
      "& .MuiSlider-thumb": {
        height: 24,
        width: 24
      }
    }
  });

function MyCustomSlider(props) {
  // const classes = useStyles();
  return (
    <div>
      <Paper className={props.classes.margin}>
        <Slider
          defaultValue={[10, 15]}
          min={0}
          max={20}
          valueLabelDisplay="on"
          disabled={true}
          className={props.classes.thumb}
        />{" "}
        <Slider
          defaultValue={[5, 7]}
          min={0}
          max={20}
          valueLabelDisplay="on"
          disabled={false}
        />{" "}
      </Paper>
    </div>
  );
}

export default withStyles(styles)(MyCustomSlider);
Run Code Online (Sandbox Code Playgroud)

编辑幻灯片拇指大小