跳转到内容

4.10 浏览器开发者工具:定位问题的第一现场

一、本节你会做出什么

你会学会一个能省下大量来回的工作方式:先在浏览器里直接试出正确的样式值,试对了,再把确切数字告诉 AI。

📷 效果位:开发者工具里实时调整样式,页面同步变化

这一节的价值很直接。对比一下:

❌ 没有这项技能 ✅ 有了这项技能
「间距大一点」→ AI 改 → 还是不对 → 「再大一点」→ 改 → 太大了 → 「小一点」…… 在浏览器里拖着试,发现 32px 刚好 → 「把这里的 margin-bottom 改成 32px」→ 一次就对
来回 5 轮,20 分钟 自己试 1 分钟,AI 改 1 次

开发者工具也是第 6 章(调试排错)的主要工具。 这一节是那一章的前置。


二、开始前你需要

  • 已完成 4.3,知道盒模型、padding/margin 的区别
  • 已完成 4.9,练习项目里有组件和多个页面
  • pnpm dev 跑着,浏览器打开 localhost:3000

三、跟着做

第 1 步:五个面板,按使用频率排序

按 F12(Mac:Command+Option+I)打开。顶部一排标签页,你只需要用到五个:

面板 看什么 使用频率
① Elements(元素) 页面结构 + 实时改样式 ⭐⭐⭐⭐⭐
② Console(控制台) 报错红字 ⭐⭐⭐⭐⭐
③ Network(网络) 文件/接口要到没要到 ⭐⭐⭐⭐
④ 设备工具栏 手机预览 ⭐⭐⭐
⑤ Application(应用) 清缓存、看本地存储 ⭐

💡 面板太窄看不清:开发者工具右上角 ⋮ → Dock side 可以选择放在右边 / 下边 / 独立窗口。小屏幕建议独立窗口。

第 2 步:Elements —— 从页面反查到代码

这是最常用的一招,4.2 第 7 步练过一次,这里正式用到自己的项目上。

操作:

  1. 点开发者工具左上角那个箭头+方框图标(或 Cmd/Ctrl+Shift+C)
  2. 鼠标移到页面上任意元素 —— 页面上高亮,Elements 面板里自动跳到对应代码
  3. 点一下,就选中了它

选中之后,你能拿到三样对 AI 有用的信息:

信息 怎么看 怎么用
标签名 <div> / <header> / <button> 告诉 AI 改哪种元素
class 一长串 Tailwind class 直接复制给 AI,它立刻知道你指的是哪个
层级关系 面板左侧的缩进树 4.2 讲过“位置不对先看父元素”

🔑 这一招解决了 3.5 里最难的那个问题:怎么精确指出“哪一块”。

以前你只能说“中间那个卡片里面上面那块”,现在你可以说: 「class 为 rounded-xl shadow-sm p-6 的那个 div 里的 h3」 —— 没有歧义。

📷 截图位 1:用元素选择器点中一个卡片,Elements 面板高亮对应代码

第 3 步:Styles 面板 —— 看哪条规则生效了

选中元素后,右侧(或下方)的 Styles 面板列出所有作用在它身上的 CSS 规则。

三个要看懂的信号:

你看到 意思
带删除线的属性 这条被覆盖了,没生效(4.3 卡住了看这里那条的答案)
规则右侧的文件名 这条规则写在哪个文件、第几行
element.style 行内样式,优先级最高

🔑 「我改了样式但没反应」的答案通常就在这里: 你改的那条带着删除线——被另一条优先级更高的规则压住了。

看到这个,就跟 AI 说:「这个元素的 padding 被 【另一条规则】 覆盖了,怎么处理?」——这比反复说“没生效”有用得多。

Styles 面板底部还有一张盒模型图(4.3 画过的那个):

┌─────── margin ────────┐
│ ┌───── border ─────┐ │
│ │ ┌── padding ──┐ │ │
│ │ │ 内容尺寸 │ │ │
│ │ └─────────────┘ │ │
│ └──────────────────┘ │
└───────────────────────┘

