Skip to content

HTML5 基础语法 ⭐ ​

HTML 文档结构与常用标签,前端开发的起点


学习目标 ​

  • 理解 HTML 文档的基本结构
  • 掌握常用文本标签的使用
  • 理解块级元素和行内元素的区别
  • 能写出一个完整的页面结构

生活化比喻 ​

HTML 文档就像一座"建筑":

比喻对应:

┌──────────────────────────────────────────────────────┐
│                    建筑结构                           │
├──────────────────────────────────────────────────────┤
│                                                      │
│    <!DOCTYPE html>    →    地基声明(告诉建筑师标准) │
│    <html>             →    整体框架                   │
│    ┌─────────────┐                                  │
│    │   <head>    │    →    设计图纸(不可见部分)     │
│    │   - title   │    →    项目名称                   │
│    │   - meta    │    →    设计说明                   │
│    └─────────────┘                                  │
│    ┌─────────────┐                                  │
│    │   <body>    │    →    室内空间(可见部分)       │
│    │   - h1      │    →    大门招牌                   │
│    │   - p       │    →    房间内容                   │
│    │   - div     │    →    墙壁分隔                   │
│    └─────────────┘                                  │
│                                                      │
└──────────────────────────────────────────────────────┘

L1 理解层:会用 ​

1.1 HTML 文档结构 ​

语法结构图:

HTML 文档结构:

<!DOCTYPE html>                 ← 声明:告诉浏览器这是 HTML5
<html lang="zh-CN">             ← 根元素:整个页面
  │
  ├─ <head>                     ← 头部:元信息(不可见)
  │    ├─ <meta charset>        ← 字符编码
  │    ├─ <meta viewport>       ← 视口设置
  │    ├─ <title>               ← 页面标题
  │    └─ <link>                ← 引入资源
  │
  └─ <body>                     ← 主体:内容(可见)
       ├─ <header>              ← 页头
       ├─ <main>                ← 主要内容
       ├─ <footer>              ← 页脚
       └─ <script>              ← JavaScript
</html>

最简示例(1-3行):

html
<!DOCTYPE html>
<html>
  <body>Hello World</body>
</html>

详细示例:

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>我的第一个页面</title>
</head>
<body>
    <h1>欢迎</h1>
    <p>这是我的第一个 HTML 页面。</p>
</body>
</html>

关键部分说明:

部分作用能省略吗
<!DOCTYPE html>声明文档类型,告诉浏览器用 HTML5 解析❌ 不能省略
<html>根元素,包裹整个页面❌ 不能省略
<head>元信息区域(标题、编码、样式引入)⚠️ 可以省略,但不推荐
<body>内容区域(用户看到的)⚠️ 可以省略,但不推荐

1.2 文本标签 ​

标题标签语法结构:

标题层级:

h1 ─────────────────────── 最重要(页面主标题,只能一个)
  │
h2 ─────────────────────── 二级标题(章节标题)
  │
h3 ─────────────────────── 三级标题(小节标题)
  │
h4 / h5 / h6 ──────────── 更小的标题(较少使用)

注意:不要跳级!h1 → h2 → h3,不要 h1 → h3

最简示例:

html
<h1>主标题</h1>
<h2>副标题</h2>
<p>段落内容</p>

详细示例:

html
<!-- 页面标题 -->
<h1>公司官网</h1>

<!-- 章节标题 -->
<h2>关于我们</h2>
<p>我们是一家技术公司...</p>

<!-- 小节标题 -->
<h3>团队介绍</h3>
<p>我们的团队由...</p>

<h3>发展历程</h3>
<p>成立于 2020 年...</p>

段落与换行:

html
<!-- 段落:自动换行 -->
<p>第一段内容</p>
<p>第二段内容</p>

<!-- 换行:不产生新段落 -->
<p>第一行<br>第二行</p>

<!-- 分割线 -->
<hr>

行内文本样式:

标签作用显示效果
<strong>重要内容(语义化)加粗
<em>强调内容(语义化)斜体
<mark>高亮标记==黄色背景==
<del>删除内容删除线
<ins>插入内容下划线
html
<!-- 语义化标签(推荐) -->
<strong>重要提示</strong>
<em>请注意</em>
<mark>重点内容</mark>

<!-- 纯样式标签(不推荐) -->
<b>粗体</b>    <!-- 无语义,只是样式 -->
<i>斜体</i>    <!-- 无语义,只是样式 -->

1.3 块级元素 vs 行内元素 ​

生活化比喻:

块级元素 = 房间
- 每个房间独占一层空间
- 可以指定房间大小(宽高)
- 房间可以从左到右排列

行内元素 = 装饰品
- 装饰品挨着摆放
- 不能指定大小(宽高无效)
- 装饰品摆满一行才换行

语法结构图:

元素类型对比:

