Skip to content

花紋背景系統 ​

lh-ui-plus 提供了一套國風詩意花紋背景系統,支援 6 種預設花紋圖案,透過 CSS 變數(bg-pattern)或元件的 bgPattern prop 應用。明暗模式切換是另一套獨立能力,見文末「明暗模式」。

預設花紋 ​

系統內建以下 6 種花紋:

花紋名CSS 變數說明
無--lh-pattern-none預設無花紋
柳葉--lh-pattern-willow細長柳葉,疏密有致
祥雲--lh-pattern-cloud祥雲舒展,蜿蜒流轉
水波--lh-pattern-water漣漪微動,層層疊疊
雪花--lh-pattern-snow六角雪花,細枝分岔
梅花--lh-pattern-plum五瓣舒展,蕊心分明
竹葉--lh-pattern-bamboo披針形竹葉,錯落有致

使用方式 ​

透過 ConfigProvider 全域設定 ​

vue
<template>
  <LhConfigProvider :theme-vars="{ 'bg-pattern': 'var(--lh-pattern-willow)' }">
    <LhButton>默认</LhButton>
    <LhButton type="primary">主要</LhButton>
  </LhConfigProvider>
</template>

控制花紋應用範圍(patternComponents 白名單) ​

預設情況下,全域 bg-pattern 不會應用到任何元件,需要透過 patternComponents 白名單顯式開啟:

vue
<script setup lang="ts">
import { ref } from 'vue'

const visible = ref(false)
</script>

<template>
  <LhConfigProvider
    :theme-vars="{ 'bg-pattern': 'var(--lh-pattern-cloud)' }"
    :pattern-components="['button', 'input']"
  >
    <!-- 按鈕和輸入框會應用花紋,Dialog 不會 -->
    <LhButton>带花纹的按钮</LhButton>
    <LhInput placeholder="带花纹的输入框" />
    <LhDialog v-model="visible">此对话框没有花纹</LhDialog>
  </LhConfigProvider>
</template>

元件級別花紋設定 ​

元件自身透過 bgPattern prop 或 themeVars 設定的花紋不受白名單限制:

vue
<template>
  <LhButton :bg-pattern="'var(--lh-pattern-bamboo)'">
    此按钮始终有花纹
  </LhButton>
</template>

自訂花紋透明度 ​

vue
<template>
  <LhConfigProvider
    :theme-vars="{
      'bg-pattern': 'var(--lh-pattern-snow)',
      'bg-pattern-opacity': '0.3',
      'bg-pattern-color': 'rgba(255, 0, 0, 0.2)',
    }"
  >
    <LhButton>自定义透明度</LhButton>
  </LhConfigProvider>
</template>

CSS 變數參考 ​

變數名說明預設值
--lh-bg-pattern花紋背景 URLnone
--lh-bg-pattern-repeat花紋平鋪模式repeat
--lh-bg-pattern-size花紋大小40px
--lh-bg-pattern-opacity花紋透明度0.15
--lh-bg-pattern-color花紋顏色var(--lh-decoration-color, rgba(184, 134, 11, 0.12))
--lh-bg-pattern-blend花紋混合模式soft-light

明暗模式 ​

花紋系統本身透過 CSS 變數控制,與明暗模式互不影響。明暗模式使用 useLhTheme 組合式函式切換(寫入 data-theme 屬性):

vue
<script setup lang="ts">
import { useLhTheme } from '@lh-ui/vue3'

const { theme, toggleTheme, setTheme } = useLhTheme()

// 切換明暗主題
function onToggle() {
  toggleTheme()
}
</script>

<template>
  <div>
    <LhButton @click="onToggle">
      {{ theme === 'dark' ? '切换明色' : '切换暗色' }}
    </LhButton>
  </div>
</template>

主題變數優先級 ​

元件最終的 CSS 變數會按以下優先級合併(後者覆寫前者):

  1. ConfigProvider 全域 themeVars(最低優先級)
  2. ConfigProvider 按元件 componentTheme[元件名]
  3. 元件自身 themeVars prop
  4. 元件自身 bgPattern prop(最高優先級)

對於 bg-pattern 變數,還會額外受到 patternComponents 白名單控制:只有白名單中的元件才會應用全域設定的 bg-pattern。