文章目录

  • 一、背景
  • 二、问题
  • 三、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. AI一分钟 | 妈呀!连地铁都开始无人驾驶了,飞机还远吗;北京无人驾驶新规出台,终于知道李彦宏该不该被罚了(12月19日)
  2. 02027_线程池练习:返回两个数相加的结果
  3. 近期项目中用到的一些自己写的或者整理而成的前端效果干货(二)
  4. llinux环境变量查看和修改
  5. Linux下载源码编译出错,linux下fortran中编译代码时“undefined reference to `_gfortran_st_”错误...
  6. 工业以太网的冗余功能有哪些?
  7. ajax 批量上传图片插件,TinyMCE多图片批量上传(Ajax)教程
  8. ZZULIOJ 1060:逆序数字
  9. 信息学奥赛一本通(1154:亲和数)
  10. Docker容器管理
  11. io_service线程安全队列效率
  12. 维、哈、柯文字符代码及键盘标准
  13. 通过企业微信Api向企业微信用户发送消息的实现
  14. python -PyPDF2对pdf 进行拆分
  15. 箱形图适用于哪种数据_python数据分布型图表箱形图系列带误差线箱形图
  16. android源代码目录详解
  17. 透明图片怎么发给别人_苹果实况图片怎么发给别人
  18. 关于健身的那点儿事儿
  19. 怎么在matlab画双坐标,如何利用matlab的plotyy函数画双坐标图??
  20. SAP S4 MM配置详解之三:物料主数据-定义物料类型/物料状态/字段选择控制/物料组

热门文章

  1. Android系统的编舞者Choreographer
  2. 更智能的烟灶套装,让厨房免受油烟困扰,云米AI油烟机Wing A1体验
  3. jaeger安装和架构
  4. ssci源刊里有开源期刊吗_计算机类SCI检索源刊,期刊影响因子排名
  5. mint-ui使用手册
  6. PowerDesigner16(PDM)pd生成数据库sql脚本
  7. OpenGL Glut剖析(2)--平行投影及其显示范围
  8. 实验记录二 示例程序
  9. 优秀的软件词典灵格斯
  10. 英语计算机主板接口有,i/o(计算机接口)_百度百科