Skip to content

🎨 テーマカスタマイズ - 唯一無二の Vant スタイルを作る

🌈 テーマカスタマイズの世界へようこそ!

アプリに独自のビジュアルスタイルを持たせたいですか?Vant は強力で柔軟なテーマカスタマイズ機能を提供し、まるでカラーパレットのように思い通りの配色を作り上げられます!

こんなニーズにも対応できます:

  • 🎯 ブランドカラーへの最適化
  • 🌙 ダークモード対応
  • 🎨 個性的なスタイル表現
  • 📱 マルチテーマ切り替え

Vant ならすべて簡単に実現できます!

⚡ クイックスタート

🎯 方法1:CSS 変数の上書き(推奨)

最も簡単で直接的な方法です。服を着替えるように、手軽に切り替えできます!

css
/* グローバルスタイルファイルで */
:root {
  /* 🎨 メインカラー - アプリのブランド色 */
  --van-primary-color: #07c160;
  
  /* 🔴 危険色 - 警告や削除に使用 */
  --van-danger-color: #ee0a24;
  
  /* 🟠 警告色 - 注意喚起に使用 */
  --van-warning-color: #ff976a;
  
  /* ✅ 成功色 - 成功状態の表示に使用 */
  --van-success-color: #07c160;
  
  /* ℹ️ 情報色 - 一般の情報提示に使用 */
  --van-info-color: #1989fa;
}

✨ 即時反映:保存後、アプリに新しいテーマカラーが適用されます!

🎨 方法2:Less/Sass 変数のカスタマイズ

Less や Sass を使用している場合、より強力なカスタマイズが可能です:

less
// theme.less
@primary-color: #1890ff;
@success-color: #52c41a;
@warning-color: #faad14;
@danger-color: #f5222d;

// Vant のスタイルをインポート
@import '~vant/lib/index.less';

🌟 コアテーマ変数

🎨 カラースキーム

Vant のカラースキームは丁寧に設計されており、各色には明確な意味付けがあります:

css
:root {
  /* 🎯 メインカラー系 - ブランドの核となる色 */
  --van-primary-color: #1989fa;
  --van-primary-color-dark: #0960bd;
  --van-primary-color-light: #73b3fa;
  
  /* 🔴 危険カラー系 - エラーと警告 */
  --van-danger-color: #ee0a24;
  --van-danger-color-dark: #ad0e23;
  --van-danger-color-light: #f54e2e;
  
  /* 🟠 警告カラー系 - 注意が必要な情報 */
  --van-warning-color: #ff976a;
  --van-warning-color-dark: #ed6a0c;
  --van-warning-color-light: #ffad85;
  
  /* ✅ 成功カラー系 - 成功状態 */
  --van-success-color: #07c160;
  --van-success-color-dark: #059a4c;
  --van-success-color-light: #39d374;
  
  /* ℹ️ 情報カラー系 - 一般情報 */
  --van-info-color: #1989fa;
  --van-info-color-dark: #0960bd;
  --van-info-color-light: #73b3fa;
}

📐 サイズスケール

統一されたサイズ規格で、インターフェースの一貫性を高めます:

css
:root {
  /* 📏 基本サイズ */
  --van-base-font-size: 14px;
  --van-font-size-xs: 10px;
  --van-font-size-sm: 12px;
  --van-font-size-md: 14px;
  --van-font-size-lg: 16px;
  --van-font-size-xl: 18px;
  
  /* 📦 スペーシングスケール */
  --van-padding-base: 4px;
  --van-padding-xs: 8px;
  --van-padding-sm: 12px;
  --van-padding-md: 16px;
  --van-padding-lg: 24px;
  --van-padding-xl: 32px;
  
  /* 🔘 角丸スケール */
  --van-radius-sm: 2px;
  --van-radius-md: 4px;
  --van-radius-lg: 8px;
  --van-radius-max: 999px;
}

🌫️ グレースケール

緻密に調整されたグレースケールで、心地よい階調を演出します:

css
:root {
  /* 🖤 文字色 */
  --van-text-color: #323233;
  --van-text-color-2: #646566;
  --van-text-color-3: #969799;
  
  /* 🔘 枠線色 */
  --van-border-color: #ebedf0;
  --van-border-color-light: #f7f8fa;
  
  /* 🎨 背景色 */
  --van-background: #f7f8fa;
  --van-background-2: #fafafa;
}

🌙 ダークモード

🔧 ダークモードを有効化

Vant は完全なダークモード対応を内蔵しています。クラス名を追加するだけで有効化できます:

