
Tailwind CSSを導入した
Tailwind CSS を導入してみた。
ここ最近のWeb界隈ではCSSを自前で書くより、Tailwind CSSを使うことがデファクトスタンダードになりつつあるような気がしている。 正直、そんなに使ったこともないので、使ってみることで慣れておく。
導入手順
- AstroのTailwind CSSインテグレーションを追加
- Tailwind CSS向けにレイアウト・スタイルシートを整備
これらをやっていく。
AstroのTailwind CSSインテグレーションを追加
まずは Astroのドキュメント1 の手順通りに進めて、Astroにインテグレーションを追加する。
以下のコマンドを実行する。
pnpm astro add tailwind
すると以下のことをしてくれる。
- AstroでTailwind CSSを利用するために必要なパッケージのインストール
astro.config.mjs
にTailwind CSSを利用するための設定の追記
出力の最後に、自分でやらなきゃいけないことを指示してくれている。
- 共通レイアウトにTailwindスタイルシートを追加する
今は src/styles/global.css
がそれにあたるので、ここに追加する。
@import 'tailwindcss';
最後はレイアウトファイルでこのCSSをインポートすればよい。
---
import '../styles/global.css'
---
でも、Astroのブログテンプレートは全ページの共通レイアウトがなく、ブログの記事ページ向けのレイアウト しか存在しない。
index.astro
などは <html>
からすべて書かれている。
ちょっとイマイチな気がするので、全ページ共通のレイアウトを作っていく。
Tailwind CSS向けにレイアウト・スタイルシートを整備
というわけで、<RootLayout>
コンポーネントを作る。
---
// src/layouts/RootLayout.astro
import BaseHead from '../components/BaseHead.astro'
import Footer from '../components/Footer.astro'
import Header from '../components/Header.astro'
import { SITE_DESCRIPTION, SITE_TITLE } from '../consts'
import '../styles/global.css'
const { title, description } = Astro.props
---
<!doctype html>
<html lang="ja">
<head>
<BaseHead
title={title ? `${title} | ${SITE_TITLE}` : SITE_TITLE}
description={description ?? SITE_DESCRIPTION}
/>
</head>
<body>
<Header />
<main>
<slot />
</main>
<Footer />
</body>
</html>
ベースは元々の index.astro
で、h1とpがあったところを <slot />
にして、propsでtitleとdescriptionを受け取れるようにして、global.cssをインポートしている。
あとはすべてのページでこのRootLayoutを使うようにコードを書き換えていけば、完成。
実際のPull Request
上記の手順で行った変更の全容は daiksud/daiksud#4 で確認できる。
Footnotes
-
ここではあえて英語のドキュメントのリンクにしている。というのも、英語版の方が明らかに充実していて、日本語版ではよく分からなかった。 ↩