Help:表格:修订间差异

帮助页面
添加的内容 删除的内容
无编辑摘要
无编辑摘要
 

(未显示1个用户的6个中间版本)

第1行: 第1行:
{{NoteTA|G1=IT|G2=MediaWiki}}
{{NoteTA|G1=IT|G2=MediaWiki}}
'''表格'''({{lang-en|'''table'''}})是在页面中非常常见的文本形式,用于呈现以二形式排列的数据。表格有专门的HTML语法,在MediaWiki中,wikitext也可以用来产生表格。在编辑源代码时,编辑工具栏中的[[File:OOjs UI icon table.svg|alt=]]表格按钮可以很方便地创建表格,你也可以手动创建表格。可视化编辑器也可以创建表格,并且能够很方便地合并单元格、插入或删除行列。本页主要介绍表格的wikitext语法,不多介绍在可视化编辑器中的用法。
'''表格'''({{lang-en|'''table'''}})是一种在页面中非常常见的内容形式,用于呈现以二形式组织的数据。表格有专门的HTML语法,在MediaWiki中,wikitext也可以用来产生表格。在编辑源代码时,编辑工具栏中的[[File:OOjs UI icon table.svg|alt=]]表格按钮可以很方便地创建表格,你也可以手动输入wikitext语法来创建表格。可视化编辑器也可以创建表格,并且能够很方便地合并单元格、插入或删除行列。本页主要介绍表格的wikitext语法,不多介绍在可视化编辑器中的用法。


需要注意的是,不要滥用表格。表格一般不应当用来排版,更不应该添加花里胡哨的样式。在求闻百科中使用表格时,须遵守[[Qiuwen:无障碍访问]]方针。
需要注意的是,不要滥用表格。表格一般不应当用来排版,更不应该添加花里胡哨的样式。在求闻百科中使用表格时,须遵守[[Qiuwen:无障碍访问]]方针。
第186行: 第186行:
=== 简单的宽度和高度 ===
=== 简单的宽度和高度 ===


下面这个表格的宽度为80%,这是一个相对值,意味着表格将占用容器宽度的80%。其中,第一列的宽度为2em,这是一个绝对值,无论容器的大小是多少,第1列的宽度都是2em。不难推断出,第2列将占用表格的剩余的空间。
下面这个表格的宽度为80%,这是一个相对值,意味着表格将占用容器宽度的80%。其中,第一列的宽度为2em,这是一个绝对值,无论容器的大小是多少,第1列的宽度都是3em。不难推断出,第2列将占用表格的剩余的空间。


-{}-{| class="wikitable" <mark>style="width: 80%"</mark>
-{}-{| class="wikitable" <mark>style="width: 80%"</mark>
第192行: 第192行:
! 标题2
! 标题2
|-
|-
| <mark>style="width:2em" |</mark> 1行1列
| <mark>style="width:3em" |</mark> 1行1列
| 1行2列
| 1行2列
|-
|-
第203行: 第203行:
! 标题2
! 标题2
|-
|-
| style="width:2em" | 1行1列
| style="width:3em" | 1行1列
| 1行2列
| 1行2列
|-
|-
第266行: 第266行:


下面这个表格的宽度为<code>calc(100% - 2em)</code>。这个很好理解,这个宽度是相对宽度和绝对宽度的混合,其宽度是容器宽度减去2em。
下面这个表格的宽度为<code>calc(100% - 2em)</code>。这个很好理解,这个宽度是相对宽度和绝对宽度的混合,其宽度是容器宽度减去2em。
-{}-{| class="wikitable" <mark>style="calc(100%, 2em)"</mark>
-{}-{| class="wikitable" <mark>style="width: calc(100% - 2em)"</mark>
|+ 标题文本
|+ 标题文本
|-
|-
第276行: 第276行:
|}
|}


{| class="wikitable" style="calc(100%, 2em)"
{| class="wikitable" style="width: calc(100% - 2em)"
|+ 标题文本
|+ 标题文本
|-
|-
第520行: 第520行:
<code>border-left</code>表示左侧的边框,它包括了<code>border-left-color</code>、<code>border-left-width</code>、<code>border-left-style</code>等属性。同样地,还有<code>border-top</code>、<code>border-right</code>和<code>border-bottom</code>,分别表示上侧、右侧和下侧的边框。
<code>border-left</code>表示左侧的边框,它包括了<code>border-left-color</code>、<code>border-left-width</code>、<code>border-left-style</code>等属性。同样地,还有<code>border-top</code>、<code>border-right</code>和<code>border-bottom</code>,分别表示上侧、右侧和下侧的边框。


此外,也可以使用<code>border-block</code>(包含<code>border-block-start</code>和<code>border-block-end</code>)和<code>border-inline</code>(包含<code>border-inline-start</code>、<code>border-inline-end</code>),表示当前书写方向的块状或者行内元素元素方向的边框。在默认的书写模式下,<code>border-block-start</code>相当于<code>border-top</code>,<code>border-block-end</code>相当于<code>border-bottom</code>,<code>border-inline-start</code>相当于<code>border-left</code>,<code>border-inline-end</code>相当于<code>border-right</code>。
此外,也可以使用<code>border-block</code>(包含<code>border-block-start</code>和<code>border-block-end</code>)和<code>border-inline</code>(包含<code>border-inline-start</code>、<code>border-inline-end</code>),表示当前书写方向的块状或者行内元素的开始或者结束方向的边框。在默认的书写模式下,块状元素是从上到下,行内元素是从左到右,因此<code>border-block-start</code>相当于<code>border-top</code>,<code>border-block-end</code>相当于<code>border-bottom</code>,<code>border-inline-start</code>相当于<code>border-left</code>,<code>border-inline-end</code>相当于<code>border-right</code>。


这个例子分别为表格定义了四个方向上的边框,上、右、下、左方向的边框分别为红色、绿色、蓝色和黑色,粗细和边框类似各不相同。
这个例子分别为表格定义了四个方向上的边框,上、右、下、左方向的边框分别为红色、绿色、蓝色和黑色,粗细和边框类似各不相同。
第616行: 第616行:
# 不要使用<code>bgcolor</code>等HTML属性来为表格设置背景颜色。
# 不要使用<code>bgcolor</code>等HTML属性来为表格设置背景颜色。
}}
}}

