HTML学习


第一章:HTML 基础概念

1.1 HTML 的定义与作用

HTML(超文本标记语言,Hypertext Markup Language)是构建网页的基石骨架。它通过标签来定义网页的内容结构,就像建筑的蓝图一样。

核心作用

  • 定义内容结构:组织文本、图片、链接等元素
  • 创建文档骨架:为CSS和JavaScript提供操作基础
  • 确保跨平台兼容:不同浏览器都能正确解析
  • 支持SEO优化:良好的HTML结构有利于搜索引擎索引

1.2 HTML 文档基本结构

<!DOCTYPE html>  <!-- 文档类型声明,告诉浏览器使用HTML5 -->
<html lang="zh-CN"> <!-- 根元素,lang属性指定语言 -->
<head>
<!-- 头部:包含元数据和链接资源 -->
<meta charset="UTF-8"> <!-- 字符编码,必须放在最前面 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页面标题</title> <!-- 显示在浏览器标签页 -->
</head>
<body>
<!-- 主体:所有可见内容都在这里 -->
<h1>欢迎来到我的网站</h1>
<p>这是一个段落。</p>
</body>
</html>

第二章:HTML 元素详解

2.1 元素组成结构

<标签名 属性名="属性值">内容</标签名>

元素类型

类型 示例 特点
双标签元素 <h1>标题</h1> 有开始和结束标签
单标签元素 <img src="img.jpg"> 自我闭合,无内容
空元素 <br>, <hr> 没有结束标签

2.2 常用基础元素

标题元素(h1-h6)

<h1>一级标题</h1>    <!-- 最重要的标题,通常页面只有一个 -->
<h2>二级标题</h2> <!-- 节标题 -->
<h3>三级标题</h3> <!-- 子节标题 -->
<h4>四级标题</h4> <!-- 更小的分组 -->
<h5>五级标题</h5>
<h6>六级标题</h6> <!-- 最低级别的标题 -->

最佳实践

  • 保持标题的层级关系(不要从h1直接跳到h4)
  • h1通常用于页面主标题
  • 标题不仅为了样式,更为了语义结构

段落和容器

<!-- 段落:用于文本内容 -->
<p>这是一个段落。段落会自动换行并有默认的上下边距。</p>

<!-- div:通用容器,无语义 -->
<div class="container">
<p>div是一个块级容器</p>
<p>常用于布局和样式分组</p>
</div>

<!-- span:行内容器 -->
<p>这是一段<span class="highlight">强调</span>文本</p>

2.3 特殊字符(HTML实体)

字符 实体编码 说明
< < 小于号(避免与标签冲突)
> > 大于号
& & 和号
" " 双引号
' ' 单引号
`` 不换行空格
© © 版权符号
® ® 注册商标
<p>使用 &lt;div&gt; 标签创建容器</p>
<p>版权所有 &copy; 2024 公司名称</p>

第三章:链接与资源

3.1 超链接(a标签)

<!-- 外部链接 -->
<a href="https://www.example.com" target="_blank">访问示例网站</a>

<!-- 内部链接 -->
<a href="#section2">跳转到第二节</a>

<!-- 下载链接 -->
<a href="file.pdf" download>下载PDF文件</a>

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

<!-- 电话链接(移动端有效) -->
<a href="tel:+8613800138000">打电话</a>

target属性详解

  • _blank:在新窗口/标签页打开
  • _self:在当前窗口打开(默认)
  • _parent:在父框架打开
  • _top:在顶层框架打开

3.2 路径类型

<!-- 绝对路径 -->
<img src="https://www.example.com/images/logo.png">
<a href="/about/index.html">关于我们</a>

<!-- 相对路径 -->
<img src="images/photo.jpg"> <!-- 同级目录的images文件夹 -->
<a href="../contact.html">联系我们</a> <!-- 上一级目录 -->
<script src="./js/main.js"></script> <!-- 当前目录的js文件夹 -->

<!-- 根相对路径 -->
<link href="/css/style.css"> <!-- 从网站根目录开始 -->

路径符号记忆

  • /:根目录
  • ./:当前目录(可省略)
  • ../:上级目录
  • ../../:上两级目录

3.3 资源链接

<!-- 链接外部CSS -->
<link rel="stylesheet" href="styles.css" type="text/css">

<!-- 链接网站图标 -->
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="apple-touch-icon.png">

