Css 使用栅格显示等宽元素

Css 使用栅格显示等宽元素,css,reactjs,material-ui,css-grid,Css,Reactjs,Material Ui,Css Grid,我试图以以下形式显示一行中的字段:在一行中显示3个宽度相等的字段,如果有2个字段在一行中宽度相等,如果还有一个字段是全宽的,则显示其余字段 我尝试了以下CSS: root: { width: '100%', display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gridColumnGap: theme.spacing(), overflow: 'hidden'

我试图以以下形式显示一行中的字段:在一行中显示3个宽度相等的字段,如果有2个字段在一行中宽度相等,如果还有一个字段是全宽的,则显示其余字段

我尝试了以下CSS:

root: {
        width: '100%',
        display: 'grid',
        gridTemplateColumns: 'repeat(3, 1fr)',
        gridColumnGap: theme.spacing(),
        overflow: 'hidden',
    },
但这是我得到的结果:


如何使用CSS网格实现第一幅图像的预期效果?

我可以想出两种解决方案。首先,不是将网格划分为3列,而是划分为6列,并通过使用第n个子选择器将网格项定位为多列来跨越网格项。第二,根本不使用网格,而是创建一个flex容器,该容器将有另外3个flex容器作为子节点。并利用flex-basis得到了预期的结果

解决方案1 使用6柱网格, 您必须以特定的网格项为目标,并使用span跨越n个列。例如,对于前3个网格项,需要指定网格列:span 2;。例如

.网格容器{ 显示:网格; 网格模板列:repeat6,1fr; 网格模板行:repeat3,1fr; } .网格项:N-child1, .网格项:N-child2, .表格项目:N-child3{ 格构柱:跨度2; } .网格项:N-child4, .表格项目:N-child5{ 格构柱:跨度3; } .grid项:最后一个子项{ 格构柱:跨度6; } 请参阅中的演示

解决方案2


由于您要求使用CSS网格解决方案,因此我不认为包含使用flex box的解决方案的代码是一个好主意。请查看,了解使用flex box的解决方案。

我可以想出两种解决方案。首先,不是将网格划分为3列,而是划分为6列,并通过使用第n个子选择器将网格项定位为多列来跨越网格项。第二,根本不使用网格,而是创建一个flex容器,该容器将有另外3个flex容器作为子节点。并利用flex-basis得到了预期的结果

解决方案1 使用6柱网格, 您必须以特定的网格项为目标,并使用span跨越n个列。例如,对于前3个网格项,需要指定网格列:span 2;。例如

.网格容器{ 显示:网格; 网格模板列:repeat6,1fr; 网格模板行:repeat3,1fr; } .网格项:N-child1, .网格项:N-child2, .表格项目:N-child3{ 格构柱:跨度2; } .网格项:N-child4, .表格项目:N-child5{ 格构柱:跨度3; } .grid项:最后一个子项{ 格构柱:跨度6; } 请参阅中的演示

解决方案2


由于您要求使用CSS网格解决方案,因此我不认为包含使用flex box的解决方案的代码是一个好主意。查看,了解使用flex box的解决方案。

使用6列网格使用6列网格