uni-app 暗黑模式target>30不支持@media (prefers-color-scheme: dark)

uni-app 暗黑模式target>30不支持@media (prefers-color-scheme: dark)

开发环境 版本号 项目创建方式
Windows 11 HBuilderX

操作步骤:

  • target>30打包

预期结果:

  • 暗黑

实际结果:

  • 界面没有暗黑,@media (prefers-color-scheme: dark)无效

bug描述:

  • 暗黑模式target>30打包不支持@media (prefers-color-scheme: dark)

更多关于uni-app 暗黑模式target>30不支持@media (prefers-color-scheme: dark)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

暗黑在target>30的情况下应该如何使用

更多关于uni-app 暗黑模式target>30不支持@media (prefers-color-scheme: dark)的实战教程也可以访问 https://www.itying.com/category-93-b0.html


有人吗?

这是因为在Android 11(API 30)及以上版本中,系统对深色模式的实现方式发生了变化,导致@media (prefers-color-scheme: dark)媒体查询在部分场景下失效。Android 10及以下版本依赖此媒体查询,但高版本系统更倾向于通过主题(Theme)或强制深色(Force Dark)机制来适配。

在uni-app中,当编译目标targetSdkVersion设置为30以上时,WebView组件可能未完全遵循系统的深色模式设置,从而造成媒体查询无法正确响应。建议通过以下方式解决:

  1. 使用uni-app内置API检测深色模式
    通过uni.getSystemInfoSync()获取theme属性,判断当前系统主题,动态应用样式:

    const systemInfo = uni.getSystemInfoSync();
    if (systemInfo.theme === 'dark') {
      // 应用深色样式
    }
    
  2. 通过CSS变量动态切换主题
    App.vue中根据系统主题动态设置CSS变量,页面中通过变量引用颜色值,避免依赖媒体查询。

  3. 检查Manifest配置
    manifest.json中确保已正确配置深色模式支持,例如:

    "app-plus": {
      "darkmode": true
    }
回到顶部