SSR页面加载时出现样式闪烁,怎么解决?

光纬 Dev 阅读 2

我在用 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 下的样式闪烁到底该怎么彻底解决?

我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
卫红的笔记
问题在于 styled-jsx 在 SSR 时需要 babel 插件正确编译才能输出内联样式。检查你的 babel 配置,确保有 styled-jsx/babel 插件,或者在 next.config.js 里启用 compiler: { styledJsx: true }

如果配置没问题但还闪烁,直接在 _document.js 里手动内联你的按钮样式:

// pages/_document.js
import { Html, Head, Main, NextScript } from 'next/document'

export default function Document() {
return (