HTML5 语义化标签

2020-07-14  本文已影响0人  wanminglei

什么是语义化

网络上关于语义化的定义和说明很长很杂,看过了很多答案后,我尝试一句话说清什么是语义化...

语义化,指对文本内容的结构化(内容语义化),选择合乎语义的标签(代码语义化),便于开发者阅读,维护和写出更优雅的代码的同时,让浏览器的爬虫和辅助技术更好的解析。

为什么要关注语义化

通过使用恰当语义的HTML标签,让页面具有良好的结构与含义,可以有效提高:

  1. 可访问性:帮助辅助技术更好的阅读和转译你的网页,利于无障碍阅读;
  2. 可检索性:有了良好的结构和语义,可以提高搜索引擎的有效爬取,提高网站流量;
  3. 国际化:全球只有13%的人口是英语母语使用者,因此通用的语义化标签可以让各国开发者更容易弄懂你网页的结构;
  4. 互用性:减少网页间的差异性,帮助其他开发者了解你网页的结构,方便后期开发和维护;

被滥用的语义化标签

以下是一些广泛被滥用的语义化标签:

  1. blockquote:一些人通过使用<blockquote>标签使文本达到缩进的目的,因为引用默认会进行文本缩进。如果你仅仅是想使文本达到缩进目的,而文本自身并非引用,那么就用CSS margin来代替;
  2. p:一些开发者用<p>&nbsp;</p>来为标签自检增加额外的空白段落,这里应该使用CSSmargin/padding来实现;
  3. ul:一些开发者往<ul>中添加文本来达到文本缩进的目的,这种做法即不符合语义化要求,同样也是非法的HTML实践。<ul>标签中只能有<li>标签。
  4. <h1>~<h6>:该标签可以使文本字体变大,变粗,但如果文本并非是标题,应该使用CSS font-weight font-size
    总结:其实上面四个例子都是为了说明一点,用正确的标签做正确的事。

语义化标签介绍

在HTML5出来之前,我们习惯于用div来表示页面的章节或者不同模块,但是div`本身是没有语义的。但是现在,HTML5中加入了一些语义化标签,来更清晰的表达文档结构。

image

如上图,这个页面结构中摒弃了所有div元素,取而代之的是HTML5语义化标签(用哪些标签取决于你的设计目的)。

同样,W3C制定了这些语义化标签,不可能完全符合我们的设计目标。我们的目标是为了能够让开发者或是爬虫读懂各个模块的语义化内容,因此,div作为一个没有任何语义,仅仅是用来构建结构的元素,是最适合做容器的标签。

下面就让我们把HTML5语义化标签过一遍:

<header>

<nav>

<main>

<article>

<section>

<aside>

极易混淆的语义化标签

下面这两组元素,虽然样式上极其相似,但是其在语义上各有侧重,弄明白他们的区别,可以帮你摸清HTML5语义化的思路...

<i>

Terms in languages different from the main text should be annotated with lang attributes (or, in XML, lang attributes in the XML namespace).

一段文本中如果有插入语言不同的专业术语,需要在<i>标签中加上<lang>属性作为注解,例子如下:

<p>There is a certain <i lang="fr">je ne sais quoi</i> in the air.</p>

<i lang="fr">是对je ne sais quoi(习语,表达妙不可言的意思)的注解,表示包含的术语语种为法语;

<em>

The em element also isn’t intended to convey importance; for that purpose, the strongelement is more appropriate.

The em element isn’t a generic "italics" element. Sometimes, text is intended to stand out from the rest of the paragraph, as if it was in a different mood or voice. For this, the i element is more appropriate.

<b>

<strong>

总结:
  1. <em>适用于在一段文本中突出重点,强调位置的不同往往会影响语义,而如果仅仅在语态或者语气上为了突出某个文本,应该使用<i>
  2. 在使用 <i>时,W3C鼓励开发者最好检查下是否有更合适的标签可替代,例如,上述的<em>,来突出重点,或是<dfn>,用来定义一个术语;
  3. 如果为了突出文本的重要性,紧急性,严重性应该使用<strong>
  4. W3C明确说明,<b> 元素应当是在其他标签都不合适的情况下最后一个考虑使用的标签,言外之意,官方并不推荐使用b标签,

<figure>

<img>

<table>

table元素现在有一系列语义化结构标签

<caption>: 表格的标题,跳脱于表格之外;

<thead>:表格的表头行,定义表格的表头内容;

<tbody>:表格的主体部分,表格的主体部分;

<tfoot>:表格的脚注部分,tfoot要和thead,tbody结合起来使用;

<form>

  1. label的for属性与控件的id相对应,比如:

<label for="username">请输入用户名: </label> <input type="text" id="username" name="username">

  1. label中内嵌控件,比如:

<label>请输入用户名<input type="text" id="username" name="username"></label>

此外,

  1. placeholder属性,其值会在输入字段为空时显示,并会在字段获得焦点时消失;
  2. 表单中的单选radio控件和复选checkbox控件以及下拉框select控件,可以为radio, checkbox添加checked属性以及为option添加selected属性让其默认选中

本文转自知乎-小谷悠悠伴我行专栏-初探 · HTML5语义化

上一篇 下一篇

猜你喜欢

热点阅读