这份手册将从零基础开始,全面、详细地讲解 HTML 的核心知识点、语法规则和实际应用,适合入门学习者系统掌握 HTML,也可作为开发人员的参考手册。
- HTML 基础概述
- HTML 文档基本结构
- HTML 核心文本与格式标签
- HTML 列表标签
- HTML 链接标签
- HTML 媒体元素(图片、音频、视频)
- HTML 表单与表单控件
- HTML 布局元素(传统布局与 HTML5 语义化布局)
- HTML 全局属性
- HTML 注释
- HTML 实用技巧与注意事项
HTML(HyperText Markup Language,超文本标记语言)是用于构建网页结构的标记语言,它不是编程语言(无逻辑执行能力),而是通过一系列标记标签来定义网页的各个组成部分。
- 定义网页的结构层次(如头部、主体、尾部、导航、内容区域等)
- 承载网页的基础内容(如文本、图片、链接、表单等)
- 为网页内容提供语义化描述(帮助浏览器、搜索引擎理解内容含义)
- HTML:负责网页结构(骨架)
- CSS:负责网页样式(外观,如颜色、字体、布局位置等)
- JavaScript:负责网页交互(行为,如点击事件、数据提交、动态内容更新等)
目前主流版本为 HTML5(推荐使用),相比旧版本(HTML4、XHTML),HTML5 新增了语义化布局标签、原生媒体支持、表单增强等特性,兼容性更好,开发更便捷。
HTML 文档有固定的骨架结构,所有内容都嵌套在这个骨架中,浏览器会按照该结构解析网页。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个HTML页面</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>欢迎学习HTML</h1>
<p>这是我的第一个HTML页面内容</p>
</body>
</html>
- 将上述代码复制到文本编辑器(如 VS Code、记事本、Sublime)
- 保存文件,后缀名为
.html(如 index.html,注意不要保存为 .txt)
- 双击保存后的文件,会自动用默认浏览器打开并显示内容
文本是网页的基础内容,HTML 提供了一系列标签用于定义文本的层级和格式。
用于定义网页中的标题层级,从 <h1>(一级标题,最大最醒目)到 <h6>(六级标题,最小),一个页面建议只使用一个 <h1>(利于搜索引擎优化)。
<h1>一级标题(页面主标题)</h1>
<h2>二级标题(章节标题)</h2>
<h3>三级标题(小节标题)</h3>
<h4>四级标题</h4>
<h5>五级标题</h5>
<h6>六级标题</h6>
用于定义一个独立的文本段落,浏览器会自动在段落前后添加默认间距,区分不同段落。
<p>这是第一个文本段落。HTML是构建网页结构的核心语言,
即使换行输入,浏览器也会自动合并为一行显示,
除非使用专门的换行标签。</p>
<p>这是第二个文本段落,与第一个段落之间有默认间距。</p>
<br>:强制换行标签(单标签,无需闭合),用于在段落内实现换行效果
<hr>:水平线标签(单标签,无需闭合),用于在页面中插入一条水平分隔线,分隔不同内容区域
<p>这是第一行文本<br>这是换行后的第二行文本(仍在同一个段落内)</p>
<hr>
<p>这是水平线下方的新段落</p>
用于对文本进行样式修饰(加粗、斜体、删除线等),分为语义化标签(推荐使用,帮助搜索引擎理解内容)和非语义化标签(仅用于样式,不推荐优先使用)。
<p>这是<strong>语义化加粗</strong>,这是<b>非语义化加粗</b></p>
<p>这是<em>语义化斜体</em>,这是<i>非语义化斜体</i></p>
<p>原价:<del>99元</del>,现价:69元</p>
<p>数学公式:x<sup>2</sup> + y<sup>2</sup> = r<sup>2</sup></p>
<p>化学公式:H<sub>2</sub>SO<sub>4</sub>(硫酸)</p>
列表用于将一组相关内容按一定格式排列,HTML 支持三种核心列表类型:无序列表、有序列表、定义列表。
列表项无固定顺序,默认以圆点(项目符号)作为标记,可通过 CSS 修改标记样式。
<ul>:无序列表容器标签
<li>:列表项标签,所有列表内容必须嵌套在 <li> 中
<h3>我的爱好(无序列表)</h3>
<ul>
<li>阅读</li>
<li>运动</li>
<li>编程</li>
<li>摄影</li>
</ul>
列表项有固定顺序(如编号、字母),默认以阿拉伯数字作为标记,可通过 type 属性修改标记类型。
<ol>:有序列表容器标签
<li>:列表项标签
- 可选属性:
type(标记类型:1 数字、a 小写字母、A 大写字母、i 小写罗马数字、I 大写罗马数字)、start(起始编号,数字类型)
<h3>学习步骤(有序列表)</h3>
<ol type="1" start="1">
<li>学习HTML基础</li>
<li>学习CSS样式</li>
<li>学习JavaScript交互</li>
</ol>
<h3>排名(有序列表,字母标记)</h3>
<ol type="A">
<li>第一名</li>
<li>第二名</li>
<li>第三名</li>
</ol>
用于定义 “术语 - 解释” 类型的内容(如词典、说明书),无项目符号。
<dl>:定义列表容器标签
<dt>:定义术语(被解释的对象)
<dd>:定义解释(对术语的说明,默认有缩进)
<h3>HTML核心术语(定义列表)</h3>
<dl>
<dt>HTML</dt>
<dd>超文本标记语言,用于构建网页结构</dd>
<dt>CSS</dt>
<dd>层叠样式表,用于美化网页样式</dd>
<dt>JavaScript</dt>
<dd>脚本语言,用于实现网页交互效果</dd>
</dl>
列表可以相互嵌套(如无序列表嵌套有序列表,或反之),实现复杂的列表结构。
<h3>我的学习计划(嵌套列表)</h3>
<ul>
<li>
前端开发
<ol>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ol>
</li>
<li>
后端开发
<ol>
<li>Python</li>
<li>Java</li>
</ol>
</li>
</ul>
链接(<a> 标签,又称锚点标签)是网页的核心纽带,用于实现页面跳转、锚点定位、打开外部资源等功能。
<a href="目标地址" target="打开方式" title="鼠标悬浮提示">链接文本/图片</a>
核心属性说明:
href(必需):指定链接的目标地址,支持多种类型:
- 内部链接:同一网站内的其他页面(如
href="about.html")
- 外部链接:其他网站的 URL(必须带协议,如
href="https://www.baidu.com")
- 锚点链接:页面内的指定位置(如
href="#top")
- 功能链接:邮件(
href="mailto:xxx@xxx.com")、电话(href="tel:13800138000")
- 空链接:暂未指定目标(
href="#" 或 href="javascript:void(0)")
target(可选):指定链接的打开方式,默认值 _self
_self:在当前窗口 / 标签页打开(默认)
_blank:在新的标签页打开(推荐外部链接使用)
_parent:在父框架中打开(框架页面使用)
_top:在顶层框架中打开(框架页面使用)
title(可选):鼠标悬浮在链接上时显示的提示文本
<a href="https://www.baidu.com" target="_blank" title="跳转到百度首页">百度一下</a>
<a href="about.html">关于我们</a>
<a href="news/2025.html">2025年新闻</a>
<h2 id="section1">第一部分内容</h2>
<p>大量文本内容...(省略)</p>
<p>大量文本内容...(省略)</p>
<a href="#section1">回到第一部分</a>
<a href="about.html#contact">联系我们(关于页面)</a>
<a href="mailto:service@example.com">发送邮件给我们</a>
<a href="tel:13800138000">拨打客服电话</a>
<a href="#">待开发链接</a>
<a href="javascript:void(0)">无跳转链接</a>
<a href="https://www.baidu.com" target="_blank">
<img src="baidu-logo.png" alt="百度logo">
</a>
HTML 支持原生嵌入图片、音频、视频媒体资源,无需依赖第三方插件(HTML5 新增特性)。
<img> 是单标签,用于在网页中插入图片,核心是指定图片地址和替代文本。
<img src="图片地址" alt="图片替代文本" width="宽度" height="高度" title="悬浮提示">
核心属性说明:
src(必需):图片的路径 / URL,支持两种类型:
- 本地图片:同一项目内的图片文件(如
src="images/photo.jpg"、src="logo.png")
- 网络图片:互联网上的图片 URL(如
src="https://xxx.com/xxx.jpg")
alt(必需,语义化优化):图片加载失败时显示的替代文本,同时帮助搜索引擎和屏幕阅读器理解图片内容
width / height(可选):设置图片宽度和高度,支持像素(px,可省略单位)、百分比(%)
- 只设置其中一个属性,图片会按原始比例自动缩放(推荐,避免图片变形)
- 同时设置两个属性,若比例与原图不一致,图片会变形
- 其他属性:
title(悬浮提示)、loading="lazy"(懒加载,优化页面加载速度)
<img src="images/cat.jpg" alt="一只可爱的猫咪" width="300" title="猫咪图片">
<img src="https://picsum.photos/400/200" alt="随机风景图片" height="200">
<img src="images/bg.jpg" alt="背景图片" width="100%" loading="lazy">
<audio> 用于在网页中嵌入音频文件,支持 MP3、WAV、OGG 三种主流格式(优先使用 MP3,兼容性最好)。
<audio src="音频地址" controls autoplay loop preload="auto">
您的浏览器不支持音频播放,请升级浏览器!
</audio>
<audio controls>
<source src="music.mp3" type="audio/mpeg">
<source src="music.ogg" type="audio/ogg">
您的浏览器不支持音频播放,请升级浏览器!
</audio>
核心属性说明:
src:音频文件路径 / URL(单格式使用)
controls:显示音频控制栏(播放 / 暂停、进度条、音量调节,必需添加,否则无法操作音频)
autoplay:页面加载完成后自动播放(多数浏览器已禁用,需用户交互触发)
loop:音频播放完毕后循环播放
preload:音频预加载设置(auto:自动预加载;none:不预加载;metadata:仅预加载元信息)
<source>:多格式兼容标签,指定不同格式的音频文件,浏览器会自动选择支持的格式
<video> 用于在网页中嵌入视频文件,支持 MP4、WebM、OGG 三种主流格式(优先使用 MP4,兼容性最好)。
<video src="视频地址" controls width="600" autoplay loop muted preload="auto">
您的浏览器不支持视频播放,请升级浏览器!
</video>
<video controls width="600" muted>
<source src="movie.mp4" type="video/mp4">
<source src="movie.webm" type="video/webm">
您的浏览器不支持视频播放,请升级浏览器!
</video>
核心属性说明(大部分与音频一致,新增部分如下):
width / height:设置视频播放器的宽度和高度(只设置宽度,视频会按原始比例缩放)
muted:静音播放(配合 autoplay 使用,多数浏览器允许静音自动播放)
- 其他属性(
src、controls、autoplay、loop、preload、<source>):与音频元素一致
表单(<form>)是网页与用户交互的核心,用于收集用户输入的信息(如登录、注册、搜索、提交数据等),收集到的信息可提交到后端服务器进行处理。
所有表单控件必须嵌套在 <form> 标签内,用于定义表单的提交规则。
<form action="后端接口地址" method="提交方式" enctype="数据编码类型">
</form>
核心属性说明:
action:指定表单数据提交的后端接口地址(如 action="https://xxx.com/login"),若留空则提交到当前页面
method:指定表单的提交方式,可选值:
get(默认):数据会附加在 URL 后面提交(可见,数据长度有限,适合搜索、查询等简单场景)
post:数据会在请求体中提交(不可见,数据长度无限制,适合登录、注册、提交大量数据等场景,安全性更高)
enctype:指定表单数据的编码类型,主要用于提交文件时设置,可选值:
application/x-www-form-urlencoded(默认):普通表单数据编码
multipart/form-data:提交文件时必须使用该类型(如上传图片、文档等)
text/plain:纯文本编码,极少使用
表单控件是用户输入交互的载体,包括输入框、单选框、复选框、下拉菜单、按钮等,核心控件如下:
用于关联表单控件,点击 <label> 文本时,对应的表单控件会获得焦点(提升用户体验,尤其是单选框 / 复选框)。
两种关联方式:
- 通过
for 属性与控件的 id 属性关联(推荐,更灵活)
- 将控件嵌套在
<label> 内部(简单直接,无需 id)
<label for="username">用户名:</label>
<input type="text" id="username" name="username">
<label>
记住我:<input type="checkbox" name="remember">
</label>
<input> 是单标签,通过 type 属性切换不同类型的输入框,是最常用的表单控件。
<input> 常用通用属性:
name(必需,提交数据时的键名,后端通过该名称获取值)
value:控件的默认值 / 提交值(单选框 / 复选框必须指定 value)
placeholder:输入框内的提示文本(输入内容后自动消失)
required:必填项(提交表单时若未填写,浏览器会提示验证)
disabled:禁用控件(控件不可编辑,数据不会提交到后端)
readonly:只读控件(控件不可编辑,但数据会提交到后端)
checked:单选框 / 复选框默认选中
min / max:数字 / 日期输入框的最小值 / 最大值
multiple:文件上传框允许选择多个文件
用于输入多行文本(如留言、评论、简介等),支持自动换行和滚动条。
<label for="remark">留言内容:</label>
<textarea id="remark" name="remark" rows="5" cols="30" placeholder="请输入您的留言...">
默认文本内容(可选,无需手动添加换行,浏览器会保留格式)
</textarea>
属性说明:
rows:设置文本域的默认行数(高度)
cols:设置文本域的默认列数(宽度)
name / placeholder / required / disabled / readonly:与 <input> 一致
- 注意:
<textarea> 标签必须闭合,默认文本放在开始标签和结束标签之间
用于提供预设选项供用户选择(如省份、城市、学历等),节省页面空间。
<label for="city">选择城市:</label>
<select id="city" name="city" required>
<option value="">-- 请选择城市 --</option>
<optgroup label="一线城市">
<option value="beijing">北京</option>
<option value="shanghai" selected>上海</option>
<option value="guangzhou">广州</option>
<option value="shenzhen">深圳</option>
</optgroup>
<optgroup label="新一线城市">
<option value="hangzhou">杭州</option>
<option value="chengdu">成都</option>
</optgroup>
</select>
标签说明:
<select>:下拉菜单容器标签,name 属性为提交时的键名
<option>:下拉菜单选项,value 为提交值,标签内文本为显示值
<optgroup>:选项分组标签,label 属性为分组名称(不可选择)
- 常用属性:
selected(<option> 默认选中)、disabled(禁用选项 / 下拉菜单)、multiple(允许多选,按住 Ctrl 键选择)
与 <input type="button"> 功能类似,但更灵活,可在标签内嵌套文本、图片等内容。
<button type="submit">登录</button>
<button type="reset">重置表单</button>
<button type="button" onclick="alert('点击了普通按钮')">
<img src="icon.png" alt="图标"> 点击我
</button>
属性说明:
type:按钮类型(submit 提交表单、reset 重置表单、button 普通按钮)
- 其他属性:
disabled(禁用按钮)、onclick(点击事件)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>用户注册表单</title>
</head>
<body>
<h2>用户注册</h2>
<form action="https://xxx.com/register" method="post" enctype="application/x-www-form-urlencoded">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" name="username" placeholder="请输入3-16位用户名" required>
</div>
<br>
<div>
<label for="pwd">密码:</label>
<input type="password" id="pwd" name="pwd" placeholder="请输入6-20位密码" required>
</div>
<br>
<div>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" placeholder="请输入您的邮箱" required>
</div>
<br>
<div>
<label>性别:</label>
<input type="radio" id="male" name="gender" value="male" checked>
<label for="male">男</label>
<input type="radio" id="female" name="gender" value="female">
<label for="female">女</label>
</div>
<br>
<div>
<label>爱好:</label>
<input type="checkbox" id="read" name="hobby" value="read">
<label for="read">阅读</label>
<input type="checkbox" id="sport" name="hobby" value="sport">
<label for="sport">运动</label>
<input type="checkbox" id="code" name="hobby" value="code">
<label for="code">编程</label>
</div>
<br>
<div>
<label for="city">所在城市:</label>
<select id="city" name="city" required>
<option value="">-- 请选择城市 --</option>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
</select>
</div>
<br>
<div>
<label for="avatar">上传头像:</label>
<input type="file" id="avatar" name="avatar" accept="image/*">
</div>
<br>
<div>
<label for="remark">个人简介:</label>
<textarea id="remark" name="remark" rows="3" cols="30" placeholder="请输入个人简介(可选)"></textarea>
</div>
<br>
<button type="submit">提交注册</button>
<button type="reset">重置表单</button>
</form>
</body>
</html>
布局用于规划网页的整体结构,将页面划分为不同的功能区域(如头部、导航、主体、侧边栏、尾部等)。
<div> 是无语义的块级容器标签,用于划分页面区域,通过 class 或 id 属性标识区域功能,配合 CSS 实现布局。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>传统布局</title>
<style>
.header { height: 80px; background: #333; color: #fff; text-align: center; line-height: 80px; }
.nav { height: 40px; background: #666; color: #fff; line-height: 40px; padding-left: 20px; }
.container { display: flex; }
.main { flex: 3; height: 400px; background: #f5f5f5; padding: 20px; }
.aside { flex: 1; height: 400px; background: #eee; padding: 20px; }
.footer { height: 60px; background: #333; color: #fff; text-align: center; line-height: 60px; }
</style>
</head>
<body>
<div class="header">
<h1>网站头部</h1>
</div>
<div class="nav">
首页 | 产品 | 关于我们 | 联系我们
</div>
<div class="container">
<div class="main">
<h2>主要内容区域</h2>
<p>这里是网页的核心内容...</p>
</div>
<div class="aside">
<h3>侧边栏</h3>
<p>这里是侧边栏内容,如推荐文章、广告等...</p>
</div>
</div>
<div class="footer">
版权所有 © 2025 我的网站
</div>
</body>
</html>
HTML5 新增了一系列具有明确语义的布局标签,替代 <div> 标签,让页面结构更清晰,利于搜索引擎优化(SEO)和屏幕阅读器识别,同时提高代码可读性。
核心语义化布局标签说明:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>HTML5语义化布局</title>
<style>
header { height: 80px; background: #333; color: #fff; text-align: center; line-height: 80px; }
nav { height: 40px; background: #666; color: #fff; line-height: 40px; padding-left: 20px; }
.container { display: flex; }
main { flex: 3; height: 400px; background: #f5f5f5; padding: 20px; }
aside { flex: 1; height: 400px; background: #eee; padding: 20px; }
footer { height: 60px; background: #333; color: #fff; text-align: center; line-height: 60px; }
section { margin-bottom: 20px; padding: 10px; background: #fff; }
article { margin-bottom: 10px; padding: 10px; background: #f9f9f9; border: 1px solid #ddd; }
</style>
</head>
<body>
<header>
<h1>网站头部</h1>
</header>
<nav>
<a href="#">首页</a> | <a href="#">产品</a> | <a href="#">关于我们</a> | <a href="#">联系我们</a>
</nav>
<div class="container">
<main>
<h2>主要内容区域</h2>
<section>
<h3>科技新闻</h3>
<article>
<h4>HTML5 最新特性详解</h4>
<p>HTML5 作为新一代网页标准,提供了丰富的语义化标签和原生媒体支持...</p>
</article>
<article>
<h4>CSS3 布局技巧汇总</h4>
<p>Flex 布局和 Grid 布局已成为现代网页布局的主流方案...</p>
</article>
</section>
</main>
<aside>
<h3>侧边栏</h3>
<p>推荐文章:</p>
<ul>
<li><a href="#">JavaScript 入门教程</a></li>
<li><a href="#">React 框架实战</a></li>
</ul>
</aside>
</div>
<footer>
版权所有 © 2025 我的网站 | 联系电话:13800138000
</footer>
</body>
</html>
全局属性是所有 HTML 元素都可以使用的属性(包括自定义标签),用于为元素添加通用功能或描述。
示例:
<div class="content" id="main-content" title="核心内容" lang="zh-CN">
这是一段可编辑的文本:
<p contenteditable="true" style="color: #333;">请在此输入内容...</p>
</div>
<button hidden>隐藏的按钮</button>
<input type="text" tabindex="1" placeholder="第一个聚焦">
<input type="text" tabindex="2" placeholder="第二个聚焦">
<input type="text" tabindex="-1" placeholder="不可聚焦">
HTML 注释用于在代码中添加说明文字,浏览器不会解析和显示注释内容,仅在代码编辑器中可见。
- 标注代码功能(方便自己或他人理解代码含义)
- 暂时注释掉不需要的代码(便于调试,无需删除)
- 划分代码区域(提高代码可读性)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>注释示例</title>
<style>
.header { height: 80px; background: #333; }
</style>
</head>
<body>
<header class="header">
<h1>网站标题</h1>
</header>
<nav>
<a href="#">首页</a>
<a href="#">关于我们</a>
</nav>
<main>
<section class="article-list">
<article>文章1</article>
<article>文章2</article>
</section>
</main>
</body>
</html>
- 注释不能嵌套(如
<!-- 注释1 <!-- 注释2 --> --> 是无效的)
- 注释内容不宜过长,简洁明了即可
- 避免添加无意义的注释(如
<!-- 这是一个p标签 --> <p>文本</p>)
- 语义化编码优先:尽量使用语义化标签(如
<strong>、<header>、<article>)替代非语义化标签(如 <b>、<div>),利于 SEO 和代码维护
- 避免行内样式泛滥:
<style> 行内样式优先级高但不易维护,推荐使用外部 CSS 文件统一管理样式
- 图片懒加载:非首屏图片添加
loading="lazy" 属性,减少页面初始加载时间,提升性能
- 表单验证:合理使用
required、type="email" 等原生验证属性,减少前端 JS 验证工作量
- 相对路径使用:引用本地资源(图片、HTML 页面)时,优先使用相对路径(如
images/pic.jpg),避免绝对路径(如 C:/xxx/pic.jpg)的兼容性问题
- 浏览器调试:使用浏览器 F12 开发者工具(Elements 面板)查看和调试 HTML 结构,快速定位问题
- 标签闭合:
- 双标签必须成对闭合(如
<p>文本</p>,不可遗漏 </p>)
- 单标签(
<br>、<img>、<input>)无需闭合,建议不添加 /(HTML5 中 <br/> 也兼容,但非必需)
- 属性引号:属性值建议使用双引号(
"")或单引号('')包裹,避免无引号导致的解析错误(如 src=pic.jpg 不推荐)
- 字符编码:必须在
<head> 中添加 <meta charset="UTF-8">,避免中文或特殊字符乱码
- 移动端适配:添加
<meta name="viewport" content="width=device-width, initial-scale=1.0">,确保网页在移动端正常显示
- 标签嵌套规范:
- 块级元素(如
<div>、<p>、<h1>)可嵌套行内元素(如 <span>、<strong>)或其他块级元素(部分例外:<p> 不能嵌套 <div>)
- 行内元素(如
<span>、<a>)不能嵌套块级元素
- 大小写规范:HTML 标签和属性名不区分大小写(如
<HTML>、<html> 均可),推荐使用小写字母(符合开发规范,更易阅读)
- HTML 是网页结构的骨架,核心作用是定义页面结构和承载基础内容,与 CSS、JavaScript 协同工作构建完整网页
- HTML5 是主流版本,提供了语义化布局、原生媒体支持、增强表单等实用特性
- 掌握核心标签(文本、列表、链接、媒体、表单、布局)和全局属性,是构建合格 HTML 页面的基础
- 遵循语义化编码、规范嵌套、合理注释等原则,可提高代码可读性、可维护性和 SEO 效果
- 实际开发中,需配合 CSS 实现样式美化,配合 JavaScript 实现交互功能,形成完整的前端开发流程