┌──────────────────────────────────────────────────────┐
│  块级元素(Block)                                    │
│  ───────────────                                     │
│  特点:独占一行、可设宽高、可容纳其他元素             │
│                                                      │
│  ┌────────────────────────────┐                     │
│  │         div                │  ← 独占整行         │
│  └────────────────────────────┘                     │
│  ┌────────────────────────────┐                     │
│  │         p                  │                     │
│  └────────────────────────────┘                     │
│                                                      │
├──────────────────────────────────────────────────────┤
│  行内元素(Inline)                                  │
│  ───────────────                                     │
│  特点:并排排列、不可设宽高、只能容纳文本/行内元素   │
│                                                      │
│  [span1] [span2] [span3]  ← 并排摆放                 │
│                                                      │
│  [a链接] [strong] [em]                               │
│                                                      │
└──────────────────────────────────────────────────────┘

最简示例:

html
<!-- 块级元素:独占一行 -->
<div>块1</div>
<div>块2</div>

<!-- 行内元素:并排排列 -->
<span>行1</span>
<span>行2</span>

元素分类:

类型常见标签特点
块级<div>, <p>, <h1>, <ul>, <section>独占一行、可设宽高
行内<span>, <a>, <strong>, <em>并排排列、不可设宽高
行内块<img>, <input>, <button>并排排列、可设宽高

1.4 列表 ​

语法结构图:

列表类型:

无序列表(ul)                有序列表(ol)                定义列表(dl)
────────────                 ────────────                 ────────────
<ul>                         <ol>                         <dl>
  ├─ <li>苹果</li>             ├─ <li>第一步</li>           ├─ <dt>HTML</dt>
  ├─ <li>香蕉</li>             ├─ <li>第二步</li>           │    └─ <dd>超文本标记语言</dd>
  └─ <li>橙子</li>             └─ <li>第三步</li>           ├─ <dt>CSS</dt>
</ul>                        </ol>                        │    └─ <dd>层叠样式表</dd>
                                                          └─ <dt>JS</dt>
显示效果:                     显示效果:                     └─ <dd>JavaScript</dd>
• 苹果                        1. 第一步                    </dl>
• 香蕉                        2. 第二步
• 橙子                        3. 第三步                    显示效果:
                                                          HTML
                                                            超文本标记语言

最简示例:

html
<!-- 无序列表 -->
<ul>
  <li>项目一</li>
  <li>项目二</li>
</ul>

<!-- 有序列表 -->
<ol>
  <li>第一步</li>
  <li>第二步</li>
</ol>

1.5 链接 ​

语法结构图:

链接结构:

<a href="目标地址" target="打开方式">链接文字</a>
    │                │                │
    │                │                └─ 用户看到的文字
    │                └─ _self(当前窗口)
    │                  _blank(新窗口)
    └─ URL地址
       - https://example.com(外部链接)
       - /about(内部链接)
       - #section(锚点链接)
       - mailto:xxx(邮件链接)
       - tel:xxx(电话链接)

最简示例:

html
<a href="https://example.com">点击跳转</a>

链接类型:

html
<!-- 外部链接 -->
<a href="https://example.com">外部网站</a>

<!-- 新窗口打开 -->
<a href="https://example.com" target="_blank" rel="noopener noreferrer">
  新窗口打开
</a>

<!-- 锚点链接(页面内跳转) -->
<a href="#section1">跳转到第一节</a>
<section id="section1">第一节内容</section>

<!-- 邮件链接 -->
<a href="mailto:test@example.com">发送邮件</a>

<!-- 电话链接 -->
<a href="tel:+8613800138000">拨打电话</a>

1.6 图片 ​

语法结构图:

图片结构:

<img src="图片路径" alt="替代文本" width="宽度" height="高度">
    │               │               │                │
    │               │               │                └─ 像素值
    │               │               └─ 像素值或百分比
    │               └─ 图片无法显示时的文字
    │                  (无障碍必备、SEO 重要)
    └─ 图片文件地址
       - images/photo.jpg(相对路径)
       - /assets/logo.png(绝对路径)
       - https://...(网络图片)

最简示例:

html
<img src="photo.jpg" alt="照片">

详细示例:

html
<!-- 基础用法 -->
<img src="images/logo.png" alt="公司Logo" width="100" height="50">

<!-- 响应式图片 -->
<img src="photo.jpg" alt="照片" style="width: 100%; height: auto;">

<!-- 懒加载 -->
<img src="photo.jpg" alt="照片" loading="lazy">

图片格式对比:

格式特点适用场景
JPG有损压缩、文件小照片、复杂图像
PNG无损压缩、支持透明Logo、图标
WebP高压缩率、支持透明动画现代浏览器首选
SVG矢量图、无限缩放图标、Logo
GIF支持动画简单动画

L2 实践层:用好 ​

最佳实践 ​

实践原因示例
h1 只用一个SEO 权重集中<h1>网站名称</h1>
标题不跳级结构清晰、无障碍友好h1 → h2 → h3
alt 必须写无障碍访问、SEO<img alt="产品图片">
用语义化标签代码可读、SEO<article> 替代 <div>
target="_blank" 加 rel安全性rel="noopener noreferrer"

反模式:不要这样做 ​

html
<!-- ❌ 错误:h1 用多个 -->
<h1>标题1</h1>
<h1>标题2</h1>    <!-- 问题:SEO 权重分散 -->

