Vant3 ConfigProvider 全局配置

2021-09-06 17:27 更新

介紹

用于配置 Vant 組件的主題樣式,從 3.1.0 版本開始支持。

實例演示

引入

通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。

import { createApp } from 'vue';
import { ConfigProvider } from 'vant';

const app = createApp();
app.use(ConfigProvider);

定制主題

介紹

Vant 組件通過豐富的 CSS 變量 來組織樣式,通過覆蓋這些 CSS 變量,可以實現(xiàn)定制主題、動態(tài)切換主題等效果。

ConfigProvider

示例

以 Button 組件為例,查看組件的樣式,可以看到 .van-button--primary 類名上存在以下變量:

.van-button--primary {
  color: var(--van-button-primary-color);
  background-color: var(--van-button-primary-background-color);
}

這些變量的默認值被定義在 root 節(jié)點上,HTML 文檔的任何節(jié)點都可以訪問到這些變量:

:root {
  --van-white: #fff;
  --van-blue: #1989fa;
  --van-button-primary-color: var(--van-white);
  --van-button-primary-background-color: var(--van-primary-color);
}

自定義 CSS 變量

通過 CSS 覆蓋

你可以直接在代碼中覆蓋這些 CSS 變量,Button 組件的樣式會隨之發(fā)生改變:

/* 添加這段樣式后,Primary Button 會變成紅色 */
:root {
  --van-button-primary-background-color: red;
}

通過 ConfigProvider 覆蓋

ConfigProvider 組件提供了覆蓋 CSS 變量的能力,你需要在根節(jié)點包裹一個 ConfigProvider 組件,并通過 theme-vars 屬性來配置一些主題變量。

<van-config-provider :theme-vars="themeVars">
  <van-form>
    <van-field name="rate" label="評分">
      <template #input>
        <van-rate v-model="rate" />
      </template>
    </van-field>
    <van-field name="slider" label="滑塊">
      <template #input>
        <van-slider v-model="slider" />
      </template>
    </van-field>
    <div style="margin: 16px">
      <van-button round block type="primary" native-type="submit">
        提交
      </van-button>
    </div>
  </van-form>
</van-config-provider>
import { ref } from 'vue';

export default {
  setup() {
    const rate = ref(4);
    const slider = ref(50);

    // themeVars 內(nèi)的值會被轉(zhuǎn)換成對應(yīng) CSS 變量
    // 比如 sliderBarHeight 會轉(zhuǎn)換成 `--van-slider-bar-height`
    const themeVars = {
      rateIconFullColor: '#07c160',
      sliderBarHeight: '4px',
      sliderButtonWidth: '20px',
      sliderButtonHeight: '20px',
      sliderActiveBackgroundColor: '#07c160',
      buttonPrimaryBorderColor: '#07c160',
      buttonPrimaryBackgroundColor: '#07c160',
    };

    return {
      rate,
      slider,
      themeVars,
    };
  },
};
注意:ConfigProvider 僅影響它的子組件的樣式,不影響全局 root 節(jié)點。

基礎(chǔ)變量

Vant 中的 CSS 變量分為 基礎(chǔ)變量 和 組件變量。組件變量會繼承基礎(chǔ)變量,因此在修改基礎(chǔ)變量后,會影響所有相關(guān)的組件。

修改變量

由于 CSS 變量繼承機制的原因, 兩者的修改方式有一定差異:

  • 基礎(chǔ)變量只能通過 root 選擇器 修改,不能通過 ConfigProvider 組件 修改。
  • 組件變量可以通過 root 選擇器 和 ConfigProvider 組件 修改。

變量列表

下面是所有的基礎(chǔ)變量:

// Color Palette
--van-black: #000;
--van-white: #fff;
--van-gray-1: #f7f8fa;
--van-gray-2: #f2f3f5;
--van-gray-3: #ebedf0;
--van-gray-4: #dcdee0;
--van-gray-5: #c8c9cc;
--van-gray-6: #969799;
--van-gray-7: #646566;
--van-gray-8: #323233;
--van-red: #ee0a24;
--van-blue: #1989fa;
--van-orange: #ff976a;
--van-orange-dark: #ed6a0c;
--van-orange-light: #fffbe8;
--van-green: #07c160;

// Gradient Colors
--van-gradient-red: linear-gradient(to right, #ff6034, #ee0a24);
--van-gradient-orange: linear-gradient(to right, #ffd01e, #ff8917);

// Component Colors
--van-primary-color: var(--van-blue);
--van-success-color: var(--van-green);
--van-danger-color: var(--van-red);
--van-warning-color: var(--van-orange);
--van-text-color: var(--van-gray-8);
--van-active-color: var(--van-gray-2);
--van-active-opacity: 0.7;
--van-disabled-opacity: 0.5;
--van-background-color: var(--van-gray-1);
--van-background-color-light: #fafafa;
--van-text-link-color: #576b95;

// Padding
--van-padding-base: 4px;
--van-padding-xs: 8px;
--van-padding-sm: 12px;
--van-padding-md: 16px;
--van-padding-lg: 24px;
--van-padding-xl: 32px;

// Font
--van-font-size-xs: 10px;
--van-font-size-sm: 12px;
--van-font-size-md: 14px;
--van-font-size-lg: 16px;
--van-font-weight-bold: 500;
--van-line-height-xs: 14px;
--van-line-height-sm: 18px;
--van-line-height-md: 20px;
--van-line-height-lg: 22px;
--van-base-font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue',
  Helvetica, Segoe UI, Arial, Roboto, 'PingFang SC', 'miui', 'Hiragino Sans GB',
  'Microsoft Yahei', sans-serif;
--van-price-integer-font-family: Avenir-Heavy, PingFang SC, Helvetica Neue,
  Arial, sans-serif;

// Animation
--van-animation-duration-base: 0.3s;
--van-animation-duration-fast: 0.2s;
--van-animation-timing-function-enter: ease-out;
--van-animation-timing-function-leave: ease-in;

// Border
--van-border-color: var(--van-gray-3);
--van-border-width-base: 1px;
--van-border-radius-sm: 2px;
--van-border-radius-md: 4px;
--van-border-radius-lg: 8px;
--van-border-radius-max: 999px;

你可以在各個組件文檔底部的表格中查看組件變量。

API

Props

參數(shù) 說明 類型 默認值
theme-vars 自定義主題變量 object -
tag v3.1.2 根節(jié)點對應(yīng)的 HTML 標(biāo)簽名 string div
icon-prefix v3.1.3 所有圖標(biāo)的類名前綴,同 Icon 組件的 class-prefix 屬性 string van-icon


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號