SSR页面加载时出现样式闪烁,怎么解决?
我在用 Next.js 做 SSR 渲染时,首页首次加载会先显示无样式的 HTML,然后才突然“跳”出 CSS,看起来很卡。明明 CSS 是内联在 head 里的,也用了 styled-jsx,但还是有 FOUC(Flash of Unstyled Content)。
我试过把关键样式提取出来放 <style> 标签里,也检查了是不是动态导入导致的,但问题还在。下面是我写的一个简单按钮样式:
.primary-btn {
background: #3b82f6;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
font-size: 14px;
}
这种 SSR 下的样式闪烁到底该怎么彻底解决?
标签在不在 SSR 输出的 HTML 中。如果不在,检查 babel 配置:
或者更省心的办法:直接换 CSS Modules。建个
Button.module.css,import 进来用,Next.js 自动处理 SSR 样式注入,基本不会闪烁。styled-jsx/babel插件,或者在 next.config.js 里启用compiler: { styledJsx: true }。如果配置没问题但还闪烁,直接在
_document.js的里手动内联你的按钮样式: