当前位置: 首页 > 知识库问答 >
问题:

CSS网格布局中的等高行

鲁旭
2023-03-14

我认为使用Flexbox是不可能实现这一点的,因为每一行只能是适合其元素所需的最小高度,但使用较新的CSS网格可以实现这一点吗?

明确地说,我希望网格中的所有元素在所有行上的高度相等,而不仅仅是每一行。基本上,最高的“单元格”应该指示所有单元格的高度,而不仅仅是其行中的单元格。

共有2个答案

周奇
2023-03-14

简单的回答是,在网格容器上设置grid-auto-rows:1fr;可以解决所问的问题。

https://codepen.io/hlsg/pen/exkjba

呼延智明
2023-03-14

如果目标是创建一个具有相等高度行的网格,其中网格中最高的单元格设置所有行的高度,下面是一个快速而简单的html" target="_blank">解决方案:

  • 将容器设置为grid-auto-rows:1fr

网格布局提供了在网格容器中建立灵活长度的单元。这是fr单元。它被设计为在容器中分配空闲空间,有点类似于FlexBox中的flex-grow属性。

如果您将网格容器中的所有行设置为1fr,那么让我们这样说:

grid-auto-rows: 1fr;

...那么所有行的高度将相等。

因为fr应该分配空闲空间,所以即刻这样做是没有意义的。如果几行内容的高度不同,那么当空间分布时,一些行会按比例变小变高。

但是,在网格规范中有一个小块:

7.2.3.灵活长度:fr单位

...

当可用空间无限大时(当网格容器的宽度或高度不确定时会发生这种情况),flex-sized(fr)网格轨道的大小根据其内容而定,同时保留各自的比例。

通过确定每个柔性尺寸网格轨道的max-content大小并将该大小除以相应的柔性因子以确定“假设的1fr大小”来计算每个柔性尺寸网格轨道的使用大小。

其中最大值被用作解析的1fr长度(挠曲分数),然后将其乘以每个网格轨道的挠曲因子以确定其最终大小。

因此,如果我正确地理解了这一点,当处理动态大小的网格(例如,高度是不确定的)时,网格轨迹(在本例中是行)的大小会根据其内容调整。

每行的高度由最高的(max-content)网格项确定。

这些行的最大高度变为1fr的长度。

这就是1fr在网格容器中创建等高行的方式。

正如问题中所指出的,使用FlexBox不可能实现等高行。

柔性项可以在同一行上具有相等的高度,但不能跨多行。

此行为在flexbox规范中定义:

6.弹性行

在多行flex容器中,每行的交叉大小是包含该行上的flex项所必需的最小大小。

换句话说,当基于行的flex容器中有多行时,每行的高度(“交叉大小”)是包含该行上的flex项所必需的最小高度。

 类似资料:
  • 问题内容: 我认为使用Flexbox无法实现这一点,因为每一行只能是适合其元素的最小高度,但是可以使用更新的CSS Grid来实现吗? 明确地说,我希望网格中所有行的所有元素的高度相等,而不仅仅是每行。基本上,最高的“单元格”应规定所有单元格的高度,而不仅仅是其行中的单元格。 问题答案: 简短答案 如果目标是创建具有相等高度的行的网格,而网格中最高的单元格将设置所有行的高度,那么这是一种快速简单的

  • 问题内容: 我在长度为4+的div内有一系列文章,没有任何四舍五入的行标记。我需要将其表示为每行3个文章(列)的表格,大概用display: grid。每篇文章都有一个页眉,一个节和一个页脚。 如何 在每行文章的内部为每个页眉实现相等的高度,为每个部分提供相等的高度以及与文章底部对齐的相等高度的页脚?可能吗 我应该使用display: table吗? PS我需要根据屏幕宽度动态更改每行的文章数。谢

  • 每一个网格项目都有一个矩形的网格区域,这个网格区域定义了该网格项的包含块,对齐属性(justify-self 和 align-self)确定其实际位置。 网格项占用的单元格也会影响网格的行和列的大小,参看网格尺寸(Grid Sizing)。 网格区域在网格内的位置通过1个网格位置和1个网格跨度属性来定义: grid position 表示网格项在网格中的位置。该属性可以是确定的(被显式定义)或自动

  • 网格模板(grid-template)属性及其普通写法(longhands)定义了一个固定数量的轨道,构成显式网格。 当网格项目定位在这些界限之外,网格容器通过增加隐式网格线生成隐式网格轨道。 这些隐含的和显式的网格线一起构成隐式网格(implicit grid)。 隐式网格轨道的尺寸由网格自动行(grid-auto-rows)和网格自动列(grid-auto-columns)属性来确定。 网格自

  • 网格模板区域(grid-template-areas)、网格模板行(grid-template-rows)和网格模板列(grid-template-columns),这3个属性共同显式定义了一个网格容器。而网格模板(grid-template)属性是一个用来同时设置这3个属性的速写(shorthand)。 grid items内容可能会超出显式网格,这时网格容器会自动生成隐式轨道(implicit

  • 网格布局中,网格容器(grid container)中的内容是通过在网格(grid)中定位和对齐来摆放的。 网格(grid)本质上是一个把网格容器(grid container)通过一组横竖向垂直相交的网格线(grid lines)所划分的格子区域,从而网格项(grid items)(代表grid container中的内容)可以被放进这些格子中。 有两组网格线(grid lines): 一组用来