コンテンツにスキップ

Tailwind

Tailwind” の投稿: 2 件

Astro Starlight(Tailwand v3)にshadcn/uiを導入する

Astro StarlightとTailwind CSSを使用したプロジェクトに、shadcn/uiを導入する方法を紹介します。

shadcn/uiは、美しくカスタマイズ可能なUIコンポーネントを提供するライブラリです。

Starlightは現状、Tailwind CSS v3を使用しているため、shadcn/uiも同様にTailwind CSS v3で導入します。

前提条件

  • 既にAstro Starlightプロジェクトが作成されていること
  • Tailwind CSS v3が導入されていること

shadcn/uiの導入

  1. プロジェクトのルートディレクトリにあるtsconfig.jsonファイルを開き、以下のコードを追加してパスを解決します:

    tsconfig.json
    {
    "compilerOptions": {
    // ...
    "baseUrl": ".",
    "paths": {
    "@/*": [
    "./src/*"
    ]
    }
    // ...
    }
    }
  2. shadcn/uiをセットアップするために、以下のコマンドを実行します:

    Terminal window
    pnpm dlx [email protected] init

  3. このコマンドを実行すると、プロジェクトの設定に関するいくつかの質問が表示されます。

    プロジェクトに適した選択肢を選んでください。

    私は下記のように選択しました。

    Image from Gyazo

  4. reactがインストールされていない場合、以下のコマンドを実行してreactをインストールします:

    Terminal window
    pnpm astro add react

  5. shadcn/uiを追加すると下記のようにCSSが追加されます。

    src/styles/tailwind.css
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
    @layer base {
    :root {
    --background: 0 0% 100%;
    --foreground: 240 10% 3.9%;
    --card: 0 0% 100%;
    --card-foreground: 240 10% 3.9%;
    --popover: 0 0% 100%;
    --popover-foreground: 240 10% 3.9%;
    --primary: 240 5.9% 10%;
    --primary-foreground: 0 0% 98%;
    --secondary: 240 4.8% 95.9%;
    --secondary-foreground: 240 5.9% 10%;
    --muted: 240 4.8% 95.9%;
    --muted-foreground: 240 3.8% 46.1%;
    --accent: 240 4.8% 95.9%;
    --accent-foreground: 240 5.9% 10%;
    --destructive: 0 84.2% 60.2%;
    --destructive-foreground: 0 0% 98%;
    --border: 240 5.9% 90%;
    --input: 240 5.9% 90%;
    --ring: 240 10% 3.9%;
    --chart-1: 12 76% 61%;
    --chart-2: 173 58% 39%;
    --chart-3: 197 37% 24%;
    --chart-4: 43 74% 66%;
    --chart-5: 27 87% 67%;
    --radius: 0.5rem
    }
    .dark {
    --background: 240 10% 3.9%;
    --foreground: 0 0% 98%;
    --card: 240 10% 3.9%;
    --card-foreground: 0 0% 98%;
    --popover: 240 10% 3.9%;
    --popover-foreground: 0 0% 98%;
    --primary: 0 0% 98%;
    --primary-foreground: 240 5.9% 10%;
    --secondary: 240 3.7% 15.9%;
    --secondary-foreground: 0 0% 98%;
    --muted: 240 3.7% 15.9%;
    --muted-foreground: 240 5% 64.9%;
    --accent: 240 3.7% 15.9%;
    --accent-foreground: 0 0% 98%;
    --destructive: 0 62.8% 30.6%;
    --destructive-foreground: 0 0% 98%;
    --border: 240 3.7% 15.9%;
    --input: 240 3.7% 15.9%;
    --ring: 240 4.9% 83.9%;
    --chart-1: 220 70% 50%;
    --chart-2: 160 60% 45%;
    --chart-3: 30 80% 55%;
    --chart-4: 280 65% 60%;
    --chart-5: 340 75% 55%
    }
    }
    @layer base {
    * {
    @apply border-border;
    }
    body {
    @apply bg-background text-foreground;
    }
    }

    いくつかのカスタムプロパティが追加され、ダークモードのスタイルも追加されます。

    これによってStarlightのデフォルトのスタイルが上書きされます。

    適宜カスタマイズしましょう。

    ちなみに、Starlightとshadcn/uiはダークモードとライトモードの設定が逆なので入れ替えておく必要があります。

    フレームワークダークモードライトモード
    Starlight:root:root[data-theme=“light”]
    shadcn/ui.dark:root

    注記:

    • shadcn/uiの元の設定(ダークモード: .dark、ライトモード: :root)を変更しています。
    • ダークモードとライトモードの設定を統一するために、shadcn/uiの.dark:rootに、:root:root[data-theme="light"]に変更しています。
    • この変更により、StarlightとshadcnのCSS設定が一致し、両フレームワークで同じセレクタを使用してダークモードとライトモードのスタイルを定義できるようになります。

