文章目录

  • 一、背景
  • 二、问题
  • 三、H5项目适配深色模式方案
    • 1.声明 color-scheme
      • 1.1meta
      • 1.2CSS
    • 2.通过 CSS 媒体查询
    • 3.图片适配
    • 4. JavaScript中判断当前模式&监听模式变化
      • 4.1matchMedia
      • 4.2addListener()
      • JavaScript监听判断
  • 四、嵌入app的H5页面

一、背景

随着 iOS 13 的发布,深色模式(Dark Mode)越来越多地出现在大众的视野中,支持深色模式已经成为现代移动应用和网站的一个潮流,前段时间更是因为微信的适配再度引起热议。深色模式不仅可以大幅减少电量的消耗,减弱强光对比,还能 提供更好的可视性和沉浸感。

如何切换深色模式

  • iOS:“设置”–“显示与亮度”–“外观”,选择“深色”

  • Android:“系统设置”–“显示”–“深色模式”。

二、问题

如果系统设置了深色模式,H5页面不做相应的处理,会出现背景色冲突、深色文字显示异常,深色图标显示异常等一些显示上的问题。

所以,需要对深色模式进行一些适配。

我尝试了一些方案:

三、H5项目适配深色模式方案

1.声明 color-scheme

color-scheme

有两种方式。

1.1meta

在head中声明<meta name="color-scheme" content="light dark">,声明当前页面支持 light 和 dark 两种模式,系统切换到深色模式时,浏览器默认样式也会切换到深色;

1.2CSS

下面的 css 同样可以实现上面 meta 声明的效果

:root {color-scheme: light dark;
}

注意:此声明并非为页面做自动适配,只影响浏览器默认样式

更多信息可查阅 W3C 文档 《CSS Color Adjustment Module Level 1》

2.通过 CSS 媒体查询

prefers-color-scheme
CSS 媒体特性用于检测用户是否有将系统的主题色设置为亮色或者暗色。

  • no-preference
    表示系统未得知用户在这方面的选项。在布尔值上下文中,其执行结果为 false。
  • light
    表示用户已告知系统他们选择使用浅色主题的界面。
  • dark
    表示用户已告知系统他们选择使用暗色主题的界面。
:root {color-scheme: light dark;background: white;color: black;
}@media (prefers-color-scheme: dark) {:root {background: black;color: white;}
}
//颜色较多的情况,建议使用CSS变量对颜色值进行管理

3.图片适配

利用picture+source标签,设置不同模式下的图片 url。

HTML <picture>元素通过包含零或多个 <source> 元素和一个 <img> 元素来为不同的显示/设备场景提供图像版本。
浏览器会选择最匹配的子 <source> 元素,如果没有匹配的,就选择 <img> 元素的 src 属性中的URL。然后,所选图像呈现在<img>元素占据的空间中。

<picture><!-- 深色模式下的图片 --><source srcset="dark.jpg" media="(prefers-color-scheme: dark)" /><!-- 默认模式下的图片 --><img src="light.jpg"/>
</picture>

4. JavaScript中判断当前模式&监听模式变化

4.1matchMedia

Window 的matchMedia() 方法返回一个新的MediaQueryList 对象,表示指定的媒体查询 (en-US)字符串解析后的结果。返回的MediaQueryList 可被用于判定Document是否匹配媒体查询,或者监控一个document 来判定它匹配了或者停止匹配了此媒体查询。

4.2addListener()

MediaQueryList接口的addListener()方法向MediaQueryListener添加一个侦听器,该侦听器将运行自定义回调函数以响应媒体查询状态的更改。

JavaScript监听判断

const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')function darkModeHandler() {if (mediaQuery.matches) {console.log('现在是深色模式')} else {console.log('现在是浅色模式')}
}// 判断当前模式
darkModeHandler()
// 监听模式变化
mediaQuery.addListener(darkModeHandler)

四、嵌入app的H5页面

如果是嵌入app中的H5页面,还得相应的WebView提供支持,不然利用媒体查询可能会获取不到正确的结果。

本文链接https://blog.csdn.net/qq_39903567/article/details/115673247