<!-- 链接外部JavaScript -->
<script src="script.js" defer></script>
<!-- defer:HTML解析完成后执行 -->
<!-- async:下载完成后立即执行 -->

第四章:语义化HTML

4.1 为什么需要语义化?

语义化HTML的好处

  • 更好的可访问性:屏幕阅读器能正确解读
  • SEO优化:搜索引擎理解内容结构
  • 代码可维护性:结构清晰,易于理解
  • 未来兼容性:适应新的浏览器和设备

4.2 主要语义化标签

页面结构标签

<body>
<!-- 页眉:通常包含logo、导航等 -->
<header>
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/about">关于</a></li>
</ul>
</nav>
</header>

<!-- 主要内容区域 -->
<main>
<!-- 独立文章 -->
<article>
<h1>文章标题</h1>
<p>文章内容...</p>

<!-- 侧边内容 -->
<aside>
<h3>相关阅读</h3>
<p>相关内容...</p>
</aside>
</article>

<!-- 内容区块 -->
<section>
<h2>产品介绍</h2>
<p>产品详情...</p>
</section>
</main>

<!-- 页脚 -->
<footer>
<p>© 2024 公司名称</p>
<address>
联系地址:北京市朝阳区<br>
电话:010-12345678
</address>
</footer>
</body>

文本语义化标签

<p>
<strong>重要内容</strong>需要突出显示,
<em>强调内容</em>表示语气重点,
这是<mark>标记的文本</mark>
<small>小号字体</small>用于免责声明等,
<del>原价:100元</del>
<ins>现价:80元</ins>
</p>

<!-- 代码相关 -->
<pre><code>
function hello() {
console.log("Hello World!");
}
</code></pre>

<p><kbd>Ctrl</kbd>+<kbd>S</kbd>保存</p>
<p>输出结果:<samp>保存成功</samp></p>

<!-- 引用 -->
<blockquote cite="https://example.com">
<p>这是一个重要的引用。</p>
<footer>— 作者名,<cite>作品名</cite></footer>
</blockquote>

<p>他说:<q>今天天气真好!</q></p>

<!-- 定义和缩写 -->
<p>
<abbr title="HyperText Markup Language">HTML</abbr>
是网页的基础。
</p>

<dl>
<dt>HTML</dt>
<dd>超文本标记语言</dd>

<dt>CSS</dt>
<dd>层叠样式表</dd>
</dl>

时间与联系方式

<!-- 时间 -->
<p>
发布日期:<time datetime="2024-01-15">2024年1月15日</time><br>
会议时间:<time datetime="2024-01-20T14:30">1月20日下午2:30</time>
</p>

<!-- 联系方式 -->
<address>
作者:<a href="mailto:author@example.com">张三</a><br>
地址:北京市海淀区<br>
电话:<a href="tel:+8613800138000">13800138000</a>
</address>

4.3 语义化 vs 非语义化对比

不好的做法(已废弃)

<!-- 已废弃的表现性标签 -->
<center>居中内容</center>
<font size="5" color="red">红色大字</font>
<big>大号字</big>
<strike>删除线</strike>

好的做法(语义化)

<!-- 使用CSS控制样式,HTML关注结构 -->
<div class="text-center">居中内容</div>
<p class="highlight">重点内容</p>
<del>已删除的内容</del>

第五章:图像与多媒体

5.1 图像元素

<!-- 基础图片 -->
<img
src="images/photo.jpg"
alt="图片描述文字"
width="800"
height="600"
loading="lazy" <!-- 延迟加载 -->
>

<!-- 响应式图片 -->
<picture>
<!-- 不同屏幕尺寸使用不同图片 -->
<source media="(min-width: 1200px)" srcset="large.jpg">
<source media="(min-width: 768px)" srcset="medium.jpg">
<!-- 默认图片 -->
<img src="small.jpg" alt="响应式图片">
</picture>

<!-- 带标题的图片 -->
<figure>
<img src="chart.png" alt="数据图表">
<figcaption>图1:2024年销售数据趋势图</figcaption>
</figure>

重要属性

  • alt:替代文本,图片无法显示时显示,对无障碍访问和SEO至关重要
  • width/height:指定尺寸,避免布局偏移
  • loading="lazy":图片进入视口时再加载
  • srcset:提供不同分辨率图片
  • sizes:指定图片显示尺寸

5.2 图片格式选择

