前言
在Web开发领域,HTML语义化是一个非常重要的概念。它强调使用恰当的HTML标记来描述文档结构和内容,使得页面具备更好的可读性、可维护性和可访问性。语义化的HTML不仅给开发者带来便利,也对搜索引擎SEO和相关技术(如屏幕阅读器,AI智能等)有着积极的影响。
1.对于HTML语义化的理解(个人见解)
对于HTML语义化,我的理解就是,让一堆杂乱无章的div标签产生意义,让开发者或者搜索引擎蜘蛛可以一下就明白整个页面的布局结构,而不是还要对照着页面来理解。
下面给大家举个例子:
非语义化
<div id="header">
<div id="logo">Logo</div>
<div id="nav">
<div>Home</div>
<div>About</div>
<div>Contact</div>
</div>
</div>
语义化
<header>
<div id="logo">Logo</div>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</nav>
</header>
看完上面的例子,大家是不是知道HTML语义化的好处,就是可以让整个结构都非常清晰,一目了然
用之前听到过的一句话来说,就是:即使没有css,也能凭借html看清整个页面
2.HTML语义化原理
HTML语义化的底层原理要从两方面来看
-
浏览器解析: 浏览器在加载HTML时,会按照标准解析规则对HTML元素进行解析和渲染。在这个过程中,浏览器会根据标签的语义来决定如何显示和处理元素。
例如,<header>标签会被解析为网页的头部,<nav>标签会被解析为导航栏,<article>标签会被解析为独立的文章内容等等... -
搜索引擎处理: 搜索引擎对网页的理解也依赖于HTML标签的语义化。搜索引擎会解析网页的HTML结构,并根据标签的语义来判断网页的内容和关系。语义化标签可以帮助
搜索引擎蜘蛛更好地理解网页的结构和内容,并进行合理的抓取,从而让网站获得排名,展示在最最最前面~
3.HTML标签的更新迭代
- 最初的XML:自定义标签
<book category="历史">
<title>明朝那些事儿</title>
<author>当年明月</author>
<year>2005</year>
</book>
- 接着的HTML:规范标准
<title> 页面标题
<h1> 标题
<p> 段落
<a> 链接
<ul> 无序列表
<ol> 有序列表
- 现在的HTML5:更加丰富的语义化标签
<article>文章
<header>页头
<footer>页脚
<menu> 菜单
<nav> 导航
<canvas> 画布
不得不说,这些标准与规范做的越来越好了,如果在实际开发中大家都遵循这个标准,那就可以大大减少差异化内容,让代码一目了然,结构清晰,以提高开发效率。
4.盘点常用的HTML语义化标签
<header>:表示页面或区块的头部,通常包含导航、页眉或标题信息。<nav>:表示页面的导航链接部分。<main>:表示页面的主要内容,每个页面应该只有一个<main>元素。<article>:表示独立的、完整的文章或内容区块。<section>:表示页面中的一个独立区域或部分。<aside>:表示页面的附属信息部分,通常在主内容旁边。<footer>:表示页面或区块的尾部,通常包含版权、联系信息等。<figure>:表示独立的、完整的媒体内容(如图片、图表等)以及相关的标题和说明。<figcaption>:表示<figure>元素中的标题或说明。<time>:表示日期、时间或时间范围。<blockquote>:表示长引用的内容块。<cite>:表示引用的来源或作者。<code>:表示计算机代码或代码片段。<em>:表示强调的文本。<strong>:表示重要性更高的文本。<canvas>: 表示画布
5.HTML语义化标签的滥用现象
HTML语义化标签存在的意义就是让页面的结构更加清晰明了,但是有些开发者,却为了减少css的书写,就用HTML标签进行偷懒,比如说缩进,空格,换行等...
举例说明
目的:实现空白区域
正常的代码
<div style="margin-bottom:10px"></div>
偷懒的代码
<div></div>
<p> </p>
总结:我们应该合理的使用语义化标签,而不能为了偷懒就滥用
6.HTML语义化页面 优秀示例
下面给大家附上一张优秀示例,供大家更加深入的理解,图片引用自这位大佬初探 · HTML5语义化 - 知乎
上面的示例,基本没有使用div,我们在日常的开发中,也应该像这样,将div当作一个单纯的容器来使用,其他的地方尽量使用语义化的标签。