<!-- ✅ 正确:h1 只用一个 -->
<h1>主标题</h1>
<h2>副标题</h2>
html
<!-- ❌ 错误:跳级标题 -->
<h1>主标题</h1>
<h3>小节标题</h3>    <!-- 问题:跳过了 h2 -->

<!-- ✅ 正确:按层级 -->
<h1>主标题</h1>
<h2>章节标题</h2>
<h3>小节标题</h3>
html
<!-- ❌ 错误:图片无 alt -->
<img src="photo.jpg">    <!-- 问题:无障碍缺失、SEO 差 -->

<!-- ✅ 正确:图片有 alt -->
<img src="photo.jpg" alt="产品展示图片">
html
<!-- ❌ 错误:全用 div -->
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">...</div>
<!-- 问题:无语义化,不利于 SEO 和无障碍 -->

<!-- ✅ 正确:用语义化标签 -->
<header>...</header>
<nav>...</nav>
<main>...</main>

适用场景 ​

场景推荐做法原因
页面主标题<h1>(唯一)SEO 权重最高
章节标题<h2> → <h3>结构清晰
导航菜单<nav> + <ul>语义化
文章内容<article>SEO友好
简单容器<div>无语义需求

L3 专家层:深入 ​

浏览器如何解析 HTML ​

HTML 解析流程:

┌──────────────────────────────────────────────────────┐
│  步骤 1:接收 HTML 字节流                             │
│  ───────────────────                                 │
│  浏览器从服务器接收 HTML 文件的字节流                 │
└──────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────┐
│  步骤 2:解码与词法分析                               │
│  ───────────────────                                 │
│  将字节流转换为字符,识别标签、属性、文本             │
│  例如:<div class="box"> → Token(div, class="box")   │
└──────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────┐
│  步骤 3:构建 DOM 树                                  │
│  ───────────────────                                 │
│  将 Token 组装成树形结构                              │
│                                                      │
│          html                                        │
│         /    \                                       │
│      head    body                                    │
│      /  \    /  \                                    │
│   meta title h1  p                                   │
└──────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────┐
│  步骤 4:渲染页面                                     │
│  ───────────────────                                 │
│  DOM 树 + CSS 样式 → 渲染树 → 绘制到屏幕              │
└──────────────────────────────────────────────────────┘

性能考量 ​

操作性能影响建议
大量嵌套 div渲染树复杂减少不必要的嵌套
图片未设置尺寸页面重排预设 width/height
CSS 在底部阻塞渲染CSS 放在 head
JS 在头部阻塞解析JS 放在 body 底部

设计动机 ​

为什么 HTML 要有语义化标签?

设计选择原因影响
语义化标签机器能理解内容SEO 更好、无障碍友好
唯一的 h1权重集中搜索引擎明确页面主题
alt 属性图片可能无法显示用户体验、SEO

知识关联图 ​

HTML 知识关联:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   HTML      │────→│   CSS       │────→│ JavaScript  │
│   结构      │     │   样式      │     │   行为      │
└─────────────┘     └─────────────┘     └─────────────┘
       │                   │                   │
       ↓                   ↓                   ↓
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   语义化    │     │   响应式    │     │   DOM       │
│   标签      │     │   设计      │     │   操作      │
└─────────────┘     └─────────────┘     └─────────────┘

关联说明:
- HTML → CSS:HTML 结构决定 CSS 样式的应用对象
- HTML → JavaScript:DOM 基于 HTML 结构,JS 操作 DOM
- HTML 语义化 → SEO:语义化标签帮助搜索引擎理解内容

实践练习 ​

练习:个人简介页面 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>个人简介</title>
</head>
<body>
    <header>
        <h1>张三</h1>
        <p>前端开发工程师</p>
    </header>

    <main>
        <section>
            <h2>个人简介</h2>
            <p>3 年前端开发经验...</p>
        </section>

        <section>
            <h2>技能</h2>
            <ul>
                <li>HTML5</li>
                <li>CSS3</li>
                <li>JavaScript</li>
            </ul>
        </section>
    </main>

    <footer>
        <p>&copy; 2024 张三</p>
    </footer>
</body>
</html>

常见问题 ​

Q1:div 和 span 有什么区别? ​

原因: 它们是不同类型的元素。

对比divspan
类型块级元素行内元素
特点独占一行、可设宽高并排排列、不可设宽高
用途页面分区、容器文本片段、小范围样式

比喻: div 是房间,span 是装饰品。

Q2:为什么要用语义化标签? ​

原因: 三大好处。

好处说明
SEO搜索引擎更容易理解内容
无障碍屏幕阅读器能正确朗读
可维护代码更容易理解和维护

Q3:alt 属性重要吗? ​

原因: 非常重要,三个作用。

作用说明
图片无法加载显示替代文字
无障碍访问屏幕阅读器朗读
SEO搜索引擎理解图片内容

解决: 每张图片都必须写 alt。

Q4:图片模糊怎么办? ​

原因: 分辨率不够或格式问题。

解决:

  • 使用足够高的分辨率
  • 为高清屏提供 2x/3x 图片
  • 考虑使用 WebP 格式

学习资源 ​