mcpField
T
tailwindcss-fundamentals-v4

tailwindcss-fundamentals-v4

github.com/josiahsiegelデザイン・UI59389 回インストール19 週間前に更新
リポジトリ

tailwindcss-fundamentals-v4 について

tailwindcss-fundamentals-v4は、Tailwind CSS v4の設定と利用を扱うリファレンススキルです。CSSファーストのテーマ、ユーティリティ、バリアント、プラグイン、移行時の注意点をまとめています。

主な機能

  1. 01@themeによるCSSファースト設定
  2. 02カスタムユーティリティとバリアント
  3. 03@pluginによるプラグイン読み込み
  4. 04組み込みCSS処理機能
  5. 05Tailwind CSS v3からの移行要点

活用シーン

  1. 01プロジェクトへのTailwind CSS v4導入
  2. 02デザイントークンとカスタムユーティリティの定義
  3. 03Tailwind CSS v3を使うプロジェクトの更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill tailwindcss-fundamentals-v4

インストール後、Claude Code で/tailwindcss-fundamentals-v4を入力して読み込まれたか確認します。

同梱ファイルreferences/advanced-theme-patterns.mdreferences/custom-utilities-guide.md

詳細

Tailwind CSS v4 の基礎(2025/2026)

概要

Tailwind CSS v4.0 は2025年1月22日にリリースされ、Rust ベースのエンジン、CSS ファーストの設定、大幅なパフォーマンス向上を伴う全面的な書き直しが行われました。

v3 からの主な変更点
機能v3v4
設定JavaScript(tailwind.config.js)CSS ファースト(@theme ディレクティブ)
エンジンNode.jsRust(10倍高速)
色形式hex/rgbOKLCH(知覚的に均一)
プラグインJS ファイル@plugin ディレクティブ
カスタムユーティリティJS 設定@utility ディレクティブ
PostCSS のインポートpostcss-import組み込み
Autoprefixer必須組み込み
CSS ネストpostcss-nested組み込み
コンテンツ検出明示的な設定自動

インストール

Vite プロジェクト(推奨)
npm install -D tailwindcss @tailwindcss/vite
// vite.config.js
import tailwindcss from '@tailwindcss/vite'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [tailwindcss()]
})
PostCSS プロジェクト
npm install -D tailwindcss @tailwindcss/postcss
// postcss.config.mjs
export default {
  plugins: {
    '@tailwindcss/postcss': {}
  }
}
CSS エントリーポイント
/* app.css - The only required CSS file */
@import "tailwindcss";

CSS ファーストの設定

@theme ディレクティブ

tailwind.config.js を CSS ベースの設定に置き換えます。

@import "tailwindcss";

@theme {
  /* Colors using modern oklch */
  --color-primary: oklch(0.6 0.2 250);
  --color-secondary: oklch(0.7 0.15 180);
  --color-accent: oklch(0.8 0.2 30);

  /* Typography */
  --font-display: "Satoshi", sans-serif;
  --font-body: "Inter", sans-serif;

  /* Custom spacing */
  --spacing-xs: 0.25rem;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 2rem;
  --spacing-xl: 4rem;

  /* Custom breakpoints */
  --breakpoint-xs: 475px;
  --breakpoint-3xl: 1920px;
}
テーマ変数リファレンス
カテゴリ変数パターン例
色--color-*--color-brand-500
フォント--font-*--font-heading
余白--spacing-*--spacing-4
ブレークポイント--breakpoint-*--breakpoint-3xl
角丸--radius-*--radius-lg
影--shadow-*--shadow-xl
アニメーション--animate-*--animate-fade-in
イージング--ease-*--ease-bounce
デフォルト設定の無効化
@theme {
  /* Start fresh - disable all default theme values */
  --*: initial;

  /* Define only what you need */
  --spacing: 4px;
  --font-body: Inter, sans-serif;
  --color-primary: oklch(0.72 0.11 221.19);
  --color-secondary: oklch(0.74 0.17 40.24);
}

カスタムユーティリティ

静的ユーティリティ
/* Define custom utility in CSS */
@utility content-auto {
  content-visibility: auto;
}

@utility text-balance {
  text-wrap: balance;
}

@utility scrollbar-hide {
  -ms-overflow-style: none;
  scrollbar-width: none;
}

@utility scrollbar-hide::-webkit-scrollbar {
  display: none;
}

使用方法:

<div class="content-auto scrollbar-hide">
  <h1 class="text-balance">Long headline that should balance nicely</h1>
</div>
機能的ユーティリティ
/* Utility that accepts values */
@utility tab-* {
  tab-size: --value(integer);
}

@utility text-shadow-* {
  text-shadow: 0 0 --value([length]) currentColor;
}

/* With theme reference */
@utility gap-safe-* {
  gap: max(--value(--spacing-*), env(safe-area-inset-bottom));
}

