material-ui布局,容器上的断点

rom*_*a98 7 responsive-design reactjs material-ui

我正在开始一个新项目并学习React.

我以前有过twitter bootstrap的经验,但是选择了材料-ui.

我还选择了材料-ui @ next,因为它包含一个布局系统(https://material-ui-1dab0.firebaseapp.com/layout/responsive-ui)

到目前为止,我已成功使用Layout的容器和项目根据不同的断点重新排列容器中的项目.

但我希望能够使容器响应,意味着根据相同的断点给出"对齐","方向"和"对齐"的不同值.

<Layout
    container
>
<Layout item md={2} sm={12}>
    <Layout
        container
        align={"stretch"}
        direction={"row"}
        justify={"center"}
    // more Layout items here
    </Layout>
</Layout>
<Layout item md={10} sm={12}>
    <Layout
        container
        direction={"column"}
        justify={"space-around"}
        align={"flex-start"}
    >
    // more Layout items here
    </Layout>
</Layout>
</Layout>
Run Code Online (Sandbox Code Playgroud)

在这个例子中,布局项目将根据断点md和sm正确调整大小,但是容器没有这样的规则(例如,当断点为md时,我希望对齐为'flex-start','center'当断点是sm时.

所以我的问题是:'断点'(xs,sm,md,lg,xl)可用于修改项目在一条线上的分布方式.那么是否可以使用相同的断点来修改容器分配其项目的方式?

非常感谢.

Ken*_*ory 6

您可以通过 jss-theme-reactor 使用媒体查询来处理此问题:

const styleSheet = createStyleSheet('test', theme => ({
  gridItem: {
    alignItems: 'center',
  },
  [theme.breakpoints.up('md')]: {
    gridItem: {
      alignItems: 'flex-start',
    },
  },
 }));

const testComponent = (props, { styleManager }) => {
  const classes = styleManager.render(styleSheet);

  return (
    <Grid container>
      <Grid item md={2} sm={12} className={classes.gridItem}>
        <div>Hi, I'm in an item.</div>
      </Grid>
      <Grid item md={10} sm={12} className={classes.gridItem}>
        <div>Yeah, me too.</div>
      </Grid>
    </Grid>
  );
};
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 withWidth HOC(使用 width 属性装饰组件)来处理此问题:

import withWidth, { isWidthUp } from 'material-ui/utils/withWidth';

const styleSheet = createStyleSheet('AppDrawer', theme => ({
  gridItemSmall: {
    alignItems: 'center',
  },
  gridItemMedium: {
    alignItems: 'flex-start',
  },
}));

const testComponent = ({ width }, { styleManager }) => {
  const classes = styleManager.render(styleSheet);
  const itemClass = isWidthUp('md', width) ? classes.gridItemMedium : classes.gridItemSmall;
  return (
    <Grid container>
      <Grid item md={2} sm={12} className={itemClass}>
        <div>Hi, I'm in an item.</div>
      </Grid>
      <Grid item md={10} sm={12} className={itemClass}>
        <div>Yeah, me too.</div>
      </Grid>
    </Grid>
  );
};

export default withWidth()(testComponent);
Run Code Online (Sandbox Code Playgroud)