应先检查 Network 面板中 CSS 请求是否存在:若 <link rel="stylesheet"> 缺失、被删、注释、拼错或路径错误,请求根本不会发出;再逐项验证 HTML 结构、href 路径、构建输出及 JS 动态操作。

检查 Network 面板里有没有 CSS 请求
如果 <link rel="stylesheet"> 根本没写,或者被 JS 动态删了、被注释包住了、或拼错成 rel="sytlesheet",浏览器连请求都不会发 —— 你在 Network 面板里搜 .css 就会发现目标文件完全不出现。
这时别急着改 CSS 内容,先回 HTML 源码确认:<link> 是否在 <head> 里、是否闭合、rel 值是不是严格等于 stylesheet、href 有没有多出空格或全角引号。
- VS Code 输入
<link rel="会自动提示合法值,建议直接选,避免手误 - 用 Live Server 启服务再看,双击打开
file://协议下某些路径行为异常,容易误判 - 如果用了构建工具(如 Vite),检查生成的
index.html里是否真有该<link>,不是只在源模板里写了但没注入
确认 href 路径是否匹配实际文件位置
路径错误不会报语法错误,只会静默 404。关键不是“路径看起来对不对”,而是“以 HTML 文件为起点,相对路径算出来对不对”。
比如 index.html 在 /dist/ 目录,而 style.css 在 /dist/css/style.css,那么 href 必须是 "css/style.css";如果写成 "style.css",浏览器就会去找 /dist/style.css,自然 404。
立即学习“前端免费学习笔记(深入)”;
- Vite 用户注意
base配置:设了base: "/my-app/",构建后所有资源前缀会加这个,但href的相对计算逻辑不变,得同步调整部署路径 - 微前端场景下,子应用的
publicPath必须和负载均衡器的proxy_pass规则对齐,否则/app-a/css/xxx.css可能被重写成/css/xxx.css导致 404 - 路径含中文、空格、
[或#时,必须 URL 编码,否则请求中断且无明显提示
验证 CSS 文件是否真被构建产出
有时候打包日志显示 “success”,但 CSS 根本没写进 dist 目录 —— 尤其是用了 mini-css-extract-plugin 或启用了 css.codeSplit 时,配置稍有偏差就会跳过输出。
直接打开文件管理器,去构建输出目录(如 dist/ 或 build/)里找对应 .css 文件。没有?那问题不在 HTML 引入,而在构建链路本身。
- Webpack:检查
module.rules中/\.css$/的 rule,生产环境要用MiniCssExtractPlugin.loader,且plugins数组里注册了实例 - Vite:运行
vite build --debug,看日志末尾是否有✓ rendered in xxx ms,再查dist/assets/下是否存在 CSS 文件;若无,可能是css.preprocessorOptions报错被静默吞掉 - Vue CLI 用户:确认
vue.config.js里没误配css.extract: false导致样式被打包进 JS,而非独立 CSS 文件
排查 JS 运行时动态移除或禁用样式表
有些 UI 库(如 Ant Design、Element Plus)或自定义初始化逻辑,会在页面加载后调用 sheet.disabled = true、sheet.replace(""),甚至清空整个 document.styleSheets 列表 —— 此时 Network 显示 200,Elements 面板里 <link> 也存在,但 document.styleSheets[0].cssRules.length === 0。
在控制台执行 document.styleSheets,逐个点开看 href 是否匹配你引入的文件,再看 cssRules 是否为空。如果是,说明内容被 JS 清掉了。
- 搜索项目代码中是否调用了
resetCSS()、clearStyles()类方法 - React/Vue 中混用全局 CSS 和 scoped style 时,框架可能自动加属性选择器前缀,导致你写的规则被隔离,看似“没生效”,实则是作用域限制
- 检查是否有第三方脚本(如广告 SDK、A/B 测试工具)注入了全局重置逻辑,尤其注意
all: unset这类切断继承链的声明
Content-Type 是不是 text/css —— 其他都是后续步骤。



















