📚 前端HTML高频考点:从入门到"头秃"指南

81 阅读8分钟

大家好!我是你们的老朋友FogLetter,今天给大家带来一篇超全面的HTML考点解析,不管你是准备面试还是复习基础,这篇文章都能让你收获满满!建议先收藏再阅读哦~✨

🔍 一、src和href的区别:资源加载的双胞胎

很多同学经常混淆srchref,它们就像一对双胞胎,看起来相似但性格迥异。

src(source的缩写)

  • 用于替换当前元素内容
  • 加载的资源会嵌入到文档中
  • 常见使用场景:<script src="..."><img src="...">
  • 当浏览器遇到src属性时,会暂停其他资源的加载,先处理这个资源

href(Hypertext Reference的缩写)

  • 用于建立关联,不会替换当前内容
  • 建立当前文档与引用资源之间的链接
  • 常见使用场景:<a href="..."><link href="...">
  • 浏览器遇到href属性时,会并行加载资源,不会阻塞页面渲染
<!-- 使用src -->
<script src="app.js"></script>  <!-- 会阻塞渲染 -->
<img src="logo.png" alt="Logo">

<!-- 使用href -->
<link href="style.css" rel="stylesheet">  <!-- 不会阻塞渲染 -->
<a href="about.html">关于我们</a>

面试小技巧:当面试官问及两者区别时,可以形象地说:"src像是直接搬砖到工地(嵌入),href像是给工地指路(关联)"

🏷️ 二、HTML语义化:给代码穿上合适的"衣服"

语义化是HTML5最重要的特性之一,它让我们的代码不仅机器能读懂,人类也能轻松理解。

为什么需要语义化?

  1. SEO优化:搜索引擎更喜欢语义化的标签
  2. 可访问性:屏幕阅读器能更好地解析页面
  3. 代码可读性:一看标签就知道这部分是干什么的
  4. 维护性:团队协作时更容易理解代码结构

常用语义化标签全家福:

标签说明类比
<header>文档或节的页眉书的封面
<nav>导航链接书的目录
<main>文档主要内容书的正文
<article>独立的自包含内容杂志中的一篇文章
<section>文档中的节书的章节
<aside>侧边栏内容书的边注
<footer>文档或节的页脚书的封底
<figure> + <figcaption>图像及其标题带说明的插图
<body>
  <header>
    <h1>我的技术博客</h1>
    <nav>
      <ul>
        <li><a href="/">首页</a></li>
        <li><a href="/about">关于</a></li>
      </ul>
    </nav>
  </header>
  
  <main>
    <article>
      <h2>HTML语义化的重要性</h2>
      <p>内容...</p>
    </article>
    
    <aside>
      <h3>相关文章</h3>
      <ul>...</ul>
    </aside>
  </main>
  
  <footer>
    <p>© 2023 我的博客</p>
  </footer>
</body>

开发小故事:记得我刚入行时,整个页面全用<div>,结果几天后自己都看不懂代码了...自从用了语义化标签,妈妈再也不用担心我的代码可读性了!

📜 三、DOCTYPE:HTML文档的"身份证"

DOCTYPE声明告诉浏览器该用什么规则来解析文档,没有它或写错了,浏览器可能会进入"怪异模式"(Quirks Mode)。

现代开发只需要记住

<!DOCTYPE html>

这个简单的声明就能让浏览器以标准模式(Standards Mode)渲染页面,使用HTML5规范。

历史趣闻:早期的HTML4.01有三种DOCTYPE声明(Strict、Transitional、Frameset),XHTML1.0也有三种,简直能把人逼疯。HTML5简化了这一设计,真是前端开发者的福音!

⏳ 四、script标签的defer和async:加载策略的"左右护法"

这两个属性都能实现脚本异步加载,但执行时机大不相同:

特性deferasync
执行顺序按文档顺序执行谁先加载完谁执行
执行时机DOM解析完成后,DOMContentLoaded事件前加载完成后立即执行
适用场景依赖DOM的脚本独立脚本(如统计代码)
<!-- 常规脚本 - 阻塞渲染 -->
<script src="script.js"></script>

<!-- defer - 异步加载,按顺序执行 -->
<script defer src="script1.js"></script>
<script defer src="script2.js"></script>

<!-- async - 异步加载,无序执行 -->
<script async src="analytics.js"></script>

性能优化技巧

  • 现代框架(如Vue/React)打包后的脚本会自动添加defer属性
  • 关键脚本可以内联,非关键脚本使用defer或async
  • 多个有依赖关系的脚本使用defer,独立脚本使用async

🏷️ 五、meta标签:网页的"隐形管家"

meta标签虽然不显示在页面上,但却掌控着网页的许多重要信息:

常用meta标签大全

<!-- 基础必备 -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">

<!-- SEO相关 -->
<meta name="description" content="页面描述">
<meta name="keywords" content="关键词1,关键词2">
<meta name="author" content="作者">

<!-- 社交媒体 -->
<meta property="og:title" content="分享标题">
<meta property="og:description" content="分享描述">
<meta property="og:image" content="分享图片URL">

<!-- 禁止某些行为 -->
<meta name="robots" content="noindex,nofollow">  <!-- 禁止搜索引擎索引 -->
<meta name="format-detection" content="telephone=no">  <!-- 禁用电话号码识别 -->

移动端适配黄金代码

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

实用小技巧:使用<meta http-equiv="refresh" content="5;url=https://example.com">可以实现页面自动跳转,但要注意用户体验,最好先提示用户。

🆕 六、HTML5新特性:前端开发的"瑞士军刀"

HTML5带来了许多革命性的新特性,让前端开发更加强大:

1. 语义化标签(前文已详述)

2. 多媒体支持

