CSS grid-auto-columns 属性

CSS grid-auto-columns 语法

在 CSS 中,grid-auto-columns 属性用于指定隐式创建的网格列的大小。

当网格容器中的子项数量超过了显式定义的列(通过 grid-template-columnsgrid-template-areas 定义),或者当子项被放置到这些显式列之外的区域时,网格会自动创建新的列来容纳这些子项,这些列被称为 “隐式网格列” 。

grid-auto-columns 允许你控制这些自动创建的列的大小,而不是让它们默认地自动适应内容。

语法:

grid-auto-columns: <track-size>+;

说明:

grid-auto-columns 属性接受一个或多个 <track-size> 值。每个 <track-size> 值定义了一个或多个隐式列的尺寸:

  • auto(默认值):列的尺寸将根据内容和 grid-auto-flow 的值自动调整。在大多数情况下,它等同于 minmax(min-content, max-content)。
  • 长度值:一个固定的长度值,如 100px, 5em, 2rem 等。
  • 百分比:一个相对于网格容器宽度的百分比值。
  • fr:一个弹性长度,如 1fr。fr 单位表示可用空间的一个分数。
  • min-content:列的尺寸将根据其内容所需的最小空间来确定。
  • max-content:列的尺寸将根据其内容所需的理想(最大)空间来确定。
  • minmax(min, max):定义一个尺寸范围,列的大小将在 min 和 max 之间。例如,minmax(100px, auto) 表示列最小为 100px,最大自动适应内容。

当提供多个 <track-size> 值时,这些值会按顺序循环应用于后续隐式创建的列。例如,grid-auto-columns: 100px 200px; 意味着第一个隐式列是 100px,第二个是 200px,第三个又是 100px,依此类推。

此外,小伙伴们还要清楚以下几点。

  • grid-auto-columns 只影响那些没有通过 grid-template-columns 或 grid-template-areas 显式定义的列。
  • grid-auto-columns 通常与 grid-auto-flow: column; 或 grid-auto-flow: column-dense; 等属性结合使用,以更好地控制网格子项的自动放置行为。

注意: grid-auto-columns 属性只能用于网格容器自身,即定义了 display 取值为 grid 或 display: inline-grid 的元素。

CSS grid-auto-columns 摘要

属于 CSS grid 布局
使用频率
是否继承
默认值 auto
兼容性 查看
官方文档 查看
MDN 查看

CSS grid-auto-columns 示例

接下来,我们通过几个简单的例子来讲解一下 CSS grid-auto-columns 属性是如何使用的。

示例 1:grid-auto-columns 定义固定宽度的隐式列

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: grid;
            /* 显式定义 2 行 */
            grid-template-rows: repeat(2, 1fr);
            /* 只显式定义 2 列 */
            grid-template-columns: 100px 100px; 
            /* 设置隐式创建的列宽为 50px */
            grid-auto-columns: 50px; 
            /* 确保子项在超出显式列时,能自动创建新列 */
            grid-auto-flow: column;

            width: 400px;
            height: 200px;
            background-color: lightskyblue;
        }

        .container > div {
            display: flex;
            justify-content: center;
            align-items: center;
            border: 1px solid silver;
            background-color: salmon;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>item 1 (显式列)</div>
        <div>item 2 (显式列)</div>
        <div>item 3 (显式列)</div>
        <div>item 4 (显式列)</div>
        <div>item 5 (隐式列)</div>
        <div>item 6 (隐式列)</div>
    </div>
</body>
</html>

页面效果如下图所示。

grid-auto-columns 定义固定宽度的隐式列

分析:

在上面例子中,我们显式定义了 2 行(repeat(2, 1fr))和 2 列(100px 100px)的网格容器。

grid-auto-columns: 50px; 表示任何超出这两列的子项,在自动创建新列时,这些新列的列宽都将是 50px。而 grid-auto-flow: column; 确保了子项在填满显式行后,会优先填充新的列。

因此最终,item 1、item 2、item 3、item 4 会被放到显式列里面。从 item 5 开始,由于显式列已满,网格会自动创建新的列,这些新列的宽度都将是 80px。

示例 2:grid-auto-columns 循环定义隐式列尺寸

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: grid;
            /* 显式定义 2 行 */
            grid-template-rows: repeat(2, 1fr);
            /* 不显式定义列,所有列都由 grid-auto-columns 控制 */
            /* grid-template-columns: auto; */ /* 默认值 */

            /* 关键:隐式列宽度交替为 100px 和 150px */
            grid-auto-columns: 100px 150px; 
            /* 确保子项优先填充新列 */
            grid-auto-flow: column; 

            width: 500px;
            height: 200px;
            background-color: lightskyblue;
        }

        .container > div {
            display: flex;
            justify-content: center;
            align-items: center;
            border: 1px solid silver;
            background-color: salmon;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>item 1 (100px)</div>
        <div>item 2 (100px)</div>
        <div>item 3 (150px)</div>
        <div>item 4 (150px)</div>
        <div>item 5 (100px)</div>
        <div>item 6 (100px)</div>
    </div>
</body>
</html>

页面效果如下图所示。

grid-auto-columns 循环定义隐式列尺寸

分析:

在上面例子中,网格容器 container 只定义了行,没有显式定义列。这意味着所有列都将是隐式创建的。

grid-auto-columns: 100px 150px; 表示:第一列 (item 1, 2) 将是 100px 宽。第二列 (item 3, 4) 将是 150px 宽。第三列 (item 5, 6) 又会回到 100px 宽。以此类推,形成一种宽度交替的效果。

此外,grid-auto-flow: column; 确保了子项是先填充列,然后再创建新列。

上一篇: grid-auto-rows

下一篇: grid-auto-flow

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号