aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/css/css_grid_layout/grid_template_areas/index.html
blob: 5c3d8b05d591b91fd3c4325a80a5625cbb5f30c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
---
title: 网格模板区域
slug: Web/CSS/CSS_Grid_Layout/Grid_Template_Areas
tags:
  - CSS
  - Grid 布局
  - Grids
  - 参考
  - 布局
translation_of: Web/CSS/CSS_Grid_Layout/Grid_Template_Areas
---
<p><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Line-based_Placement_with_CSS_Grid">上一篇指南</a>中我们着眼于网格线以及如何依赖网格线定位项目。在使用 CSS 网格布局时,因为离不开网格线,所以最直接的方式就是使用网格线来定位项目。不过,还有另一种替代方法用于定位项目,你可以独立使用它,也可把它和基于网格线的定位结合起来。这个方法采用对模板区域命名的方式来定位项目,接下来我们就来弄清如何使用它。很快你就会知道为什么我们有时把这种方法称为网格布局的 ASCII 艺术方法!</p>

<h2 id="命名网格区域">命名网格区域</h2>

<p>我们已经接触过 {{cssxref("grid-area")}} 属性了,它把网格线的4个属性值合为1个值,用于定位一个网格区域。</p>

<pre class="brush: css">.box1 {
   grid-area: 1 / 1 / 4 / 2;
}
</pre>

<p>在用网格线定义网格区域时,我们是通过指定围绕网格区域的四条线来定义的。</p>

<p><img alt="The Grid Area defined by lines" src="https://mdn.mozillademos.org/files/14667/4_Area.png" style="height: 354px; width: 951px;"></p>

<p>我们也可以先给一个区域命名,然后在 {{cssxref("grid-template-areas")}} 属性值中指定这个区域的位置。你可以随意为区域命名,比如,如果我要创建下面的布局,我可以先划分出4个主要的区域:</p>

<ul>
 <li>头部(header)</li>
 <li>尾部(footer)</li>
 <li>侧边栏(sidebar)</li>
 <li>主要内容(content)</li>
</ul>

<p><img alt="An image showing a simple two column layout with header and footer" src="https://mdn.mozillademos.org/files/14669/4_Layout.png" style="height: 397px; width: 900px;"></p>

<p>通过 {{cssxref("grid-area")}} 属性为这些区域各分配一个名字,这不会影响布局。我们现在已经有了用于布局的命名过的区域了。</p>

<div id="Grid_Area_1">
<pre class="brush: css">.header {
    grid-area: hd;
}
.footer {
    grid-area: ft;
}
.content {
    grid-area: main;
}
.sidebar {
    grid-area: sd;
}
</pre>

<p>有了这些名字,接下来就可以创建布局了。此前我们是通过在项目自身上指定线序号来定位项目,而现在,则要把完整的布局都写在网格容器中。</p>

<pre class="brush: css">.wrapper {
    display: grid;
    grid-template-columns: repeat(9, 1fr);
    grid-auto-rows: minmax(100px, auto);
    grid-template-areas:
      "hd hd hd hd   hd   hd   hd   hd   hd"
      "sd sd sd main main main main main main"
      "ft ft ft ft   ft   ft   ft   ft   ft";
}
</pre>

<div class="hidden">
<pre class="brush: css">* {box-sizing: border-box;}

.wrapper {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
    max-width: 940px;
    margin: 0 auto;
}

.wrapper &gt; div {
    border: 2px solid #ffa94d;
    border-radius: 5px;
    background-color: #ffd8a8;
    padding: 1em;
    color: #d9480f;
}
</pre>
</div>

<p> </p>

<pre class="brush: html">&lt;div class="wrapper"&gt;
    &lt;div class="header"&gt;Header&lt;/div&gt;
    &lt;div class="sidebar"&gt;Sidebar&lt;/div&gt;
    &lt;div class="content"&gt;Content&lt;/div&gt;
    &lt;div class="footer"&gt;Footer&lt;/div&gt;
&lt;/div&gt;</pre>

<p>{{ EmbedLiveSample('Grid_Area_1', '300', '330') }}</p>
</div>

<p>用这种方法,我们不需要为任何网格项目单独指定属性,所有的定义都在网格容器中。请仔细观察在 {{cssxref("grid-template-areas")}} 属性中是怎样描述布局的。</p>

<h2 id="留出空白的网格单元">留出空白的网格单元</h2>