html
<!-- アプリ全体でダークモードを有効化 -->
<div class="van-theme-dark">
<!-- アプリのコンテンツ -->
</div>

🎨 ダークモード用変数

css
.van-theme-dark {
  /* 🌙 ダークモード専用カラー */
  --van-text-color: #f5f5f5;
  --van-text-color-2: #cccccc;
  --van-text-color-3: #999999;
  
  --van-background: #000000;
  --van-background-2: #1a1a1a;
  
  --van-border-color: #3a3a3c;
  --van-border-color-light: #2c2c2e;
}

🔄 テーマの動的切り替え

テーマ切り替え機能の実装:

javascript
// テーマ切り替えユーティリティ
class ThemeManager {
  constructor() {
    this.isDark = false;
    this.init();
  }
  
  init() {
    // 🔍 ローカルストレージのテーマ設定を確認
    const savedTheme = localStorage.getItem('theme');
    if (savedTheme === 'dark') {
      this.enableDarkMode();
    }
  }
  
  // 🌙 ダークモードを有効化
  enableDarkMode() {
    document.documentElement.classList.add('van-theme-dark');
    this.isDark = true;
    localStorage.setItem('theme', 'dark');
  }
  
  // ☀️ ライトモードを有効化
  enableLightMode() {
    document.documentElement.classList.remove('van-theme-dark');
    this.isDark = false;
    localStorage.setItem('theme', 'light');
  }
  
  // 🔄 テーマ切り替え
  toggle() {
    if (this.isDark) {
      this.enableLightMode();
    } else {
      this.enableDarkMode();
    }
  }
}

// 使用例
const themeManager = new ThemeManager();

// ボタン押下でテーマを切り替え
document.getElementById('theme-toggle').addEventListener('click', () => {
  themeManager.toggle();
});

🎨 実際の適用シーン

🏢 企業ブランドのカスタマイズ

企業アプリ向けの専用テーマ:

css
/* 🏢 企業ブルーテーマ */
:root {
  --van-primary-color: #0052cc;
  --van-primary-color-dark: #003d99;
  --van-primary-color-light: #4285f4;
  
  /* 🎨 アクセントカラー */
  --van-success-color: #00875a;
  --van-warning-color: #ff8b00;
  --van-danger-color: #de350b;
  
  /* 📐 角丸の調整 - よりビジネスライクに */
  --van-radius-sm: 4px;
  --van-radius-md: 6px;
  --van-radius-lg: 8px;
}

🎮 ゲームスタイルのテーマ

ゲームアプリ向けのクールなテーマ:

css
/* 🎮 ゲームスタイルテーマ */
:root {
  --van-primary-color: #ff6b35;
  --van-primary-color-dark: #e55a2b;
  --van-primary-color-light: #ff8c69;
  
  /* ⚡ 高コントラスト配色 */
  --van-success-color: #00ff88;
  --van-warning-color: #ffdd00;
  --van-danger-color: #ff3366;
  
  /* 🔥 より大きな角丸 */
  --van-radius-md: 12px;
  --van-radius-lg: 16px;
  
  /* 💫 特殊効果 */
  --van-button-primary-background: linear-gradient(135deg, #ff6b35 0%, #f7931e 100%);
}

🌸 ピンクガーリースタイル

温かく可愛いピンクテーマ:

css
/* 🌸 ピンクガーリーテーマ */
:root {
  --van-primary-color: #ff69b4;
  --van-primary-color-dark: #e91e63;
  --van-primary-color-light: #ffb3d9;
  
  /* 💕 ウォームな配色 */
  --van-success-color: #ff9999;
  --van-warning-color: #ffcc99;
  --van-danger-color: #ff6666;
  
  /* 🎀 ソフトな背景 */
  --van-background: #fff5f8;
  --van-background-2: #ffe4e9;
}

🛠️ 上級カスタマイズのコツ

🎨 コンポーネント単位のカスタマイズ

特定コンポーネントを詳細にカスタマイズ:

css
/* 🔘 ボタンコンポーネントのカスタマイズ */
.van-button--primary {
  /* 🌈 グラデーション背景 */
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  border: none;
  
  /* ✨ シャドウ効果 */
  box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
  
  /* 🎭 ホバー効果 */
  transition: all 0.3s ease;
}

.van-button--primary:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6);
}

/* 📱 ナビゲーションバーのカスタマイズ */
.van-nav-bar {
  background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
  
  /* 🎨 文字色 */
  --van-nav-bar-title-text-color: #ffffff;
  --van-nav-bar-icon-color: #ffffff;
}

