CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
HTML 与 CSS 基础/课时/网页如何工作
RawBlame
课时目录12 节

HTML 与 CSS 基础

  1. 01网页如何工作
  2. 02HTML 文档结构
  3. 03文本、链接与媒体
  4. 04HTML 表单
  5. 05语义化与可访问性
  6. 06CSS 选择器与层叠
  7. 07盒模型与布局流
  8. 08Flexbox 布局
  9. 09Grid 布局
  10. 10响应式设计
  11. 11综合练习:静态课程页
  12. 12框架与下一步

网页如何工作

浏览器、HTTP、DNS、HTML/CSS/JS 分工。

25 分钟

网页如何工作

这一课你将能做到

  1. 用自己的话说明:在浏览器地址栏输入网址并回车后,发生了什么
  2. 准确区分 HTML、CSS、JavaScript 的职责边界,不再把三者混为一谈
  3. 使用浏览器开发者工具的「元素」「网络」「控制台」面板调试本地页面

为什么要学

打开 CodeForge 学习平台,你看到的是课程卡片列表、响应式导航和登录表单。这些不是一张静态图片,而是浏览器根据三份「说明书」实时拼装出来的结果。理解这个过程,是排查「为什么我写的代码没效果」「为什么页面加载慢」等问题的前提。

如果把网页比作一栋房子:HTML 是钢筋骨架和房间划分(哪里是客厅、哪里是门),CSS 是装修风格(墙面颜色、灯具间距、家具摆放),JavaScript 是智能家居系统(点击开关后灯亮、空调调节温度)。任何框架——无论是 React、Vue 还是 Next.js——最终都要翻译成这三者,浏览器才能理解。

初学者最常见的误区是以为「学前端 = 学一个软件」。实际上,你写的是纯文本文件,浏览器负责读取并执行。用记事本就能写,只是 VS Code 等编辑器提供了语法高亮和自动补全,让效率更高。

先建立图像

你在地址栏输入 https://codeforge.example.com
           ↓
浏览器向服务器发送请求:"请给我首页的说明书"
           ↓
服务器返回 HTML 文件(第一份说明书)
           ↓
浏览器边读 HTML,边发现还需要 CSS、图片、字体、JS...
           ↓
继续发送请求获取这些资源
           ↓
在内存中构建 DOM 树 + CSSOM 树 → 合并为渲染树 → 绘制到屏幕
           ↓
你看到的课程卡片、导航栏、登录按钮
技术负责什么不负责什么
HTML页面上有哪些元素、它们的语义和层级关系不管颜色、间距、动画
CSS元素长什么样、在什么位置、如何响应不同设备不管点击后的复杂业务逻辑
JavaScript用户交互后页面如何变化、数据如何流动也能改结构和样式,但不该用来堆砌初始内容

本地双击打开文件时,地址栏显示 file://;访问真实网站时显示 https://。两者的渲染原理完全一致,区别在于资源从本地磁盘读取还是从远程服务器下载。

跟着做

步骤 1:创建一个可运行的本地页面