<p>在上面的例子中,已经实现了用区域填充网格,不留空余空间,不过你也可以用这种布局方法留出空的网格单元。留出空单元的方法是使用句点符,“<code>.</code>”。假如想把尾部区域仅显示在主要内容的下方,就应该让侧边栏下面的三个单元格为空。</p>

<div id="Leaving_1">
<pre class="brush: css">.header {
    grid-area: hd;
}
.footer {
    grid-area: ft;
}
.content {
    grid-area: main;
}
.sidebar {
    grid-area: sd;
}
</pre>

<div class="hidden">
<pre class="brush: css">* {box-sizing: border-box;}

.wrapper {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
    max-width: 940px;
    margin: 0 auto;
}

.wrapper &gt; div {
    border: 2px solid #ffa94d;
    border-radius: 5px;
    background-color: #ffd8a8;
    padding: 1em;
    color: #d9480f;
}
</pre>
</div>

<pre class="brush: css">.wrapper {
    display: grid;
    grid-template-columns: repeat(9, 1fr);
    grid-auto-rows: minmax(100px, auto);
    grid-template-areas:
      "hd hd hd hd   hd   hd   hd   hd   hd"
      "sd sd sd main main main main main main"
      ".  .  .  ft   ft   ft   ft   ft   ft";
}
</pre>

<pre class="brush: html">&lt;div class="wrapper"&gt;
    &lt;div class="header"&gt;Header&lt;/div&gt;
    &lt;div class="sidebar"&gt;Sidebar&lt;/div&gt;
    &lt;div class="content"&gt;Content&lt;/div&gt;
    &lt;div class="footer"&gt;Footer&lt;/div&gt;
&lt;/div&gt;</pre>

<p>{{ EmbedLiveSample('Leaving_1', '300', '330') }}</p>
</div>

<p>为了让布局更整齐,可以使用多个 “<code>.</code>” 符号,如果在多个句点符号之间没有空格,那它们就会被计为一个单元格。用多个句点表示一个单元格的好处是对于复杂的布局来说很容易让行列对齐,这意味着你在 CSS 中看到的,就像是实际布局看起来那样。</p>

<h2 id="跨越多个网格单元">跨越多个网格单元</h2>

<p>在上面的例子中,每个区域都跨越了多个网格单元,为了实现这个效果,要把区域名字在它的区域内重复写多次,中间用空格分隔。你也可以在 <code>grid-template-areas</code> 中添加额外的空格以便让列对齐。你可以看到我把 <code>hd</code><code>ft</code> 都跟 <code>main</code> 对齐了。</p>

<p>用区域名连接起来的区域必须是矩形的,目前还不能创建 L 形的区域,尽管规范中指出未来的版本可能会提供这项功能。你可以像跨列那样实现跨行,举个例子,要让侧边栏向下跨到底部,只需要用  sd  标识替换掉  <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">'.' </span></font> 符号就可以了。</p>

<div id="Spanning_1">
<pre class="brush: css">.header {
    grid-area: hd;
}
.footer {
    grid-area: ft;
}
.content {
    grid-area: main;
}
.sidebar {
    grid-area: sd;
}
</pre>

<div class="hidden">
<pre class="brush: css">* {box-sizing: border-box;}

.wrapper {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
    max-width: 940px;
    margin: 0 auto;
}

.wrapper &gt; div {
    border: 2px solid #ffa94d;
    border-radius: 5px;
    background-color: #ffd8a8;
    padding: 1em;
    color: #d9480f;
}
</pre>
</div>

<pre class="brush: css">.wrapper {
    display: grid;
    grid-template-columns: repeat(9, 1fr);
    grid-auto-rows: minmax(100px, auto);
    grid-template-areas:
      "hd hd hd hd   hd   hd   hd   hd   hd"
      "sd sd sd main main main main main main"
      "sd sd sd  ft  ft   ft   ft   ft   ft";
}
</pre>

<div class="hidden">
<pre class="brush: html">&lt;div class="wrapper"&gt;
    &lt;div class="header"&gt;Header&lt;/div&gt;
    &lt;div class="sidebar"&gt;Sidebar&lt;/div&gt;
    &lt;div class="content"&gt;Content&lt;/div&gt;
    &lt;div class="footer"&gt;Footer&lt;/div&gt;
&lt;/div&gt;</pre>
</div>

<p>{{ EmbedLiveSample('Spanning_1', '300', '330') }}</p>
</div>

<p>{{cssxref("grid-template-areas")}} 的值必须是一个完整的网格,否则无效(即这个属性会被忽略掉),这意味着你应该让每一行都有相同数量的单元格,如果出现句点符就表示这个单元格将被留空。如果创建的区域不是矩形,也是无效的网格。</p>

