grid-area

Baseline 已广泛支持

此功能已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 10 月以来,它已在各大浏览器中可用。

grid-area CSS 简写属性,通过为其网格位置贡献一条线、一个跨度或不贡献任何内容(自动),来指定网格项在网格中的大小和位置,从而指定其网格区域的边缘。

试一试

grid-area: a;
grid-area: b;
grid-area: c;
grid-area: 2 / 1 / 2 / 4;
<section class="default-example" id="default-example">
  <div class="example-container">
    <div class="transition-all" id="example-element">Example</div>
  </div>
</section>
.example-container {
  border: 1px solid #c5c5c5;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: repeat(3, minmax(40px, auto));
  grid-template-areas:
    "a a a"
    "b c c"
    "b c c";
  grid-gap: 10px;
  width: 200px;
}

.example-container > div {
  background-color: rgb(0 0 255 / 0.2);
  border: 3px solid blue;
}

#example-element {
  background-color: rgb(255 0 200 / 0.2);
  border: 3px solid rebeccapurple;
}

如果指定了四个 <grid-line> 值,grid-row-start 将设置为第一个值,grid-column-start 将设置为第二个值,grid-row-end 将设置为第三个值,grid-column-end 将设置为第四个值。

当省略 grid-column-end 时,如果 grid-column-start 是一个 <custom-ident>,则 grid-column-end 将设置为该 <custom-ident>;否则,它将设置为 auto

当省略 grid-row-end 时,如果 grid-row-start 是一个 <custom-ident>,则 grid-row-end 将设置为该 <custom-ident>;否则,它将设置为 auto

当省略 grid-column-start 时,如果 grid-row-start 是一个 <custom-ident>,则所有四个长属性都将设置为该值。否则,它将设置为 auto

grid-area 属性也可以设置为一个 <custom-ident>,作为区域的名称,然后可以使用 grid-template-areas 进行放置。

构成属性

此属性是以下 CSS 属性的简写:

语法

css
/* Keyword values */
grid-area: auto;
grid-area: auto / auto;
grid-area: auto / auto / auto;
grid-area: auto / auto / auto / auto;

/* <custom-ident> values */
grid-area: some-grid-area;
grid-area: some-grid-area / another-grid-area;

/* <integer> && <custom-ident>? values */
grid-area: 4 some-grid-area;
grid-area: 4 some-grid-area / 2 another-grid-area;

/* span && [ <integer> || <custom-ident> ] values */
grid-area: span 3;
grid-area: span 3 / span some-grid-area;
grid-area: 2 span / another-grid-area span;

/* Global values */
grid-area: inherit;
grid-area: initial;
grid-area: revert;
grid-area: revert-layer;
grid-area: unset;

auto

一个关键字,表示该属性对网格项的放置没有任何贡献,表示自动放置或默认跨度为 1

<custom-ident>

如果存在名称为 <custom-ident>-start<custom-ident>-end 的命名线,它将贡献第一条这样的线到网格项的放置中。

注意:命名的网格区域会自动生成这种形式的隐式命名线,因此指定 grid-area: foo; 将选择该命名网格区域的起始/结束边缘(除非之前明确指定了另一条名为 foo-start/foo-end 的线)。

否则,这将被视为指定了整数 1<custom-ident>

<integer> && <custom-ident>?

贡献第 n 条网格线到网格项的放置中。如果给出负整数,则反向计数,从显式网格的结束边缘开始。

如果给定一个名称作为 <custom-ident>,则只计算具有该名称的线。如果具有该名称的线不足,则为了查找此位置,所有隐式网格线都假定具有该名称。

<integer>0 是无效的。

span && [ <integer> || <custom-ident> ]

贡献一个网格跨度到网格项的放置中,使得网格项的网格区域的相应边缘距离对侧边缘有 n 条线。

如果给定一个名称作为 <custom-ident>,则只计算具有该名称的线。如果具有该名称的线不足,则为了计算此跨度,显式网格侧面与搜索方向对应的所有隐式网格线都假定具有该名称。

如果省略 <integer>,则默认为 1。负整数或 0 无效。

正式定义

初始值作为简写中的每个属性
应用于网格项目和包含块是网格容器的绝对定位框
继承性
计算值作为简写中的每个属性
动画类型离散

正式语法

grid-area = 
<grid-line> [ / <grid-line> ]{0,3}

<grid-line> =
auto |
<custom-ident> |
[ [ <integer [-∞,-1]> | <integer [1,∞]> ] && <custom-ident>? ] |
[ span && [ <integer [1,∞]> || <custom-ident> ] ]

示例

设置网格区域

HTML

html
<div id="grid">
  <div id="item1"></div>
  <div id="item2"></div>
  <div id="item3"></div>
</div>

CSS

css
#grid {
  display: grid;
  height: 100px;
  grid-template: repeat(4, 1fr) / 50px 100px;
}

#item1 {
  background-color: lime;
  grid-area: 2 / 2 / auto / span 3;
}

#item2 {
  background-color: yellow;
}

#item3 {
  background-color: blue;
}

结果

规范

规范
CSS 网格布局模块 Level 2
# propdef-grid-area

浏览器兼容性

另见