CSS grid-template-columns 属性

CSS grid-template-columns 语法

在 CSS 中,grid-template-columns 属性用于定义网格布局中的列结构(列数和列宽)。

语法:

grid-template-columns: none | 值列表 | 函数;

说明:

grid-template-columns 属性的默认值是 none,此时表示没有显式定义的列。网格将仅创建隐式网格列,其尺寸由 grid-auto-columns 属性决定。

grid-template-columns 取值可以是一个值列表,还可以是一个 CSS 函数(一般是 repeat())。如果 grid-template-columns 取值为 “值列表” ,此时每个值代表的是一个列的宽度。有多少个列,就应该提供多少个值,比如:

grid-template-columns: 100px 100px 100px;
grid-template-columns: 1fr 1fr 1fr;

其中,对于值列表的每个值来说,它的值可以是:

  • 长度值:比如 px、em、rem、百分比(%)等。
  • fr 值:fr 是一个弹性单位,表示可用空间的比例。比如 grid-template-columns: 1fr 2fr; 表示两列,第二列是第一列宽度的两倍。
  • min-content:列的宽度将根据其内容所需的最小宽度来确定,即内容不换行时的最小宽度。
  • max-content:列的宽度将根据其内容所需的最大宽度来确定,即内容完整显示所需的最大宽度。
  • auto:弹性宽度,类似于 fr,但会优先考虑内容的固有尺寸。在与其他 fr 单位结合时,auto 会在分配剩余空间前占用其内容的 max-content 宽度。

如果 grid-template-columns 取值为 “函数” ,此时它是使用 repeat() 函数来结合 auto-fill、auto-fit 关键字以及 minmax() 函数,主要用于创建响应式和自适应的列。

注意:

  • grid-template-columns 属性用于网格容器本身,即定义了 display 取值为 grid 或 inline-grid 的元素。
  • grid-template-columns 通常需要搭配 grid-template-rowsgrid-template-areas 等属性一起使用。

CSS grid-template-columns 摘要

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

CSS grid-template-columns 示例

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

示例 1:grid-template-columns 使用固定数值

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: grid;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
            width: 300px;
            height: 300px;
            background-color: lightskyblue;
        }
        .container > div {
            box-sizing: border-box;
            border: 1px dashed gray;
            background-color: hotpink;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
        <div>9</div>
    </div>
</body>
</html>

页面效果如下图所示。

grid-template-columns 使用固定数值

分析:

.container {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 100px 100px 100px;
    ……
}

display: grid; 表示父元素内部使用的是 grid 布局。grid-template-columns: 100px 100px 100px; 表示将整个区域定义成 3 列,每一列宽度为 100px。

grid-template-rows: 100px 100px 100px; 表示将整个区域定义成 3 行,每一行高度为 100px。由于父元素的尺寸为 300px×300px,所以刚好划分为 3×3 个子项(单元格)。

示例 2:grid-template-columns 使用 fr 单位

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: grid;
            grid-template-columns: 1fr 1fr 1fr;
            grid-template-rows: 1fr 1fr 1fr;
            width: 300px;
            height: 300px;
            background-color: skyblue;
        }
        .container > div {
            box-sizing: border-box;
            border: 1px dashed gray;
            background-color: hotpink;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
        <div>9</div>
    </div>
</body>
</html>

页面效果如下图所示。

grid-template-columns 使用fr单位

分析:

grid-template-columns: 1fr 1fr 1fr; 表示将父元素宽度平均分为 3 列,由于父元素的 width 等于 300px,所以每一列宽度为 100px。而 grid-template-rows: 1fr 1fr 1fr; 表示将父元素高度平均分为 3 行,由于父元素的 height 也为 300px,所以每一行高度为 100px。

对于这个例子来说,下面两种写法是等价的。但写法 1 简单方便很多,因为它无需手动计算每一列的宽度或每一行的高度。

/* 写法 1 */
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;

/* 写法 2 */
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;

示例 3:左右两列固定宽度,中间列自适应

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: grid;
            grid-template-columns: 100px 1fr 100px;
            height: 100px;
        }
        .item-1, .item-3 {
            background-color: lightskyblue;
        }
        .item-2 {
            background-color: hotpink;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item-1">1</div>
        <div class="item-2">2</div>
        <div class="item-3">3</div>
    </div>
</body>
</html>

页面效果如下图所示。

左右两列固定宽度,中间列自适应

分析:

想要实现 “两列固定、中间自适应” 这种布局方式,使用 grid 布局实现很简单,只需要在使用 grid-template-columns 属性时,设置左右两列为固定值,中间列为 1fr 或 auto 即可。

上一篇: order

下一篇: grid-template-rows

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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