Skip to content

UnoCSS Preset ​

@wot-ui/unocss-preset 是我们提供的 UnoCSS 预设,用来把 wot-ui 的设计 token 和主题变量映射成可直接使用的原子类。

接入后,你可以直接在模板中使用 wot- 前缀类名完成颜色、间距、圆角、字重、排版、透明度和描边等样式编排,而不需要手动维护一套额外的 CSS 变量映射。

html
<view class="wot-bg-filled-oppo wot-rounded-xl wot-p-loose">
  <text class="wot-text-title-large wot-text-text-main wot-font-semibold">
    Wot UI UnoCSS Preset
  </text>
</view>

适用场景 ​

如果你满足以下任一场景,推荐使用 @wot-ui/unocss-preset:

  • 项目已经接入 UnoCSS
  • 希望直接复用 wot-ui 的设计 token 与主题变量
  • 希望通过原子类快速搭建 uni-app / Vue 页面样式

它提供了什么 ​

这个预设主要提供三部分能力:

能力说明
theme把 wot-ui 的语义色和基础色映射到 UnoCSS theme,供颜色类规则使用
rules生成 wot-text-*、wot-bg-*、wot-m-*、wot-p-*、wot-rounded-* 等原子类规则
preflights自动注入 wot-ui 的 CSS 变量,确保这些原子类能拿到正确的变量值

默认情况下,类名前缀为 wot-,例如:

  • wot-text-primary
  • wot-bg-danger-surface
  • wot-m-main
  • wot-rounded-md
  • wot-text-body-main

安装 ​

bash
npm i -D unocss
npm i @wot-ui/unocss-preset
bash
yarn add -D unocss
yarn add @wot-ui/unocss-preset
bash
pnpm add -D unocss
pnpm add @wot-ui/unocss-preset

使用 ​

在项目根目录创建或更新 unocss.config.ts:

ts
import { presetWot } from '@wot-ui/unocss-preset'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    presetWot(),
  ],
})

完成配置后,就可以直接在模板中使用 wot- 前缀原子类:

vue
<template>
  <view class="wot-bg-filled-oppo wot-rounded-lg wot-p-main">
    <view class="wot-text-title-large wot-text-text-main">标题</view>
    <view class="wot-mt-tight wot-text-body-main wot-text-text-secondary">
      使用 wot-ui 设计 token 快速组织页面样式
    </view>
  </view>
</template>

配置项 ​

你可以通过 presetWot() 传入配置项来自定义行为:

ts
presetWot({
  prefix: 'wot',
  preflight: true,
  baseTokens: false,
})
配置项默认值说明示例
prefixwot工具类前缀wot-text-primary、wot-m-main
preflighttrue是否自动注入 wot-ui CSS 变量presetWot({ preflight: true })
baseTokensfalse是否开放基础色板和原始 token 类名presetWot({ baseTokens: true })

prefix ​

用于控制原子类前缀。默认是 wot,对应生成的类名格式为 wot-*。

ts
presetWot({
  prefix: 'wot',
})

preflight ​

开启后会自动注入 wot-ui 相关 CSS 变量,通常推荐保持默认值 true。如果关闭它,需要你自行确保这些变量已在项目中可用,否则类名可能存在但样式不生效。

baseTokens ​

默认情况下,预设主要暴露语义化 token。开启 baseTokens 后,还会额外开放基础色板和原始 token 类名,适合需要更细粒度控制的场景。

支持的规则 ​

规则类型前缀模式示例
颜色wot-text-* / wot-bg-* / wot-border-*wot-text-primary、wot-bg-danger-surface、wot-border-border-main
间距wot-m-* / wot-gap-*wot-m-main、wot-gap-tight、wot-gap-x-loose
内边距wot-p-*wot-p-main、wot-px-tight、wot-pb-loose
圆角wot-rounded-*wot-rounded-md、wot-rounded-full
字重wot-font-*wot-font-medium、wot-font-semibold
排版wot-text-*wot-text-body-main、wot-text-title-large
透明度wot-opacity-*wot-opacity-disabled
描边wot-border-stroke-*wot-border-stroke-main

可用变量值 ​

以下为各类原子类支持的主要变量值,使用时将它们拼接到对应规则后即可。

颜色类 ​