格式 特点 适用场景
JPEG/JPG 有损压缩,文件小 照片、复杂图像
PNG 无损压缩,支持透明 图标、logo、需要透明的图片
GIF 支持动画,256色 简单动画、低色彩图像
WebP 现代格式,压缩率高 所有场景(需考虑兼容性)
SVG 矢量格式,无限缩放 图标、logo、简单图形
AVIF 最新格式,极致压缩 高性能网站

5.3 SVG(可缩放矢量图形)

<!-- 内联SVG -->
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="blue" />
</svg>

<!-- 外部SVG文件 -->
<img src="logo.svg" alt="公司logo" width="200">

<!-- 使用symbol和use重用 -->
<svg style="display: none;">
<symbol id="icon-star" viewBox="0 0 24 24">
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
</symbol>
</svg>

<svg><use href="#icon-star"></use></svg>

SVG优势

  • 无限缩放不失真
  • 可通过CSS控制样式
  • 文件体积小
  • 搜索引擎可索引
  • 可编辑和动画

5.4 音频和视频

<!-- 音频 -->
<audio controls preload="metadata">
<source src="audio.mp3" type="audio/mpeg">
<source src="audio.ogg" type="audio/ogg">
<p>您的浏览器不支持音频播放。</p>
</audio>

<!-- 视频 -->
<video
controls
width="640"
poster="preview.jpg"
preload="metadata"
>
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
<track
src="subtitles.vtt"
kind="subtitles"
srclang="zh"
label="中文"
default
>
<p>您的浏览器不支持视频播放。</p>
</video>

多媒体属性

  • controls:显示播放控制界面
  • autoplay:自动播放(移动端有限制)
  • loop:循环播放
  • muted:静音
  • preload:预加载策略(none/metadata/auto)
  • playsinline:移动端内联播放

5.5 嵌入外部内容(iframe)

<!-- 嵌入地图 -->
<iframe
src="https://maps.google.com/maps?q=beijing&output=embed"
width="600"
height="450"
frameborder="0"
allowfullscreen
title="北京地图"
></iframe>

<!-- 嵌入YouTube视频 -->
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/视频ID"
title="YouTube视频"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
></iframe>

iframe安全注意事项

  1. 使用 sandbox 属性限制权限
  2. 设置 title 属性保证可访问性
  3. 考虑使用 loading="lazy" 延迟加载
  4. 注意跨域安全问题

第六章:表单详解

6.1 表单基础结构

<form 
action="/submit"
method="POST"
enctype="multipart/form-data"
novalidate <!-- 禁用浏览器验证 -->
target="_blank" <!-- 在新窗口打开 -->
>
<!-- 表单内容 -->
</form>

表单属性

属性 说明
action URL 表单提交地址
method GET/POST 提交方法
enctype application/x-www-form-urlencoded(默认) multipart/form-data(文件上传) text/plain 编码类型
target _self/_blank/… 打开方式
autocomplete on/off 自动完成
novalidate novalidate 禁用验证

6.2 输入控件(input)

文本类输入

<!-- 文本输入 -->
<input
type="text"
id="username"
name="username"
placeholder="请输入用户名"
required
minlength="3"
maxlength="20"
pattern="[A-Za-z0-9]+"
autocomplete="username"
value="默认值"
readonly <!-- 只读 -->
disabled <!-- 禁用 -->
>

<!-- 密码 -->
<input type="password" name="password" required>

<!-- 邮箱 -->
<input type="email" name="email" multiple> <!-- multiple支持多个邮箱 -->

<!-- 电话 -->
<input type="tel" name="phone" pattern="[0-9]{11}">

<!-- 网址 -->
<input type="url" name="website">

<!-- 搜索框 -->
<input type="search" name="keyword">

<!-- 多行文本 -->
<textarea
name="message"
rows="4"
cols="50"
placeholder="请输入留言"
wrap="hard" <!-- 自动换行 -->
>默认内容</textarea>

选择类输入

<!-- 单选按钮 -->
<label>
<input type="radio" name="gender" value="male" checked>
</label>
<label>
<input type="radio" name="gender" value="female">
</label>

<!-- 复选框 -->
<label>
<input type="checkbox" name="hobby" value="reading"> 阅读
</label>
<label>
<input type="checkbox" name="hobby" value="sports"> 运动
</label>