コンポーネントの追加

セットアップが完了したら、shadcn/uiのコンポーネントを追加できます。

例えば、Buttonコンポーネントを追加するには以下のコマンドを実行します。

Terminal window
pnpm dlx [email protected] add button

コンポーネントの使用

追加したコンポーネントは、以下のように使用できます。

例えば、src/docs/index.mdxファイル

src/docs/index.mdx
import { Button } from "@/components/ui/button"
<Button>Click me</Button>

Astro StarlightでTailwind CSSを利用する

AstroのドキュメントテンプレートStarlightでTailwind CSSを使ってみたので備忘録です。

Tailwind CSSの追加

既存のStarlightプロジェクトにTailwind CSSを追加します。(新規の場合はこちら)

  1. AstroのTailwindインテグレーションを追加:

    Terminal window
    pnpm astro add @astrojs/tailwind

  2. StarlightのTailwindプラグインをインストール:

    Terminal window
    pnpm add @astrojs/starlight-tailwind
  3. Tailwindのベーススタイル用のCSSファイルを作成(例:src/styles/tailwind.css)します。

    src/styles/tailwind.css
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
  4. astro.config.mjsを更新します

    astro.config.mjs
    import { defineConfig } from 'astro/config';
    import starlight from '@astrojs/starlight';
    import tailwind from '@astrojs/tailwind';
    export default defineConfig({
    integrations: [
    starlight({
    title: 'Tailwindを使ったドキュメント',
    customCss: [
    './src/styles/tailwind.css',
    ],
    }),
    tailwind({
    applyBaseStyles: false,
    }),
    ],
    });
  5. tailwind.config.mjsにStarlightのTailwindプラグインを追加します。

    tailwind.config.mjs
    import starlightPlugin from '@astrojs/starlight-tailwind';
    /** @type {import('tailwindcss').Config} */
    export default {
    content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
    plugins: [starlightPlugin()],
    };

Tailwindを使ったStarlightのスタイリング

StarlightはTailwindのテーマ設定値をUIで使用します。

例としてリンクなどに使われるアクセントカラーを変更する方法を紹介します。

colors.accent:リンクと現在のアイテムのハイライト

今回はtailwindの色設定を利用します。

色を確認したい場合は、Tailwind CSSの公式サイトを参照してください。

tailwind.config.mjs
import starlightPlugin from '@astrojs/starlight-tailwind';
import colors from 'tailwindcss/colors';
/** @type {import('tailwindcss').Config} */
export default {
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
theme: {
extend: {
colors: {
accent: colors.red,
},
},
},
plugins: [starlightPlugin()],
};

実行すると下記のようにカラーが変更されます。

Image from Gyazo

カスタムテーマの作成

Starlightのカラーテーマは、カスタムプロパティを上書きしてコントロールできます。

Starlightは、テーマカラーエディタを提供しています。

下記のリンクからテーマカラーエディタにアクセスできます。