デザインシステム

Nuxt UIのデザインシステムは、シンプルなテーマと簡単なカスタマイズのためにTailwind CSSを使用します。

Tailwind CSS

Tailwind CSSはCSSファーストの設定を使用しており、CSSで直接@themeディレクティブを使用してデザイントークンを定義できます。これにより、テーマは移植性、保守性、カスタマイズが容易になります。

app/assets/css/main.css
@import "tailwindcss";
@import "@nuxt/ui";

@theme {
  /* Your custom design tokens go here */
}
利用可能なテーマ変数のカスタマイズオプションについては、Tailwind CSSドキュメントを参照してください。
Tailwind CSS v4はPreflightを変更し、ブラウザのデフォルトに合わせてボタンがcursor: pointerの代わりにcursor: defaultを使用するようにしました。ポインターカーソルをグローバルに復元したい場合は、以下の基本スタイルをCSSに追加してください。
app/assets/css/main.css
@layer base {
  button:not(:disabled),
  [role="button"]:not(:disabled) {
    cursor: pointer;
  }
}

フォント

--font-*テーマ変数を使用してプロジェクトのフォントファミリーユーティリティをカスタマイズします。

app/assets/css/main.css
@import "tailwindcss";
@import "@nuxt/ui";

@theme {
  --font-sans: 'Public Sans', system-ui, sans-serif;
  --font-mono: 'JetBrains Mono', monospace;
}
ここで定義されたフォントは@nuxt/fontsモジュールによって自動的にロードされ最適化される。

カラー

--color-*テーマ変数を使用して色をカスタマイズします。またはデフォルトの色を上書きします。

app/assets/css/main.css
@import "tailwindcss";
@import "@nuxt/ui";

@theme static {
  /* Override default green color */
  --color-green-50: #EFFDF5;
  --color-green-100: #D9FBE8;
  --color-green-200: #B3F5D1;
  --color-green-300: #75EDAE;
  --color-green-400: #00DC82;
  --color-green-500: #00C16A;
  --color-green-600: #00A155;
  --color-green-700: #007F45;
  --color-green-800: #016538;
  --color-green-900: #0A5331;
  --color-green-950: #052E16;

  /* Define new custom color */
  --color-brand-50: #fef2f2;
  --color-brand-100: #fee2e2;
  --color-brand-200: #fecaca;
  --color-brand-300: #fca5a5;
  --color-brand-400: #f87171;
  --color-brand-500: #ef4444;
  --color-brand-600: #dc2626;
  --color-brand-700: #b91c1c;
  --color-brand-800: #991b1b;
  --color-brand-900: #7f1d1d;
  --color-brand-950: #450a0a;
}
カスタムカラーを追加する場合は、各カラーに50から950のすべての色合いを定義してください。

ブレークポイント

--breakpoint-*テーマ変数を使用してブレークポイントをカスタマイズします。

app/assets/css/main.css
@import "tailwindcss";
@import "@nuxt/ui";

@theme {
  --breakpoint-3xl: 1920px;
  --breakpoint-4xl: 2560px;
  --breakpoint-5xl: 3840px;
}

Motion

--ease-*テーマ変数を使用して、xをプロジェクト内のアニメーションと動きのトランジションのeasing](をカスタマイズします。

app/assets/css/main.css
@import "tailwindcss";
@import "@nuxt/ui";

@theme {
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
}

--ease-outではアニメーションの入力と終了、--ease-in-outではアニメーションの読み込みが不定です。

prefers-reduced-motionを設定すると、オーバーレイはスケーリングやスライドの代わりにフェードし、移動遷移は無効になります。

Colorシステム

Nuxt UIのカラーシステムは、特定のカラー値ではなく、semanticという名前のを中心に設計されています。このアプローチにより、UIのメンテナンス性が向上し、テーマの切り替えが容易になります。

セマンティックカラー

Nuxt UIは、色のforpusposeを記述するセマンティックなカラーエイリアスを提供します。各エイリアスは@theme設定の色に基づいて定義されます。default Tailwind CSS paletteに加えて、定義した色を指定することができます。

色デフォルト説明
primarygreen主なCTA、アクティブナビゲーション、ブランド要素、重要なリンク
secondaryblueセカンダリボタン、代替アクション、補完的なUI要素
successgreen成功メッセージ、完了状態、肯定的な確認
infoblue情報アラート、ツールチップ、ヘルプテキスト、中立通知
warningyellow警告メッセージ、保留中の状態、注意が必要な項目
errorredエラーメッセージ、検証エラー、破壊的なアクション
neutralslateテキスト、ボーダー、背景、無効状態

これらのセマンティックカラーは、Nuxt UIコンポーネントのcolorプロパティで使用できます。

<template>
  <UButton color="primary">Save Changes</UButton>
</template>
ヘッダーの:prose—icon{name="i-lucide-palette" class="text-primary"}テーマメニューを試して、異なるカラースキームがUI全体にどのように影響するかを即座に確認してください。

Runtime設定

実行時にapp.config.tsファイルのui.colorsキーの下でこれらの色を設定でき、サーバーを再起動せずに動的なテーマをカスタマイズできます。

app/app.config.ts
export default defineAppConfig({
  ui: {
    colors: {
      primary: 'blue',
      secondary: 'purple',
      neutral: 'zinc'
    }
  }
})

これらの色は、実行時にvite.config.tsファイルのui.colorsキーで設定でき、動的なテーマカスタマイズが可能です。

vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      ui: {
        colors: {
          primary: 'blue',
          secondary: 'purple',
          neutral: 'zinc'
        }
      }
    })
  ]
})
テーマに存在する色のみを使用できます。どちらか:

色を拡張

tertiaryカラーを追加するなど、デフォルト以上のセマンティックカラーを定義することもできます:

まず、nuxt.config.tsにui.theme.colorsキーの下に新しい色を登録します。

nuxt.config.ts
export default defineNuxtConfig({
  ui: {
    theme: {
      colors: [
        'primary',
        'secondary',
        'tertiary',
        'info',
        'success',
        'warning',
        'error'
      ]
    }
  }
})

次に、app.config.tsのui.colorsキーの下に割り当てます:

app/app.config.ts
export default defineAppConfig({
  ui: {
    colors: {
      primary: 'blue',
      secondary: 'purple',
      tertiary: 'indigo'
    }
  }
})

vite.config.tsファイルに新しい色を登録して割り当てます。

vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      theme: {
        colors: [
          'primary',
          'secondary',
          'tertiary',
          'info',
          'success',
          'warning',
          'error'
        ]
      },
      ui: {
        colors: {
          primary: 'blue',
          secondary: 'purple',
          tertiary: 'indigo'
        }
      }
    })
  ]
})

最後に、colorプロパティをサポートするコンポーネント、またはをクラスとしてサポートするコンポーネントでこの新しい色を使用します。

<UButton color="tertiary">
  Special Action
</UButton>