鼠标悬停在图上任一层,页面上对应区域会高亮。 这是理解 padding/margin 最直观的方式——4.3 如果没完全搞懂,现在在这里看一次就懂了。

第 4 步:⭐ 核心技能——在浏览器里先试出正确的值

这是本节最值钱的内容。

选中元素,在 Styles 面板里:

操作 怎么做
改一个数值 点那个数字,用 ↑ ↓ 方向键调(按住 Shift 一次跳 10)
改颜色 点颜色方块,弹出取色器
临时关掉一条规则 鼠标移到属性上,左侧出现复选框,取消勾选
新增一条属性 在规则的大括号里空白处点一下,直接打

页面会实时变化。 这些改动只存在于浏览器里——刷新就没了,不会动你的代码。

🔑 这就是“安全的试验场”:

想让卡片间距大一点但不知道多少合适?点着 gap 的数字按方向键往上调,调到顺眼为止,记下那个数。

然后跟 AI 说:「把景点卡片容器的 gap 从 16px 改成 32px」。

一次就对,因为你已经亲眼确认过 32px 是对的。

现在动手,在你的练习项目上试一次:

  1. 选中一个景点卡片
  2. 把它的 padding 调大调小,找一个你觉得最舒服的值
  3. 把 border-radius 从小调到大,看哪个圆角好看
  4. 取消勾选 box-shadow,看看没有阴影是什么样
  5. 记下你定下来的那几个数值

📷 截图位 2:Styles 面板里用方向键调数值,页面同步变化

💡 Tailwind 项目里的一个小注意:你在浏览器里改的是最终的 CSS 值(padding: 24px),而代码里写的是 class(p-6)。告诉 AI 确切的像素值就行,让它换算成对应的 class —— 它很擅长这件事。

第 5 步:Console —— 红字和一个小技巧

1.3 讲过「页面不对劲就看控制台红字」。这里补三件事。

① 红字要看哪几行

报错通常是一大段,只看两处:

看什么 为什么
第一行(错误类型 + 描述) 说明是什么问题
第一个指向你自己项目文件的行 说明问题在你哪个文件、第几行

中间那一大堆 node_modules/... 的调用栈可以跳过——那是框架内部的,不是你的锅。第 6.1 节会专门讲这个。

② 黄字(警告)要不要管

警告 要管吗
Each child in a list should have a unique "key" ✅ 要管(4.6 讲过)
图片缺少 alt ✅ 要管(无障碍 + SEO)
第三方脚本的警告 ❌ 不用管

③ 一个小技巧:$0

在 Elements 里选中一个元素后,切到 Console 输入:

$0

$0 代表你刚才选中的那个元素。可以继续查看它:

$0.className // 它的所有 class
$0.textContent // 它里面的文字

💡 什么时候有用:元素的 class 太长,在 Elements 面板里看不全时,用 $0.className 能一次完整复制出来给 AI。

第 6 步:Network —— 两种最常用的查法

① 查“图片/文件为什么没出来”

刷新页面 → Network 面板 → 看有没有红色条目。

状态码 含义 常见原因
404 文件不存在 路径写错了。4.5 讲过:图片放 public/images/x.jpg,代码里写 /images/x.jpg(不带 public)
403 没权限 第三方资源限制
500 服务器出错 后端代码报错(第 7 章)

② 查“接口返回了什么”(第 7、8 章会天天用)

Network → 筛选 Fetch/XHR → 点那条请求 → 右侧看:

标签页 看什么
Response 服务器返回的实际数据
Headers 请求地址、状态码
Payload 你发过去的数据

🔑 这个能力在第 8 章价值巨大: 「AI 没有回复」到底是前端没显示、还是接口根本没返回东西?Network 的 Response 一看就知道,不用猜。

第 7 步:设备工具栏 —— 手机预览

Cmd/Ctrl+Shift+M,或点开发者工具里的手机/平板图标。

