主题与样式系统
基于 Tailwind CSS 构建了完整的主题系统,提供灵活的样式定制能力和优雅的深色模式支持。
🎨 颜色系统
框架内置了完整的颜色体系,支持主题色和表面色的自由搭配:
主色 Primary
emerald、green、lime、orange、amber、yellow、teal、cyan、sky、blue、indigo、violet、purple、fuchsia、pink
表面色 Surface
slate、gray、zinc、neutral、stone、soho、viva、ocean
⚙️ 主题配置
通过 tailwind.config.ts
文件自定义主题配置:
js
// tailwind.config.ts
export default {
content: [resolve("./**/*.{uvue,vue}"), "!**/node_modules/**", "!**/dist/**"],
darkMode: "class",
theme: {
extend: {
colors: {
...getPrimary("teal"), // 设置主色调
...getSurface("zinc"), // 设置表面色调
},
// 自定义扩展配置
fontSize: {
md: ["1rem", "1.5rem"] // 自定义字体大小
},
scale: {
"80": "0.8" // 自定义缩放比例
},
}
},
corePlugins: {
preflight: false // 禁用默认样式重置
}
} as Config;
颜色配置说明
- 主色系 (Primary): 用于品牌色彩、按钮、链接等主要交互元素
- 表面色系 (Surface): 用于背景、边框、分割线等界面基础元素
📝 样式类使用指南
布局与定位
html
<!-- Flexbox 布局 -->
<view class="flex flex-col">纵向布局</view>
<view class="flex flex-row">横向布局</view>
<view class="flex flex-row items-center">垂直居中</view>
<view class="flex flex-row items-center justify-center">完全居中</view>
<view class="flex-1">弹性伸缩</view>
尺寸设置
html
<!-- 固定尺寸 -->
<view class="h-5 w-5">小尺寸</view>
<view class="h-full w-full">全尺寸</view>
<!-- 自定义尺寸 -->
<view class="h-[50rpx] w-[50rpx]">自定义 rpx</view>
<view class="h-[50px] w-[50px]">自定义 px</view>
<view class="h-80/100">百分比尺寸</view>
间距与边距
html
<!-- 内边距 -->
<view class="p-3">全方向内边距</view>
<view class="px-3">水平内边距</view>
<view class="py-3">垂直内边距</view>
<!-- 外边距 -->
<view class="m-3">全方向外边距</view>
<view class="mx-3">水平外边距</view>
<view class="my-3">垂直外边距</view>
圆角与边框
html
<!-- 圆角设置 -->
<view class="rounded-md">中等圆角</view>
<view class="rounded-lg">大圆角</view>
<view class="rounded-full">完全圆角</view>
<!-- 边框样式 -->
<view class="border border-solid border-surface-100">基础边框</view>
文字样式
html
<!-- 字体大小 -->
<view class="text-xs">超小字体</view>
<view class="text-md">中等字体</view>
<view class="text-lg">大字体</view>
<view class="text-xl">超大字体</view>
<!-- 文字颜色 -->
<view class="text-primary-50">主色文字</view>
<view class="text-surface-50">表面色文字</view>
<view class="text-center">居中对齐</view>
<!-- 自定义颜色 -->
<view class="text-[#ff0]">自定义颜色</view>
<view class="text-[30rpx]">自定义大小</view>
强制样式 (!important)
html
<!-- 使用 ! 前缀强制覆盖样式 -->
<view class="!text-surface-100">强制文字颜色</view>
<view class="!bg-white">强制背景色</view>
<view class="!border-surface-300">强制边框色</view>
🌙 深色模式
API 调用
ts
import { isDark, toggleTheme, setIsAuto, setTheme } from "@/cool";
// 状态检查
console.log(isDark.value); // 当前是否为深色模式
// 主题切换
toggleTheme(); // 切换深色/亮色模式
// 主题设置
setTheme("light"); // 设置为亮色模式
setTheme("dark"); // 设置为深色模式
// 自动模式(仅 APP 端有效)
setIsAuto(true); // 跟随系统主题
样式适配
方式一:使用 dark: 前缀
html
<view class="bg-surface-100 dark:!bg-surface-900">
<text class="text-surface-700 dark:!text-white">自适应文本</text>
</view>
💡 提示:
dark:
前缀后加!
表示使用!important
强制覆盖样式
方式二:使用响应式变量
html
<view class="bg-surface-100" :class="{ '!bg-surface-900': isDark }">
<text class="text-surface-700" :class="{ '!text-white': isDark }"
>响应式文本</text
>
</view>
在 SCSS 中使用
html
<style lang="scss" scoped>
.custom-component {
@apply text-md bg-primary-500;
@apply h-10 w-10 fixed right-10 top-10;
}
</style>
⚠️ 重要注意事项
由于 uni-app x 的 CSS 限制,在使用时需要注意以下几点:
📱 APP 端限制
文字样式限制: APP 中不能在 view
标签中使用字体相关的样式
html
<!-- ❌ 错误用法 -->
<view class="text-md">文本内容</view>
<!-- ✅ 正确用法 -->
<text class="text-md">文本内容</text>
🔄 动态样式渲染
父子样式联动: APP 中动态修改父级样式时,子元素样式不会自动重新渲染
html
<view class="box" :class="{ 'active': isActive }">
<text class="text">文本</text>
</view>
<style lang="scss" scoped>
.box {
@apply bg-white;
.text {
@apply text-surface-700;
}
&.active {
@apply bg-black; /* ✅ 生效 */
.text {
@apply text-white; /* ❌ 不生效 */
}
}
}
</style>
解决方案: 为子元素单独添加响应式类名
html
<view class="box" :class="{ 'active': isActive }">
<text class="text" :class="{ 'active': isActive }">文本</text>
</view>
<style lang="scss" scoped>
.box {
@apply bg-white;
.text {
@apply text-surface-700;
&.active {
@apply text-white; /* ✅ 生效 */
}
}
&.active {
@apply bg-black;
}
}
</style>
🚀 最佳实践
- 优先使用预设颜色: 使用框架内置的
primary
和surface
色系 - 合理使用深色模式: 为重要界面元素提供深色模式适配
- 注意平台差异: 了解不同平台的样式限制,编写兼容性代码
- 保持一致性: 在项目中统一使用 Tailwind CSS 类名,避免混用内联样式