使用方法:

<pre class="tab-4">Code with 4-space tabs</pre>
<h1 class="text-shadow-[2px]">Glowing text</h1>
<div class="gap-safe-4">Safe area aware gap</div>

カスタムバリアント

@custom-variant ディレクティブ
/* Dark mode with selector */
@custom-variant dark (&:where(.dark, .dark *));

/* Custom state variants */
@custom-variant hocus (&:hover, &:focus);
@custom-variant group-hocus (:merge(.group):hover &, :merge(.group):focus &);

/* Data attribute variants */
@custom-variant data-loading (&[data-loading="true"]);
@custom-variant data-active (&[data-state="active"]);

/* Child selectors */
@custom-variant children (& > *);
@custom-variant not-first (& > *:not(:first-child));

使用方法:

<button class="hocus:bg-blue-600">Hover or focus</button>
<div class="data-loading:opacity-50" data-loading="true">Loading...</div>
<ul class="children:border-b not-first:pt-2">
  <li>Item 1</li>
  <li>Item 2</li>
</ul>

プラグインの読み込み

@plugin ディレクティブ
@import "tailwindcss";

/* Load official plugins */
@plugin "@tailwindcss/typography";
@plugin "@tailwindcss/forms";
@plugin "@tailwindcss/container-queries";

/* Load local plugin */
@plugin "./my-plugin.js";
オプション付きプラグイン
@plugin "@tailwindcss/typography" {
  className: wysiwyg;
}

@plugin "@tailwindcss/forms" {
  strategy: class;
}

プレフィックスの使用

@import "tailwindcss" prefix(tw);

@theme {
  /* Define without prefix */
  --font-display: "Satoshi", sans-serif;
}

<div class="tw:flex tw:bg-red-500 tw:hover:bg-red-600">
  Content
</div>

生成される CSS 変数にはプレフィックスが含まれます。

:root {
  --tw-font-display: "Satoshi", sans-serif;
}

コード内の CSS 変数

theme() を var() に置き換える
/* v3 approach (deprecated) */
.old-way {
  background-color: theme(colors.red.500);
}

/* v4 approach */
.new-way {
  background-color: var(--color-red-500);
}

/* In media queries, use CSS variable names */
@media (width >= theme(--breakpoint-xl)) {
  /* styles */
}

コアユーティリティのカテゴリ

レイアウト

<div class="flex flex-col md:flex-row items-center justify-between gap-4">


<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">


<div class="container mx-auto px-4">
余白

<div class="p-4 px-6 py-2">


<div class="m-4 mx-auto my-8">


<div class="gap-4 gap-x-6 gap-y-2">
タイポグラフィ

<p class="text-sm md:text-base lg:text-lg">


<h1 class="font-bold">


<p class="text-gray-600 dark:text-gray-300">


<p class="leading-relaxed">
色

<div class="bg-white dark:bg-gray-900">


<p class="text-blue-600">


<div class="border border-gray-200">


<button class="focus:ring-2 focus:ring-blue-500">
サイズ

<div class="w-full md:w-1/2 lg:w-1/3">


<div class="h-screen min-h-[500px]">


<div class="max-w-xl mx-auto">

任意の値


<div class="top-[117px] left-[calc(50%-4rem)]">


<div class="bg-[var(--my-color)]">


<div class="grid-cols-[1fr_500px_2fr]">

Important 修飾子


<div class="!mt-0">


<div class="hover:!bg-red-500">

組み込み機能(設定不要)

機能v3 で必要なものv4
@import の処理postcss-import組み込み
ベンダープレフィックスの付与autoprefixer組み込み
CSS ネストpostcss-nested組み込み
コンテンツ検出content 設定自動

レイヤー

/* Use native CSS layers */
@layer base {
  h1 {
    @apply text-2xl font-bold;
  }
}

@layer components {
  .btn {
    @apply px-4 py-2 rounded font-medium;
  }
}

@layer utilities {
  /* Custom utilities via @utility directive instead */
}

ベストプラクティス(2025/2026)

1. デザインシステムに OKLCH カラーを使用する

OKLCH は知覚的に均一な色、より優れたグラデーション、広色域への対応を実現します。

@theme {
  /* OKLCH format: oklch(lightness chroma hue) */
  /* Lightness: 0-1, Chroma: 0-0.4, Hue: 0-360 */

  /* Primary palette - adjust L for shades */
  --color-primary-50: oklch(0.97 0.02 250);
  --color-primary-100: oklch(0.93 0.04 250);
  --color-primary-500: oklch(0.55 0.2 250);  /* Base */
  --color-primary-600: oklch(0.48 0.2 250);
  --color-primary-900: oklch(0.27 0.12 250);

  /* Semantic colors */
  --color-success: oklch(0.6 0.15 145);
  --color-warning: oklch(0.75 0.15 65);
  --color-error: oklch(0.55 0.2 25);
}
2. 流動的なタイポグラフィを実装する

