【问题标题】:Style buttons with different palette colors具有不同调色板颜色的样式按钮
【发布时间】:2017-10-03 19:12:07
【问题描述】:

使用 Material-UI v1:

我想创建多个不同颜色的按钮,这些按钮将来自 Material-UI 调色板。

理想情况下,我希望有类似的东西:

<Button color="colorFromThePalette">
<Button color={ theme.palette.myColor }>

但我收到以下错误:

道具类型失败:提供给Button 的道具color 的价值someValue 无效,应为["default","inherit","primary","accent","contrast"] 之一。

考虑到我希望与材料设计调色板保持一致,我有哪些选择?

【问题讨论】:

  • 看看Customization section。您可以用自己的值覆盖默认值,但最后,您仍然必须使用定义的颜色关键字。
  • 我想要使用的颜色超过 4-5 种,因此在我的主题中覆盖“主要”/“重音”颜色对我来说不是一个好选择。
  • 您的选择是为每个按钮添加一个className,并使用自定义 CSS 类定义您要使用的背景颜色。导入此样式表时,请务必在导入material-ui部分后再导入。
  • 但是覆盖css背景是不够的——我已经试过了。当您单击按钮并且背景更改为另一个时,它会变得混乱。
  • 这或多或少是意料之中的,因为这个框架不打算像这样使用。使用 CSS 覆盖,您必须了解它是如何归结为呈现的 HTML 并调整您的样式表的。您还必须涵盖悬停、焦点、活动和其他可能的状态。换句话说,这就像重新设计框架。我正在使用另一个库,reactstrap,最后我是这样管理的。

标签: reactjs material-ui


【解决方案1】:

您可以使用 classes 属性并仅覆盖所需的键。对我来说 flatPrimaryraisedPrimary 就足够了。

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from 'material-ui/styles';
import { fade } from 'material-ui/styles/colorManipulator';
import teal from 'material-ui/colors/teal';
import Button from 'material-ui/Button';

const styles = theme => ({
  flatTeal: {
    color: teal[500],
    '&:hover': {
      backgroundColor: fade(teal[500], 0.12)
    }
  },
  raisedTeal: {
    backgroundColor: teal[500],
    '&:hover': {
      backgroundColor: teal[700],
      '@media (hover: none)': {
        backgroundColor: teal[500]
      }
    }
  }
});

const Teal = props => {
  const { classes } = props;

  return (
    <div>
      <Button color="primary">
        Primary flat
      </Button>
      <Button raised color="primary">
        Primary raised
      </Button>
      <Button
        color="primary"
        classes={{ flatPrimary: classes.flatTeal }}
      >
        Teal flat
      </Button>
      <Button
        raised
        color="primary"
        classes={{ raisedPrimary: classes.raisedTeal }}
      >
        Teal raised
      </Button>
    </div>
  );
};

Teal.propTypes = {
  classes: PropTypes.object.isRequired
};

export default withStyles(styles)(Teal);

https://codesandbox.io/s/v8r33xnlr5

【讨论】:

猜你喜欢
  • 2012-06-16
  • 2021-12-11
  • 2011-04-13
  • 2010-12-04
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
相关资源
最近更新 更多