【问题标题】:React Material UI GridList cells don't wrap correctlyReact Material UI GridList 单元格没有正确换行
【发布时间】:2021-03-06 19:55:30
【问题描述】:

当使用 Material-UI GridList 时,单元格不会“正确”地包裹在网格中。 在深入研究 css 时,我注意到它使用了 flex-wrap,它假设可以弯曲行,但我确信有一种方法可以使用这个组件,并且可以选择填充所有空格。

代码:

const useStyles = makeStyles((theme) => ({
root: {
  display: "flex",
  flexWrap: "wrap",
  justifyContent: "space-around",
  overflow: "hidden",
  backgroundColor: theme.palette.background.paper,
  paddingTop: theme.spacing(4),
},
gridList: {
  width: 500,
  height: '100%',
},
listItem: {
  borderRadius: theme.borderRadius['secondary'],
  overflow: "hidden",
},
}));

function Gallery(props) {
  const styles = useStyles();
  const cols = [
  [2, 2],
  [1, 2],
  [1, 2],
  [2, 1],
  [1, 1],
  [1, 1],
  [1, 1],
];

const renderItem = (tile, index) => (
  <GridListTile
    classes={{ root: styles.listItem }}
    key={tile.image}
    cols={cols[index % cols.length][0]}
    rows={cols[index % cols.length][1]}
  >
    <img src={tile.image} alt={tile.title} />
  </GridListTile>
);
return (
  <div className={styles.root}>
    <GridList
      cellHeight={160}
      className={styles.gridList}
      cols={3}
      spacing={10}
    >
      {data.items.map(renderItem)}
    </GridList>
  </div>
);
}

感谢您的帮助

【问题讨论】:

    标签: javascript reactjs material-ui grid


    【解决方案1】:

    我参考了MaterialUI的文档
    您同时指定了行和列。删除 rows={cols[index % cols.length][1]} 解决了这个问题。 这是工作示例。 (图片取自sample

    import React from 'react';
    import { makeStyles } from '@material-ui/core/styles';
    import GridList from '@material-ui/core/GridList';
    import GridListTile from '@material-ui/core/GridListTile';
    
    const App = () => {
      const useStyles = makeStyles((theme) => ({
        root: {
          display: 'flex',
          flexWrap: 'wrap',
          justifyContent: 'space-around',
          overflow: 'hidden',
          backgroundColor: theme.palette.background.paper,
          paddingTop: theme.spacing(4),
        },
        gridList: {
          width: 500,
          height: '100%',
        },
        listItem: {
          overflow: 'hidden',
        },
      }));
    
      const styles = useStyles();
      const cols = [
        [2, 2],
        [1, 2],
        [1, 2],
        [2, 1],
        [1, 1],
        [1, 1],
        [1, 1],
      ];
    
      const tileData = [
        {
          img: '/static/images/grid-list/breakfast.jpg',
          title: 'Breakfast',
          author: 'jill111',
          cols: 2,
          featured: true,
        },
        {
          img: '/static/images/grid-list/burgers.jpg',
          title: 'Tasty burger',
          author: 'director90',
        },
        {
          img: '/static/images/grid-list/camera.jpg',
          title: 'Camera',
          author: 'Danson67',
        },
        {
          img: '/static/images/grid-list/morning.jpg',
          title: 'Morning',
          author: 'fancycrave1',
          featured: true,
        },
        {
          img: '/static/images/grid-list/hats.jpg',
          title: 'Hats',
          author: 'Hans',
        },
        {
          img: '/static/images/grid-list/honey.jpg',
          title: 'Honey',
          author: 'fancycravel',
        },
        {
          img: '/static/images/grid-list/vegetables.jpg',
          title: 'Vegetables',
          author: 'jill111',
          cols: 2,
        },
        {
          img: '/static/images/grid-list/plant.jpg',
          title: 'Water plant',
          author: 'BkrmadtyaKarki',
        },
        {
          img: '/static/images/grid-list/mushroom.jpg',
          title: 'Mushrooms',
          author: 'PublicDomainPictures',
        },
        {
          img: '/static/images/grid-list/olive.jpg',
          title: 'Olive oil',
          author: 'congerdesign',
        },
        {
          img: '/static/images/grid-list/star.jpg',
          title: 'Sea star',
          cols: 2,
          author: '821292',
        },
        {
          img: '/static/images/grid-list/bike.jpg',
          title: 'Bike',
          author: 'danfador',
        },
      ];
    
      const renderItem = (tile, index) => (
        <GridListTile
          classes={{ root: styles.listItem }}
          key={tile.image}
          cols={cols[index % cols.length][0]}
        >
          <img src={tile.img} alt={tile.title} />
        </GridListTile>
      );
      return (
        <div className={styles.root}>
          <GridList
            cellHeight={160}
            className={styles.gridList}
            cols={3}
            spacing={10}
          >
            {tileData.map(renderItem)}
          </GridList>
        </div>
      );
    };
    
    export default App;
    
    

    【讨论】:

    • 我确实需要 rows 参数,因为我想要项目的正方形而不是矩形和正方形的混合。
    • 我没有收到您的评论。您能否使用您所需要的示例视图来更新您的问题?在你的问题图像 1row [[square.矩形],[矩形,矩形],[正方形,正方形,正方形]]。您的问题中有矩形项目。您可以更新 json 中的 cols 属性以获得所需的视图。
    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 2021-01-25
    • 2021-02-11
    • 2018-08-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多