特别声明:如果您喜欢小站的内容,可以点击申请会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!或添加QQ:874472854(^_^)
前面花了两个章节(Grid布局 Part3 和 Part4)介绍了在grid-template-columns 和 grid-template-rows 中使用固定长度值,动态值和一些关键词来设置网格轨道的大小。除了这些之外,还可以使用一些函数,比如minmax(min, max)、repeat() 等来设置网格轨道大小。在这一章节点,主要围绕着在 grid-template-columns 和 grid-template-rows 属性中如何使用函数(minmax(min, max) 和 repeat())设置网格轨道尺寸,感兴趣的话,请继续往下阅读。
minmax(min, max)
minmax(min, max) 是一个 CSS 函数,可以用在 grid-template-columns 和 grid-template-rows 属性上,用来设置网格轨道的尺寸。我们可以给 minmax() 函数传两个参数值,即 一个是 min 和 max 。每个参数都可以是 <length>(比如px)、<percentage>(比如%)、<flex>(比如fr)的一种,或者是max-content、min-content、auto等关键词。
CSS 规范对 minmax(min, max) 是这样定义的:
定义了一个大于或等于
min和小于或等于max的尺寸范围。
简单地说,minmax(min, max)函数将返回一个 min ~ max 范围中的一个值。该函数返回的值可以作为grid-template-columns 或 grid-template-rows的值。我们来看一个简单地示例:
.container {
grid-template-columns: minmax(100px, 200px) 1fr 1fr;
}
我们简单分析上面这个示例。示例中使用 grid-template-columns 创建了一个三列网格,其中:
- 第一列的列宽是
minmax(100px, 200px)。min是100px,max是200px - 第二列和第三列的列宽都是
1fr。意味着,它们将占网格容器有用空间的1/2,即,容器宽度的50%。

我们来考虑一下不同宽度的网格容器,可以拖动示例中的滑块来调整网格容器的宽度:
- 当网格容器宽度足够宽时,
minmax(100px, 200px)返回的值是200px,即第一列的网格轨道宽度是200px(max的值) - 当网格容器宽度调到很小时(比如
200px),minmax(100px, 200px)返回的值是100px,即第一列的网格轨道宽度是100px(min的值) - 另外,
minmax(100px, 200px)还会返回一个100px ~ 200px之间的值,比如当容网格容器宽度是290px时,minmax(100px, 200px)返回的值就是143px

在这个示例中,minmax(min, max) 函数中的 min 和 max 都是静态的长度值(<length>),并且只在一个网格轨道中使用 minmax(min, max)函数。其实,我们还可以使用 minmax(min, max) 在一个以上的网格轨道中使用。比如,我们把上面示例中的两个 1fr 都换成 minmax(100px, 200px),当然你也可以换成任何你希望使用的值:
.container {
grid-template-columns: minmax(100px, 200px) minmax(100px, 200px) minmax(100px, 200px)
}
这个示例,三列网格轨道宽度都会在 100px ~ 200px 之间变动,最大是200px,最小是100px:

除了静态值,minmax(min, max) 函数中的两个参数 min 和 max 还可接受一些动态值(需要计算的值),比如我们熟悉的%和fr。通过使用它们,我们可以定义既具响应式(Responsiv),又能根据网格容器可用空间改变网格轨道尺寸。比如下面这个示例:
.container {
grid-template-columns: minmax(30%, 50%) 1fr 1fr;
}
这个示例定义的网格,其中第一列网格轨道的宽度在 30% ~ 50%之间,而第二列和第三列使用的是1fr,即网格容器可用空间宽度的1/2(即网格容器可用空间宽度的50%)。你可以尝试着拖动示例中的滑块,当网格容器宽度改变之后,第一列网格轨道大小也会随之改,在这个示例中,有可能小到0,这是因为网格容器宽度是相对于其父容器按百分比计算的:
你可能已经发现了,在minmax(min, max)函数两个参数都使用<percentage>的时候,会令我们感到困惑,我们来做一个假设:
| 网格容器宽度 | min = 30% |
max = 50% |
minmax(30%, 50%)计算结果 |
|---|---|---|---|
800px |
30% x 800 = 240px |
50% x 800 = 400px |
minmax(240px, 400px) |
600px |
30% x 600 = 180px |
50% x 600 = 300px |
minmax(180px, 300px) |
400px |
30% x 400 = 120px |
50% x 400 = 200px |
minmax(120px, 200px) |
200px |
30% x 200 = 60px |
50% x 200 = 100px |
minmax(60px, 100px) |
100px |
30% x 100 = |
如需转载,烦请注明出处:https://www.w3cplus.com/css/grid-layout-part-5.html
如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!