要做的 怎么做
选设备 顶部下拉框选 iPhone / iPad 等
自定义宽度 选 “Responsive”,直接拖边框,或直接输数字
测最窄情况 输 375(常见手机宽度),这是 4.3 提示词 ③ 里那个数字

三件在手机模式下必查的事(3.5 的“操作验收”清单):

  • 有没有横向滚动条(有就是某个元素溢出了)
  • 文字会不会太小(小于 14px 就偏小)
  • 按钮/链接够不够大(手指点得中)

📷 截图位 3:设备工具栏,375px 宽度下的页面

第 8 步:Application —— 一招就够:清缓存

偶尔会遇到“我明明改了,页面就是不变”。排除了保存和刷新之后,就是缓存。

硬刷新(先试这个):

  • Mac:Cmd+Shift+R
  • Windows:Ctrl+Shift+R

还不行就彻底清:Application 面板 → 左侧 Storage → Clear site data。

💡 开发时的一劳永逸做法:Network 面板勾上 Disable cache(禁用缓存)。只在开发者工具打开时生效,所以不影响你平时上网。

第 9 步:动手——完整走一次定位流程(本节交付物)

在你的练习项目上,制造一个问题然后自己定位。

让 AI 搞点事:

请在 components/AttractionCard.tsx 里引入一个样式问题,
让卡片在手机宽度(375px)下会横向溢出屏幕。
**不要告诉我你改了什么**,我要自己用开发者工具找出来。
改完只回复"改好了"。

现在用本节学的东西查:

步骤 做什么
1 Cmd/Ctrl+Shift+M 切到手机模式,宽度设 375
2 确认真的有横向滚动条
3 用元素选择器点那个溢出的元素
4 Styles 面板里找可疑的属性(固定 width?过大的 padding?min-width?)
5 取消勾选那条属性,看溢出是否消失 —— 这一步就是确诊
6 在浏览器里试出正确的值

然后把确诊结果告诉 AI:

我用开发者工具定位到了:
【class 为 xxx 的那个 div】上有 【width: 400px】,
在 375px 宽度下导致横向溢出。
我在浏览器里验证过:把它改成 `width: 100%` 后溢出消失。
请按这个结论修改代码,只改这一处。

🔑 注意这段话的质量 —— 它包含了症状、定位、原因、验证过的解法。 这是 3.5 讲的“信息质量”在前端排错里的最高形态。 AI 拿到这样一段话,不可能改错。

验收并存档:

终端窗口
git diff --stat
pnpm build
git add -A && git commit -m "修复卡片在窄屏下的横向溢出"

第 10 步:从「开发者工具的发现」到「给 AI 的话」

把本节压成一张表。这是 4.1 那张定位表的升级版——加上了“用什么工具查”。

症状 用哪个面板查 查到什么就说什么
样式不对 Elements + Styles 「【class】 的 【属性】 现在是 【值】,应该是 【值】」
改了样式没生效 Styles(找删除线) 「这条被 【另一条规则】 覆盖了」
按钮没反应 Console 「点击时控制台报:【红字原文】」
图片裂了 Network 「图片 404,请求路径是 【路径】」
数据没出来 Network → Response 「接口返回的是 【粘贴 Response】」
手机上乱 设备工具栏 375px 「375px 下 【哪个元素】 横向溢出 / 和 【谁】 重叠」
改了没变化 硬刷新 / 清缓存 (先排除缓存,再去找 AI)

四、完成的标志是

  • 我知道五个面板分别看什么
  • 我会用元素选择器从页面反查到对应代码
  • 我能从 Elements 面板里拿到元素的标签名和完整 class
  • 我看得懂 Styles 面板里带删除线的属性 = 被覆盖了、没生效
  • 我在 Styles 面板的盒模型图上悬停过,看清了 padding 和 margin 的区别
  • 我在浏览器里用方向键调过数值,并记下了合适的值
  • 我理解“先在浏览器试出正确值,再告诉 AI 确切数字”为什么能省大量来回
  • 我知道看报错只看第一行和第一个指向自己项目文件的行
  • 我知道 $0 指当前选中的元素
  • 我会在 Network 里查 404,也知道去 Response 看接口返回了什么
  • 我会用设备工具栏把宽度设成 375px 检查手机表现
  • 我知道“改了没变化”先硬刷新,以及 Disable cache 这个开关
  • 我完整走了一次定位流程:制造问题 → 自己找到 → 验证解法 → 让 AI 按结论修

