2024字节青训营笔记(十)方向三:前端实践选题-HTML语义化的案例分析 | 豆包MarsCode AI刷题

78 阅读13分钟

HTML 标签简介

  1. 标签 又称 元素,是HTML的基本组成单位。

  2. 标签分为:双标签 与 单标签 (绝大多数都是双标签)。

  3. 标签名不区分大小写,但推荐小写,因为小写更规范

标签介绍

HTML(超文本标记语言,HyperText Markup Language)标签是用于定义网页内容结构和表现形式的标记。每个标签都有特定的含义和用途,通过不同的标签组合,可以构建出丰富多彩的网页。以下是对HTML标签的详细介绍:

一、标签的写法

  1. 单标签:通常用于那些不需要包含其他内容的元素。这些标签在开始时会有一个斜杠(/)来表示结束,也可以不加。常见的单标签包括:

    • <br>:换行符。
    • <hr>:水平线。
    • <img>:图像。
    • <input>:输入框(例如文本输入、按钮等)。
    • <meta>:元数据(例如页面字符集、作者信息等)。
    • <link>:链接到外部资源(例如CSS文件)。
  2. 双标签:用于包含其他内容或元素,由一个开始标签和一个结束标签组成。常见的双标签包括:

    • <a>:超链接。
    • <p>:段落。
    • <div>:分区。
    • <span>:行内元素。

二、标签的展示效果

根据标签的展示效果,可以将标签分为块标签和行标签,此外还有一种行块标签。

  1. 块标签:在网页中会独占一行,其宽度会自动填满父容器的宽度。可以设置宽度、高度、内边距(padding)、外边距(margin)等属性(CSS盒模型属性)。常见块标签有:divph1~h6tableulolli等。
  2. 行标签:不会独占一行,而是在一行内与其他内容一起显示。行内标签的宽度和高度通常由其内容决定,不能直接设置宽度和高度,但可以设置内边距和外边距的水平方向(左右)的值(CSS盒模型属性)。默认情况下,大多数文本、替换元素以及生成的内容都是行级的。
  3. 行块标签:结合了行内元素和块级元素的一些特点,既不独占一行,可以与其他行内元素或行内块元素在同一行显示,又可以设置宽度、高度、内边距(padding)和外边距(margin)等属性。常见的行块标签有:imginputbuttona等。

三、标签的分类

  1. 结构标签:定义网页的根元素,包含网页标题和元数据以及网页的可视内容。

    • <html>:表示整个HTML文档的根元素,所有其他的HTML元素都必须包含在这个标签内。
    • <head>:包含文档的元数据,如标题、字符编码、外部资源链接等信息,这些信息不会直接在页面上显示,但对网页的呈现和功能起着重要作用。
    • <body>:包含网页的实际内容,如文本、图像、链接、表格等,这些内容是用户在浏览器中可以看到的部分。
  2. 文本标签:用于组织和呈现文本内容,使网页的结构更加清晰,方便用户阅读和理解。

    • <h1>~<h6>:定义不同级别的标题,<h1>是最大的标题,<h6>是最小的标题。
    • <p>:定义段落,用于组织和呈现文本内容。段落是网页中最基本的文本块,通常包含一段完整的文本信息。
    • <strong>:表示重要的文本,通常以粗体显示,用于强调关键信息。
    • <em>:表示强调的文本,通常以斜体显示,用于突出特定的词语或句子。
    • <u>:为文本添加下划线,可以用于强调或装饰文本。
    • <s>:为文本添加删除线,可表示已过时或不再有效的内容。
  3. 列表标签:用于创建列表。

    • <ul><li>标签组合创建无序列表,每个<li>标签代表一个列表项,无序列表通常以项目符号(如圆点、方块等)来标识各个列表项。
    • <ol><li>标签组合创建有序列表,列表项会按照一定的顺序编号显示。
  4. 表标签:用于创建表格。

    • <table>:表格根标签,内部元素需包裹在此标签下。
    • <tr>:表格行标签,包裹的元素显示为一整行。
    • <th>:表格头部标题单元格,在<tr>内。
    • <td>:表格主体内容单元格,同样在<tr>内。
    • HTML5新增标签:<thead><tbody><tfoot>
  5. 图像标签:用于在网页中显示图像。

    • <img>:定义图像,需要指定图像的源URL(src属性)和替代文本(alt属性,当图像无法显示时显示)。
  6. 表单标签:用于创建网页中的表单,收集用户输入。

    • <form>:绘制表单的根元素,所有的表单信息需要包裹在<form>标签下。
    • <input>:定义输入字段。
    • <select>:定义下拉列表,跟<option>下拉选项配合使用。
    • <button>:定义按钮,用于提交表单或执行操作,只有包裹在<form>表单下的<button>标签才有对应重置和提交效果。
  7. 其他常用标签

    • <div>:定义一个区块元素。
    • <span>:定义一个内联元素。
    • <meta>:定义元数据信息。
    • <title>:定义网页标题,显示在浏览器的标题栏上,有助于用户识别网页的主题。

