material-ui 中的高级样式

IT技术 javascript reactjs material-ui jss
2021-04-20 22:14:35

开始研究material-ui,在SandBox中创建了一个简单的app:https ://codesandbox.io/s/eager-ride-cmkrc

jss的风格对我来说很不寻常,但是如果你帮我做这两个简单的练习,那么我就会明白一切。

第一:我希望将ButtonLeft和 的通用属性ButtonRight并入新类并扩展它:(https://github.com/cssinjs/jss-extend#use-rule-name-from-the-current-styles-object

ButtonControll: {
    display: "none",
    position: "absolute",
    fontSize: "24px"
},
ButtonLeft: {
    extend: 'ButtonControll',
    left: "0",
},
ButtonRight: {
    extend: 'ButtonControll',
    right: "0",
}

但它不起作用=(

第二:我希望当你悬停在容器上时出现箭头,所以我写了这个:

"&:hover .MuiIconButton-root": {
    display: "block"
}

问题:MuiIconButton-root它是所有 IconButton 的基类名称?但我想要这样的东西:

"&:hover ButtonLeft": {
    display: "block",
    backgroundColor: 'red' 
},
"&:hover ButtonRight": {
    display: "block",
    fontSize: '50px' 
}

请帮我完成这两个简单的任务,然后我就会明白一切=)

1个回答

jss-plugin-extend 默认情况下不包含在 Material-UI 中。

您可以在此处找到包含的 JSS 插件列表:https : //material-ui.com/styles/advanced/#jss-plugins

您可以按照说明添加其他插件,但您也可以通过其他方式达到相同的效果。

您可以将公共属性放在一个对象中:

const commonButton = {
  display: "none",
  position: "absolute",
  fontSize: "24px"
};
export default props => ({
  ButtonLeft: {
    ...commonButton,
    left: "0",
  },
  ButtonRight: {
    ...commonButton,
    right: "0",
  }
});

或者因为你有一个root规则,按钮在结构上,你可以通过嵌套规则应用所有常见的样式root

export default props => ({
  root: {
    width: "250px",
    height: "182px",
    alignItems: "center",
    justifyContent: "space-between",
    border: "1px solid black",
    position: "relative",
    "& $ButtonLeft, & $ButtonRight": {
      display: "none",
      position: "absolute",
      fontSize: "24px"
    },
    "&:hover $ButtonLeft, &:hover $ButtonRight": {
      display: "block"
    }
  },
  ButtonLeft: { left: "0" },
  ButtonRight: { right: "0" }
});

编辑 jss 嵌套

上述杠杆的例子jss-plugin-nested,其默认包含在材料的UI。这也显示了hover引用的适当语法

相关回答:

谢谢!我还有一个问题 - '$' 是什么符号?我在 css/jss 中找不到关于 $ 的任何信息
2021-05-26 22:14:35
jss-plugin-nested我在答案中链接到文档中对此进行了描述cssinjs.org/jss-plugin-nested/…
2021-06-15 22:14:35