当前位置:首页 > uni-app

uniapp主题更换

2026-02-05 22:51:31uni-app

使用CSS变量实现主题切换

uni.scss文件中定义全局CSS变量:

:root {
  --primary-color: #007AFF;
  --bg-color: #FFFFFF;
  --text-color: #333333;
}

.dark-theme {
  --primary-color: #0A84FF;
  --bg-color: #1C1C1E;
  --text-color: #F2F2F7;
}

在页面样式中使用这些变量:

.page {
  background-color: var(--bg-color);
  color: var(--text-color);
}

.button {
  background-color: var(--primary-color);
}

动态切换主题类名

通过JavaScript动态切换HTML元素的类名:

// 切换主题
function toggleTheme() {
  const htmlEl = document.documentElement
  if (htmlEl.classList.contains('dark-theme')) {
    htmlEl.classList.remove('dark-theme')
    uni.setStorageSync('theme', 'light')
  } else {
    htmlEl.classList.add('dark-theme')
    uni.setStorageSync('theme', 'dark')
  }
}

// 初始化主题
function initTheme() {
  const savedTheme = uni.getStorageSync('theme') || 'light'
  if (savedTheme === 'dark') {
    document.documentElement.classList.add('dark-theme')
  }
}

使用uni-ui主题组件

安装uni-ui主题插件:

npm install @dcloudio/uni-ui

在页面中使用主题组件:

<template>
  <uni-theme>
    <uni-nav-bar title="标题" />
    <uni-card title="卡片标题">卡片内容</uni-card>
  </uni-theme>
</template>

适配系统主题

监听系统主题变化:

uni.onThemeChange(function(res) {
  if (res.theme === 'dark') {
    document.documentElement.classList.add('dark-theme')
  } else {
    document.documentElement.classList.remove('dark-theme')
  }
})

主题相关配置

pages.json中配置全局样式:

{
  "globalStyle": {
    "navigationBarTextStyle": "@navigationBarTextStyle",
    "navigationBarTitleText": "主题示例",
    "backgroundColor": "@backgroundColor",
    "backgroundTextStyle": "@backgroundTextStyle"
  }
}

创建主题配置文件theme.json

uniapp主题更换

{
  "light": {
    "@navigationBarTextStyle": "black",
    "@backgroundColor": "#F7F7F7",
    "@backgroundTextStyle": "dark"
  },
  "dark": {
    "@navigationBarTextStyle": "white",
    "@backgroundColor": "#1A1A1A",
    "@backgroundTextStyle": "light"
  }
}

标签: 主题uniapp
分享给朋友:

相关文章

uniapp请求超时处理

uniapp请求超时处理

uniapp请求超时处理方法 在uniapp中处理请求超时可以通过多种方式实现,以下是几种常见的处理策略: 设置全局请求超时时间 在main.js中配置全局请求超时时间,适用于所有请求: uni…

丸子uniapp

丸子uniapp

丸子UniApp简介 丸子UniApp是一个基于UniApp框架开发的移动应用解决方案,通常用于快速构建跨平台应用(如微信小程序、H5、Android/iOS等)。其核心特点是利用UniApp的“一次…

uniapp工程

uniapp工程

uniapp工程简介 uniapp是一个基于Vue.js的跨平台开发框架,允许开发者使用一套代码同时生成iOS、Android、H5以及小程序应用。它通过条件编译和平台特性适配,实现多端兼容。 创建…

混合uniapp

混合uniapp

混合 UniApp 开发模式 混合 UniApp 开发通常指将 UniApp 与其他原生技术(如原生 iOS/Android 或 Flutter)结合使用,以兼顾跨平台效率和原生性能。以下是常见的混合…

uniapp显示不全

uniapp显示不全

uniapp显示不全的常见原因及解决方法 页面布局问题 检查页面布局是否超出屏幕范围,确保根元素或外层容器设置正确的宽度和高度。使用flex布局或百分比单位适应不同屏幕尺寸。 滚动区域未设置 在需要…

uniapp选型技术

uniapp选型技术

uniapp选型技术的关键考量因素 跨平台兼容性 uniapp的核心优势在于一次开发可同时发布到iOS、Android、Web及小程序等多个平台。选型时需确认目标平台覆盖范围,例如若需兼容快应用等特定…