HTML语义化的案例分析

HTML语义化是指使用具有明确含义的HTML标签来描述文档结构和内容,从而提高代码的可读性、可维护性,并改善搜索引擎优化(SEO)和网页无障碍性。以下是对一些实际网站HTML结构的分析,对比非语义化标签与语义化标签的差异。

一、非语义化标签的使用案例

在早期或一些未经过良好设计的网站中,开发者可能会大量使用非语义化标签(如<div><span>)来构建网页结构。这些标签本身没有明确的语义,只是用于布局和样式控制。

案例:旧版网站

	<div class="container">
            <div class="header">
	        <div class="logo"></div>
	        <div class="nav"></div>
	    </div>

	    <div class="content">

	        <div class="main-content">

	            <!-- 主内容区域 -->

	        </div>

	        <div class="sidebar">

	            <!-- 侧边栏区域 -->

	        </div>

	    </div>

	    <div class="footer">
            
	        <!-- 页脚区域 -->

	    </div>

	</div>

在上述代码中,<div>标签被大量使用,且通过类名来区分不同的部分。这种方法的缺点是代码可读性较差,不利于搜索引擎理解和抓取内容,同时也可能影响网页的无障碍性。

  • 过度使用div会导致HTML文档结构复杂,代码冗长,可读性降低。这不仅增加了开发人员的理解难度,也提高了后期维护的成本。当div嵌套层次过多时,追踪和修改特定部分的代码将变得尤为困难。
  • 滥用div会增加HTML文档的体积,导致DOM树庞大。这不仅会减慢页面的加载速度,还可能影响页面的渲染性能,特别是在低配置设备或移动网络环境下。
  • 仅仅使用div作为布局工具而忽视语义化标签,会影响页面的搜索引擎优化。搜索引擎难以准确识别和理解页面的内容和结构,从而影响页面的搜索排名。
  • 虽然div结合CSS布局具有很高的灵活性,但在处理特定类型的布局时(如表格式数据展示),可能不如其他布局方式直观和便捷。滥用div可能导致布局设计变得复杂而难以维护。

二、实际网站HTML语义化案例分析:博客园IT新闻频道

随着Web技术的发展,人们开始意识到使用语义化标签的重要性。以下是一个使用语义化标签的网页结构示例:

案例:博客园网站

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="referrer" content="always" />
    <title>IT新闻 - 博客园</title>
    <meta name="keywords" content="IT新闻,it news,互联网新闻,业界新闻,IT资讯,IT业界,新闻频道" />
<body>
    <div id="wrap">
        <div id="header">
            <div id="wrapper_top_block">
                <div id="top_mini_nav_block">&laquo; <a href="//www.cnblogs.com" class="dark_gray">网站首页</a> <a href="http://zzk.cnblogs.com/" class="dark_gray">找找看</a></div>
            </div>
        </div>
    </div>
    <div id="main_wrapper">
        <div id="main_header">
            <div class="mainmenu">
                <ul id="navlist_main">
                    <li><a href="//www.cnblogs.com">首页</a></li>
                    <li><a href="//home.cnblogs.com">园子</a></li>
                </ul>
            </div>
        </div>
        <div id="sideleft">
            <div id="navcontainer" class="floatright">
                <ul id="navlist">
                    <li><a href="/" class="current">最新发布</a></li>
                    <li><a href="/n/recommend">推荐新闻</a></li>
                </ul>
            </div>
            <div id="news_list">
                <div class="news_block" id="entry_781020">
                    <div class="action">
                    </div>
                    <div class="content">
                    xxxxxx
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

一、HTML结构概述

博客园IT新闻频道的HTML结构整体较为清晰,通过多个语义化标签和CSS样式实现了页面的布局和内容展示。以下是对其HTML结构的详细分析。

二、语义化标签的使用

  1. <html><head><body>

    • 这些是HTML文档的基本结构标签,用于定义文档的头部、主体等部分。
  2. <meta>

    • 使用了多个<meta>标签来定义文档的字符集、页面描述、关键词、视口设置等,有助于搜索引擎优化(SEO)和页面渲染。
  3. <title>

    • 定义了页面的标题,即“IT新闻 - 博客园”,有助于搜索引擎和用户识别页面内容。
  4. <link>

    • 用于链接外部资源,如CSS样式表、RSS订阅链接和网站图标等。
  5. <header>

    • 定义了页面的头部区域,包含了网站的导航链接、登录区域等。
  6. <nav>

    • 用于定义导航链接,如网站首页、找找看等,提高了页面的可访问性。
  7. <main>

    • 定义了页面的主要内容区域,包含了新闻列表、广告横幅等。
  8. <article>

    • 用于定义单条新闻内容,包含了新闻的标题、摘要、作者、发布时间等。
  9. <aside> (潜在使用):

    • 虽然本例中未直接使用<aside>标签,但理论上可以将侧边栏内容(如推荐新闻、热门新闻等)放入<aside>中,以表示这些内容是主要内容之外的辅助信息。
  10. <footer>

    • 定义了页面的页脚区域,通常包含版权信息、隐私政策等。