<h2 id="用媒体查询重新定义网格">用媒体查询重新定义网格</h2>

<p>现在我们的布局已经成为了 CSS 的一部分,(通过媒体查询)在 CSS 的多个不同地方修改它也非常容易。你可以重新定义网格、重新定位网格中的项目、甚至完全改变它。</p>

<p>若要(通过媒体查询)重新定义网格,应该把区域名称定义在媒体查询之外,在这种情况下,主要内容区域就总是会被称为 main,不管它被(媒体查询语句)定位在网格中的什么位置。</p>

<p>对于上面的例子,我们可能希望在较窄的宽度下使用非常简单的布局,网格只定义一个列,所有的项目从上到下排列。</p>

<div id="Redefining_1">
<div class="hidden">
<pre class="brush: css">* {box-sizing: border-box;}

.wrapper {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
    max-width: 940px;
    margin: 0 auto;
}

.wrapper &gt; div {
    border: 2px solid #ffa94d;
    border-radius: 5px;
    background-color: #ffd8a8;
    padding: 1em;
    color: #d9480f;
}
</pre>
</div>

<pre class="brush: css">.header {
    grid-area: hd;
}
.footer {
    grid-area: ft;
}
.content {
    grid-area: main;
}
.sidebar {
    grid-area: sd;
}

.wrapper {
    display: grid;
    grid-auto-rows: minmax(100px, auto);
    grid-template-columns: 1fr;
    grid-template-areas:
      "hd"
      "main"
      "sd"
      "ft";
}
</pre>

<p>把目前的布局放到媒体查询里,并且调整为当空间变得足够宽时,把目前两列的布局改为三列的布局。注意对于宽布局仍保留 9 列轨道,而只是在 <code>grid-template-areas</code> 里重新定义了项目的位置。</p>

<pre class="brush: css">@media (min-width: 500px) {
    .wrapper {
        grid-template-columns: repeat(9, 1fr);
        grid-template-areas:
          "hd hd hd hd   hd   hd   hd   hd   hd"
          "sd sd sd main main main main main main"
          "sd sd sd  ft  ft   ft   ft   ft   ft";
    }
}
@media (min-width: 700px) {
    .wrapper {
        grid-template-areas:
          "hd hd hd   hd   hd   hd   hd   hd hd"
          "sd sd main main main main main ft ft";
    }
}
</pre>

<div class="hidden">
<pre class="brush: html">&lt;div class="wrapper"&gt;
    &lt;div class="header"&gt;Header&lt;/div&gt;
    &lt;div class="sidebar"&gt;Sidebar&lt;/div&gt;
    &lt;div class="content"&gt;Content&lt;/div&gt;
    &lt;div class="footer"&gt;Footer&lt;/div&gt;
&lt;/div&gt;</pre>
</div>

<p>{{ EmbedLiveSample('Redefining_1', '550', '330') }}</p>
</div>

<h2 id="在_UI_元素上使用_grid-template-areas">在 UI 元素上使用 <code>grid-template-areas</code></h2>

<p>许多网上流传的网格例子都假定使用网格来做页面的整体布局,实际上网格对于小元素一样有用。使用 {{cssxref("grid-template-areas")}} 能令人特别愉快,因为你在代码里就能直观地看到的这些元素的布局效果。</p>

<p>下面我们举一个非常简单的例子,来创建一个“媒体对象”。这个组件由一侧的图片或其他媒体以及另一侧的内容组成,图片将显示在盒子的右边或左边。</p>

<p><img alt="Images showing an example media object design" src="https://mdn.mozillademos.org/files/14671/4_Media_objects.png" style="height: 432px; width: 800px;"></p>

<p>定义一个两个列轨道的网格,图片列的尺寸是 <code>1fr</code>,文本列的尺寸是 <code>3fr</code>。如果你想让图片区域占据固定的宽度,就可以把图片列的尺寸设定一个像素值,把文本区域的尺寸设定为 <code>1fr</code>。只有一个 <code>1fr</code> 的列轨道的意思是让它占据剩余的空间。</p>

<p>把图片区域命名为 <code>img</code>,把文本区域命名为 <code>content</code>,然后把它们摆放在 <code>grid-template-areas</code> 属性中。</p>

<div id="Media_1">
<pre class="brush: css">* {box-sizing: border-box;}

.media {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
    max-width: 400px;
}
.media {
    display: grid;
    grid-template-columns: 1fr 3fr;
    grid-template-areas: "img content";
    margin-bottom: 1em;
}

