aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/learn/html/tables/basics/index.html
blob: 1198158b861296390b1ec5c284de751fd7414611 (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
---
title: HTML 表格 入门
slug: Learn/HTML/Tables/Basics
tags:
  - colgroup
  - colspan
  - row
  - rowspan
  - 初学者
  - 单元格
  - 基础
  - 学习
  - 表格
translation_of: Learn/HTML/Tables/Basics
---
<div>{{LearnSidebar}}</div>

<div>{{NextMenu("Learn/HTML/Tables/Advanced", "Learn/HTML/Tables")}}</div>

<p class="summary">本文将从HTML表格开始,介绍一些基本的内容,如行和单元格、标题、使单元格跨越多个列和行,以及如何将列中的所有单元组合在一起进行样式化。</p>

<table class="learn-box standard-table">
 <tbody>
  <tr>
   <th scope="row">前置知识:</th>
   <td>HTML基本概念 (参见 <a href="/en-US/docs/Learn/HTML/Introduction_to_HTML">Introduction to HTML</a>)。</td>
  </tr>
  <tr>
   <th scope="row">目标:</th>
   <td>了解熟悉HTML表格基本知识。</td>
  </tr>
 </tbody>
</table>

<h2 id="什么是表格?">什么是表格?</h2>

<p>表格是由行和列组成的结构化数据集(表格数据),它能够使你简捷迅速地查找某个表示不同类型数据之间的某种关系的值 。比如说,某个人和他的年龄,一天或是一周,当地游泳池的时间表 。</p>

<p><img alt="A sample table showing names and ages of some people - Chris 38, Dennis 45, Sarah 29, Karen 47." src="https://mdn.mozillademos.org/files/14583/numbers-table.png" style="display: block; height: 156px; margin: 0px auto; width: 350px;"></p>

<p><img alt="A swimming timetable showing a sample data table" src="https://mdn.mozillademos.org/files/14587/swimming-timetable.png" style="display: block; height: 301px; margin: 0px auto; width: 794px;"></p>

<p>表格在人类社会中很常见,而且已经存在很长时间了,下面这张1800年的美国人口普查文件中就可以证明:</p>

<p><img alt="A very old parchment document; the data is not easily readable, but it clearly shows a data table being used." src="https://mdn.mozillademos.org/files/14585/1800-census.jpg" style="display: block; height: 505px; margin: 0px auto; width: 800px;"></p>

<p>因此,HTML的创建者们提供了一种方法来构建和呈现web上的表格数据,这也就不足为奇了。</p>

<h3 id="表格如何工作?">表格如何工作?</h3>

<p>表格的一个特点就是严格. 通过在行和列的标题之间进行视觉关联的方法,就可以让信息能够很简单地被解读出来。观察下面的示例表格,然后找一个单数人称代词,这个单数人称代词是用于第三人称的, 用于女性的, 用作句子中的对象. 你可以把相应的行和列的标题关联起来,找到答案。</p>

<p>人称代词</p>

<table>
 <tbody>
  <tr>
   <th colspan="3"></th>
   <th scope="col">Subject</th>
   <th scope="col">Object</th>
  </tr>
  <tr>
   <th rowspan="5" scope="rowgroup">单数</th>
   <th colspan="2" scope="row">第一人称</th>
   <td>I</td>
   <td>me</td>
  </tr>
  <tr>
   <th colspan="2" scope="row">第二人称</th>
   <td>you</td>
   <td>you</td>
  </tr>
  <tr>
   <th rowspan="3" scope="rowgroup">第三人称</th>
   <th class="symbol" scope="row"></th>
   <td>he</td>
   <td>him</td>
  </tr>
  <tr>
   <th class="symbol" scope="row"></th>
   <td>she</td>
   <td>her</td>
  </tr>
  <tr>
   <th class="symbol" scope="row">o</th>
   <td>it</td>
   <td>it</td>
  </tr>
  <tr>
   <th rowspan="3" scope="rowgroup">复数</th>
   <th colspan="2" scope="row">第一人称</th>
   <td>we</td>
   <td>us</td>
  </tr>
  <tr>
   <th colspan="2" scope="row">第二人称</th>
   <td>you</td>
   <td>you</td>
  </tr>
  <tr>
   <th colspan="2" scope="row">第三人称</th>
   <td>they</td>
   <td>them</td>
  </tr>
 </tbody>
</table>

<p>正确完成后, 即使是盲人也可以解析 HTML 表格中的数据,一个成功的 HTML 表格应该做到无论用户是视力正常还是视力受损,都能提高用户的体验。</p>

<h3 id="表格风格">表格风格</h3>

<p>你可以在 GitHub 上找到上面表格的 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/personal-pronouns.html">HTML源码</a> ; 先去看看, 当然也可以看看这个 <a href="http://mdn.github.io/learning-area/html/tables/basic/personal-pronouns.html">look at the live example</a>! 你也许会注意到一件事情,那就是这个表格看上去可读性不是很好,那是因为现在这个页面上面的那个表格通过 MDN 站点添加了一些样式, 而 GitHub 上面的并没有添加。</p>

<p>不要幻想; 为了能够让表格在网页上有效, 你需要提供一些 CSS 的样式信息,以及尽可能好的 HTML 固定结构. 在这个模块中,我们将专注于 HTML 部分; 在你完成这里的内容之后,你可以浏览 <a href="/en-US/docs/Learn/CSS/Styling_boxes/Styling_tables">Styling tables</a> 来了解 CSS 的部分。</p>

<p>虽然在这个模块中我们不会专注于 CSS, 但是我们提供了一个较小的 CSS 样式表让你使用,和默认的没有采用任何 CSS 样式的表相比,表格会更加可读。 你可以在 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css">stylesheet here</a> 获取样式表,以及在 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/blank-template.html">HTML template</a> 获取 HTML 文件来应用样式表,这些会让你在 “测试 HTML 表格” 中有一个好的起点。</p>

<div class="note">
<p><strong>注意</strong>: 也可以看下 <a href="http://mdn.github.io/learning-area/html/tables/basic/personal-pronouns-styled.html">personal_pronouns table with this styling applied</a> 这个版本, 这个是应用了 CSS 以后表格看上去的样子。</p>
</div>

<h3 id="什么时候你不应该使用_HTML_表格">什么时候你不应该使用 HTML 表格?</h3>

<p>HTML 表格 应该用于表格数据 ,这正是 HTML 表格设计出来的用途. 不幸的是, 许多人习惯用 HTML 表格来实现网页布局, e.g. 一行包含 header, 一行包含几列内容, 一行包含 footer, etc. 你可以在我们的 <a href="/en-US/docs/Learn/Accessibility">Accessibility Learning Module</a> 中的  <a href="/en-US/docs/Learn/Accessibility/HTML#Page_layouts">Page Layouts</a> 获得更多细节内容和一个示例。这种做法以前是很常见的,因为以前 CSS 在不同浏览器上的兼容性比较糟糕 ; 表格布局现在不太普遍,但您可能仍然会在网络的某些角落看到它们。</p>

<p>简单来说, 使用表格布局而不使用 <a href="/en-US/docs/Learn/CSS/CSS_layout">CSS layout techniques</a> 是很糟糕的. 主要的理由有以下几个:</p>

<ol>
 <li><strong>表格布局减少了视觉受损的用户的可访问性</strong>: <a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility#Screenreaders">屏幕阅读器</a>, 被盲人所使用, 解析存在于 HTML 页面上的标签,然后为用户读出其中的内容。因为对于布局来说,表格不是一个正确的工具, 使用的标记比使用 CSS 布局技术更复杂, 所以屏幕阅读器的输出会让他们的用户感到困惑。</li>
 <li><strong>表格会产生很多标签</strong>: 正如刚才提到的, 表格布局通常会比正确的布局技术涉及更复杂的标签结构,这会导致代码变得更难于编写、维护、调试.</li>
 <li><strong>表格不能自动响应</strong>: 当你使用正确的布局容器 (比如 {{htmlelement("header")}}, {{htmlelement("section")}}, {{htmlelement("article")}}, 或是 {{htmlelement("div")}}), 它们的默认宽度是父元素的 100%. 而表格的的默认大小是根据其内容而定的。因此,需要采取额外的措施来获取表格布局样式,以便有效地在各种设备上工作。</li>
</ol>

<h2 id="动手练习_创建你的第一个表格">动手练习: 创建你的第一个表格</h2>

<p>对于表格的理论知识,我们已经说了很多了,所以, 让我们来看一个使用的例子,并建立一个简单的表格.</p>

<ol>
 <li>首先, 将 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/blank-template.html">blank-template.html</a> 和 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css">minimal-table.css</a> 拷贝到你的本地环境上。</li>
 <li>每一个表格的内容都包含在这两个标签中 : <strong><code><a href="/en-US/docs/Web/HTML/Element/table">&lt;table&gt;&lt;/table&gt;</a></code></strong>. 在你的 HTML 的 {{htmlelement("body")}} 中添加这些内容。</li>
 <li>在表格中,最小的内容容器是单元格, 是通过 <strong><code><a href="/en-US/docs/Web/HTML/Element/td">&lt;td&gt;</a></code></strong> 元素创建的 ('td' 代表 'table data'). 把下面的内容添加到你的表格标签中:
  <pre class="brush: html notranslate">&lt;td&gt;Hi, I'm your first cell.&lt;/td&gt;</pre>
 </li>
 <li>如果我们想要一行四个单元格,我们需要把这组标签拷贝三次,更新你表中的内容,让它看起来是这样的:
  <pre class="brush: html notranslate">&lt;td&gt;Hi, I'm your first cell.&lt;/td&gt;
&lt;td&gt;I'm your second cell.&lt;/td&gt;
&lt;td&gt;I'm your third cell.&lt;/td&gt;
&lt;td&gt;I'm your fourth cell.&lt;/td&gt;</pre>
 </li>
</ol>

<p>你会看到, 单元格不会放置在彼此的下方, 而是自动与同一行上的其他单元格对齐. 每个 <code>&lt;td&gt;</code> 元素 创建一个单独单元格,它们共同组成了第一行。我们添加的每个单元格都使行的长度变长。</p>

<p>如果想让这一行停止增加,并让单元格从第二行开始,我们需要使用 <strong><code><a href="/en-US/docs/Web/HTML/Element/tr">&lt;tr&gt;</a></code></strong> 元素 ('tr' 代表 'table row'). 让我们现在来证实一下。</p>

<ol>
 <li>把你已经创建好的 4 个单元格放入 <code>&lt;tr&gt;</code> 标签, 就像:

  <pre class="brush: html notranslate">&lt;tr&gt;
  &lt;td&gt;Hi, I'm your first cell.&lt;/td&gt;
  &lt;td&gt;I'm your second cell.&lt;/td&gt;
  &lt;td&gt;I'm your third cell.&lt;/td&gt;
  &lt;td&gt;I'm your fourth cell.&lt;/td&gt;
&lt;/tr&gt;</pre>
 </li>
 <li>现在你已经实现了一行,可以继续增加至两行、三行。每一行都需要一个额外的 <code>&lt;tr&gt;</code> 元素来包装,每个单元格的内容都应该写在 <code>&lt;td&gt;</code>中。</li>
</ol>

<p>这样会产生一个如下所示的表:</p>

<table>
 <tbody>
  <tr>
   <td>Hi, I'm your first cell.</td>
   <td>I'm your second cell.</td>
   <td>I'm your third cell.</td>
   <td>I'm your fourth cell.</td>
  </tr>
  <tr>
   <td>Second row, first cell.</td>
   <td>Cell 2.</td>
   <td>Cell 3.</td>
   <td>Cell 4.</td>
  </tr>
 </tbody>
</table>

<div class="note">
<p><strong>注意</strong>: 你也可以在 GitHub 中查看 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/simple-table.html">simple-table.html</a> (<a href="https://mdn.github.io/learning-area/html/tables/basic/simple-table.html">see it live also</a>).</p>
</div>

<h2 id="使用_&lt;th>_元素添加标题">使用 &lt;th&gt; 元素添加标题</h2>

<p>现在,让我们把注意力转向表格标题,表格中的标题是特殊的单元格,通常在行或列的开始处,定义行或列包含的数据类型 (举个例子, 看到本篇文章中第一个示例中的 "单数" 或者 "Object"  ). 为了说明它们为什么这么有用, 来看下面这个例子,首先是源代码:</p>

<pre class="brush: html notranslate">&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
    &lt;td&gt;Knocky&lt;/td&gt;
    &lt;td&gt;Flor&lt;/td&gt;
    &lt;td&gt;Ella&lt;/td&gt;
    &lt;td&gt;Juan&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Breed&lt;/td&gt;
    &lt;td&gt;Jack Russell&lt;/td&gt;
    &lt;td&gt;Poodle&lt;/td&gt;
    &lt;td&gt;Streetdog&lt;/td&gt;
    &lt;td&gt;Cocker Spaniel&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Age&lt;/td&gt;
    &lt;td&gt;16&lt;/td&gt;
    &lt;td&gt;9&lt;/td&gt;
    &lt;td&gt;10&lt;/td&gt;
    &lt;td&gt;5&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Owner&lt;/td&gt;
    &lt;td&gt;Mother-in-law&lt;/td&gt;
    &lt;td&gt;Me&lt;/td&gt;
    &lt;td&gt;Me&lt;/td&gt;
    &lt;td&gt;Sister-in-law&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Eating Habits&lt;/td&gt;
    &lt;td&gt;Eats everyone's leftovers&lt;/td&gt;
    &lt;td&gt;Nibbles at food&lt;/td&gt;
    &lt;td&gt;Hearty eater&lt;/td&gt;
    &lt;td&gt;Will eat till he explodes&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>

<p>这是表格实际呈现的效果:</p>

<table>
 <tbody>
  <tr>
   <td></td>
   <td>Knocky</td>
   <td>Flor</td>
   <td>Ella</td>
   <td>Juan</td>
  </tr>
  <tr>
   <td>Breed</td>
   <td>Jack Russell</td>
   <td>Poodle</td>
   <td>Streetdog</td>
   <td>Cocker Spaniel</td>
  </tr>
  <tr>
   <td>Age</td>
   <td>16</td>
   <td>9</td>
   <td>10</td>
   <td>5</td>
  </tr>
  <tr>
   <td>Owner</td>
   <td>Mother-in-law</td>
   <td>Me</td>
   <td>Me</td>
   <td>Sister-in-law</td>
  </tr>
  <tr>
   <td>Eating Habits</td>
   <td>Eats everyone's leftovers</td>
   <td>Nibbles at food</td>
   <td>Hearty eater</td>
   <td>Will eat till he explodes</td>
  </tr>
 </tbody>
</table>

<p>这里的问题是:虽然你可以弄清楚发生了什么,但是尽可能的交叉参考数据并不容易。如果列和行的标题以某种方式出现,那将会更好。</p>

<h3 id="动手练习_表格标题">动手练习: 表格标题</h3>

<p>让我们来改进这个表格.</p>

<ol>
 <li>首先, 把 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/dogs-table.html">dogs-table.html</a> 和 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css">minimal-table.css</a> 文件保存到你的本地环境,HTML 文件包含上文你看到的几种狗的数据。</li>
 <li>为了将表格的标题在视觉上和语义上都能被识别为标题,你可以使用 <strong><code><a href="/en-US/docs/Web/HTML/Element/th">&lt;th&gt;</a></code></strong> 元素 ('th' 代表 'table header'). 用法和 <code>&lt;td&gt;</code>是一样的,除了它表示为标题,不是普通的单元格以外。进入你的 HTML 文件, 将表格中应该是标题的 <code>&lt;td&gt;</code> 元素标记的内容,都改为用 <code>&lt;th&gt;</code> 元素标记。</li>
 <li>保存你的 HTML 文件,然后在浏览器中加载,然后你应该会看到,现在的标题更像标题了。</li>
</ol>

<div class="note">
<p><strong>注意</strong>: 你可以在 GitHub 中找到完成的版本 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/dogs-table-fixed.html">dogs-table-fixed.html</a>  (<a href="https://mdn.github.io/learning-area/html/tables/basic/dogs-table-fixed.html">see it live also</a>).</p>
</div>

<h3 id="为什么标题是有用的">为什么标题是有用的?</h3>

<p>我们已经给出了部分答案,当标题明显突出的时候,你可以更加简单地找到你想找的数据,设计上也会看起来更好。</p>

<div class="note">
<p><strong>注意</strong>: 即使你不给表格添加你自己的样式,表格标题也会带有一些默认样式:加粗和居中,让标题可以突出显示。</p>
</div>

<p>表格标题也有额外的好处,随着 <code>scope</code> 属性 (我们将在下一篇文章中了解到),这个属性允许你让表格变得更加无障碍,每个标题与相同行或列中的所有数据相关联。屏幕阅读设备能一次读出一列或一行的数据,这是非常有帮助的。</p>

<h2 id="允许单元格跨越多行和列">允许单元格跨越多行和列</h2>

<p>有时我们希望单元格跨越多行或多列。以下是一个简单的例子,显示了一些常见动物的名字。在某些情况下,我们要显示动物名称旁边的男性和女性的名字。有时候我们又不需要,那不需要的情况下,我们希望写着动物的名字的单元格的宽度可以是两个单元格的宽度 (因为写着名字的行会有两列,而没有写名字的行只有一列,行的宽度是不一样的)。</p>

<p>一开始的标记写法是这样的:</p>

<pre class="brush: html notranslate">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Animals&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Hippopotamus&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Horse&lt;/th&gt;
    &lt;td&gt;Mare&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Stallion&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Crocodile&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Chicken&lt;/th&gt;
    &lt;td&gt;Hen&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Rooster&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>

<p>但是输出的结果不是我们想要的:</p>

<table>
 <tbody>
  <tr>
   <th>Animals</th>
  </tr>
  <tr>
   <th>Hippopotamus</th>
  </tr>
  <tr>
   <th>Horse</th>
   <td>Mare</td>
  </tr>
  <tr>
   <td>Stallion</td>
  </tr>
  <tr>
   <th>Crocodile</th>
  </tr>
  <tr>
   <th>Chicken</th>
   <td>Hen</td>
  </tr>
  <tr>
   <td>Rooster</td>
  </tr>
 </tbody>
</table>

<p>我们需要一个方法,让 "Animals", "Hippopotamus", 和 "Crocodile" 的单元格的宽度变为两个单元格, "Horse" 和 "Chicken" 的高度变为两行 (因为要拥有一个男性名字和女性名字,可以先看效果图)。幸好, 表格中的标题和单元格有 <code>colspan</code> 和 <code>rowspan</code> 属性,这两个属性可以帮助我们实现这些效果。这两个属性接受一个没有单位的数字值,数字决定了它们的宽度或高度是几个单元格。比如, <code>colspan="2"</code> 使一个单元格的宽度是两个单元格。</p>

<p>让我们使用 <code>colspan</code> 和 <code>rowspan</code> 来改进现有的表格。</p>

<ol>
 <li>首先,把 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/animals-table.html">animals-table.html</a> 和 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css">minimal-table.css</a> 文件复制到你的本地环境,HTML 文件中包含了你刚才看到的动物示例的数据。</li>
 <li>接着,使用 <code>colspan</code> 让 "Animals", "Hippopotamus", 和 "Crocodile" 占 2 个单元格的宽度。</li>
 <li>最后,使用 <code>rowspan</code> 让 "Horse" 和 "Chicken" 占 2 个单元格的高度。</li>
 <li>保存后,用浏览器打开你写的 HTML 文件,看看改进的地方。</li>
</ol>

<div class="note">
<p><strong>注意</strong>: 你也可以在 GitHub 上找到完成的版本 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/animals-table-fixed.html">animals-table-fixed.html</a>  (<a href="https://mdn.github.io/learning-area/html/tables/basic/animals-table-fixed.html">see it live also</a>).</p>
</div>

<table id="tabular" style="background-color: white;">
</table>

<h2 id="为表格中的列提供共同的样式">为表格中的列提供共同的样式</h2>

<p>在我们继续介绍之前,我们将介绍本文中的最后一个功能。HTML有一种方法可以定义整列数据的样式信息:就是 <strong><code><a href="/en-US/docs/Web/HTML/Element/col">&lt;col&gt;</a></code></strong> 和 <strong><code><a href="/en-US/docs/Web/HTML/Element/colgroup">&lt;colgroup&gt;</a></code></strong> 元素。 它们存在是因为如果你想让一列中的每个数据的样式都一样,那么你就要为每个数据都添加一个样式,这样的做法是令人厌烦和低效的。你通常需要在列中的每个 <code>&lt;td&gt;</code> 或 <code>&lt;th&gt;</code> 上定义样式,或者使用一个复杂的选择器,比如 {{cssxref(":nth-child()")}}</p>

<p>下面是一个简单的示例:</p>

<pre class="brush: html notranslate">&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Data 1&lt;/th&gt;
    &lt;th style="background-color: yellow"&gt;Data 2&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Calcutta&lt;/td&gt;
    &lt;td style="background-color: yellow"&gt;Orange&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Robots&lt;/td&gt;
    &lt;td style="background-color: yellow"&gt;Jazz&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>

<p>下面就是上述代码的结果:</p>

<table>
 <tbody>
  <tr>
   <th>Data 1</th>
   <th style="background-color: yellow;">Data 2</th>
  </tr>
  <tr>
   <td>Calcutta</td>
   <td style="background-color: yellow;">Orange</td>
  </tr>
  <tr>
   <td>Robots</td>
   <td style="background-color: yellow;">Jazz</td>
  </tr>
 </tbody>
</table>

<p>这样不太理想,因为我们不得不在列中的每个单元格中重复那些样式信息 (在真实的项目中,我们或许会设置一个 <code>class</code> 包含那三个单元格 ,然后在一个单独的样式表中定义样式). 为了舍弃这种做法,我们可以只定义一次,在 <code>&lt;col&gt;</code> 元素中。<code>&lt;col&gt;</code> 元素被规定包含在 <code>&lt;colgroup&gt;</code> 容器中,而 <code>&lt;colgroup&gt;</code>就在 <code>&lt;table&gt;</code> 标签的下方。我们可以通过如下的做法来创建与上面相同的效果:</p>

<pre class="brush: html notranslate">&lt;table&gt;
  &lt;colgroup&gt;
    &lt;col&gt;
    &lt;col style="background-color: yellow"&gt;
  &lt;/colgroup&gt;
  &lt;tr&gt;
    &lt;th&gt;Data 1&lt;/th&gt;
    &lt;th&gt;Data 2&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Calcutta&lt;/td&gt;
    &lt;td&gt;Orange&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Robots&lt;/td&gt;
    &lt;td&gt;Jazz&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>

<p>我们使用了两个 <code>&lt;col&gt;</code>来定义“列的样式”,每一个<code>&lt;col&gt;</code>都会制定每列的样式,对于第一列,我们没有采取任何样式,但是我们仍然需要添加一个空的 <code>&lt;col&gt;</code> 元素,如果不这样做,那么我们的样式就会应用到第一列上,这和我们预想的不一样。</p>

<p>如果你想把这种样式信息应用到每一列,我们可以只使用一个 <code>&lt;col&gt;</code> 元素,不过需要包含 span 属性,像这样:</p>

<pre class="brush: html notranslate">&lt;colgroup&gt;
  &lt;col style="background-color: yellow" span="2"&gt;
&lt;/colgroup&gt;</pre>

<p>就像 <code>colspan</code> 和 <code>rowspan</code>, <code>span</code> 需要一个无单位的数字值,用来制定你想要让这个样式应用到表格中多少列</p>

<h3 id="动手练习_colgroup_and_col">动手练习: colgroup and col</h3>

<p>又到了需要你自己独立完成的时间了。</p>

<p>下面你可以看到一位语言老师的时间表。星期五,她有一个新的课程,全天教荷兰语,但是在星期二和星期四的几个时间点,她也教德语。她想把那些包含她教学的日子的列高亮显示。</p>

<p>{{EmbedGHLiveSample("learning-area/html/tables/basic/timetable-fixed.html", '100%', 320)}}</p>

<p>通过下面这些步骤来重构这个表格。</p>

<ol>
 <li>首先,把 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/timetable.html">timetable.html</a> 文件复制到你的本地环境。这个 HTML 文件包含你在上文中看到的表格,不过是减去样式信息的。</li>
 <li>在 table 的顶部添加一个 <code>&lt;colgroup&gt;</code> 元素,就放在 <code>&lt;table&gt;</code> 标签下面,<code>&lt;colgroup&gt;</code>可以添加 <code>&lt;col&gt;</code> 元素 (继续看下面剩余的步骤)。</li>
 <li>第一列和第二列不需要应用样式。</li>
 <li>为第三列添加一个背景颜色。<code>style</code> 属性是 <code>background-color:#97DB9A;</code></li>
 <li>为第四列设置一个独立的宽度,<code>style</code> 属性是 <code>width: 42px;</code></li>
 <li>为第五列添加一个背景颜色。<code>style</code> 属性是 <code>background-color: #97DB9A;</code></li>
 <li>为第六列添加不同的背景颜色和边框,表示这是一个特殊的日子,表示她正在教一个新的课。  <code>style</code> 属性是 <code>background-color:#DCC48E; border:4px solid #C1437A;</code></li>
 <li>最后两天是休息日,所以只需将它们设置为无背景颜色,但需要设置宽度;<code>style</code> 属性是 <code>width: 42px;</code></li>
</ol>

<p>看看你是否能完成这个示例,如果你遇到了困难,或想要核对你完成的作品,你可以在 GitHub 上找到完成的版本 <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/timetable-fixed.html">timetable-fixed.html</a> (<a href="https://mdn.github.io/learning-area/html/tables/basic/timetable-fixed.html">see it live also</a>)。</p>

<h2 id="小结">小结</h2>

<p>本章节仅仅包含了 HTML 表格的基础。在下一篇文章中,我们将介绍一些稍微更高级的表格功能,并开始考虑方便视力障碍的人士的访问</p>

<div>{{NextMenu("Learn/HTML/Tables/Advanced", "Learn/HTML/Tables")}}</div>

<div></div>

<h2 id="在本单元中">在本单元中</h2>

<ul>
 <li><a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Basics">HTML table basics</a></li>
 <li><a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced">HTML table advanced features and accessibility</a></li>
 <li><a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Structuring_planet_data">Structuring planet data</a></li>
</ul>

<div>
<article>
<ul>
</ul>
</article>
</div>