新建文件夹 web-intro-lab,在其中创建 index.html,用 VS Code 打开并粘贴以下内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CodeForge 首页演示</title>
  <style>
    :root {
      --primary: #2563eb;
      --bg: #f8fafc;
      --text: #0f172a;
    }
    body {
      font-family: system-ui, -apple-system, sans-serif;
      background: var(--bg);
      color: var(--text);
      padding: 2rem;
      line-height: 1.6;
    }
    .nav {
      display: flex;
      gap: 1rem;
      margin-bottom: 2rem;
    }
    .nav a {
      color: var(--primary);
      text-decoration: none;
      font-weight: 500;
    }
    .card {
      background: white;
      border-radius: 12px;
      padding: 1.5rem;
      box-shadow: 0 1px 3px rgba(0,0,0,0.1);
      max-width: 400px;
    }
    button {
      background: var(--primary);
      color: white;
      border: none;
      padding: 0.5rem 1rem;
      border-radius: 6px;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <nav class="nav" aria-label="主导航">
    <a href="#">课程</a>
    <a href="#">路线图</a>
    <a href="#">关于</a>
  </nav>

  <article class="card">
    <h1>HTML/CSS 基础</h1>
    <p>从零开始构建现代网页的完整入门课程。</p>
    <button type="button" id="joinBtn">立即加入</button>
  </article>

  <script>
    document.getElementById('joinBtn').addEventListener('click', () => {
      alert('欢迎加入 CodeForge!');
    });
  </script>
</body>
</html>

保存后,将文件拖到浏览器窗口中打开。你应该能看到一个带有导航链接、课程卡片和蓝色按钮的页面。

步骤 2:用开发者工具观察「元素」面板

  1. 在页面上按 F12(或右键 → 检查)
  2. 选择 Elements / 元素 面板:左侧是折叠的标签树,这就是 DOM(Document Object Model)——浏览器把 HTML 读进内存后形成的结构化树形表示
  3. 点击 <h1>HTML/CSS 基础</h1>,右侧 Styles 面板会显示 font-size、font-weight 等计算后的样式
  4. 双击元素面板里的文字「HTML/CSS 基础」,改成其他内容:页面实时更新,但文件本身未被修改。这演示了「浏览器显示的是内存中的 DOM,不一定等于磁盘上的文件」

步骤 3:观察「网络」面板

  1. 切换到 Network / 网络 面板
  2. 勾选「Disable cache / 禁用缓存」,按 F5 刷新
  3. 由于这是本地单文件,请求列表很短。作为对比,打开任意公开网站(如 MDN)的网络面板,你会看到 HTML、CSS、JS、图片、字体等数十条请求
  4. 点击每条请求,查看 Headers、Response、Timing:这是分析页面加载性能的基本操作

步骤 4:观察「控制台」面板与报错

把脚本中的 joinBtn 故意改成 joinBtnTypo:

<script>
  document.getElementById('joinBtnTypo').addEventListener('click', () => {
    alert('不会执行');
  });
</script>

刷新后打开 Console / 控制台,你会看到红色报错(如 Cannot read properties of null)。按钮点击无反应时,先看控制台,而不是盲目猜测。改回正确 id 后再验证。

步骤 5:修改各层并观察结果

  1. 把 <h1> 的内容改成「CodeForge 前端课」,保存刷新 → 这是修改 HTML 结构
  2. 把 :root { --primary: #2563eb; } 改成 #dc2626,保存刷新 → 按钮和链接变红,这是修改 CSS 样式
  3. 把 alert 里的文字改成「开始学习」,保存刷新后点击按钮 → 这是修改 JavaScript 行为

三遍操作建立「改哪一层管哪一类结果」的肌肉记忆。

讲清楚要点

  1. 浏览器是执行者,不是阅读器:你写的 HTML/CSS/JS 不是给人看的文档,而是给浏览器的精确指令。浏览器的渲染引擎(Chrome 的 Blink、Safari 的 WebKit、Firefox 的 Gecko)负责解释这些指令。

  2. 结构优先于样式,样式优先于交互:没有 HTML,CSS 不知道涂在哪里;没有合理的结构,JavaScript 后期增删改查会极其困难。先写语义清晰的 HTML,再叠加 CSS,最后处理交互。

  3. DOM 是运行时的内存表示:JavaScript 通常操作的是 DOM,而不是直接读写文件。document.getElementById 找的是内存中的节点,element.textContent = '...' 改的也是内存。只有保存文件并刷新,才能让下次打开保持新内容。

  4. 开发者工具是前端的显微镜和听诊器:90% 的「为什么没效果」问题,通过 Elements(看结构)、Console(看报错)、Network(看资源加载)都能定位。

  5. 文件协议 vs HTTP 协议:file:// 没有跨域限制但无法使用某些现代 API(如 Service Worker),http:///https:// 是真实网络环境。本地开发常用 localhost 模拟真实环境。

  6. 所有前端框架最终都落地到这三者:React 的 JSX 编译成 HTML 结构,Vue 的模板 likewise。理解原生三剑客,是调试框架代码、排查样式穿透、优化性能的基础。

你可能会懵的地方

  • 「我要安装 HTML 软件吗?」 不需要。浏览器内置了解析器。你需要的是一个文本编辑器(VS Code 推荐)和浏览器。关键是保存时选择 UTF-8 编码。

  • 「HTML 和网页是一个东西吗?」 不是。网页通常由 HTML(结构)、CSS(表现)、JavaScript(行为)以及图片、字体、视频等资源共同组成。HTML 只是其中负责结构的那一部分。

  • 「为什么有的教程一上来就教 React/Vue?」 框架建立在原生三剑客之上。如果不知道浏览器如何解析标签、如何计算样式、如何执行脚本,遇到框架报错时会完全无从下手。本课程先把地基打牢。

  • 「DOM 到底是什么?」 浏览器读取 HTML 文件后,在内存中创建的一棵对象树。每个标签变成一个节点,节点之间有父子关系。JavaScript 通过 DOM API(如 document.querySelector)来读取或修改这棵树,从而改变页面显示。

  • 「控制台报错全是英文,看不懂怎么办?」 先看红色错误的第一行和行号,点击行号跳转到对应源码位置。把报错原文复制到搜索引擎,通常前几个结果就能解释含义。记录这些报错和解决方案,是成长的捷径。

错法对照

错法问题正解
用 Word/WPS 写网页并导出生成大量冗余标签和行内样式,难以维护用 VS Code 手写简洁的 HTML
所有效果都用 JavaScript 修改样式代码冗长、性能差、难以复用能用 CSS 解决的样式问题,绝不用 JS
从不打开 F12 开发者工具出了问题只能猜测和试养成「先看 Elements、Console、Network」的习惯
改完代码不保存就刷新浏览器「我明明改了,怎么没变」保存文件 → 切换回浏览器 → Ctrl+F5 强制刷新
把 HTML、CSS、JS 不加注释地堆在一起一周后自己也读不懂按结构、样式、行为分区,关键逻辑写中文注释
用 file:// 测试 AJAX 请求浏览器安全策略会阻止使用 VS Code Live Server 插件启动 localhost

卡点急救

  1. 页面完全空白,什么都看不到:按 F12 打开 Console,看是否有语法错误(如标签未闭合、引号不匹配)。检查文件是否以 UTF-8 编码保存,否则中文会显示为乱码。

  2. 修改了代码但刷新后没变化:确认是否按了 Ctrl+S 保存;确认浏览器打开的是否是修改的那个文件(本地可能有多个副本);按 Ctrl+F5 强制刷新以跳过缓存。

  3. 中文显示为乱码:确保 HTML 的 <head> 中第一行就是 <meta charset="UTF-8">。如果已经乱码,用编辑器「另存为」功能重新选择 UTF-8 编码。

面试常问

  • 「在浏览器地址栏输入 URL 后发生了什么?」 DNS 解析 → TCP 连接建立 → HTTP 请求发送 → 服务器返回 HTML → 浏览器解析 HTML 构建 DOM → 遇到 CSS/JS/图片等资源时并行请求 → CSS 构建 CSSOM → DOM + CSSOM 合并为渲染树 → Layout(计算几何信息)→ Paint(绘制像素)→ Composite(合成图层显示到屏幕)。答出 DNS、TCP、HTTP、DOM、CSSOM、渲染树这几个关键词即可得分。

  • 「HTML、CSS、JavaScript 各自负责什么?能否互相替代?」 HTML 负责语义结构,CSS 负责视觉表现,JavaScript 负责交互行为。三者职责分离,不能互相替代。虽然 JS 可以通过 element.style 修改样式,也可以动态创建节点,但这不等于替代——用 JS 做 CSS 该做的事会导致性能下降和代码难以维护。

  • 「什么是 DOM?为什么需要它?」 DOM(Document Object Model)是浏览器将 HTML 文档解析后在内存中建立的树形对象模型。它让编程语言(如 JavaScript)能够以统一的方式访问和操作文档的内容、结构和样式。没有 DOM,JS 就无法动态修改页面。

自测三问

  1. 用一句话分别概括 HTML、CSS、JavaScript 的职责。修改按钮颜色属于哪一层?修改按钮点击后的弹窗文字属于哪一层?
  2. 本地双击打开 HTML 文件时,地址栏显示什么协议?这与访问真实网站有何区别?
  3. 按钮点击没有反应时,你应该先打开开发者工具的哪个面板?如果看到红色报错,应该关注哪些信息?

小结一句话

浏览器按 HTML 搭建结构、按 CSS 渲染样式、按 JavaScript 响应交互;掌握本地文件的编写、保存、刷新循环,并善用 F12 开发者工具,是前端学习的第一步。

延伸

  • MDN:Web 是如何工作的
  • MDN:什么是 DOM
  • 下一课:HTML 文档结构——每一页都必须有的标准骨架。
加载本节练习…
下一课 →HTML 文档结构