.media .image {
    grid-area: img;
    background-color: #ffd8a8;
}

.media .text {
    grid-area: content;
    padding: 10px;

}
</pre>

<pre class="brush: html">&lt;div class="media"&gt;
    &lt;div class="image"&gt;&lt;/div&gt;
    &lt;div class="text"&gt;This is a media object example.
      We can use grid-template-areas to switch around the image and text part of the media object.
    &lt;/div&gt;
&lt;/div&gt;</pre>

<p>{{ EmbedLiveSample('Media_1', '300', '200') }}</p>
</div>

<h3 id="把图片显示在盒子的另一侧">把图片显示在盒子的另一侧</h3>

<p>你也许习惯于把图片显示在盒子的另一侧,为了实现这个效果,只需要把网格的 <code>1fr</code> 轨道放到后边,把 {{cssxref("grid-template-areas")}} 里的值简单地调换个位置即可。</p>

<div id="Media_2">
<pre class="brush: css">* {box-sizing: border-box;}

.media {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
    max-width: 400px;
}
.media {
    display: grid;
    grid-template-columns: 1fr 3fr;
    grid-template-areas: "img content";
    margin-bottom: 1em;
}

.media.flipped {
    grid-template-columns: 3fr 1fr;
    grid-template-areas: "content img";
}

.media .image {
    grid-area: img;
    background-color: #ffd8a8;
}

.media .text {
    grid-area: content;
    padding: 10px;

}
</pre>

<pre class="brush: html">&lt;div class="media flipped"&gt;
    &lt;div class="image"&gt;&lt;/div&gt;
    &lt;div class="text"&gt;This is a media object example.
      We can use grid-template-areas to switch around the image and text part of the media object.
    &lt;/div&gt;
&lt;/div&gt;</pre>

<p>{{ EmbedLiveSample('Media_2', '300', '200') }}</p>
</div>

<h2 id="网格定义的简写规则">网格定义的简写规则</h2>

<p>至此我们已经演示了多种定位网格中项目的方法,而且有多个属性用于定义网格,现在我们来学习两个简写方式,它们可以把定义网格及与网格有关的很多内容写在一行 CSS 语句里,非常强大。</p>

<p>这两个简写方式会让别的开发者甚至未来的你自己在阅读你的代码时的感到困难。因为这是规范的一部分,所以你在看示例或者读别人写的代码时偶然会遇到它们,即使你自己选择不使用它们。</p>

<p>在使用难以记忆的简写方式之前,你要知道,简写方式不仅能够一口气把多个属性缩写成一行,它们还会把一些你没有设置过的值、或不能在简写中设置的值<strong>重置成初始值</strong>。所以如果要用简写方式,一定要意识到它可能会把你在别处已经设置过的值给重置了。</p>

<p>这两个用于网格容器的简写方式,分别是显式网格简写 <code>grid-template</code>,和网格定义简写 <code>grid</code></p>

<h3 id="grid-template"><code>grid-template</code></h3>

<p>{{cssxref("grid-template")}} 属性可同时设置以下属性:</p>

<ul>
 <li>{{cssxref("grid-template-rows")}}</li>
 <li>{{cssxref("grid-template-columns")}}</li>
 <li>{{cssxref("grid-template-areas")}}</li>
</ul>

<p>这个属性之所以被称为显式网格简写,是因为它设置的都是在定义显式网格时要用到的属性,而不是那些与创建隐式的行或列轨道相关的属性。</p>

<p>下面的代码使用 {{cssxref("grid-template-areas")}} 创建了一个布局,效果与本文前面创建的布局是一样的。</p>

<pre class="brush: css">.wrapper {
    display: grid;
    grid-template:
      "hd hd hd hd   hd   hd   hd   hd   hd" minmax(100px, auto)
      "sd sd sd main main main main main main" minmax(100px, auto)
      "ft ft ft ft   ft   ft   ft   ft   ft" minmax(100px, auto)
             / 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr ;
}
</pre>

<p>第一个值是 <code>grid-template-areas</code> 的值,并且在每一行的末尾声明了行的大小,也就是 <code>minmax(100px, auto)</code> 的作用。</p>

<p><code>grid-template-areas</code> 之后用一个左斜杠分隔,再之后是一个详细的列轨道清单。</p>

<h3 id="grid"><code>grid</code></h3>

<p>{{cssxref("grid")}} 简写方式更进一步,它包含了与隐式网格相关的属性,所以通过它可以同时设置以下属性:</p>

