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 页面样式

它提供了什么

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

能力说明
themewot-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-primarywot-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-primarywot-bg-danger-surfacewot-border-border-main
间距wot-m-* / wot-gap-*wot-m-mainwot-gap-tightwot-gap-x-loose
内边距wot-p-*wot-p-mainwot-px-tightwot-pb-loose
圆角wot-rounded-*wot-rounded-mdwot-rounded-full
字重wot-font-*wot-font-mediumwot-font-semibold
排版wot-text-*wot-text-body-mainwot-text-title-large
透明度wot-opacity-*wot-opacity-disabled
描边wot-border-stroke-*wot-border-stroke-main

可用变量值

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

颜色类

项目内容
适用前缀wot-text-*wot-bg-*wot-border-*
主色primaryprimary-1 ~ primary-10
危险色dangerdanger-maindanger-hoverdanger-clickeddanger-disableddanger-particulardanger-surface
成功色successsuccess-mainsuccess-hoversuccess-clickedsuccess-disabledsuccess-particularsuccess-surface
警告色warningwarning-mainwarning-hoverwarning-clickedwarning-disabledwarning-particularwarning-surface
文字色text-maintext-secondarytext-auxiliarytext-disabledtext-placeholdertext-white
图标色icon-mainicon-secondaryicon-auxiliaryicon-disabledicon-placeholdericon-white
边框色border-extra-strongborder-strongborder-mainborder-lightborder-whiteborder-zero
填充色filled-extra-strongfilled-strongfilled-contentfilled-bottomfilled-oppofilled-zero
分割线divider-maindivider-lightdivider-strongdivider-white
反馈色feedback-hoverfeedback-activefeedback-accent
半透明填充opacfilled-tooltip-toast-coveropacfilled-main-coveropacfilled-light-cover
Picker View Maskpicker-view-mask-startpicker-view-mask-end
分类色classify-yellow-bgclassify-yellow-borderclassify-yellow-contentclassify-cyan-bgclassify-cyan-borderclassify-cyan-contentclassify-purple-bgclassify-purple-borderclassify-purple-contentclassify-grape-bgclassify-grape-borderclassify-grape-contentclassify-pink-bgclassify-pink-borderclassify-pink-content
示例wot-text-primarywot-bg-filled-oppowot-border-border-mainwot-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-*
可用值zeroultra-tightsuper-tightextra-tighttightmainlooseextra-loosesuper-looseultra-loosespaciousextra-spacioussuper-spaciousultra-spacious
示例wot-m-mainwot-mt-tightwot-gap-x-loose

内边距类

项目内容
适用前缀wot-p-*wot-px-*wot-py-*wot-pt-*wot-pr-*wot-pb-*wot-pl-*
可用值zeroultra-tightsuper-tightextra-tighttightmainlooseextra-loosesuper-looseultra-loosespaciousextra-spacioussuper-spaciousultra-spacious
示例wot-p-mainwot-px-tightwot-pb-loose

圆角类

项目内容
适用前缀wot-rounded-*
可用值zerosmmdlgxl2xl3xlfull
示例wot-rounded-mdwot-rounded-full

字重类

项目内容
适用前缀wot-font-*
可用值ultra-lightthinlightregularmediumsemiboldbold
示例wot-font-mediumwot-font-semibold

排版类

项目内容
适用前缀wot-text-*
Titletitle-maintitle-largetitle-extra-large
Bodybody-mainbody-largebody-extra-largebody-super-largebody-ultra-large
Labellabel-super-smalllabel-extra-smalllabel-smalllabel-mainlabel-large
示例wot-text-body-mainwot-text-title-largewot-text-label-large

透明度类

项目内容
适用前缀wot-opacity-*
可用值disableddimmeroverlaymainbackdrop
示例wot-opacity-disabledwot-opacity-main

描边类

项目内容
适用前缀wot-border-stroke-*
可用值zerolightmainbold
示例wot-border-stroke-mainwot-border-stroke-bold

开启 baseTokens 后可用

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

项目内容
基础色base-blackbase-whitebase-transparent
色阶家族blue-*lightblue-*pink-*red-*volcano-*orange-*yellow-*green-*cyan-*purple-*grape-*coolgrey-*neutralgrey-*warmgrey-*
色阶范围每个家族支持 1 ~ 10
额外透明色grey 家族额外支持 *-opac
透明阶opac-1_02opac-2_04opac-3_08opac-4_15opac-5_20opac-6_30opac-7_45opac-7_55opac-8_65opac-9_75opac-10_85
白色透明阶opacwhite-1_02opacwhite-2_04opacwhite-3_08opacwhite-4_15opacwhite-5_20opacwhite-6_30opacwhite-7_45opacwhite-7_55opacwhite-8_65opacwhite-9_75opacwhite-10_85
示例wot-bg-base-blackwot-text-blue-6wot-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.