🌐 レスポンシブテーマ

画面サイズに応じてテーマを調整:

css
/* 📱 モバイル向け最適化 */
@media (max-width: 768px) {
  :root {
    --van-font-size-md: 16px;
    --van-padding-md: 12px;
    --van-radius-md: 6px;
  }
}

/* 💻 デスクトップ向け最適化 */
@media (min-width: 1024px) {
  :root {
    --van-font-size-md: 14px;
    --van-padding-md: 20px;
    --van-radius-md: 8px;
  }
}

🎯 テーマ変数の動的計算

CSS 関数でスマートなテーマを作成:

css
:root {
  /* 🎨 基本色相 */
  --base-hue: 210;
  
  /* 🌈 色の動的生成 */
  --van-primary-color: hsl(var(--base-hue), 100%, 50%);
  --van-primary-color-dark: hsl(var(--base-hue), 100%, 40%);
  --van-primary-color-light: hsl(var(--base-hue), 100%, 70%);
  
  /* 📐 動的サイズ */
  --scale-factor: 1;
  --van-font-size-md: calc(14px * var(--scale-factor));
  --van-padding-md: calc(16px * var(--scale-factor));
}

/* 🔧 JavaScript による制御 */
/* 
document.documentElement.style.setProperty('--base-hue', '120'); // グリーンテーマ
document.documentElement.style.setProperty('--scale-factor', '1.2'); // 20% 拡大
*/

📚 変数一覧

🎨 カラー変数

css
:root {
  /* メインカラー系 */
  --van-primary-color: #1989fa;
  --van-success-color: #07c160;
  --van-warning-color: #ff976a;
  --van-danger-color: #ee0a24;
  --van-info-color: #1989fa;
  
  /* 文字色 */
  --van-text-color: #323233;
  --van-text-color-2: #646566;
  --van-text-color-3: #969799;
  --van-text-link-color: #576b95;
  
  /* 枠線色 */
  --van-border-color: #ebedf0;
  --van-active-color: #f2f3f5;
  --van-active-opacity: 0.6;
  
  /* 背景色 */
  --van-background: #f7f8fa;
  --van-background-2: #fafafa;
}

📐 サイズ変数

css
:root {
  /* フォントサイズ */
  --van-font-size-xs: 10px;
  --van-font-size-sm: 12px;
  --van-font-size-md: 14px;
  --van-font-size-lg: 16px;
  --van-font-size-xl: 18px;
  
  /* フォントウェイト */
  --van-font-bold: 600;
  
  /* 行の高さ */
  --van-line-height-xs: 14px;
  --van-line-height-sm: 18px;
  --van-line-height-md: 20px;
  --van-line-height-lg: 22px;
  
  /* スペーシング */
  --van-padding-base: 4px;
  --van-padding-xs: 8px;
  --van-padding-sm: 12px;
  --van-padding-md: 16px;
  --van-padding-lg: 24px;
  --van-padding-xl: 32px;
  
  /* 角丸 */
  --van-radius-sm: 2px;
  --van-radius-md: 4px;
  --van-radius-lg: 8px;
  --van-radius-max: 999px;
}

🔧 ビルドツール統合

📦 Webpack 設定

javascript
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.less$/,
        use: [
          'style-loader',
          'css-loader',
          {
            loader: 'less-loader',
            options: {
              lessOptions: {
                modifyVars: {
                  // 🎨 ビルド時にテーマ変数を注入
                  'primary-color': '#1890ff',
                  'success-color': '#52c41a',
                  'warning-color': '#faad14',
                  'error-color': '#f5222d',
                },
                javascriptEnabled: true,
              },
            },
          },
        ],
      },
    ],
  },
};

⚡ Vite 設定

javascript
// vite.config.js
import { defineConfig } from 'vite';

export default defineConfig({
  css: {
    preprocessorOptions: {
      less: {
        modifyVars: {
          // 🎨 Vite のテーマ変数設定
          'primary-color': '#1890ff',
          'success-color': '#52c41a',
        },
        javascriptEnabled: true,
      },
    },
  },
});

🎯 ベストプラクティス

