HTML5 语义化

什么是语义化

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

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

为什么要关注语义化

通过使用恰当语义的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中加入了一些语义化标签,来更清晰的表达文档结构。

一个没有用div标签布局的页面

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

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

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

<header>

  • 定义文章的介绍信息:标题,logo,slogan;包裹目录部分,搜索框,一个nav或者任何相关的logo;
  • 一个页面中<header>的个数没有限制,可以为每个内容块添加一个header

<nav>

  • 定义文章导航栏,链接等;
  • nav一般和u、li配合做导航栏;

<main>

  • 定义文章的主要内容
  • main标签在一份文档中是唯一的,其后代元素常常包括<article>

<article>

  • 定义文档中可以脱离其他部分,一份独立的内容,通常带有标题,当article内嵌article时,里外层的内容应该是相关的,比如一篇微博和它的评论;

<section>

  • 与article的差别在于,它是整体的一部分,或者是文章的一节,一般来说section也会带有标题;

<aside>

  • 侧边栏(与article并列存在)或者嵌入内容(在article内),通常认为是独立拆分出来而不受整体影响的一部分,作为主要内容的附属信息,如索引,词条列表,或者页面及站点的附属信息,如广告,作者资料介绍等;
    <footer>

  • 页脚,通常包含作者、版权信息或者相关链接等;

极易混淆的语义化标签

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

<i>

  • 表示一段普通文本中,因为某种原因和正常文本不同,例如专业术语、外语短语或排版用的文字,其通常表现为斜体,他的出现不会改变语义;
  • 根据W3C对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.

  • <em>不适用于需要传达重要性的内容,传达重要性的语义应该使用<strong>

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.

  • <em>标签本质上并不是让包含文本变为斜体字。有时,作者只是想让部分文本在段落/句子中脱颖而出,或是在不同语气或者语态上,这时要用<i>

<b>

  • b表示样式上的粗体;
  • 其包含文本,不具备强调重要性的作用,也不影响语态和语气,仅仅是从样式上让包含文本特殊化;
  • 常用语关键字,文本驱动软件中的可执行语句或者一篇文章的导语,说明书中的产品/功能名称等;

<strong>

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

<figure>

  • 文档中的一些嵌入式内容,比如引用的图片,插图,表格,代码段等,可以作为独立的单元,当这部分转移到附录中或者其他页面时不会影响到主体,这样的元素都可以放在<figure>元素内,而且可以搭配其子元素<figcaption>作很好的元素说明或者备注信息;

<img>

  • img元素最好附带alt信息,即对图片进行文本说明,当图像无法查看时会显示这段文本描述;

<table>

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

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

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

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

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

<form>

  • <label>标签的用法:label标签,为input元素定义标注,改进了表单控件的可用性,当你点击到label标签时,会自动聚焦到对应控件上,label标签一般有两种用法
  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语义化

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_x阅读 15,967评论 3 119
  • 语义化标签,顾名思义也就是可以直接读懂的标签。最早接触HTML5的时候,对HTML5的语义化并没有太深的理解,只是...
    极客人阅读 4,170评论 1 18
  • 分数出来的前一夜,我做了一个梦,醒来后只记得三个数字。根据排列组合,我隐隐感觉六个三位数中的两个不大不小的三位数可...
    录录有为者也阅读 202评论 0 0
  • 注茶半托迦尊者——看门罗汉 看门罗汉威武标杆、警觉凝视 禅杖在握、勇炽邪魔 注茶半托迦尊者,是佛祖释迦牟尼亲信弟子...
    班墨空间阅读 334评论 0 0
  • 《心灵想要大声呼喊》 好久没看动漫了。 契机是一个挺久没有联系的同学突然告诉我,你去看看那个动漫吧,里面的女主好像...
    Witchdolly阅读 851评论 0 0