在定义什么是内容和表示时,将您的 HTML 文档视为数据容器。然后在每个元素和属性上问自己以下问题:
属性/元素是否代表我的数据中有意义的实体?
例如,<b>
标记之间的单词是否只是为了显示目的而以粗体显示,还是我想强调该数据?
我是否使用正确的属性/元素来属性表示我想要表示的数据类型?
因为我想强调那个特定的部分,所以我应该使用<em>
(这并不意味着斜体,它意味着强调并且可以加粗)或<strong>
取决于想要的强调程度。
我是否仅将属性/元素用于显示目的?如果是,是否可以删除元素并使用 CSS 设置父元素样式?
有时一个展示标签可以简单地被父元素上的 CSS 规则替换。在这种情况下,需要删除演示标签。
在问自己这三个简单的问题之后,您通常能够做出非常明智的决定。一个例子:
原始代码:
<label for="name"><b>Name:</b></label>
检查<b>
标签...
属性/元素是否代表我的数据中有意义的实体?
不,标签不代表数据节点。它纯粹是为了展示。
我是否使用正确的属性/元素来属性表示我想要表示的数据类型?
<b>
用于呈现粗体元素。
我是否仅将属性/元素用于显示目的?如果是,是否可以删除元素并使用 CSS 设置父元素样式?
因为<b>
是展示性的,我用它来展示,是的。并且由于该<b>
元素影响整个<label>
,因此可以将其删除并将样式应用于<label>
.
语义 HTML 的目标不是简化设计和重新设计或避免内联样式,而是帮助解析器理解特定标记在文档中表示的内容。这样,可以创建应用程序(即:搜索引擎)以智能地决定您的内容表示什么并相应地对其进行分类。
content:
因此,使用 CSS 属性在位于标签中的文本周围添加引号是有意义的<q>
(它对文档中包含的数据没有任何价值,而不是演示文稿),但使用相同的 CSS 属性添加 © 没有意义页脚中的符号,因为它在您的数据中确实具有值。
同样适用于属性。在表示大小为 16x16 的图标的标签上使用width
andheight
属性具有<img>
语义意义,因为理解<img>
标签的含义很重要(图标可以有不同的表示形式,具体取决于它显示的大小)。在表示较大图像的缩略图的标签上使用相同的属性<img>
不会。
有时您需要添加非语义元素才能实现您想要的演示,但通常这些是可以避免的。
没有错误的元素。特定元素的错误使用。<b>
添加强调时不应使用。<small>
应该用于合法的子文本,而不是使文本变小(请参阅HTML5 - 4.6.4 节了解原因)等...所有元素都有特定的使用场景,它们都表示数据(减去表示元素,但它们确实在某些情况下有用)。任何元素都不应放在一边。
属性是另一回事。大多数属性本质上是表现性的。诸如<img border>
和<body fgcolor>
很少在您所代表的数据中具有意义的属性,因此您不应使用它们(除非在极少数情况下)。
搜索引擎是一个很好的例子,说明了为什么语义文档如此重要。微格式是一组预定义的元素和类,您可以使用它们来表示搜索引擎将以某种方式理解的数据。谷歌搜索中的产品价格信息是工作语义的一个例子。
通过使用设定标准中的预定义规则在文档中存储信息,第三方程序可以理解似乎是一堵文本的内容,而无需使用可能容易出错的启发式算法。它还可以帮助屏幕阅读器和其他可访问性应用程序更轻松地理解呈现信息的上下文。它还极大地有助于标记的可维护性,因为所有内容都与集合定义相关联。