三、非语义化标签与CSS样式的使用

  1. <div>

    • 仍然使用了大量的<div>标签来划分页面布局,但大多数<div>都配合了CSS类名来明确其功能和作用,提高了代码的可读性和可维护性。
  2. CSS样式表

    • 通过链接外部CSS样式表(如/Content/bundles/news.css)和媒体查询(如#smallScreen针对小屏幕设备)来控制页面的样式和布局。
  3. JavaScript

    • 使用了JavaScript来实现一些交互功能,如用户登录信息的获取、新闻投票等。

四、语义化标签的优势

  1. 可读性

    • 语义化标签使得HTML代码更加清晰易懂,便于开发者理解和维护。
  2. SEO优化

    • 搜索引擎能够更准确地理解页面的结构和内容,从而提高搜索排名。
  3. 无障碍性

    • 语义化标签有助于屏幕阅读器等辅助技术更好地理解页面内容,提高网页的无障碍性。
  4. 代码复用

    • 通过使用语义化标签,可以更容易地实现代码的复用和模块化。

五、总结

博客园IT新闻频道的HTML结构在语义化方面做得相对较好,使用了多个语义化标签来定义页面的结构和内容。同时,也结合了非语义化标签和CSS样式来实现页面的布局和样式控制。这种结合使用的方式既保证了页面的可读性和可维护性,又提高了搜索引擎优化和无障碍性。

然而,值得注意的是,虽然博客园已经使用了不少语义化标签,但在某些方面仍有改进的空间。例如,可以将侧边栏内容放入<aside>标签中,以更明确地表示其辅助信息的身份。此外,还可以进一步优化CSS样式和JavaScript代码,以提高页面的性能和用户体验。

个人思考

标签

  1. 语义化标签

语义化标签本身能够代表其含义,即标签名能够直观地反映其包含的内容或功能。例如,<h1><h6>标签用于定义标题,<a>标签用于定义超链接,<img>标签用于定义图像,<table>标签用于定义表格,<form>标签用于定义表单,<em><strong>分别用于表示强调和更强烈的强调,<p>标签用于定义段落,<ul><ol>分别用于定义无序列表和有序列表等。

这些标签不仅有助于开发者理解文档的结构和内容,还提高了代码的可读性、可维护性和可访问性。例如,屏幕阅读器等辅助技术可以更容易地理解页面结构和内容,从而提高了网页的可访问性。

  1. 非语义化标签

非语义化标签本身不能代表其含义,它们更多地用于样式和布局的目的。例如,<span><i><s><u><b>等标签就属于非语义化标签。这些标签通常不包含任何特定的语义信息,只是用于包裹需要单独样式的文本或元素。

由于非语义化标签没有直观的语义含义,因此阅读代码时可能需要更多的理解和推测。此外,这些标签可能导致页面结构不清晰,增加了代码的维护难度。同时,非语义化标签对于辅助技术的支持可能较弱,影响页面的可访问性。

使用场景与影响

  1. 使用场景

语义化标签通常用于定义具有明确语义的内容,如标题、段落、列表、图像、表格等。这些标签能够清晰地表达页面结构和内容,有助于搜索引擎优化(SEO)和网页的可访问性。

非语义化标签则更多地用于样式和布局的目的。例如,<div>标签常用于包裹没有特定语义的内容块,<span>标签常用于包裹需要单独样式的文本。此外,一些非语义化标签(如<i><b>)也可以用于表示文本的样式,但它们的语义含义不如语义化标签明确。

  1. 对SEO的影响

语义化标签对SEO有积极影响。搜索引擎可以更容易地理解页面结构和内容,从而更准确地判断页面的主题和重要性。这有助于提高网页在搜索引擎结果中的排名和可见性。

相比之下,非语义化标签对SEO的影响较小。由于它们不包含任何特定的语义信息,因此搜索引擎可能无法准确地理解页面结构和内容。这可能导致网页在搜索引擎结果中的排名和可见性降低。

  1. 对网页可读性的影响

语义化标签能够清晰地表达页面结构和内容,使代码更易读、易理解。这有助于提高网页的可读性和可维护性。同时,语义化标签还有助于提高网页的可访问性,使屏幕阅读器等辅助技术更容易理解页面结构和内容。

非语义化标签则可能导致页面结构不清晰,增加了代码的维护难度。此外,这些标签对于辅助技术的支持可能较弱,影响网页的可访问性。因此,在使用非语义化标签时,应尽量控制在合理范围内,不应过度使用。