== 无障碍考虑 ==
{{参见|Qiuwen:无障碍访问}}
在使用表格时,须考虑表格的无障碍({{lang-en|accessibility}}),确保表格在不同的显示设备上也能够正常地显示,同时在辅助技术(例如盲文)中也可以正常地呈现。

=== 良好的表格标题语义 ===
表示表格标题时,应该使用专门的表格标题(以<code>!</code>开头的内容),而不是使用手动加粗的方式来使它看上去像个标题。这是因为,表格标题除了具有显示样式之外,还能够表示这是一个表格标题,从样式上能够做到形式统一,同时也有助于辅助技术对表格的解析。

'''错误使用表格标题的例子:'''
-{}-{| class="wikitable"
|- <mark>style="text-align: center"</mark>
<mark>| <nowiki>'''</nowiki>标题文本<nowiki>''' || '''</nowiki>标题文本<nowiki>''' || '''</nowiki>标题文本<nowiki>'''</nowiki></mark>
|-
| 示例 || 示例 || 示例
|-
| 示例 || 示例 || 示例
|}
'''正确使用表格标题的例子:'''
-{}-{| class="wikitable"
|-
<mark>! 标题文本 !! 标题文本 !! 标题文本</mark>
|-
| 示例 || 示例 || 示例
|-
| 示例 || 示例 || 示例
|}

此外,还可以添加<code>scope="col"</code>或<code>scope="row"</code>属性来表示这是一个列标题或者行标题,这样辅助技术在使用表格时,能够更好的理解。
-{}-{| class="wikitable"
|-
!
! <mark>scope=col</mark> | 列标题1
! <mark>scope=col</mark> | 列标题2
|-
! <mark>scope=row</mark> | 行标题1
| 示例
| 示例
|-
! <mark>scope=row</mark> | 行标题2
| 示例
| 示例
|}
{| class="wikitable"
|-
!
! scope=col | 列标题1
! scope=col | 列标题2
|-
! scope=row | 行标题1
| 示例
| 示例
|-
! scope=row | 行标题2
| 示例
| 示例
|}

=== 合适的内容 ===
{{参见|Qiuwen:格式手册/表格}}
表格通常是用来呈现数据的,并不适合用来去呈现大量的内容。如果需要呈现大量内容的,最好的办法是直接使用文字来表述。而且,如果表格的列数比较多,而单元格的内容也比较多的话,那么每个单元格需要显示大量的内容但又分配了很少的空间,这对于内容的显示也是不利的。

