Lighthouse 建议移除未使用的 CSS,但我不知道哪些能删? UX-一涵 提问于 2026-03-12 20:20:24 阅读 2 工具 我用 Lighthouse 跑分时总提示“移除未使用的 CSS”,可项目里样式是通过 @import 拆分的,手动删怕出问题。有没有办法自动识别哪些 CSS 真的没用到? 试过 PurgeCSS,但配置完页面样式直接乱了,怀疑它把动态添加的 class 也删了。比如下面这种写法: document.body.classList.add('theme-dark'); 这种运行时动态切换的类名,工具能识别吗?还是得靠人工判断? 优化流程 我来解答 赞 1 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 艺菲酱~ Lv1 PurgeCSS 把你动态加的 class 删掉是正常的,它只分析源码里的静态字符串。你写的 document.body.classList.add('theme-dark') 这种,PurgeCSS 扫不到 theme-dark 这个字符串出现的 HTML 标签上,所以直接给你干掉了。 解决方法很简单,在 PurgeCSS 配置里加个 safelist: // purgecss.config.jsmodule.exports = { content: ['./src/**/*.{html,js,ts,jsx,tsx}'], css: ['./src/**/*.css'], safelist: { standard: [/^theme-/, /^is-/, /^has-/], // 正则匹配所有以这些开头的class deep: [ // 或者精确指定某些动态class 'theme-dark', 'theme-light', 'is-active', 'is-loading' ] } } 复制这个配置,根据你的实际情况改一下正则规则。常用的做法是把项目里所有动态切换 class 的前缀都列出来,比如 theme-、is-、has- 这类命名规范的。 如果你用的是 PostCSS 或者 webpack 的 purgecss-webpack-plugin,配置也都类似,在插件选项里加上 safelist。 还有一个思路是把动态 class 统一放在一个文件里,然后手动维护白名单列表,别让工具去猜。动态样式本来就不是工具能推断出来的,只能靠人肉保平安。 回复 点赞 2026-03-12 21:03 加载更多 相关推荐 1 回答 31 浏览 Lighthouse建议移除未使用的JavaScript,但我不知道哪些能删? 我用 Lighthouse 跑分,Performance 得分很低,提示“移除未使用的 JavaScript”,但我项目里引用了好几个第三方库,比如 lodash 和 moment.js,只用了其中一... UE丶红娟 工具 2026-02-26 15:37:22 2 回答 23 浏览 预加载图片时为什么会阻塞关键CSS加载? 我在电商详情页用预加载商品轮播图,但发现首屏渲染变慢了。用Lighthouse检查发现关键CSS的加载时间被图片占用了,这是为什么? 尝试过这样写: <link rel="preload" hr... 极客清梅 优化 2026-02-19 16:29:24 2 回答 23 浏览 Lighthouse 报告里“未使用 JavaScript”是怎么回事? 我在用 Lighthouse 做性能审计时,发现报告里提示“未使用的 JavaScript”,但这些脚本明明是我页面必需的啊。比如下面这段代码: import { initMap } from ... 司马翌喆 工具 2026-02-25 22:10:18 2 回答 19 浏览 为什么Coverage显示未使用的CSS在代码中明明被引用了? 在Vue组件里写了一个带scoped的CSS类,Coverage报告显示这个类未被使用,但代码里明明在DOM元素上加了这个class。我刷新了页面还清除了缓存,问题还是存在... <templa... 令狐依甜 工具 2026-02-16 22:19:22 2 回答 25 浏览 Rollup打包后文件包含未使用的CSS类名怎么办? 在用Rollup打包Vue组件库时发现,即使组件未使用某些CSS类名,打包后的dist文件里还是包含了所有类名,导致体积变大。我尝试过动态导入CSS文件,但这样会导致样式无法按需加载: <tem... ___荣荣 优化 2026-02-16 18:25:24 2 回答 11 浏览 11ty中如何正确引入并使用CSS模块? 我在用11ty做静态站点,想把CSS文件单独引入到某个页面,但发现样式没生效。我试过在.njk模板里用{% set css %}styles.css{% endset %},也试过直接link标签,都... 博主子香 框架 2026-03-08 12:01:19 1 回答 55 浏览 为什么关键CSS加载优先级不够高? 我在做首页性能优化时发现,虽然我把首屏样式内联了,但Lighthouse还是提示“移除阻塞渲染的资源”。我试过用 preload 加载关键 CSS 文件,但好像浏览器还是没把它当高优先级处理,这是为啥... 技术杏花 优化 2026-03-08 00:37:17 1 回答 37 浏览 为什么Rollup打包后Tree Shaking没去掉未使用的CSS类? 在用Rollup打包Vue组件时遇到了奇怪的问题,明明代码里只用了CSS文件中的两个类,但打包后的样式文件里却包含了所有类。我检查过配置,已经设置了"sideEffects: false",还试过在导... 景叶的笔记 优化 2026-02-17 08:29:32 2 回答 27 浏览 使用cssnano压缩后样式错乱,如何排查配置问题? 我在项目里用PostCSS配合cssnano压缩CSS时,压缩后的文件导致按钮hover效果消失了。尝试过把preset设为"default"和"advanced"都没解决,控制台没报错但样式就是不对... UX-巧丽 工具 2026-02-16 23:19:25 2 回答 26 浏览 为什么Webpack Tree Shaking没摇掉未使用的CSS样式? 大家好,我在优化项目时遇到个奇怪的问题。我按文档配置了Tree Shaking,但打包后的CSS里还是有很多没用的样式类。 比如这个组件只用了.red类,但打包结果里blue和green类也存在: /... 公孙东辰 优化 2026-02-16 18:45:28
document.body.classList.add('theme-dark')这种,PurgeCSS 扫不到theme-dark这个字符串出现的 HTML 标签上,所以直接给你干掉了。解决方法很简单,在 PurgeCSS 配置里加个 safelist:
复制这个配置,根据你的实际情况改一下正则规则。常用的做法是把项目里所有动态切换 class 的前缀都列出来,比如
theme-、is-、has-这类命名规范的。如果你用的是 PostCSS 或者 webpack 的 purgecss-webpack-plugin,配置也都类似,在插件选项里加上 safelist。
还有一个思路是把动态 class 统一放在一个文件里,然后手动维护白名单列表,别让工具去猜。动态样式本来就不是工具能推断出来的,只能靠人肉保平安。