✅ 推奨事項

  1. 🎨 色の一貫性を保つ

    css
    /* ✅ 推奨:意味のある色を使用 */
    --van-primary-color: #1989fa;
    --van-primary-color-dark: #0960bd;
    --van-primary-color-light: #73b3fa;
  2. 📐 デザイン規範に従う

    css
    /* ✅ 推奨:8px グリッドシステムを使用 */
    --van-padding-sm: 8px;
    --van-padding-md: 16px;
    --van-padding-lg: 24px;
  3. 🔄 テーマ切り替えに対応

    css
    /* ✅ 推奨:ダークモード用の変数を準備 */
    .van-theme-dark {
      --van-text-color: #ffffff;
      --van-background: #000000;
    }

❌ 避けるべきこと

  1. 🚫 色をハードコードする

    css
    /* ❌ 非推奨 */
    .my-button {
      background-color: #1989fa; /* 应该使用变量 */
    }
    
    /* ✅ 推奨 */
    .my-button {
      background-color: var(--van-primary-color);
    }
  2. 🚫 過度なカスタマイズ

    css
    /* ❌ 非推奨:変数を過度に変更 */
    :root {
      --van-font-size-xs: 15px; /* 破坏了尺寸体系 */
      --van-padding-sm: 13px;   /* 不符合 8px 网格 */
    }

🛠️ デバッグツール

🔍 テーマ変数ビューア

現在のテーマ変数を確認するための簡単なツール:

javascript
// テーマデバッグツール
function showThemeVariables() {
  const root = document.documentElement;
  const computedStyle = getComputedStyle(root);
  
  const themeVars = [
    '--van-primary-color',
    '--van-success-color',
    '--van-warning-color',
    '--van-danger-color',
    '--van-text-color',
    '--van-background',
  ];
  
  console.log('🎨 現在のテーマ変数:');
  themeVars.forEach(varName => {
    const value = computedStyle.getPropertyValue(varName);
    console.log(`${varName}: ${value}`);
  });
}

// コンソールで呼び出す
showThemeVariables();

🎨 リアルタイムテーマエディタ

html
<!-- シンプルなテーマエディタ -->
<div class="theme-editor">
  <h3>🎨 リアルタイムテーマエディタ</h3>
  
  <label>
    メインカラー:
    <input type="color" id="primary-color" value="#1989fa">
  </label>
  
  <label>
    成功色:
    <input type="color" id="success-color" value="#07c160">
  </label>
  
  <label>
    警告色:
    <input type="color" id="warning-color" value="#ff976a">
  </label>
</div>

<script>
document.getElementById('primary-color').addEventListener('input', (e) => {
  document.documentElement.style.setProperty('--van-primary-color', e.target.value);
});

document.getElementById('success-color').addEventListener('input', (e) => {
  document.documentElement.style.setProperty('--van-success-color', e.target.value);
});

document.getElementById('warning-color').addEventListener('input', (e) => {
  document.documentElement.style.setProperty('--van-warning-color', e.target.value);
});
</script>

🎉 まとめ

Vant のテーマカスタマイズ機能によって、次のことが可能になります:

  • 🎨 簡単なカスタマイズ - CSS 変数で素早く調整
  • 🌙 ダークモード - 完全対応を内蔵
  • 🔄 動的切り替え - 実行時にテーマ変更
  • 📱 レスポンシブ - 画面サイズに適応
  • 🛠️ ツールフレンドリー - 各種ビルドツールと統合

さあ、独自のテーマづくりを始めましょう!あなたのアプリを際立たせましょう!


📚 関連コンテンツ

🎨 デザインとスタイル

🔧 上級機能

  • 按需導入 - バンドルサイズの最適化
  • 国際化 - 多言語対応
  • カスタムコンポーネント - 独自コンポーネントの作成
  • プラグイン開発 - Vant プラグインの開発

🛠️ 開発ツール

  • ビルド設定 - 各種ビルドツールの設定
  • 開発環境 - ローカル開発環境の構築
  • デバッグのコツ - テーマデバッグ手法
  • パフォーマンス最適化 - テーマの性能改善

💡 実践例

  • 企業向けアプリ - 企業テーマのカスタマイズ事例
  • モバイル適応 - モバイルテーマ適応
  • マルチブランド対応 - 複数ブランドのテーマ切り替え
  • デザインシステム - 完全なデザインシステムの構築

📚 関連ドキュメント

🎨 スタイルとデザイン

🚀 クイックスタート

🔧 開発ツール

🎯 コンポーネントのテーマカスタマイズ

🎨 ビジュアルコンポーネント

🔄 アニメーションとインタラクション

🛠️ Composables API

📱 モバイル適応

📋 フォームコンポーネント

📖 変更履歴

Vant に基づく企業向けモバイルソリューション