=== 表格并非用来排版的 ===
很多人可能会喜欢使用表格来对内容进行排版。例如,如果要显示左右两侧的内容,那么他可能会这么写:
{{编辑演示|result=
-{}-{{(!}}
{{!}} {{#invoke:string|rep|左边的内容。|4}}
{{!}} {{#invoke:string|rep|右边的内容。|7}}
{{!)}}
}}
这样做的缺点就是:表格自身已经预设有边距、衬距等属性,这会对内容的排版造成不利的影响。此外,表格会对辅助工具呈现为表格,对于使用辅助工具的用户来说,这就有可能造成困惑。对内容进行排版的最好的方式,是使用CSS的flex和grid布局,这两种布局都非常强大且非常灵活。使用CSS来模拟表格也是一种选择,但是这样子也存在一些限制。
{{编辑演示|result=-{}-
<div style="display: flex">
<div style="flex: 1">{{#invoke:string|rep|左边的内容。|4}}</div>
<div style="flex: 1">{{#invoke:string|rep|右边的内容。|7}}</div>
</div>}}
{{编辑演示|result=-{}-
<div style="display: grid; grid-auto-flow: column">
<div>{{#invoke:string|rep|左边的内容。|4}}</div>
<div>{{#invoke:string|rep|右边的内容。|7}}</div>
</div>}}
{{编辑演示|result=-{}-
<div style="display: table-row">
<div style="display: table-cell">{{#invoke:string|rep|左边的内容。|4}}</div>
<div style="display: table-cell">{{#invoke:string|rep|右边的内容。|7}}</div>
</div>}}

如果确实需要用来排版,请给表格元素添加<code>role="presentation"</code>,使得辅助工具将其识别为普通的内容,而非将其作为表格看待。从外观上,这个和前面的例子没有区别,但是如果启用辅助工具,例如屏幕阅读器,那么这些内容就会被直接阅读,而非作为表格阅读。
{{编辑演示|result=
-{}-{{(!}} role="presentation"
{{!}} {{#invoke:string|rep|左边的内容。|4}}
{{!}} {{#invoke:string|rep|右边的内容。|7}}
{{!)}}
}}

=== 不使用过时的属性 ===
在旧版本的HTML中,表格支持一些HTML属性,以支持控制内容的格式。在当前版本的HTML规范中,这种方式虽然仍支持,但是已经是过时了。因此,请不要再使用任何过时的语法。所有的样式都应该使用<code>style</code>属性来控制。请看这个示例:
<div style="display: flex; gap: 1em">
<div style="flex: 1">'''错误的写法:'''
-{}-{| class="wikitable"
! 标题文本 !! <mark>width="250"</mark> 标题文本
|- <mark>bgcolor="red"</mark>
| <mark>align="center" valign="top"</mark> | 示例 || 示例
|-
| 示例 || <mark>border="2" bordercolor="navy" bgcolor="cyan"</mark> | 示例
|}
</div>
<div style="flex: 1">'''正确的写法:'''
-{}-{| class="wikitable"
! 标题文本 !! <mark>style="width:250px"</mark> 标题文本
|- <mark>style="background-color: red"</mark>
| <mark>style="text-align: center; vertical-align: top"</mark> | 示例 || 示例
|-
| 示例 || <mark>border: 2px navy solid; background-color: cyan</mark> | 示例
|}
</div>
</div>

以下表格列举了各过时HTML属性与CSS属性之间的关系,请在编辑时,将表格中的过时属性替换为符合HTML规范的CSS属性(有点属性虽然有效,但事实上是没有必要使用的,可以直接移除)。
{| class="wikitable"
|+ 对照表
! 过时的HTML属性 !! 规范的CSS属性 !! 过时HTML属性示例 !! 规范CSS属性示例 !! 说明
|-
| <code>width</code><br><code>height</code>
| <code>width</code><br><code>height</code>
| <code>width="200" height="80"</code>
| <code>style="width: 200px; height: 80px</code>
| {{NoteTag|name=length|HTML属性中的单位默认为像素(px),而在CSS属性中,长度值除了零值外必须指定单位,否则为无效值。}}
|-
| <code>align</code><br><code>valign</code>
| <code>text-align</code><br><code>vertical-align</code>
| <code>align="left" valign="top"</code>
| <code>style="text-align: left; vertical-align: top"</code>
|
|-
| <code>bgcolor</code>
| <code>background-color</code>
| <code>bgcolor="red"</code><br><code>bgcolor="FF0000"</code>
| <code>style="background-color: red"</code><br><code>style="background-color: #FF0000"</code>
| {{NoteTag|name=color|CSS属性中的十六进制颜色值必须带有井号,否则无效。}}
|-
| <code>border</code><br><code>bordercolor</code>
| <code>border-width</code><br><code>border-color</code>
| <code>border="1" bordercolor="red"</code>
| <code>style="border: 1px red solid"</code>
| {{NoteTag|name=length}}{{NoteTag|name=color}}{{NoteTag|name=cell|需要将属性添加在各个单元格上才能实现完整效果,而非应用在表格本身或者应用在行上。}}
|-
| <code>cellspacing</code>
| <code>border-spacing</code>
| <code>cellspacing="3"</code>
| <code>style="border-spacing: 3px</code>
| {{NoteTag|name=length}}
|-
| <code>cellpadding</code>
| <code>padding</code>
| <code>cellpadding="3"</code>
| <code>style="padding: 3px"</code>
| {{NoteTag|name=length}}{{NoteTag|name=cell}}
|-
| <code>frame</code>
| <code>border-style</code>和<code>border-width</code>
|
|
|
|-
| <code>rules</code>
| <code>border-style</code>和<code>border-width</code>
|
|
|
|}

==== 注释 ====
{{NoteFoot}}


{{帮助页面}}
{{帮助页面}}