应抽离公共样式为base.css顶部同步加载,页面专属样式用preload异步加载,禁用内联style;用CSS变量统一管理主题,构建时按页面拆包并hash命名,服务端注入带版本号的CSS链接并设置fallback。
多页面应用(MPA)里,每个 HTML 页面独立引入 style.css 很常见,但容易导致:相同基础样式被多次下载、!important 滥用、组件级样式泄漏到全局。核心解法不是“加更多 CSS”,而是控制「谁加载、何时加载、加载多少」。
base.css,在所有页面的 最顶部同步加载login.css)改用 异步加载,避免阻塞渲染 —— 它无法被缓存,且 devtools 里难以定位来源多页面常需适配不同终端或客户品牌,硬编码颜色值或写多套 class 极易失控。CSS 变量配合 :root 和属性继承,是最轻量的运行时
切换方案。
:root {
--primary-color: #007bff;
--border-radius: 4px;
}
@media (prefers-color-scheme: dark) {
:root {
--primary-color: #0056b3;
}
}
.card {
border-radius: var(--border-radius);
background: linear-gradient(to right, var(--primary-color), #0056b3);
}base.css 中,不分散在各页面样式里html.theme-dark)更稳定Webpack/Vite 等工具默认把 CSS 提取为单个 style.css,这在 MPA 中反而削弱缓存效率:一个页面的样式修改会导致所有页面的 CSS 缓存失效。
optimization.splitChunks.cacheGroups 配置中,为每个 HTML 入口指定独立的 name,生成 login.[hash].css、dashboard.[hash].css
common 组,但必须显式声明 enforce: true,否则可能被遗漏contenthash 对 CSS 文件 —— 它依赖 JS 模块内容,而 CSS 本身无 JS 依赖,应改用 chunkhash 或文件内容 hash前端路由无法接管 MPA 的首次加载,所以 CSS 加载逻辑必须由服务端控制。直接写死 不够健壮 —— CDN 故障或路径变更时会白屏。
立即学习“前端免费学习笔记(深入)”;
),由构建后生成的 manifest.json 注入带完整版本号的 URLonerror 回调并 fallback 到内联兜底样式(仅关键视觉元素,如按钮边框、字体大小) 底部插入 —— 浏览器不会等待它完成再渲染,极易造成 FOUC(Flash of Unstyled Content)真正难的不是写多少 CSS,而是让每个页面只拿到它真正需要的那一小段,并且确保这段代码在任何网络条件下都可预期地生效。