GatsbyにTailwind CSSを導入する
Tailwind CSSとは
一言で言うとまあCSSフレームワークなのですが、BootstrapやBulmaといったものとは少し異なります。
例えば、CSSフレームワークでよくありがちな、角が少し丸まった、背景に色がついていて、マウスホバーすると色が変わる...といったボタンを作る場合、Bootstrapでは以下のようになります。
<button type="button" class="btn btn-primary">ボタン</button>
予め用意されたクラスを書いて一発ドンです。
一方、Tailwind CSSの場合は以下のようになります。
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">ボタン</button>
Bootstrapと比べるとかなり長ったらしいですね...
それぞれのクラスは以下のような意味を持っています。
class | 説明 |
---|---|
bg-blue-500 | 背景色を青色にする(数値は濃さ) |
hover:bg-blue-700 | ホバー時に少し濃い青色にする |
text-while | テキストの色を白にする |
font-bold | フォントを太文字にする |
py-2 | 垂直方向のパディングを設定 |
px-4 | 水平方向のパディングを設定 |
rounded | 角を丸くする |
と直接CSSを書いている感覚に近いようなことをしています。
なんだこれ!と思うかもしれませんが、Tailwind CSSの公式ドキュメントには以下のようなメリットが挙げられています。
メリット
- クラス名を考えるのに余計な労力を使う必要がない
- CSSが肥大化しない
- 変更を加えるのが怖くない
普段あまりCSSをゴリゴリ書くことはないのですが、
確かに、さっきmodal
クラス付けたけど別のスタイルのモーダル必要だからさっきのクラス名も変えとくか...とか
このCSSファイル変更したいけど、どこまで影響範囲あるか分からん...
みたいなこと多々あります。
そういったことを解消してくれるのですね。
あと、個人的に予めデザインされた味気ないパーツよりも、自分でカスタムしていきたい派なので、そこもGOODです。
Gatsby(React)とTailwind CSS
一般的にGatsbyでコンポーネントごとにスタイルシートを分ける場合、以下のような構成になるかと思いますが、Tailwind CSSを用いることでstylesディレクトリが不要になります。
保守性も高まるのでGatsbyとTailwind CSSとの相性は良さそうです。
src
├── component
│ ├── header.js
│ ├── main.js
│ └── footer.js
│
└── styles
├── header.css
├── main.css
└── footer.css
GatsbyにTailwind CSSを導入
公式ドキュメントに沿って設定を行なっていきます。
- Tailwind CSSのインストール
$ npm install -D tailwindcss postcss autoprefixer gatsby-plugin-postcss
$ npx tailwindcss init -p
init
コマンドを実行することでtailwind.config.js
とpostcss.config.js
ファイルが生成されます。
- Gatsby PostCSSプラグインを有効化する
// gatsby-config.js
module.exports = {
plugins: [
'gatsby-plugin-postcss',
// ...
],
}
- テンプレートパスの設定
// tailwind.config.js
module.exports = {
content: [
"./src/**/*.{js,jsx,ts,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
- CSSにTailwindディレクティブを追加
/* src/styles/global.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
- CSSファイルの読み込み
import './src/styles/global.css'
で完了です🎉
Discussion