# 自定义主题
uview-plus目前可以自定主题色,字体颜色,边框颜色等,所有组件内部的样式,都基于同一套主题,比如您修改了primary主题色,所有用到了primary颜色
的组件都会受影响。
# 教程
- 可以在打开的颜色拾取器中输入或者选择颜色,再点"确定"按钮即可。
- 老项目若已经在
uni.scss中手写覆盖$u-primary、$u-main-color等变量,升级后无需先删除这些覆盖。 - 新版本会把这些旧
$u-*值桥接到light主题对应的--up-*变量。 - 请继续保留
@import 'uview-plus/theme.scss';,不要再下载并替换整份内置主题文件。 - 如果需要运行时切换深浅色,请配合暗黑模式文档中的
setTheme/setThemePreference使用。 - 如果需要一套完全自定义的dark主题,请不要只依赖旧
$u-*变量文件,需额外按CSS变量方案定制。
# 旧项目兼容写法
如果你原来就是在uni.scss里手写$u-*变量,升级后推荐保持下面这种结构:
/* uni.scss */
$u-primary: #3b82f6;
$u-main-color: #1f2937;
$u-border-color: #d0d5dd;
@import 'uview-plus/theme.scss';
请注意:
- 旧
$u-*覆盖请写在@import 'uview-plus/theme.scss';之前,这样桥接层才能拿到你最终定义的值。 uni.scss里仍然只建议放变量,不要把uview-plus/index.scss这类完整样式文件引进来。- 这套兼容只负责light主题;如果你又调用了
setConfig({ color }),运行时显式颜色配置会优先覆盖bridge结果。
# 主题来源与优先级
从 3.8+ 开始,uview-plus 的主题要按三层来理解:
theme.json这是 uni-app 的声明式默认主题入口,主要通过pages.json里的@变量名参与页面配置。--up-*/--u-*CSS变量 这是组件样式、页面背景、语义色的核心主题变量层。uni.$u.setTheme()/uni.$u.setThemePreference()/setConfig({ color })这是 uview-plus 的运行时主题系统,用于跟随系统、手动切换、记忆偏好,以及同步原生 UI。
请注意:
- 页面初始默认值可以来自
theme.json - 一旦 uview-plus 运行时主题开始同步,导航栏、背景色、tabBar 的最终效果以当前运行时主题结果为准
- 导航栏推荐定制入口是
up-navbar-bg-color/--up-navbar-bg-color
# 3.8+ 升级提醒
如果你是旧项目升级,请先记住下面几条:
- 新版本主题体系已经迁移到 CSS变量为主,不再等同于旧版“下载整份 SCSS 主题文件后整体替换”的心智。
- 旧
uni.scss中手写的$u-*仍兼容,但只桥接到 light 主题。 - dark 主题不会从旧
$u-*自动生成。 - 如果业务又调用了
setConfig({ color }),显式运行时改色优先级高于旧 bridge。 - 旧项目必须继续保留
@import 'uview-plus/theme.scss';,并且要把$u-*变量写在它之前。
# 主题色
目前有五个主题色,每个主题色又分别有对应的light(淡色)、dark(深色)、disabled(禁止状态时的颜色):
primary
success
error
warning
info
primary-dark
success-dark
error-dark
warning-dark
info-dark
primary-disabled
success-disabled
error-disabled
warning-disabled
info-disabled
primary-light
success-light
error-light
warning-light
info-light
# 文字颜色
内置的文字颜色有:主要文字、常规文字,次要文字、占位文字颜色,如需更详细的,详见:Color 色彩章节。
main-color
#303133
content-color
#606266
tips-color
#909399
light-color
#c0c4cc
# 边框颜色
uview-plus所有组件边框相关的(特别说明的除外),用的都是这一个颜色。
border-color
#e4e7ed
# 背景颜色
这个颜色是uview-plus推荐的背景色,目前内置组件中使用的场景不多。
bg-color
#f3f4f6
# Input边框颜色
此颜色用于在up-input组件显示边框时的边框颜色。
form-item-border-color
#dcdfe6