代码之家  ›  专栏  ›  技术社区  ›  Timmo

在材质ui中为JS创建公共样式类

  •  1
  • Timmo  · 技术社区  · 6 年前

    我在用 material-ui

    我有很多重复的代码,当涉及到组件的 styles 因为我已经把我的部件分开了。

    例如,我有一些卡片都使用通用样式:

    const styles = theme => ({
      cardContainer: {
        position: 'relative',
        width: '50%',
        padding: theme.spacing.unit / 2,
      },
      cardOuter: {
        height: '100%',
        width: '100%',
        textAlign: 'start',
      },
      card: {
        width: '100%',
        background: theme.palette.backgrounds.card.off,
      },
      cardOn: {
        background: theme.palette.backgrounds.card.on,
      },
      cardUnavailable: {
        background: theme.palette.backgrounds.card.disabled,
      },
      cardContent: {
        display: 'flex',
        flexWrap: 'wrap',
        minHeight: 98,
        height: 98,
        [theme.breakpoints.down('sm')]: {
          minHeight: 74,
          height: 74,
        },
        padding: `${theme.spacing.unit * 1.5}px !important`,
      },
    });
    

    样式 所以我不必复制这些对象。

    有人知道怎么做吗?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Timmo    6 年前

    我想出来了。对于未来的观众:

    const styles = theme => ({
      ...card(theme),
      grid: {
        height: '100%',
        width: 'fit-content',
        paddingLeft: theme.spacing.unit * 2,
        paddingRight: theme.spacing.unit * 2,
        flexWrap: 'nowrap',
        overflowY: 'hidden',
      },
      name: {
        overflow: 'hidden',
        textOverflow: 'ellipsis',
        fontSize: '1.12rem',
        fontColor: theme.palette.text.main,
        [theme.breakpoints.down('sm')]: {
          fontSize: '0.9rem',
        }
      },
      state: {
        textOverflow: 'ellipsis',
        margin: '0 auto',
        marginTop: theme.spacing.unit / 2,
        fontSize: '1.0rem',
        fontColor: theme.palette.text.light,
        [theme.breakpoints.down('sm')]: {
          fontSize: '0.8rem',
        }
      },
      alarmArmedHome: {
        background: theme.palette.backgrounds.card.alarm.home,
      },
      alarmArmedAway: {
        background: theme.palette.backgrounds.card.alarm.away,
      },
      alarmTriggered: {
        background: theme.palette.backgrounds.card.alarm.triggered,
      },
      icon: {
        margin: '0 auto',
        color: theme.palette.text.icon,
        fontSize: '2.7rem',
        [theme.breakpoints.down('sm')]: {
          fontSize: '1.7rem',
        }
      },
    });
    

    卡片.js

    const styles = (theme) => ({
      cardContainer: {
        position: 'relative',
        width: '50%',
        padding: theme.spacing.unit / 2,
      },
      cardOuter: {
        height: '100%',
        width: '100%',
        textAlign: 'start',
      },
      card: {
        width: '100%',
        background: theme.palette.backgrounds.card.off,
      },
      cardOn: {
        background: theme.palette.backgrounds.card.on,
      },
      cardUnavailable: {
        background: theme.palette.backgrounds.card.disabled,
      },
      cardContent: {
        display: 'flex',
        flexWrap: 'wrap',
        minHeight: 98,
        height: 98,
        [theme.breakpoints.down('sm')]: {
          minHeight: 74,
          height: 74,
        },
        padding: `${theme.spacing.unit * 1.5}px !important`,
      },
    });
    
    export default styles;
    

    ...card(theme),
    
    推荐文章