在定义什么是内容和形式,看看你的HTML文档的数据容器。然后问自己每个元素和属性在以下方面:
是否属性/元素代表了我的数据有意义的实体?
例如,<b>
标记之间的词语是粗体显示,还是我想强调这些数据?
我使用正确的属性/元素属性表示我想表示的数据类型?
由于我想强调该特定部分,因此我应该使用<em>
(它并不意味着斜体,这意味着重点并可以做成粗体)或<strong>
,具体取决于所需强调的级别。
我是仅仅将属性/元素用于显示目的吗?如果是的话,该元素可以被删除,父元素使用CSS样式?
有时候,表象的标签可以简单地通过父元素的CSS规则代替。在这种情况下,表示标签需要被移除。
在问自己这三个简单的问题后,你通常可以做出一个非常明智的决定。举个例子:
原始代码: <label for="name"><b>Name:</b></label>
检查<b>
标签...
是否属性/元素代表了我的数据有意义的实体?
不,标签不代表数据节点。它纯粹是为了演示。
我使用正确的属性/元素属性表示我想表示的数据类型?
<b>
用于呈现粗体元素。
我是否仅将属性/元素用于显示目的?如果是的话,该元素可以被删除,父元素使用CSS样式?
由于<b>
是呈现,我用它来演示,是的。由于<b>
元素影响整个<label>
,因此可以将其删除,并将样式应用于<label>
。
语义HTML的目的不是为了简化设计和重新设计或避免内联样式,而是要帮助一个解析器明白什么特定的标记您的文档中。通过这种方式,可以创建应用程序(即:搜索引擎)来智能地决定您的内容是什么意思,并相应地进行分类。
因此,使用CSS属性content:
在位于<q>
标签中的文本添加引号是有意义的(对其他文档中包含的文档中包含的数据没有任何价值),但没有意义CSS属性在脚注中添加一个©符号,因为它在数据中具有值。
同样适用于属性。在表示16×16大小的图标的<img>
标签上使用width
和height
属性具有语义意义,因为了解<img>
标签的含义很重要(图标可以根据显示的大小具有不同的表示形式)。在代表较大图像的缩略图的<img>
标签上使用相同的属性不会。
有时您需要添加非语义元素才能实现想要的演示文稿,但通常这些元素是可以避免的。
没有错误的元素。特定元素有错误的用途。添加重点时不应使用<b>
。 <small>
应该用于合法的子文本,而不是使文本变小(请参阅HTML5 - Section 4.6.4为什么)等等...所有元素都有一个特定的使用场景,它们都代表数据(减去表示元素,但它们确实可用于一些案例)。没有内容应该被搁置。
属性是不同的东西。大多数属性都是表象性的。诸如<img border>
和<body fgcolor>
之类的属性在您所表示的数据中很少有意义,因此您不应该使用它们(除非是在极少数情况下)。
搜索引擎是一个很好的例子,为什么语义文档如此重要。 Microformats是一组预定义的元素和类,可以用来表示搜索引擎将以某种方式理解的数据。 The product price information in Google Searches是工作语义的一个例子。
通过使用一套标准的预定义的规则来存储你的文档中的信息允许第三方程序来了解什么似乎是文本的一堵墙,而无需使用启发式算法,这可能是容易失败。它还帮助屏幕阅读器和其他辅助功能应用程序更容易地理解信息呈现的环境。它也极大地帮助您的标记的可维护性,因为所有内容都与一组定义相关联。
但它只有背景图像。你的意思是我们不应该使用,如果我们想要保持内容和演示文稿的分离 – 2010-02-14 07:10:50
在CSS禅园花园画廊中的所有设计都使用相同的HTML文件,你可以在这里看到:http://www.csszengarden.com/ zengarden-sample.html。每个设计之间没有任何变化。只有对正确的CSS文件的引用。有超过200个设计,变化是激烈的。 – 2010-02-14 07:25:59
@Jitendra:不,不,不......没有人说你必须避免任何特定的标签。我们的目标是让它理智而合理,尽可能让它们分离。 CSS Zen是一个很棒的演示站点,但是试图通过Web应用程序获得这种级别的分离效果。 – slugster 2010-02-14 07:29:07