跳转到主要内容
CSS 网格分数单位概述

在动态布局中探索CSS网格分数单位。轻松优化设计灵活性和响应性。

超过 6 个月前更新

了解CSS中的FR单位:一个输入,它会自动计算布局分割,并调整网格内的间隙。

分数——或分数单位——是改变生活的。为什么?因为它们是最灵活和响应的单位!可惜它们只存在于网格内。

什么是分数(1FR)?

一个分数或1FR是整体的一部分。1个分数是可用空间的100%。2个分数分别为50%。因此,1FR是可用空间的1/2。如果有250个分数呢?那么每个分数(1FR)就是1/250或0.4%。

因此,1个分数就是1(或100)除以总分数的数量。我们将在下面进一步探讨这个问题。


2FR是多少?

它是2个分数!


分数与百分比

无论您要使用分数还是百分比,您首先需要做的是:

  1. 决定您需要多少跟踪(列或行)

  2. 进行计算

  3. 创建跟踪

  4. 将值应用于每个跟踪


让我们使用百分比

例如,您有四列。您希望它们的大小相等,并填充可用空间。您可以将每个列设置为100/4=25%宽度。

每个宽度为25%的4列填满了100%的网格容器。

但是,如果以后您决定使其中一列的大小是其他列的两倍呢?(2X+X+X+X=100,X是多少?)

如果将其中一列的宽度更改为50%,则列将溢出网格容器。您需要重新计算宽度值,并再次更改每列的大小。

如果需要添加另一列怎么办?现在有五列需要总计100。因此,每个都需要100/5=20%。如果您不希望发生溢出,则需要更新每列的值。

5列宽度为25%将溢出网格容器。您需要将每列调整为20%宽。

如果需要删除一列怎么办?或添加间隙?您明白了吧?使用百分比时,每次需要添加或删除列、更改其大小、添加间隙或更改间隙大小时,您都需要:

  1. 重新计算每列的大小

  2. 将新的大小值重新应用于每列


那么,分数(FR)如何挽救一天呢?

同样,您有四列。您希望它们的大小相等。

  1. 创建4列

  2. 就是这样!每列的默认宽度为1FR

每个具有1FR大小值的列都会拉伸以填充可用空间。

如果您希望其中一个比其他列大两倍怎么办?

  1. 将那一列设置为2FR

  2. 就是这样!

2FR等于2个分数。因此,1FR的值是1除以总分数(2FR+1FR+1FR+1FR=5FR)。因此,每个1FR=可用空间的1/5或20%。因此,2FR宽度为2/5或40%。

现在您有4列,但总共有5个FR,因此自动每个分数占据可用空间的20%。因此,第一列占用了2个分数的空间,即40%。您无需进行任何计算或更新每列的大小。

如果添加或删除一列怎么办?您什么都不做!分数自动工作!

在这里,我们删除了宽度为2个分数的第一列。现在,总分数为3。因此,每个1FR宽的列现在拉伸为空间的1/3。


那么,1FR等于多少?

  • 在分数中:1FR=1/总FR数

  • 在百分比中:1FR=100/总FR数

在示例中:

  1. 我们有3列,每列宽度均为1FR。1FR=1/3=33.333%的可用空间。

  2. 我们将网格容器设置为1200px宽。现在每个FR宽度为1200/3=400px。

  3. 我们添加了另一列。现在有4列。列调整为占用可用空间的1/4。那就是25%。

  4. 我们将第一列设置为2FR宽。其余仍然为1FR宽。总数现在是2FR+1FR+1FR+1FR=5FR。因此,1FR现在是1/5=20%。第一列是2FR=2/5=40%。

  5. 我们将第一列设置为200px宽。其余仍然为1FR宽。总数现在是200px+3FR。1FR=1/3或33.333%的可用空间。可用空间是多少?它是网格容器的宽度(1200px)减去第一列的宽度(200px)=1000px。我们需要计算每个FR的值吗?不需要!FR单位会为我们计算。

  6. 现在,让我们恢复第一列为1FR并添加间隙。让我们将列间距设置为16px。每列仍然占据可用空间的1/4。可用空间再次是1200px-总间距数(3*16px)。1 Fr是……无所谓!它就是这样!


1FR和内容

只要内容是灵活的,分数单位就是整体的一部分。这意味着,只要内部内容可以缩放以适应列或行,1FR跟踪就是相等的。然而,一旦内容停止缩放以适应跟踪,具有FR值的跟踪将调整以使内容适合。因此,如果一列具有固定宽度的网格子项,则该列的宽度永远不会小于网格子项的宽度。

因此,宽度为1FR的列具有与内容宽度相等的最小值,无论该宽度是像400px这样的设置固定单位,还是文本元素中最长的单词。

但是,网格中的其他列会发生什么?它们将按比例缩小。为什么?嗯,这是发生的情况:

  1. 我们有4列。每个宽度为1FR。每个列都是相等的。1FR=可用空间的25%。

  2. 在一列中,我们添加了宽度为400px且最大宽度为none的图像。现在,此列的宽度不能小于400px。但这并不意味着1FR=400px现在。这意味着第一列现在宽度为400px。

其他三列每个占用剩余空间的1个分数。这是剩余空间的33.33%。

FR自动设置最小值,以尊重内部的内容。因此,使用FR时,最小值是自动的(或自动),最大值是我们设置的值(1FR,2FR..)


最小/最大

因此,从技术上讲,1FR是min/max(auto,1FR),意味着min=auto,max=1FR。

现在,您当然可以通过将尺寸设置从默认值更改为min/max来覆盖此最小值。最大值将是1FR,最小值可以是您指定的任何值。但是,请注意,任何超过此处设置的最小宽度的固定宽度的跟踪内的内容将溢出网格单元。

您可以在min/max设置中为跟踪的最小和最大尺寸指定任何值。具有min/max值的跟踪将大于或等于最小值,并小于或等于最大值。

例如,默认情况下,行的高度为auto。这允许它根据内部的内容扩展或缩小。将min/max值设置为行是创建灵活行的绝佳方法,不会缩小到设置的最小值以下。假设您希望有一行的高度至少为5VH,但不希望内部的任何内容溢出该行或被裁剪。您需要做的就是将行大小设置为min=5VH,max=auto。

这是否解答了您的问题?