H5项目适配系统深色模式方案总结相关推荐

  1. H5项目适配系统深色模式方案

    一.背景 随着 iOS 13 的发布,深色模式(Dark Mode)越来越多地出现在大众的视野中,支持深色模式已经成为现代移动应用和网站的一个潮流,前段时间更是因为微信的适配再度引起热议.深色模式不仅 ...

  2. H5页面系统深色模式适配

    1. 在css中设置CSS 媒体查询 PC web模式适配,在css中通过media查询进行适配即可生效. /*日间模式*/ @media (prefers-color-scheme: light) ...

  3. Mac:系统深色模式下关闭软件深色模式的办法(针对软件没有设置选项的情况)

    个人习惯用Mac深色模式,但是有些开发软件会随着系统改变颜色,看着不是很舒服,又不支持自己设置,这时只能通过命令的模式来修改,下面是具体设置方式 比如我想调整Navicat为浅色模式,先到软件列表里找 ...

  4. 自己写一个H5项目CI系统

    持续集成(Continuous integration,简称CI)系统在软件自动化构建(包括编译.发布.自动化测试)方面有着重要的作用,在之前,前端项目简单,很多时候发布都只是一些简单的拷贝,而随着w ...

  5. web SPA 移动端手机H5项目适配(vw+postcss)

    在以前的时候,适配移动端我们一般使用rem,通过动态改变根fontsize来使页面缩放.其中很著名的就是淘宝开源的Flexible.当初为了能让页面更好的适配各种不同的终端,通过Hack手段来根据设备 ...

  6. Web前端深色模式适配方案

    众所周知,GitHub 网站在前不久支持了深色模式.我在看 GitHub 的时候发现浏览器默认的滚动条也变成了深色样式: 我当时猜测应该有一个属性可以声明配色方案,然后浏览器根据声明的配色方案采用相应 ...

  7. H5项目兼容PC端和移动端的方案(持续跟新)

    文章目录 一.利用CSS媒体查询维护两套样式 拓展-媒体查询 二.移动端1像素线问题 三.移动端 H5 滑动穿透 四.适配深色模式 一.利用CSS媒体查询维护两套样式 媒体查询:实现页面在不同设备下正 ...

  8. android开发适配深色模式,手机不支持深色模式,如何用软件解决深色模式的问题?(附有系统全局深色模式实现方法...

    本帖最后由 巷子口的你 于 2020-8-8 07:57 编辑 1.92允许通过设置为助手应用来饮捷切频深色模式(设置入口一般为系统默认应用-助手和语音输人, MIU需要设置为语音助手)提醒:稳定模式 ...

  9. 鸿蒙系统下的搜狗输入法,搜狗输入法率先适配iPhone 11深色模式,用搜狗就对了!...

    11 日凌晨,苹果秋季新品发布会在乔布斯大剧院举行,除iPhone 11 等新硬件产品外,其中最受瞩目的莫过于IOS13 的深色模式了.在本次第三方APP的适配竞速赛中,拥有庞大用户量的搜狗输入法率先 ...

最新文章

  1. 500万张图片,20万处地标风景,谷歌又放出大型数据集
  2. 【机器学习算法专题(蓄力计划)】三、机器学习中的概率论基础精讲
  3. E06-libcrypto.so.10 遗失的解决办法
  4. jieba自定义分词规则与多进程切词
  5. while(scanf(%d,n)!=EOF) / while(cinn)终止问题
  6. 超有意思的代码注释_程序员搞笑的代码注释:谁的代码注释我都不服,就服你的...
  7. 14.bash(2) 与 环境变量
  8. 阿里内部员工,排查Java问题常用的工具单
  9. sql-labs超详细教程
  10. 一个前端写的php博客系统--支持markdown哦
  11. 【计算机网络】透明网桥:逆向学习算法逐步建立转发表(例题详细解析)
  12. Linux介绍及安装过程 常用的命令 对目录或文件的增删改查 压缩和解压缩 用户和权限 shell/shellScript linux的一些其他命令
  13. Jasmine JavaScript测试 - toBe vs toEqual
  14. xgboost缺失值处理
  15. oracle 赋予dorp,ORACLE高级操作
  16. Postgresql-11 根据多字段创建分区表
  17. ACL访问控制列表(访问控制、抓取感兴趣流)详解及基本ACL和高级ACL的配置。
  18. 亚马逊AWS·优维科技EASYOPS企业云计算研讨会 邀请函
  19. 二本计算机专业可以考电网,不能小瞧的二本大学,学生毕业后直接进入电网?不用羡慕公务员...
  20. PHP 免费获取手机号码归属地

热门文章

  1. Windows系统快捷键分类说明
  2. 遇到问题 SCO UNIX 不能TELNET 本机
  3. 计算机毕业设计Java移动学习网站(系统+源码+mysql数据库+Lw文档)
  4. 微信小程序||可滑动卡片
  5. 华为AI计算机,华为在人工智能行业的发展
  6. JIL Game SDK 入门
  7. 发布即巅峰:Java性能调优六大工具:MAT内存分析工具
  8. 大华java面试经验_大华面试(Java 基础)
  9. 研究生的压力应对与心理健康2022秋期末答案
  10. 阿里腾讯外包Java怎样_阿里Java岗、腾讯后台开发岗面经(拿到AT双Offer)