项目内容
适用前缀wot-text-*、wot-bg-*、wot-border-*
主色primary、primary-1 ~ primary-10
危险色danger、danger-main、danger-hover、danger-clicked、danger-disabled、danger-particular、danger-surface
成功色success、success-main、success-hover、success-clicked、success-disabled、success-particular、success-surface
警告色warning、warning-main、warning-hover、warning-clicked、warning-disabled、warning-particular、warning-surface
文字色text-main、text-secondary、text-auxiliary、text-disabled、text-placeholder、text-white
图标色icon-main、icon-secondary、icon-auxiliary、icon-disabled、icon-placeholder、icon-white
边框色border-extra-strong、border-strong、border-main、border-light、border-white、border-zero
填充色filled-extra-strong、filled-strong、filled-content、filled-bottom、filled-oppo、filled-zero
分割线divider-main、divider-light、divider-strong、divider-white
反馈色feedback-hover、feedback-active、feedback-accent
半透明填充opacfilled-tooltip-toast-cover、opacfilled-main-cover、opacfilled-light-cover
Picker View Maskpicker-view-mask-start、picker-view-mask-end
分类色classify-yellow-bg、classify-yellow-border、classify-yellow-content、classify-cyan-bg、classify-cyan-border、classify-cyan-content、classify-purple-bg、classify-purple-border、classify-purple-content、classify-grape-bg、classify-grape-border、classify-grape-content、classify-pink-bg、classify-pink-border、classify-pink-content
示例wot-text-primary、wot-bg-filled-oppo、wot-border-border-main、wot-bg-classify-purple-content

间距类 ​

项目内容
适用前缀wot-m-*、wot-mx-*、wot-my-*、wot-mt-*、wot-mr-*、wot-mb-*、wot-ml-*、wot-gap-*、wot-gap-x-*、wot-gap-y-*
可用值zero、ultra-tight、super-tight、extra-tight、tight、main、loose、extra-loose、super-loose、ultra-loose、spacious、extra-spacious、super-spacious、ultra-spacious
示例wot-m-main、wot-mt-tight、wot-gap-x-loose

内边距类 ​

项目内容
适用前缀wot-p-*、wot-px-*、wot-py-*、wot-pt-*、wot-pr-*、wot-pb-*、wot-pl-*
可用值zero、ultra-tight、super-tight、extra-tight、tight、main、loose、extra-loose、super-loose、ultra-loose、spacious、extra-spacious、super-spacious、ultra-spacious
示例wot-p-main、wot-px-tight、wot-pb-loose

圆角类 ​

项目内容
适用前缀wot-rounded-*
可用值zero、sm、md、lg、xl、2xl、3xl、full
示例wot-rounded-md、wot-rounded-full

字重类 ​

项目内容
适用前缀wot-font-*
可用值ultra-light、thin、light、regular、medium、semibold、bold
示例wot-font-medium、wot-font-semibold

排版类 ​

项目内容
适用前缀wot-text-*
Titletitle-main、title-large、title-extra-large
Bodybody-main、body-large、body-extra-large、body-super-large、body-ultra-large
Labellabel-super-small、label-extra-small、label-small、label-main、label-large
示例wot-text-body-main、wot-text-title-large、wot-text-label-large

透明度类 ​

项目内容
适用前缀wot-opacity-*
可用值disabled、dimmer、overlay、main、backdrop
示例wot-opacity-disabled、wot-opacity-main

描边类 ​

项目内容
适用前缀wot-border-stroke-*
可用值zero、light、main、bold
示例wot-border-stroke-main、wot-border-stroke-bold

开启 baseTokens 后可用 ​

当 baseTokens: true 时,会额外开放基础色板与原始 token。

项目内容
基础色base-black、base-white、base-transparent
色阶家族blue-*、lightblue-*、pink-*、red-*、volcano-*、orange-*、yellow-*、green-*、cyan-*、purple-*、grape-*、coolgrey-*、neutralgrey-*、warmgrey-*
色阶范围每个家族支持 1 ~ 10
额外透明色非 grey 家族额外支持 *-opac
透明阶opac-1_02、opac-2_04、opac-3_08、opac-4_15、opac-5_20、opac-6_30、opac-7_45、opac-7_55、opac-8_65、opac-9_75、opac-10_85
白色透明阶opacwhite-1_02、opacwhite-2_04、opacwhite-3_08、opacwhite-4_15、opacwhite-5_20、opacwhite-6_30、opacwhite-7_45、opacwhite-7_55、opacwhite-8_65、opacwhite-9_75、opacwhite-10_85
示例wot-bg-base-black、wot-text-blue-6、wot-border-opac-3_08

导出内容 ​

包默认导出 presetWot,并额外导出以下 token maps,便于业务侧复用:

  • SEMANTIC_COLOR_MAP
  • BASE_COLOR_MAP
  • SPACING_MAP
  • PADDING_MAP
  • RADIUS_MAP
  • FONT_WEIGHT_MAP
  • TYPOGRAPHY_MAP
  • OPACITY_MAP
  • STROKE_MAP

Released under the MIT License.

Released under the MIT License.