MDUI文件
複製 llms.txt 連結複製 llms-full.txt 連結以 Markdown 格式檢視此頁與 ChatGPT 討論此頁內容與 ChatGPT 討論專案完整文件
預設顏色
自選顏色
從桌布擷取顏色
請選擇一張桌布
開發指南
AI 輔助開發
樣式
深色模式 動態配色 文章排版 設計令牌
與框架整合
元件
函式
獨立程式庫

動態配色

mdui 提供了動態配色功能。只要提供一個顏色值,mdui 就能自動產生一套完整的配色方案。此外,mdui 也支援從指定的桌布中擷取主色調,並據此產生配色方案。

你可以隨時點擊文件頁面右上角的 圖示,切換配色方案,查看各個元件在不同配色方案下的顯示效果。

一套配色方案實際上是一組 CSS 自訂屬性。mdui 元件中的顏色值都會參考這組 CSS 自訂屬性,因此可以一次更新所有元件的配色。完整的 CSS 自訂屬性清單請參見 設計令牌 - 顏色

產生配色方案

你可以使用 setColorScheme 函式來產生配色方案。該函式接受一個十六進位顏色值作為參數,產生一套配色方案,並將頁面的 <html> 元素套用該配色方案。例如:

import { setColorScheme } from 'mdui/functions/setColorScheme.js';

// 根據 #0061a4 產生一套配色方案,並將 <html> 套用該配色方案
setColorScheme('#0061a4');

你還可以在第二個參數中指定 target 屬性,用來指定要套用配色方案的元素。例如:

import { setColorScheme } from 'mdui/functions/setColorScheme.js';

// 根據 #0061a4 產生一套配色方案,並將 .foo 元素設為該配色方案
setColorScheme('#0061a4', {
  target: document.querySelector('.foo'),
});

預設情況下產生的配色方案僅包含 設計令牌 - 顏色 中所列出的顏色。你可以在第二個參數中指定customColors屬性,mdui 會根據你指定的自訂顏色名和顏色值產生一組自訂顏色組。例如:

import { setColorScheme } from 'mdui/functions/setColorScheme.js';

// 根據 #0061a4 產生一套配色方案,並修改了原有的 error 顏色組的值,並加入了一組新的 music 顏色組
setColorScheme('#0061a4', {
  customColors: [
    {
      name: 'error',
      value: '#69F0AE',
    },
    {
      name: 'music',
      value: '#FFC107',
    },
  ],
});

一組自訂顏色組包含四個 CSS 自訂屬性:

  • --mdui-color-{name}
  • --mdui-color-on-{name}
  • --mdui-color-{name}-container
  • --mdui-color-on-{name}-container

其中的 {name}為你傳入的customColors中的name欄位名,即自訂顏色名。

自訂顏色名可以是預設配色方案中的已有顏色名,如primarysecondarytertiaryerror這些都是預設配色方案中已包含的。如果你指定了這些值作為自訂顏色名,則配色方案中對應的四個 CSS 自訂屬性會使用你指定的顏色值來產生。例如上面範例中指定了名為error的自訂顏色名,因為error是預設配色方案中已有的顏色名,且其對應的 CSS 自訂屬性被 mdui 元件用來表示錯誤狀態,因為現在顏色值被設為一個綠色的值,所以 mdui 元件中的錯誤狀態也將變為綠色。

自訂顏色名也可以是新增的,例如上面範例中的music,是預設配色方案中不存在的,則產生的配色方案會額外包含四個 CSS 自訂屬性。可以在你自己的樣式中參考這些 CSS 自訂屬性:

<style>
  .music {
    background-color: rgb(var(--mdui-color-music));
    color: rgb(var(--mdui-color-on-music));
  }

  .music-container {
    background-color: rgb(var(--mdui-color-music-container));
    color: rgb(var(--mdui-color-on-music-container));
  }
</style>

<div class="music">Music</div>
<div class="music-container">Music Container</div>

你還可以使用 removeColorScheme 函式來移除透過上述方法產生的配色方案。你可以傳入參數來指定移除哪個元素上的配色方案,預設情況下,它會移除 <html> 上的配色方案。

從桌布中擷取顏色

mdui 提供了 getColorFromImage 函式,用來從給定的 Image 實例中擷取主色調。該函式的回傳值是一個 Promise,resolve 後的值就是擷取出的十六進位顏色值。

你可以使用從該函式獲得的顏色值,然後呼叫上述文件中介紹的 setColorScheme 函式來設定配色方案。例如:

import { getColorFromImage } from 'mdui/functions/getColorFromImage.js';
import { setColorScheme } from 'mdui/functions/setColorScheme.js';

const image = new Image();
image.src = 'image1.png';

getColorFromImage(image).then((color) => setColorScheme(color));
本頁目錄