<!-- 下拉选择 -->
<select name="city" multiple size="4"> <!-- multiple多选 -->
<option value="">请选择城市</option>
<optgroup label="华北地区">
<option value="beijing" selected>北京</option>
<option value="tianjin">天津</option>
</optgroup>
<optgroup label="华东地区">
<option value="shanghai">上海</option>
</optgroup>
</select>

<!-- 数据列表 -->
<input list="browsers" name="browser">
<datalist id="browsers">
<option value="Chrome">
<option value="Firefox">
<option value="Safari">
</datalist>

特殊输入类型

<!-- 数字 -->
<input
type="number"
name="age"
min="0"
max="120"
step="1"
>

<!-- 范围滑块 -->
<input
type="range"
name="volume"
min="0"
max="100"
step="10"
list="volumemarks"
>
<datalist id="volumemarks">
<option value="0" label="静音"></option>
<option value="50" label="50%"></option>
<option value="100" label="最大"></option>
</datalist>

<!-- 日期时间 -->
<input type="date" name="birthday">
<input type="time" name="meeting-time">
<input type="datetime-local" name="appointment">
<input type="month" name="month">
<input type="week" name="week">

<!-- 颜色选择 -->
<input type="color" name="favcolor" value="#ff0000">

<!-- 文件上传 -->
<input
type="file"
name="avatar"
accept="image/*" <!-- 接受图片 -->
multiple <!-- 多文件 -->
capture="camera" <!-- 移动端直接拍照 -->
>

<!-- 隐藏字段 -->
<input type="hidden" name="user_id" value="123">

6.3 标签和分组

隐式关联

<!-- 推荐:简单结构 -->
<label>
用户名:
<input type="text" name="username">
</label>

<label>
<input type="checkbox" name="agree"> 我同意条款
</label>

显式关联

<!-- 推荐:复杂布局 -->
<label for="email">邮箱地址:</label>
<input type="email" id="email" name="email">

<label for="subscribe">
<input type="checkbox" id="subscribe" name="subscribe">
订阅新闻
</label>

表单分组

<fieldset>
<legend>个人信息</legend> <!-- 分组标题 -->

<div>
<label for="name">姓名:</label>
<input type="text" id="name" name="name">
</div>

<div>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email">
</div>
</fieldset>

<fieldset disabled> <!-- 禁用整个分组 -->
<legend>附加信息(可选)</legend>
<!-- ... -->
</fieldset>

6.4 按钮

<!-- 提交按钮 -->
<button type="submit">提交表单</button>
<input type="submit" value="提交">

<!-- 重置按钮 -->
<button type="reset">重置</button>
<input type="reset" value="重置">

<!-- 普通按钮 -->
<button type="button" onclick="alert('点击!')">点击我</button>
<input type="button" value="普通按钮">

<!-- 图片按钮 -->
<input type="image" src="submit.png" alt="提交">

<!-- 带图标的按钮 -->
<button type="submit">
<svg><!-- 图标 --></svg>
提交
</button>

6.5 表单验证

<form id="myForm">
<!-- 必填字段 -->
<input type="text" required>

<!-- 长度限制 -->
<input type="text" minlength="6" maxlength="20">

<!-- 数字范围 -->
<input type="number" min="0" max="100" step="1">

<!-- 模式匹配 -->
<input type="text" pattern="[A-Za-z]{3,20}">

<!-- 自定义验证 -->
<input type="email" oninvalid="setCustomValidity('请输入有效邮箱')">

<!-- 验证消息样式 -->
<style>
input:valid { border-color: green; }
input:invalid { border-color: red; }
input:focus:invalid { box-shadow: 0 0 5px red; }
</style>
</form>

<!-- JavaScript验证 -->
<script>
document.getElementById('myForm').addEventListener('submit', function(e) {
if (!this.checkValidity()) {
e.preventDefault();
// 显示自定义错误信息
}
});
</script>

6.6 表单状态和反馈

/* 焦点状态 */
input:focus {
outline: 2px solid blue;
box-shadow: 0 0 5px rgba(0, 0, 255, 0.5);
}

