HTML
一、HTML 基础
1. HTML 定义、基本结构及 DOCTYPE
问题:HTML 的定义和基本结构是什么?<!DOCTYPE> 的作用及 HTML5 意义?HTML 文档结构的基本组成部分有哪些?
答案: HTML 定义:超文本标记语言,描述网页结构和内容。
基本结构:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>页面标题</title>
</head>
<body>
<!-- 页面内容 -->
</body>
</html>
DOCTYPE 作用:声明文档类型,避免怪异模式,确保标准渲染。
HTML5 DOCTYPE 意义:<!DOCTYPE html> 简洁,向后兼容,触发标准模式。
HTML 文档组成部分:文档类型声明、根元素、头部、主体。
补充说明:保持语义化,指定字符编码,使用HTML5标准。
二、HTML5 新特性
2. HTML5 主要新特性及兼容性处理
答案: 核心新特性:
- 语义化标签:
<header>,<nav>,<article>,<section>,<aside>,<footer> - 多媒体:
<audio>,<video> - 图形绘制:
<canvas>, SVG - 表单增强:新输入类型如
email,date,range - API扩展:LocalStorage, Geolocation, Web Workers
- 离线应用:Application Cache, Service Worker
兼容处理:
- 特性检测:使用 Modernizr
- Polyfill:引入 polyfill 库
- 渐进增强:基础功能保证所有浏览器可用
补充说明:使用 @supports 进行CSS特性检测,提供降级方案。
三、语义化标签
3. HTML 语义化理解与应用
答案: 语义化定义:使用恰当的HTML标签表达内容和结构,而非仅用于样式。
核心价值:SEO优化、可访问性、代码维护、设备适配。
常用语义化标签:
<header>:页面或区块页眉<nav>:导航链接集合<main>:页面主要内容<article>:独立完整的内容块<section>:文档中的分节<aside>:与主内容相关的侧边内容<footer>:页面或区块页脚<figure>:独立内容单元(如图表)<figcaption>:<figure>的标题<time>:时间或日期
代码示例:
<article>
<header>
<h1>文章标题</h1>
<p>作者:张三 | <time datetime="2023-10-01">2023年10月1日</time></p>
</header>
<section>
<h2>第一章</h2>
<p>正文内容...</p>
</section>
<footer>版权声明</footer>
</article>
补充说明:避免滥用 <div>,<section> 必须有标题,合理嵌套。
四、元素分类
4. 行内元素、块级元素及空元素
答案: 元素分类:
- 块级元素:独占一行,可设置宽高。如
<div>,<h1>-<h6>,<p>,<ul>,<section> - 行内元素:不独占一行,宽高由内容决定。如
<span>,<a>,<strong>,<img> - 行内块元素:兼具两者特点,如
<img>,<input>,<button> - 空元素:没有闭合标签,如
<br>,<hr>,<img>,<input>
区别:
- 布局:块级元素独占一行,行内元素水平排列
- 尺寸:块级元素可设置宽高,行内元素垂直方向padding/margin不影响布局
- 包含:块级元素可包含其他元素,行内元素通常只包含文本或其他行内元素
补充说明:使用 display 属性可改变元素类型。
五、HTML 全局属性
5. HTML 全局属性详解
答案: 全局属性(可用于所有HTML元素):
id:唯一标识符class:样式类名style:内联样式title:鼠标悬停提示文本lang:语言标识contenteditable:内容可编辑hidden:隐藏元素draggable:是否可拖拽data-*:自定义数据属性
重要属性:
data-*:存储自定义数据,通过JavaScript的dataset对象访问contenteditable:使元素内容可编辑draggable:支持拖拽操作
补充说明:合理使用 id 和 class,避免命名冲突;使用 hidden 属性而非 display: none。
六、元数据与资源加载
6. src 和 href 区别及资源优化
答案:
src vs href:
src(Source):引入并执行/显示资源,会阻塞文档解析。用于<script>,<img>,<iframe>href(Hypertext Reference):建立链接关系,不阻塞文档解析。用于<a>,<link>,<base>
多域名存储资源优化原理:
- 突破浏览器并发限制:不同域名可同时加载更多资源
- CDN加速:不同域名使用不同CDN节点
- Cookie隔离:静态资源域名不携带Cookie,减少请求头大小
- 缓存策略分离:静态资源使用长期缓存
实现方式:
<!-- 主域名:HTML -->
<!-- CDN域名1:CSS、字体 -->
<link href="https://cdn1.example.com/styles.css" rel="stylesheet">
<!-- CDN域名2:JS -->
<script src="https://cdn2.example.com/app.js" defer></script>
<!-- CDN域名3:图片 -->
<img src="https://cdn3.example.com/logo.png" alt="Logo">
补充说明:域名数量不宜过多(2-4个),使用 preconnect 预先建立连接。
七、表单元素
7. HTML 表单元素类型及 HTML5 新增控件
答案: 传统表单元素:
<input type="text">:单行文本<input type="password">:密码<input type="email">:邮箱<input type="number">:数字<input type="date">:日期<input type="checkbox">:复选框<input type="radio">:单选框<textarea>:多行文本<select>:下拉选择<button>:按钮
HTML5 新增控件:
<input type="color">:颜色选择<input type="range">:范围滑块<input type="search">:搜索框<input type="url">:URL地址<datalist>:预定义选项列表<output>:计算结果输出<progress>:进度条<meter>:度量器
表单属性:
required:必填字段placeholder:占位提示文本autofocus:自动聚焦autocomplete:自动完成pattern:正则验证min/max:最小/最大值multiple:多选
补充说明:使用 <fieldset> 和 <legend> 分组表单元素,为每个控件添加 <label>。
八、单选框分组
8. 单选框分组实现
答案: 分组条件:
- 相同的
name属性值:同一分组内所有 radio 必须具有相同的name - 不同的
value属性值:每个 radio 应有不同的value,用于标识选项 - 关联的
<label>:每个 radio 应有关联标签,提高可访问性
示例:
<label><input type="radio" name="gender" value="male" checked>男</label>
<label><input type="radio" name="gender" value="female">女</label>
<label><input type="radio" name="gender" value="other">其他</label>
原理:浏览器通过 name 属性识别是否属于同一分组,同一分组内只能选中一个。
补充说明:使用 checked 设置默认选中项,为每个 radio 提供明确 value。
九、图片属性
9. img 标签的 alt 与 title 属性区别
答案:
alt 与 title 对比:
alt(替代文本):图片无法加载时显示,屏幕阅读器朗读。必需 用于内容性图片。title(提示文本):鼠标悬停时显示额外信息。可选,用于提供补充说明。
使用场景:
alt:准确描述图片内容或功能,装饰性图片用alt=""title:解释复杂图标含义,提供补充信息,不应替代alt
示例:
<!-- 内容性图片 -->
<img src="chart.png"
alt="2023年销售额增长趋势图"
title="点击查看详细数据">
<!-- 装饰性图片 -->
<img src="border.png" alt="">
<!-- 功能图片 -->
<button>
<img src="print.png" alt="打印此页">
</button>
strong 与 em 语义差异:
<strong>:表示内容本身的重要性(默认粗体)<em>:表示阅读时的语气强调(默认斜体)
语义区别:
<strong>:"这段文字很重要"<em>:"这个词语需要重读"
示例:
<p><strong>警告:</strong>操作前请<em>务必</em>备份数据!</p>
补充说明:优先使用语义化标签,装饰性样式用CSS。
十、SEO 优化
10. HTML SEO 优化注意事项
答案: 核心优化原则:
1. 语义化结构:
- 使用HTML5语义化标签
- 合理使用标题层级(h1-h6)
- 每个页面有且仅有一个
<h1>
2. 元数据优化:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>主要关键词 - 品牌名</title>
<meta name="description" content="50-160字符页面描述,包含关键词">
<link rel="canonical" href="https://example.com/page">
</head>
3. 内容可访问性:
- 图片:为内容性图片添加描述性
alt属性 - 链接:使用描述性链接文本
- 表单:为每个控件添加
<label> - 语言:指定页面语言
<html lang="zh-CN">
4. 性能优化:
- 图片懒加载:
<img loading="lazy"> - 关键CSS内联
- 非关键CSS异步加载
5. 移动端适配:
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#4285f4">
6. 链接结构优化:
- 使用语义化URL:
/products/shoes/nike-air-max - 避免过深目录层级
- 使用面包屑导航
7. 避免常见问题:
- 重复内容:使用
rel="canonical" - 死链接:定期检查修复
- 空白页面:确保JS禁用时仍有内容
补充说明:定期使用Google Search Console监控,使用Lighthouse进行性能审计。
十一、响应式设计
11. HTML 层面的响应式实现方法
答案: 核心原理:流体网格、弹性图片、媒体查询。
HTML 实现方法:
1. 视口设置:
<meta name="viewport" content="width=device-width, initial-scale=1">
2. 响应式图片:
<picture>
<source media="(min-width: 1200px)" srcset="large.jpg">
<source media="(min-width: 768px)" srcset="medium.jpg">
<img src="small.jpg" alt="响应式图片">
</picture>
3. 响应式表格:
<div class="table-responsive">
<table>
<tr>
<td data-label="产品">iPhone 15</td>
<td data-label="价格">¥7999</td>
</tr>
</table>
</div>
4. 响应式视频:
<div class="video-container">
<iframe src="https://www.youtube.com/embed/VIDEO_ID"></iframe>
</div>
<style>
.video-container {
position: relative;
padding-bottom: 56.25%; /* 16:9 比例 */
}
.video-container iframe {
position: absolute;
width: 100%; height: 100%;
}
</style>
5. 响应式导航:
<nav class="navbar">
<button class="menu-toggle">☰</button>
<ul class="nav-menu">
<li><a href="/">首页</a></li>
<!-- 导航项 -->
</ul>
</nav>
6. 响应式字体:
h1 {
font-size: clamp(1.5rem, 5vw, 3rem);
}
响应式设计原理:
- 移动优先:先设计移动端,再增强大屏幕体验
- 渐进增强:基础功能所有设备可用
- 灵活布局:使用Flexbox、Grid等现代CSS
- 性能考虑:移动端加载小资源
补充说明:使用CSS媒体查询,测试多种设备,考虑横屏竖屏。
十二、设计理念
12. 渐进增强与优雅降级
答案: 渐进增强:
- 起点:基础体验
- 理念:确保所有用户获得基本可用体验
- 实现:先实现基础HTML,再添加CSS、JS增强
- 兼容策略:向上兼容
优雅降级:
- 起点:完整体验
- 理念:确保现代用户获得最佳体验
- 实现:先实现完整功能,再为旧浏览器提供降级
- 兼容策略:向下兼容
渐进增强示例:
<!-- 基础HTML -->
<nav id="main-nav">...</nav>
<!-- 添加CSS -->
<style>#main-nav li { display: inline-block; }</style>
<!-- 添加JS增强 -->
<script>document.querySelector('#main-nav').classList.add('enhanced');</script>
优雅降级示例:
<video controls>
<source src="video.mp4" type="video/mp4">
<!-- Flash降级 -->
<object type="application/x-shockwave-flash" data="player.swf">
<!-- 图片降级 -->
<img src="poster.jpg" alt="视频预览">
<p><a href="video.mp4">下载视频</a></p>
</object>
</video>
现代开发实践:
- 混合策略:核心功能渐进增强,非核心功能优雅降级
- 工具支持:PostCSS、Babel、Polyfill.io
- 性能优化:核心CSS内联,非核心异步加载
选择建议:
- 渐进增强:公众网站、可访问性要求高、内容型平台
- 优雅降级:企业内部系统、技术演示、目标用户主要为现代浏览器
补充说明:两种策略可结合,使用特性检测而非浏览器检测。
十三、图片格式
13. 图片格式选择策略
答案: 主流格式对比:
- JPEG:有损压缩,文件小,色彩丰富。适用照片、渐变图像。
- PNG:无损压缩,支持透明通道。适用徽标、图标、透明图像。
- GIF:支持动画,256色限制。适用简单动画、小图标。
- WebP:现代格式,最佳压缩比。适用所有场景(需考虑兼容性)。
- SVG:矢量图形,无限缩放。适用图标、徽标、简单图形。
- AVIF:新一代压缩技术,超高压缩比。适用高要求性能场景。
选择指南:
- 照片:JPEG (85%质量) 或 WebP
- 透明图像:PNG-24(真彩色+完全透明)或 PNG-8(256色+索引透明)
- 动画:GIF(兼容性好)或 WebP/APNG(更优)
- 矢量图形:SVG(可缩放,CSS可控制)
优化策略:
-
压缩优化:
- JPEG:85%质量,渐进式加载
- PNG:使用PNGQuant、TinyPNG压缩
- SVG:使用SVGO压缩
-
响应式图片:
<img src="photo-800.jpg"
srcset="photo-400.jpg 400w, photo-800.jpg 800w"
sizes="(max-width: 480px) 400px, 800px"
alt="响应式照片">
- 懒加载:
<img src="placeholder.jpg" data-src="real.jpg" loading="lazy" alt="图片">
导出设置建议:
- 网页照片:JPEG,85-90%质量,渐进式
- 产品图片:WebP + JPEG回退
- 网站徽标:SVG(首选)或 PNG-24
- UI图标:SVG(矢量化)
- 背景图片:JPEG (75-85%) 或考虑CSS渐变替代
补充说明:使用图片CDN自动优化,监控图片性能,考虑使用CSS渐变替代简单图片。
十四、微格式
14. 微格式(Microformats)简介
答案: 微格式定义:基于HTML的标准,用于标记特定的信息类型,使机器能更好地理解内容。
核心价值:语义化增强、数据提取、互操作性、SEO优化。
常用微格式:
- h-card(联系信息):
<div class="h-card">
<h1 class="p-name">张三</h1>
<p class="p-job-title">前端工程师</p>
<a class="u-email" href="mailto:zhangsan@example.com">邮箱</a>
</div>
- h-event(活动信息):
<div class="h-event">
<h1 class="p-name">技术分享会</h1>
<time class="dt-start" datetime="2023-10-15T14:00:00">2023年10月15日 14:00</time>
</div>
- h-review(评价/评论):
<div class="h-review">
<div class="p-item h-card">
<h3 class="p-name">《JavaScript高级程序设计》</h3>
</div>
<p class="p-rating">
<span class="p-value">4.5</span>/<span class="p-best">5</span>
</p>
</div>
- h-recipe(食谱):
<div class="h-recipe">
<h1 class="p-name">番茄炒蛋</h1>
<div class="p-ingredient">
<span class="p-ingredient">番茄</span> <span class="p-quantity">2个</span>
</div>
</div>
与Schema.org对比:
- 微格式:简单标记,与现有HTML兼容
- Schema.org:更丰富的词汇表,主流搜索引擎支持
- JSON-LD:易于维护,不污染HTML,搜索引擎推荐
推荐使用:
- 微格式:简单标记,SEO优化
- Schema.org:更丰富的语义化标记
- JSON-LD:现代SEO最佳实践
补充说明:微格式适合内容型网站,使用工具验证标记,结合多种语义化技术。
十五、移动端适配
15. 移动端适配常用方法
答案: 核心适配方法:
1. 响应式设计:
<meta name="viewport" content="width=device-width, initial-scale=1">
2. 流体网格:
.container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
}
3. 弹性图片:
img, video {
max-width: 100%;
height: auto;
}
4. 移动优先:
/* 移动端基础样式 */
body { font-size: 14px; }
/* 平板增强 */
@media (min-width: 768px) {
body { font-size: 16px; }
}
/* 桌面增强 */
@media (min-width: 1024px) {
body { font-size: 18px; }
}
5. 触摸友好设计:
button, a {
min-height: 44px;
min-width: 44px;
padding: 12px;
}
6. 视口单位:
.header {
height: 10vh; /* 视口高度的10% */
}
h1 {
font-size: clamp(1.5rem, 5vw, 3rem);
}
7. 高DPI适配:
.logo {
background-image: url('logo.png');
}
@media (-webkit-min-device-pixel-ratio: 2) {
.logo {
background-image: url('logo@2x.png');
}
}
8. 移动端表单优化:
<input type="tel" placeholder="手机号">
<input type="email" placeholder="邮箱">
<input type="number" inputmode="numeric">
9. 性能优化:
<img loading="lazy" alt="图片">
<link rel="stylesheet" href="mobile.css" media="(max-width: 767px)">
10. 移动端导航:
- 汉堡菜单
- 底部导航栏
- 手势导航
测试要点:
- 真实设备测试
- 网络模拟(3G、4G、弱网)
- 触摸目标大小(≥44×44px)
- 字体可读性(≥16px)
- 页面加载速度(<3秒)
补充说明:使用 Flexbox 和 Grid 简化布局,考虑横屏竖屏,关注移动端特有交互。
十六、无障碍访问
16. 无障碍(A11Y)实现方法
答案: 核心原则:可感知、可操作、可理解、健壮性。
实现方法:
1. 语义化结构:
<header>
<nav aria-label="主导航">...</nav>
</header>
<main>...</main>
<footer>...</footer>
2. ARIA:
<div role="navigation" aria-label="分页">
<button aria-pressed="false">按钮</button>
<div aria-live="polite">动态内容</div>
</div>
3. 键盘导航:
<button tabindex="0">可聚焦按钮</button>
<a href="#main-content" class="skip-link">跳过导航</a>
<main id="main-content">...</main>
4. 表单无障碍:
<label for="email">邮箱:</label>
<input type="email" id="email"
aria-describedby="email-help email-error"
aria-invalid="false">
<p id="email-help">请输入有效邮箱</p>
<p id="email-error" role="alert" hidden>错误信息</p>
5. 图片和多媒体:
<img src="chart.png" alt="2023年销售额增长趋势图">
<video controls>
<track src="captions.vtt" kind="captions" srclang="zh">
</video>
6. 颜色和对比度:
- 文本对比度至少4.5:1,大文本至少3:1
- 避免仅用颜色传达信息
7. 动态内容无障碍:
<div id="notification" aria-live="polite">
<!-- 动态内容会朗读 -->
</div>
8. 辅助工具优化:
<span class="sr-only">仅屏幕阅读器可见</span>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
测试和验证:
- 自动化工具:axe-core, Lighthouse, WAVE
- 手动测试:键盘操作、屏幕阅读器测试
- 用户测试:与残障人士合作
补充说明:遵循 WCAG 2.1 AA 标准,创建无障碍声明,定期审计。
十七、常见问题
17. HTML 常见问题解决方案
问题1:移动端视口缩放异常
解决方案:
<meta name="viewport" content="width=device-width, initial-scale=1">
问题2:表单验证与交互优化
解决方案:
<!-- HTML5原生验证 -->
<input type="email" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">
<!-- 防抖实现 -->
<script>
const debounce = (func, delay) => {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => func(...args), delay);
};
};
</script>
<!-- 无障碍错误提示 -->
<p id="error" role="alert" aria-live="assertive" hidden>错误信息</p>
问题3:SPA SEO 优化方案
解决方案:
- 服务端渲染:使用 Next.js, Nuxt.js 等框架
- 动态元数据:
<title>动态页面标题</title>
<meta name="description" content="动态描述">
<link rel="canonical" href="https://example.com/page">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "文章标题"
}
</script>
- 预渲染技术:使用 Prerender.io, Rendertron
- 路由配置:更新标题和元数据
补充说明:测试不同浏览器和设备,持续优化。