<!-- 音频 -->
<audio controls>
  <source src="audio.mp3" type="audio/mpeg">
  您的浏览器不支持音频元素
</audio>

<!-- 视频 -->
<video width="320" height="240" controls>
  <source src="movie.mp4" type="video/mp4">
  您的浏览器不支持视频标签
</video>

3. 表单增强

<input type="email" required placeholder="请输入邮箱">
<input type="date">  <!-- 日期选择器 -->
<input type="color">  <!-- 颜色选择器 -->
<input type="range" min="1" max="100">  <!-- 滑块 -->

4. Canvas绘图

<canvas id="myCanvas" width="200" height="100"></canvas>
<script>
  const canvas = document.getElementById('myCanvas');
  const ctx = canvas.getContext('2d');
  ctx.fillStyle = 'red';
  ctx.fillRect(10, 10, 50, 50);
</script>

5. Web存储

// localStorage - 长期存储
localStorage.setItem('username', 'John');
const user = localStorage.getItem('username');

// sessionStorage - 会话级存储
sessionStorage.setItem('token', 'abc123');

6. 地理定位

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(
    position => {
      console.log(`纬度: ${position.coords.latitude}`);
      console.log(`经度: ${position.coords.longitude}`);
    },
    error => {
      console.error(`错误: ${error.message}`);
    }
  );
}

冷知识:HTML5不是指具体的某个版本,而是一系列相关技术的集合,包括新的HTML标记、CSS3和JavaScript API。

🖼️ 七、img的srcset:响应式图片的"智能管家"

srcset属性让浏览器能根据设备条件选择最合适的图片:

<img src="small.jpg" 
     srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w"
     sizes="(max-width: 600px) 500px, (max-width: 1200px) 1000px, 1500px"
     alt="响应式图片示例">
  • srcset:定义图片资源及其宽度描述符(w)或像素密度描述符(x)
  • sizes:定义不同视口宽度下图片的显示尺寸

性能优化实例

<img src="avatar-1x.png"
     srcset="avatar-2x.png 2x, avatar-3x.png 3x"
     alt="用户头像">

这样高DPI设备会自动加载更高清的图片,普通设备加载普通图片,既保证显示效果又节省带宽。

📦 八、元素分类:HTML的"社交圈"

HTML元素可以按显示方式分为几大类:

1. 行内元素(Inline Elements)

  • 特点:不独占一行,宽度由内容决定
  • 常见成员:<span>, <a>, <strong>, <em>, <img>, <input>, <label>, <button>

2. 块级元素(Block-level Elements)

  • 特点:独占一行,默认宽度100%
  • 常见成员:<div>, <p>, <h1>-<h6>, <ul>, <ol>, <li>, <section>, <article>

3. 空元素(Void Elements)

  • 特点:自闭合,没有结束标签
  • 常见成员:<br>, <hr>, <img>, <input>, <link>, <meta>

CSS小技巧:通过display属性可以改变元素的默认显示方式:

span { display: block; }  /* 行内变块级 */
div { display: inline; }   /* 块级变行内 */

🔤 九、标签对比:看似相似实则不同

1. title与h1

  • <title>:定义浏览器标签页标题,对SEO非常重要
  • <h1>:页面主要内容标题,一个页面最好只有一个

2. b与strong

  • <b>:仅仅视觉上加粗,没有语义
  • <strong>:表示内容重要性,屏幕阅读器会强调朗读

3. i与em

  • <i>:仅仅视觉上斜体,常用于图标
  • <em>:表示强调的文本,屏幕阅读器会改变语调

现代最佳实践

  • 优先使用<strong><em>,因为它们有语义
  • <b><i>可以用于纯粹装饰性场景

🏗️ 十、渐进增强 vs 优雅降级:两种开发哲学

渐进增强(Progressive Enhancement)

  • 策略:从基础功能开始,逐步增强
  • 流程:内容 → 结构 → 表现 → 行为
  • 优势:保证所有用户都能获得核心体验
  • 适用:内容型网站、公共项目

优雅降级(Graceful Degradation)

  • 策略:先构建完整功能,再处理兼容
  • 流程:完整功能 → 兼容处理
  • 优势:开发效率高
  • 适用:内部系统、现代浏览器应用

现实选择:现代开发通常采用渐进增强策略,结合特性检测(Feature Detection)技术:

if ('geolocation' in navigator) {
  // 使用高级功能
} else {
  // 提供降级方案
}

💡 高频面试题精选

  1. HTML5为什么只需要写<!DOCTYPE html>

    • HTML5不基于SGML,因此不需要引用DTD
    • 简化设计,向前兼容
  2. 页面可见性(Page Visibility)API可以有哪些应用场景?

    • 视频暂停/播放
    • 停止不必要的动画
    • 暂停轮询请求
    • 停止不必要的计算
  3. label的作用是什么?如何使用?

    • 提升表单可用性
    • 点击label可以聚焦关联的表单控件
    • 两种用法:
      <label for="username">用户名</label>
      <input id="username">
      
      <label>用户名 <input></label>
      

🎯 总结

HTML作为前端开发的基石,看似简单却蕴含深意。通过本文的梳理,相信大家对HTML的核心考点有了更系统的理解。记住:

  1. 语义化是HTML5的灵魂
  2. 理解各种标签的特性和适用场景
  3. 掌握现代HTML5 API能为项目增色不少
  4. 性能优化要从HTML结构开始

最后送大家一句话:"基础不牢,地动山摇"。HTML作为前端三大基石之一,值得你花时间深入理解!

互动时间:你遇到过哪些HTML相关的"坑"?欢迎在评论区分享你的故事~如果觉得有用,别忘了点赞收藏哦!❤️