Skip to content

主题定制

所有样式都通过 CSS 变量 驱动。你只需要在外层覆写变量即可换肤,无需 override 内部 class。

变量清单

变量默认值说明
--vdr-stick-color#2db7f5触点边框颜色
--vdr-stick-bg#fff触点背景色
--vdr-stick-hover-shadow-colorrgb(45 183 245 / 0.3)触点 hover 阴影颜色
--vdr-active-outline-color#999激活态外轮廓颜色
--vdr-rotate-line-color#999旋转控件连接线颜色
--vdr-stick-size16px触点尺寸(宽高)
--vdr-stick-border-width2px触点边框粗细
--vdr-stick-border-radius50%触点圆角(50% 为圆形;2px 为方形)
--vdr-stick-hover-shadow-width4px触点 hover 阴影宽度
--vdr-active-outline-width1px激活态外轮廓宽度
--vdr-rotate-line-height30px旋转连接线长度
--vdr-rotate-line-offset32px旋转连接线距元素顶部偏移
--vdr-angle-size18px旋转控件尺寸
--vdr-angle-offset258%旋转控件距元素顶部偏移
--vdr-stick-transitionbox-shadow 0.1s触点过渡动画
--vdr-rotate-cursorcrosshair旋转控件 cursor

覆写方式

全局覆写

css
/* 全站 vdr 都变红 */
.vdr {
  --vdr-stick-color: crimson;
  --vdr-active-outline-color: crimson;
}

局部覆写

vue
<template>
  <vdr class="my-vdr" :w="200" :h="150" />
</template>

<style>
.my-vdr {
  --vdr-stick-color: #52c41a;
  --vdr-stick-border-radius: 2px;
  --vdr-stick-size: 20px;
}
</style>

动态主题

把变量存到 inline style 里,配合响应式数据即可实现运行时切换:

vue
<template>
  <div :style="themeVars">
    <vdr :w="200" :h="150" />
  </div>
</template>

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

const accent = ref('#722ed1')

const themeVars = computed(() => ({
  '--vdr-stick-color': accent.value,
  '--vdr-active-outline-color': accent.value,
}))
</script>

预设示例

Crimson 主题

css
.theme-crimson {
  --vdr-stick-color: crimson;
  --vdr-stick-hover-shadow-color: rgb(220 20 60 / 0.3);
  --vdr-active-outline-color: crimson;
  --vdr-rotate-line-color: crimson;
}

方形大触点

css
.theme-square-large {
  --vdr-stick-size: 20px;
  --vdr-stick-border-radius: 2px;
  --vdr-stick-color: #52c41a;
  --vdr-stick-hover-shadow-color: rgb(82 196 26 / 0.3);
  --vdr-active-outline-color: #52c41a;
}

极简黑

css
.theme-minimal {
  --vdr-stick-size: 8px;
  --vdr-stick-border-width: 1px;
  --vdr-stick-color: #222;
  --vdr-stick-hover-shadow-width: 2px;
  --vdr-stick-hover-shadow-color: rgb(0 0 0 / 0.2);
  --vdr-active-outline-color: #222;
}

在线交互见 示例 · CSS 变量主题

自定义触点 hover cursor

hover 时的方向箭头不属于 CSS 变量范畴,因为它是 SVG 图标,用 stickHoverRender prop 提供自定义渲染函数:

vue
<vdr :stick-hover-render="myRender" />

<script setup lang="ts">
function myRender(cursorRotate: number) {
  return {
    x: 16,
    y: 16,
    htmlText: `<svg xmlns="http://www.w3.org/2000/svg" ...>...</svg>`,
  }
}
</script>

详见示例 自定义 cursor