Storybook 里 CSS 样式不生效是怎么回事?
我在 Storybook 里写了个按钮组件,本地开发时样式正常,但放到 Storybook 里就完全没样式了。我确定已经 import 了 CSS 文件,也试过在 .storybook/preview.js 里全局引入,但还是不行。
比如下面这段简单的按钮样式,在 Storybook 预览里完全没被应用:
.my-button {
padding: 8px 16px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
是不是 Storybook 的 webpack 配置没处理 CSS?我用的是 Vite + React,没动过 Storybook 的默认配置。
先检查一下你的 CSS 是怎么引入的。在 preview.js 里这样写:
路径要对,如果你的 CSS 在 src 目录下就这样引。
如果还不行,很可能是 PostCSS 配置没加载到。Storybook 7+ 用 Vite 但不一定自动读你根目录的 postcss.config.js。
解决办法是在 .storybook/main.js 里加个配置:
其实最省心的办法是直接装 @storybook/addon-postcss,然后在 main.js 里加上:
装一下:
装完重启 storybook,一般就 OK 了。
还有一种情况,如果你用的是 CSS Modules(类名被哈希了的那种),那在组件里要这样写:
然后在组件里:
这样 Storybook 就能正确识别了。
你先试一下装 addon-postcss 这个方法,十有八九能解决。
在
.storybook/main.js里找到stories配置那块,加个features开关,或者直接改core里的 builder 和 renderer,但最简单的办法是:然后在
.storybook/preview.js里全局引入你写的 CSS 文件,比如:如果你用的是 CSS Modules 或者 Tailwind 之类的,那还得额外配置 Vite 的插件,比如
storybook-react-vite默认不处理 PostCSS,得自己加vite.config.js里配置好,再让 Storybook 继承这个配置。我之前踩过这坑,以为 Storybook 自动吃 CSS,结果发现它用的是 Vite 的默认配置,没加
css处理链,所以你得确认vite.config.js里有没有css配置项,或者直接把 Storybook 的 Vite 配置指向你主项目用的那个 config。