HTML语义化学习 | 豆包MarsCode AI刷题

93 阅读6分钟

一、引言

HTML作为构建网页的基础语言,其语义化程度直接关乎代码可读性、可维护性及搜索引擎优化效果。语义化目的是为了选用契合内容语义、功能的HTML标签来架构页面,舍弃单纯依赖< div>与< span>这类通用性过强、语义模糊的标签。接下来我将会借用一个简单的网站页面代码实例,分析语义化标签运用,并帮助我们了解其与非语义化用法的差异。

二、常见页面HTML语义化案例分析

新闻资讯页面

新闻网站以高效传播资讯为本,所以结构清晰明了对于新闻网站是很重要的。

1. 语义化实现

    <header>
    <h1>新闻网站</h1>
    <nav>
      <ul>
        <li><a href="#">首页</a></li>
        <li><a href="#">资讯</a></li>
        <li><a href="#">联系我们</a></li>
      </ul>
    </nav>
  </header>
  <main>
    <article>
      <h2>新闻标题</h2>
      <img src="图片地址" alt="Image">
      <p>报道者<span class="author">xxx</span> on <time datetime="2024-11-24">2024-11-24</time></p>
    </article>
    <article>
      新闻2
    </article>
  </main>
  <aside>
    <ul>
      <li><a href="#">相关文章 1</a></li>
      <li><a href="#">相关文章 2</a></li>
    </ul>
  </aside>
  <footer>
    <p>Copyright © 2024. All rights reserved.</p>
  </footer>

在这个语义化架构里,header把控页面顶端,内里包括网站名号与导航栏,帮助用户以及开发者速寻所需板块,< main >承载核心新闻内容,每个article标签将每一篇新闻独立出来,单独为每条新闻封装细节,标题、配图、作者、发布时间与正文,条理有序,更容易理解,清晰明了。aside则提供其他一些新闻链接,拓展阅读视野。< footer >则是包含了版权信息等相关内容。像这样的布局,明显是要更有意义的。 运行结果(仅做简单示例):

image.png image.png

2. 非语义化对比

(只展示部分代码)

    <div id="header">
    <h1>新闻网站</h1>
    <div id="nav">
      <ul>
        <li><a href="#">首页</a></li>
      </ul>
    </div>
  </div>
  <div id="main-content">
    <div class="news-item">
      <h2>新闻标题</h2>
      <img src="112.jpg" alt="Image">
    </div>
  </div>

在上面的代码中,整个页面的头部和导航都被包裹在div id="header"和div id="nav"标签中。尽管通过 id 我们可以知道这两个div分别是头部和导航,但从语义上讲,这两个div并没有准确描述它们各自所代表的角色。与之相比,第一部分代码所使用的语义化标签如header和nav会让代码结构更加清晰,且易于识别和理解其目的。在这部分非语义化的HTML结构中,代码中大量使用了div标签,缺少明确的语义标识。这使得页面结构不够清晰,也使得开发者在阅读和修改代码时面临一定的挑战。这种做法不仅增加了代码的复杂度,也让页面的结构更加难以理解和调整。

三、为什么使用语义化标签

  1. 提高可访问性:语义化标签让屏幕阅读器等辅助工具能够更好地理解页面结构,从而为视障用户提供更好的浏览体验。
  2. SEO优化:搜索引擎会根据网页的结构和内容来判断页面的重要性,语义化标签有助于搜索引擎更好地分析页面,提高搜索排名。
  3. 代码可读性和可维护性:语义化标签通过描述元素的功能,使代码更加易读、易维护,其他开发人员能快速理解网页结构。
  4. 提升用户体验:语义化标签有助于浏览器或其他工具进行更智能的渲染,例如,用 <header> 标签标记头部内容,浏览器可以根据此结构优化页面的布局。

四、常用语义化标签及注意事项

1.常用语义化标签

  • <header>:定义文档或章节的头部。通常包含网站的导航栏、logo、标题、搜索框等内容。
  • <footer>:定义文档或章节的底部。通常包含版权声明、联系信息、页脚导航等。
  • <article>:表示独立的内容区域,可以是博客文章、新闻项、论坛帖子等。通常用于网页的独立可重用部分。
  • <section>:定义文档中的一个区域或部分。通常用于将页面内容分成不同的部分,每个部分可以有自己的标题和内容。
  • <nav>:定义文档中的导航链接区域。通常用于包含网站的主要导航菜单。
  • <aside>:表示与页面主要内容相关的侧边信息或附加内容,通常用于侧边栏、广告或额外说明。
  • <main>:表示文档中最主要的内容区域,每个文档只能有一个 <main> 标签。它通常包含网页的核心内容,排除如头部、侧边栏、页脚等重复性内容。
  • <figure> 和 <figcaption><figure> 用于表示页面中的图片、图表、插图等媒体内容,而 <figcaption> 是为 <figure> 中的元素提供描述的标签。
  • <details> 和 <summary><details> 用于创建可以展开和折叠的内容区域,而 <summary> 是其可见的标题,点击时会展开或折叠内容。

2.注意事项

  • 对alt属性的合理使用: 对于figure标签中的img标签,要确保每张图片都添加了合适的 alt属性。lt属性用来描述图片内容,特别是对于视障用户和搜索引擎而言,缺少 alt的图片会丧失可访问性。
  • 不将< section>用作通用的容器: section主要用来标识一个独立的内容区块,每个section应该有一个明确的主题和标题。如果只是用来做布局容器,应该考虑使用其他标签(如 div等)。
  • < aside>内容不应是页面的主内容: aside 是用来包含与主内容相关但并不直接重要的部分,比如侧边栏、推荐文章、广告等。它不应该包含核心内容。
  • 避免过度嵌套: 在使用语义化标签时,要避免过度嵌套标签。嵌套过深会让页面结构变得复杂,影响可读性和可维护性。尽量保持标签层次清晰,避免不必要的深度。
  • 使用适当的 details 和 summary: details和summary标签的组合可以创建可展开的内容区域。使用时应确保 summary是简短的概述,而 details中的内容是补充信息。
  • 考虑可访问性: 使用语义化标签时要考虑屏幕阅读器和其他辅助技术的支持。标签本身应该具有语义含义,但也要通过合适的aria属性来增强可访问性。例如,如果使用 nav 标签时,给nav菜单加上 aria-label 属性,以明确其功能。
  • 兼容性问题: 虽然大多数现代浏览器都支持 HTML5 语义化标签,但在一些老旧的浏览器中(尤其是 IE 8 及以下版本),这些语义化标签可能不被识别。为确保页面兼容性,可以使用 HTML5 Shiv(一个Js 库)来为老旧的浏览器提供支持。

五、总结

语义化 HTML 标签不仅有助于提升网页的可访问性、SEO优化和代码的可维护性,还能使网页的结构更加清晰和易于理解。在开发过程中,我们应该慢慢学会优先使用语义化标签而非纯粹的 <div><span> 标签,这样不仅能够提高代码的质量和可读性,同时也对搜索引擎和辅助技术有更好的支持。