ブレークポイントによる段差のない滑らかな拡大縮小を実現します。

@theme {
  /* Fluid type scale using clamp() */
  /* clamp(min, preferred, max) */
  --text-fluid-xs: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);
  --text-fluid-sm: clamp(0.875rem, 0.8rem + 0.375vw, 1rem);
  --text-fluid-base: clamp(1rem, 0.9rem + 0.5vw, 1.125rem);
  --text-fluid-lg: clamp(1.125rem, 1rem + 0.625vw, 1.25rem);
  --text-fluid-xl: clamp(1.25rem, 1rem + 1.25vw, 1.5rem);
  --text-fluid-2xl: clamp(1.5rem, 1.1rem + 2vw, 2rem);
  --text-fluid-3xl: clamp(1.875rem, 1.2rem + 3.375vw, 2.5rem);
  --text-fluid-4xl: clamp(2.25rem, 1rem + 6.25vw, 3.5rem);
}

重要:アクセシビリティを確保するため、vw は必ず rem と組み合わせてください(ズームに対応します)。

3. 流動的な余白システム
@theme {
  /* Fluid spacing that scales with viewport */
  --spacing-fluid-sm: clamp(0.5rem, 0.4rem + 0.5vw, 1rem);
  --spacing-fluid-md: clamp(1rem, 0.75rem + 1.25vw, 2rem);
  --spacing-fluid-lg: clamp(2rem, 1rem + 3vw, 4rem);
  --spacing-fluid-section: clamp(4rem, 2rem + 8vw, 8rem);
}
4. テーマをカテゴリ別に整理する
@theme {
  /* === Colors === */
  --color-primary: oklch(0.6 0.2 250);
  --color-secondary: oklch(0.7 0.15 180);
  --color-success: oklch(0.6 0.15 145);
  --color-error: oklch(0.55 0.2 25);

  /* === Typography === */
  --font-sans: 'Inter Variable', system-ui, sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, monospace;

  /* === Fluid Typography === */
  --text-fluid-base: clamp(1rem, 0.9rem + 0.5vw, 1.25rem);
  --text-fluid-lg: clamp(1.25rem, 1rem + 1.25vw, 2rem);

  /* === Spacing === */
  --spacing-page: 2rem;
  --spacing-fluid-section: clamp(4rem, 2rem + 8vw, 8rem);

  /* === Border Radius === */
  --radius-sm: 0.25rem;
  --radius-md: 0.5rem;
  --radius-lg: 0.75rem;

  /* === Shadows === */
  --shadow-sm: 0 1px 2px oklch(0 0 0 / 0.05);
  --shadow-md: 0 4px 6px oklch(0 0 0 / 0.07);

  /* === Easing === */
  --ease-fluid: cubic-bezier(0.3, 0, 0, 1);
  --ease-snappy: cubic-bezier(0.2, 0, 0, 1);
}
5. @utility の定義はシンプルに保つ
/* Good - single purpose utilities */
@utility truncate-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

@utility text-balance {
  text-wrap: balance;
}

@utility content-auto {
  content-visibility: auto;
  contain-intrinsic-size: auto 500px;
}

/* Safe area utilities for notched devices */
@utility safe-area-pb {
  padding-bottom: env(safe-area-inset-bottom);
}

@utility safe-area-pt {
  padding-top: env(safe-area-inset-top);
}

/* Avoid - too complex, use components instead */
@utility card-fancy {
  /* Too many properties - use @layer components */
}
6. モバイルファーストのクラス順序

レスポンシブクラスは常に段階的に構成してください。


<div class="
  text-sm md:text-base lg:text-lg
  p-4 md:p-6 lg:p-8
  grid-cols-1 md:grid-cols-2 lg:grid-cols-3
">
  Content
</div>
7. アクセシブルなインタラクティブ要素

<button class="
  min-h-11 min-w-11 px-4 py-2.5
  bg-primary-600 hover:bg-primary-700 text-white
  rounded-lg font-medium
  focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2
  transition-colors motion-reduce:transition-none
">
  Button Text
</button>

よくある移行時の問題

ボーダーのデフォルト色
/* v3: border used gray-200 by default */
/* v4: border uses currentColor */

/* Fix: explicitly set color */
@theme {
  --default-border-color: var(--color-gray-200);
}
リングのデフォルト
/* v3: ring was 3px blue-500 */
/* v4: ring is 1px currentColor */

/* Fix: restore v3 behavior */
@theme {
  --default-ring-width: 3px;
  --default-ring-color: var(--color-blue-500);
}
ボタンのカーソル
/* v4: buttons use cursor: default */
/* Fix: add pointer globally if needed */
button {
  cursor: pointer;
}

コメント