/* 有效/无效状态 */
input:valid { background-color: #e8f5e8; }
input:invalid { background-color: #ffe6e6; }

/* 禁用状态 */
input:disabled {
opacity: 0.5;
cursor: not-allowed;
}

/* 只读状态 */
input:read-only {
background-color: #f5f5f5;
border-color: #ddd;
}

/* 占位符样式 */
input::placeholder {
color: #999;
font-style: italic;
}

第七章:表格

7.1 基础表格结构

<table border="1" cellspacing="0" cellpadding="8">
<caption>学生成绩表</caption> <!-- 表格标题 -->

<!-- 表头 -->
<thead>
<tr>
<th scope="col">学号</th> <!-- 列标题 -->
<th scope="col">姓名</th>
<th scope="col">成绩</th>
</tr>
</thead>

<!-- 表格主体 -->
<tbody>
<tr>
<th scope="row">001</th> <!-- 行标题 -->
<td>张三</td>
<td>95</td>
</tr>
<tr>
<th scope="row">002</th>
<td>李四</td>
<td>88</td>
</tr>
</tbody>

<!-- 表尾(可选) -->
<tfoot>
<tr>
<td colspan="2">平均分</td> <!-- 合并单元格 -->
<td>91.5</td>
</tr>
</tfoot>
</table>

7.2 复杂表格示例

<table>
<colgroup>
<col span="2" style="background-color: #f0f0f0">
<col style="background-color: #e0e0ff">
</colgroup>

<thead>
<tr>
<th rowspan="2">部门</th> <!-- 垂直合并 -->
<th colspan="3">2024年季度</th> <!-- 水平合并 -->
</tr>
<tr>
<th>Q1</th>
<th>Q2</th>
<th>Q3</th>
</tr>
</thead>

<tbody>
<tr>
<th scope="rowgroup" rowspan="2">技术部</th>
<td>100万</td>
<td>120万</td>
<td>150万</td>
</tr>
<tr>
<td>同比+20%</td>
<td>同比+25%</td>
<td>同比+30%</td>
</tr>
</tbody>
</table>

7.3 表格属性详解

<table 
border="1" <!-- 边框 -->
cellspacing="0" <!-- 单元格间距 -->
cellpadding="10" <!-- 单元格内边距 -->
width="100%" <!-- 宽度 -->
summary="销售数据表" <!-- 摘要(无障碍) -->
role="grid" <!-- ARIA角色 -->
>
<!-- 列分组 -->
<colgroup>
<col width="20%">
<col width="30%">
<col width="50%">
</colgroup>

<!-- 行分组 -->
<thead>...</thead>
<tbody>...</tbody>
<tfoot>...</tfoot>
</table>

7.4 表格最佳实践

  1. 语义化标记:使用thead、tbody、tfoot
  2. 添加scope属性:帮助屏幕阅读器
  3. 使用caption:描述表格内容
  4. 响应式设计:小屏幕时可滚动
  5. 适当合并单元格:但不要过度使用

第八章:元数据与SEO

8.1 基础元标签

<head>
<!-- 字符编码(必须放在最前面) -->
<meta charset="UTF-8">

<!-- 视口设置(响应式必备) -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<!-- 页面描述 -->
<meta name="description" content="这是一个关于HTML学习的专业网站">

<!-- 关键词(现代搜索引擎已不太重视) -->
<meta name="keywords" content="HTML,CSS,JavaScript,前端开发">

<!-- 作者 -->
<meta name="author" content="你的名字">

<!-- 版权 -->
<meta name="copyright" content="© 2024 公司名称">

<!-- 页面刷新/跳转 -->
<meta http-equiv="refresh" content="5; url=https://example.com">

<!-- 禁止搜索引擎索引 -->
<meta name="robots" content="noindex, nofollow">
</head>

8.2 Open Graph协议(社交媒体分享)

<!-- Facebook、LinkedIn等 -->
<meta property="og:title" content="页面标题">
<meta property="og:description" content="页面描述">
<meta property="og:image" content="https://example.com/image.jpg">
<meta property="og:url" content="https://example.com/page.html">
<meta property="og:type" content="website">
<meta property="og:site_name" content="网站名称">
<meta property="og:locale" content="zh_CN">

<!-- 视频相关 -->
<meta property="og:video" content="https://example.com/video.mp4">
<meta property="og:video:type" content="video/mp4">
<meta property="og:video:width" content="1280">
<meta property="og:video:height" content="720">

8.3 Twitter Cards

<!-- Twitter专用 -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@username">
<meta name="twitter:creator" content="@author">
<meta name="twitter:title" content="页面标题">
<meta name="twitter:description" content="页面描述">
<meta name="twitter:image" content="https://example.com/image.jpg">
<meta name="twitter:image:alt" content="图片描述">

8.4 其他重要元数据

<!-- 主题颜色(PWA) -->
<meta name="theme-color" content="#4285f4">

<!-- 移动端添加到主屏幕 -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="App名称">
<link rel="apple-touch-icon" href="/icon-180.png">

<!-- 微软相关 -->
<meta name="application-name" content="应用名称">
<meta name="msapplication-TileColor" content="#2b5797">
<meta name="msapplication-config" content="/browserconfig.xml">

第九章:最佳实践与性能优化

9.1 语义化最佳实践

  1. 使用正确的HTML5语义标签
  2. 为图像添加有意义的alt文本
  3. 使用正确的标题层级(h1-h6)
  4. 为链接提供明确的描述文本
  5. 使用label关联表单元素

9.2 性能优化技巧

<!-- 延迟加载图片 -->
<img src="image.jpg" loading="lazy" alt="...">

<!-- 预加载重要资源 -->
<link rel="preload" href="critical.css" as="style">
<link rel="preload" href="hero.jpg" as="image">

<!-- 预连接关键域名 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">

<!-- 使用现代图片格式 -->
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="...">
</picture>

<!-- 脚本优化 -->
<script defer src="main.js"></script>
<script async src="analytics.js"></script>

9.3 可访问性(A11Y)

<!-- 语义化标签 -->
<nav aria-label="主导航">
<ul>
<li><a href="/" aria-current="page">首页</a></li>
</ul>
</nav>

<!-- 表单可访问性 -->
<label for="search">搜索</label>
<input type="search" id="search" aria-describedby="search-help">
<p id="search-help">输入关键词进行搜索</p>

<!-- 图片描述 -->
<img src="chart.png" alt="2024年销售趋势图:1月100万,2月120万">

<!-- 隐藏内容(对屏幕阅读器可见) -->
<div class="visually-hidden">此内容仅对屏幕阅读器可见</div>
<style>
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
</style>

9.4 验证工具

  1. W3C验证器https://validator.w3.org/
  2. Lighthouse:Chrome开发者工具
  3. axe DevTools:可访问性检查
  4. HTMLHint:代码质量检查

第十章:实用代码片段

10.1 常用HTML模板

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="页面描述">
<meta name="keywords" content="关键词1,关键词2">
<meta name="author" content="作者">

<!-- Open Graph -->
<meta property="og:title" content="页面标题">
<meta property="og:description" content="页面描述">
<meta property="og:image" content="图片URL">
<meta property="og:url" content="页面URL">
<meta property="og:type" content="website">

<!-- 网站图标 -->
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">

<!-- CSS -->
<link rel="stylesheet" href="styles.css">

<!-- 页面标题 -->
<title>页面标题</title>
</head>
<body>
<!-- 跳过导航链接(无障碍) -->
<a href="#main" class="skip-link">跳过导航</a>

<!-- 页眉 -->
<header>
<nav aria-label="主导航">
<!-- 导航内容 -->
</nav>
</header>

<!-- 主要内容 -->
<main id="main">
<!-- 页面内容 -->
</main>

<!-- 页脚 -->
<footer>
<!-- 页脚内容 -->
</footer>

<!-- JavaScript -->
<script src="script.js" defer></script>
</body>
</html>

10.2 常见布局模式

<!-- 两栏布局 -->
<div class="container">
<aside class="sidebar">
<!-- 侧边栏内容 -->
</aside>
<main class="content">
<!-- 主要内容 -->
</main>
</div>

<!-- 卡片布局 -->
<div class="card-grid">
<article class="card">
<img src="image.jpg" alt="卡片图片">
<h3>卡片标题</h3>
<p>卡片描述内容</p>
<a href="#">了解更多</a>
</article>
<!-- 更多卡片 -->
</div>

<!-- 响应式导航 -->
<nav class="navbar">
<a href="/" class="logo">网站Logo</a>
<button class="menu-toggle" aria-label="菜单"></button>
<ul class="nav-menu">
<li><a href="/">首页</a></li>
<li><a href="/about">关于</a></li>
<li><a href="/contact">联系</a></li>
</ul>
</nav>

总结

关键要点回顾

  1. 语义化:使用正确的标签表达正确的含义
  2. 可访问性:确保所有人都能使用你的网站
  3. SEO优化:合理使用元标签和结构化数据
  4. 性能:优化图片、脚本和样式表
  5. 响应式:适应各种设备和屏幕尺寸