CSS grid-template-areas 属性

CSS grid-template-areas 语法

在 CSS 中,grid-template-areas 属性用于通过命名网格区域来定义网格布局。

语法:

grid-template-areas: none | 字符串列表;

说明:

grid-template-areas 属性的默认值是 none,表示没有定义任何具名网格区域。如果不需要通过命名区域来布局,可以不设置此属性。

grid-template-areas 属性取值可以是一个字符串列表,每个字符串代表网格中的一行,字符串之间使用空格隔开。

对于字符串列表这种取值,小伙伴们要清楚以下几点。

  • 相同名称的重复单词:表示这些单元格合并为一个具名区域。例如,grid-template-areas: header header header; 定义了一个名为 “header” 的区域,跨越三个列。
  • 句点(.):代表一个空的网格单元格,即该单元格不属于任何具名区域。
  • 引号("):必须使用引号将每个行定义括起来。
  • 网格区域的形状:具名区域必须是矩形。例如,你不能创建一个 L 形或 Z 形的区域。
  • 名称必须有效:网格区域的名称不能包含空格,不能以数字开头,也不能是保留关键字(如 span)。

注意:

  • grid-template-areas 属性只能用于网格容器本身,即定义 display 取值为 grid 或 inline-grid 的元素。
  • 使用 grid-template-areas 必须首先通过 grid-template-columns 和 grid-template-rows 定义好网格的行和列结构,否则 grid-template-areas 将无法正确映射到网格单元格。
  • grid-template-areas 和 grid-area 都是配合一起使用的,其中 grid-template-areas 是用于父元素(areas 后面有 “s”),grid-area 是用于子元素(area 后面没有 “s”)。

CSS grid-template-areas 摘要

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

CSS grid-template-areas 示例

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

示例 1:grid-template-areas 基本用法

<!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;
            grid-template-areas: 
            "a1 a1 a2"
            "a1 a1 a2"
            "a3 a3 a3";
            width: 300px;
            height: 300px;
        }
        .container > div {
            box-sizing: border-box;
            border: 1px dashed gray;
        }
        .container > div:nth-child(1) {
            grid-area: a1;
            background-color: red;
        }
        .container > div:nth-child(2) {
            grid-area: a2;
            background-color: green;
        }
        .container > div:nth-child(3) {
            grid-area: a3;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>
</html>

页面效果如下图所示。

grid-template-areas 基本用法

分析:

grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;

上面代码表示将父元素划分为 3×3 个网格。

grid-template-areas: 
"a1 a1 a2"
"a1 a1 a2"
"a3 a3 a3";

上面代码表示给每个网格一个命名,相同命名的网格最终会合并在一起。这里需要注意 grid-template-areas 的取值,有多少行就用多少行的值,每一行的值需要用英文双引号包含起来。

示例 2:grid-template-areas 更多应用

<!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;
            grid-template-areas: "a1 a2 a3";
            width: 300px;
            height: 300px;
            background-color: skyblue;
        }
        .container > div {
            box-sizing: border-box;
            border: 1px dashed gray;
        }
        .item-1 {
            grid-area: a1;
            background-color: red;
        }
        .item-2 {
            grid-area: a2;
            background-color: green;
        }
        .item-3 {
            grid-area: a3;
            background-color: blue;
        }
    </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-template-areas 更多应用1

分析:

父元素被划分为 3×3 个网格,grid-template-areas: "a1 a2 a3"; 表示只给第一行划分区域,第 1 个网格占用 a1,第 2 个网格占用 a2,第 3 个网格占用 a3,这里是没太多问题的。

如果将 grid-template-areas: "a1 a2 a3"; 改为 grid-template-areas: "a3 a1 a2";,此时效果如下图所示。

grid-template-areas 更多应用2

如果将 grid-template-areas: "a1 a2 a3"; 改为下面代码,此时效果如下图所示。

grid-template-areas: 
"a1 . ."
". a2 ."
". . a3";

grid-template-areas 更多应用3

这里有一个很有用的技巧,那就是如果某个单元格(网格)不需要被命名,则可以使用点号(.)来占位。也就是说,上面例子的 grid-template-areas: "a1 a2 a3"; 其实等价于下面代码,小伙伴们可以自行试一下。

grid-template-areas: 
"a1 a2 a3"
". . ."
". . .";

如果将 grid-template-areas: "a1 a2 a3"; 改为下面代码,此时效果如下图所示。

grid-template-areas: 
"a1 a1 ."
". a2 ."
". a3 a3";

grid-template-areas 更多应用4

从上面可以看出,grid-tempalte-areas 属性是非常灵活的,它可以很方便地帮助我们实现各种组合布局。

上一篇: grid-template-rows

下一篇: grid-template

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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