五、卡住了看这里

Q:我在 Styles 面板里改了值,刷新就没了。 这是设计如此。 开发者工具里的改动只在浏览器内存里,不会写进你的代码。它的用途是试验——试对了把数值告诉 AI,让 AI 改代码。

Q:Styles 面板里找不到我想改的属性。 两个原因:① 这个属性是继承来的,往下翻能看到 Inherited from ... 区域;② 这个元素身上压根没有这条属性 —— 直接在规则里新增一条试试。

Q:Tailwind 项目里,Styles 面板显示的 class 名和代码里的对不上。 对得上的,只是 Tailwind 的每个 class 对应一条很小的规则,所以你会看到一长串独立的小规则(.p-6 { padding: 1.5rem })。要改的话按最终像素值告诉 AI,让它选对应的 class。

Q:元素选择器点不中我想要的元素,总是选到外层的 div。 两个办法:① 点一下之后在 Elements 面板里用方向键 ↓ 往里走,一层层进到目标元素;② 在页面上右键目标元素 → 检查(Inspect),通常更准。

Q:Console 里一堆报错,分不清哪条是我的。 看报错末尾的文件路径:指向你项目文件的(app/...、components/...)才是你的;指向 node_modules 或第三方域名的通常不是。第 6.1 节会专门讲怎么读。

Q:手机模式下看着正常,真手机上还是乱。 设备模拟不是 100% 准确(字体渲染、软键盘、浏览器工具栏高度都有差异)。部署上线后用真手机开一次(第 11 章会讲)。模拟器用来抓 90% 的问题,剩下 10% 要真机。

Q:开发者工具一打开,页面就变慢/变形。 面板占了屏幕宽度,页面会按剩余宽度重新布局——这不是 bug。想看真实宽度,把面板切到独立窗口(第 1 步的 Dock side)。


六、本节提示词

① 定位之后的精准修改(本节的核心句式,存起来):

我用浏览器开发者工具定位到了问题,结论如下:
**元素**:【标签名 + class,从 Elements 面板复制】
**问题**:【具体,比如"width: 400px 导致 375px 屏幕下横向溢出"】
**我在浏览器里验证过的解法**:【比如"改成 width: 100% 后溢出消失"】
请按这个结论改代码:
1. 只改这一处,不要动其他元素;
2. 如果项目用 Tailwind,告诉我换算成了哪个 class;
3. 改完告诉我怎么验证。

② 让 AI 教你查某一类问题:

我的页面出现这个现象:【具体描述】
**先不要改代码。** 请教我用浏览器开发者工具自己查出原因:
1. 该打开哪个面板?
2. 具体点哪里、看哪个数值?
3. 看到什么结果说明是什么原因?(列出 2~3 种可能和对应的判断依据)
4. 怎么在浏览器里临时验证我的猜测对不对?
我查完会把结果告诉你,再请你改代码。

③ 让 AI 给你制造练习题(第 9 步那招,很好用):

我在学用开发者工具排错,想做练习。
请在我的项目里引入一个【样式类 / 控制台报错类 / 图片 404 类】问题,要求:
1. 问题要是新手常见的那种;
2. **不要告诉我你改了什么、改在哪个文件**;
3. 改完只回复"改好了"加一句现象描述;
4. 把改动限制在一个文件内,方便我之后 git restore 回去。
我自己用开发者工具找出来后,会把定位结论告诉你,你再确认我找得对不对。

上一节 ← 4.9 组件化开发 下一节 → 4.11 练习:拿到一个陌生项目,五分钟说清它在干什么