缓存更新后样式没生效,是CSS缓存问题吗?
我改了页面的按钮样式,本地测试没问题,但上线后用户看到的还是旧样式。强制刷新才生效,是不是浏览器缓存没更新?
我已经在构建时给CSS文件加了hash,但好像没起作用。下面是修改后的关键样式:
.btn-primary {
background-color: #007bff;
border-color: #007bff;
color: white;
}
.btn-primary:hover {
background-color: #0056b3;
border-color: #004a99;
}
奇怪的是,network里看到请求的确实是新文件名(带新hash),但渲染出来的颜色还是旧的……这到底啥情况?
首先检查你的HTML模板里有没有重复引用旧样式文件。我踩过这个坑,明明更新了新文件,但因为旧文件也被引用了,浏览器优先用了旧样式。
再来就是服务端缓存设置的问题。如果你用nginx或者apache,检查一下静态资源的缓存策略。有时候服务器设置了太长的缓存时间,导致用户拿到的还是旧版本。
给你个简单的排查步骤:
1. 在页面上用开发者工具查看最终渲染的css规则,看看是哪个地方覆盖了你的新样式
2. 确认你的构建工具真的生成了带hash的新文件,并且html里引用的是正确的路径
3. 检查服务器配置,确保对.css文件设置了合适的缓存控制
如果要快点解决,可以在你的html模板里加个随机参数,像这样:
<link href="styles.css?v=12345678" rel="stylesheet">这样可以强制浏览器重新加载css文件。记得把?v=后面的数字改成每次发布时的时间戳或者git commit hash值。这样能确保每次上线都是最新的样式。