<ul>
 <li>{{cssxref("grid-template-rows")}}</li>
 <li>{{cssxref("grid-template-columns")}}</li>
 <li>{{cssxref("grid-template-areas")}}</li>
 <li>{{cssxref("grid-auto-rows")}}</li>
 <li>{{cssxref("grid-auto-columns")}}</li>
 <li>{{cssxref("grid-auto-flow")}}</li>
</ul>

<p>这个属性会把 {{cssxref("grid-gap")}} 属性的值重置为 <code>0</code>,而且你还不能在简写中设置间距值。</p>

<p>你可以像使用 {{cssxref("grid-template")}} 一样使用这个语法,不过要注意的是当它执行时,它会重置一些其他值。</p>

<pre class="brush: css">.wrapper {
    display: grid;
    grid: "hd hd hd hd   hd   hd   hd   hd   hd" minmax(100px, auto)
    "sd sd sd main main main main main main" minmax(100px, auto)
    "ft ft ft ft   ft   ft   ft   ft   ft" minmax(100px, auto)
    / 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr ;
}
</pre>

<p>在读过本指南后面的自动定位和 grid-auto-flow 属性之后,我们会回过头来再看看这个属性提供的其他功能。</p>

<p>如果你通过阅读本指南前面的几篇文章已经开始上手了,那么你应该是用基于线的定位方式或用命名区域的方式来创建网格布局的。花费一些时间用网格去创建常见的布局模式,虽然还有很多的术语要学习,不过语法是非常一目了然的。在你练习开发的过程中可能会遭遇到一些问题,并且用我们没有讲过的方法去解决它们。在本指南后面的文章中,我们将着眼于更多规范中的细节 —— 目标是让你能用它创建出更加复杂的布局。</p>

<section id="Quick_links">
<ol>
 <li><a href="/zh-CN/docs/Web/CSS"><strong>CSS</strong></a></li>
 <li><a href="/zh-CN/docs/Web/CSS/Reference"><strong>CSS参考</strong></a></li>
 <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout">CSS网格布局</a></li>
 <li data-default-state="open"><a href="#"><strong>指南</strong></a>
  <ol>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout">网格布局的基本概念</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Relationship_of_Grid_Layout">与其他布局方法的关系</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Line-based_Placement_with_CSS_Grid">基于线的定位</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Grid_Template_Areas">网格模板区域</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Layout_using_Named_Grid_Lines">使用命名线布局</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Auto-placement_in_CSS_Grid_Layout">网格布局中的自动定位</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Box_Alignment_in_CSS_Grid_Layout">网格布局中的盒模型对齐</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/CSS_Grid,_Logical_Values_and_Writing_Modes">网格、逻辑值和书写模式</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/CSS_Grid_Layout_and_Accessibility">CSS网格布局和可及性</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/CSS_Grid_and_Progressive_Enhancement">CSS网格布局和渐进增强</a></li>
   <li><a href="/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Realizing_common_layouts_using_CSS_Grid_Layout">使用网格实现常见布局</a></li>
  </ol>
 </li>
 <li data-default-state="open"><a href="#"><strong>属性</strong></a>
  <ol>
   <li><a href="/en-US/docs/Web/CSS/grid">grid</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-area">grid-area</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-auto-columns">grid-auto-columns</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-auto-flow">grid-auto-flow</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-auto-rows">grid-auto-rows</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-column">grid-column</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-column-end">grid-column-end</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-column-gap">grid-column-gap</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-column-start">grid-column-start</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-gap">grid-gap</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-row">grid-row</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-row-end">grid-row-end</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-row-gap">grid-row-gap</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-row-start">grid-row-start</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-template">grid-template</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-template-areas">grid-template-areas</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-template-columns">grid-template-columns</a></li>
   <li><a href="/en-US/docs/Web/CSS/grid-template-rows">grid-template-rows</a></li>
  </ol>
 </li>
 <li data-default-state="open"><a href="#"><strong>词汇</strong></a>
  <ol>
   <li><a href="/en-US/docs/Glossary/Grid">Grid</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_lines">Grid lines</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_tracks">Grid tracks</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_cell">Grid cell</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_areas">Grid areas</a></li>
   <li><a href="/en-US/docs/Glossary/Gutters">Gutters</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_Axis">Grid Axis</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_rows">Grid row</a></li>
   <li><a href="/en-US/docs/Glossary/Grid_column">Grid column</a></li>
  </ol>
 </li>
</ol>
</section>