[CSS in JS] 外部のリセットCSSを使う方法
2 min read
目的
CSS in JS でも外部のリセット CSS のパッケージを利用したい。
課題
CSS in JS に渡すスタイル定義は string
である必要がある。
例えば、下記のように PostCSS などでやっていたような@import
を使うことができない。
// こういうことはできない
<Global style={`@import 'normalize.css';`} />
fs.readFileSync
を利用し、/node_modules/
内のリセット CSS ファイルを読み込んでstring
の形で CSS in JS に渡せば利用は可能である。ただ、クライアントでは事前にビルドをする仕組みを作る必要がでてきてしまうし、サーバサイド上でやるしかない。
import fs from "fs";
const resetCSS = fs.readFileSync(
"node_modules/normalize.css/normalize.css",
"utf8"
);
render(
<Global
styles={css`
${resetCSS}
`}
/>
);
存在する解決方法
emotion-resetなど Emotion 用(CSS in JS)にリセットを提供するライブラリはある。ただ、リセット CSS 本体の更新が追いつかない懸念あり。
import { Global, css } from "@emotion/react";
import emotionReset from "emotion-reset";
render(
<Global
styles={css`
${emotionReset}
`}
/>
);
おまけ
拙作のリセット CSS は、CSS の更新に追随できるように string
な CSS 定義を export
するようにした。
先述の「事前にビルドをする仕組み」を持っているような状態。
import { css, Global } from "@emotion/react";
import resetCSS from "shokika.css/dist/string";
const globalStyle = css`
${resetCSS}
`;
export const CSSReset = () => <Global styles={globalStyle} />;