我读过很多关于CSS flex box和CSS grids的教程,但坦率地说,我就是不知道如何做到这一点。)的东西。
我所希望的是容器中的元素都和最宽的元素一样宽。
我不想让它们填满容器的整个宽度,只想让它们都长到最大宽度。这可以用CSS实现吗?
考虑以下HTML:
<div class="container">
<button>a normal button</button>
<button>tiny</button>
<button>a really, really, really wide button</button>
</div>
会产生这样的结果:
我想要的是这样的,它们的宽度都是最宽按钮的宽度:
我不希望他们只是伸展出来填补页面的宽度:
这能做到吗?如果是这样,上面的HTML的CSS是什么?
3条答案
按热度按时间fslejnso1#
是的。这可以用纯CSS来完成。
这里有一个简单的解决方案:
以下是它的工作原理:
网格布局提供了一个用于在网格容器中建立可变长度的单元。这是**
fr
**单元。它被设计用来分配容器中的自由空间(有点类似于flex-grow
)。然而,当容器的宽度/高度是动态的(例如,在本例中为
display: inline-grid
)时,Grid规范提供了一个特别独特的行为。在这种情况下,
fr
单元将计算每个网格项的max-content
。然后,它将采用找到的最大值,并将其用作轨道上所有项目的1fr
长度。这将导致网格项共享行中最宽项的宽度。
奇怪,但真的。
这也是为什么布局为equal height rows is possible with Grid (but not flexbox)。
7.2.3.柔性长度:
fr
单元...
当可用空间无限时(当网格容器的宽度或高度不确定时会发生这种情况),弹性大小(
fr
)的网格轨道将根据其内容调整大小,同时保持其各自的比例。通过确定每个弹性大小的网格轨道的
max-content
大小并将该大小除以相应的弹性因子以确定“假设1fr
大小”来计算每个弹性大小的网格轨道的使用大小。其中的最大值被用作解析的
1fr
长度(弯曲分数),然后乘以每个栅格轨迹的弯曲因子以确定其最终大小。x33g5p2x2#
下面是一个使用CSS Grid的解决方案,可以使用任意数量的按钮:
wmomyfyw3#
为了解决任何数量的元素(不需要预先知道数量):
display: inline-grid
)。grid-auto-columns
设置为1fr
,这样隐式创建的列轨道的大小都为1fr
,这使得它们在本例中都是最大列的大小。grid-auto-flow
设置为column
,以便在向网格添加元素时创建新列(而不是行)。