H5项目适配系统深色模式方案总结
文章目录
- 一、背景
- 二、问题
- 三、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项目适配系统深色模式方案总结相关推荐
- H5项目适配系统深色模式方案
一.背景 随着 iOS 13 的发布,深色模式(Dark Mode)越来越多地出现在大众的视野中,支持深色模式已经成为现代移动应用和网站的一个潮流,前段时间更是因为微信的适配再度引起热议.深色模式不仅 ...
- H5页面系统深色模式适配
1. 在css中设置CSS 媒体查询 PC web模式适配,在css中通过media查询进行适配即可生效. /*日间模式*/ @media (prefers-color-scheme: light) ...
- Mac:系统深色模式下关闭软件深色模式的办法(针对软件没有设置选项的情况)
个人习惯用Mac深色模式,但是有些开发软件会随着系统改变颜色,看着不是很舒服,又不支持自己设置,这时只能通过命令的模式来修改,下面是具体设置方式 比如我想调整Navicat为浅色模式,先到软件列表里找 ...
- 自己写一个H5项目CI系统
持续集成(Continuous integration,简称CI)系统在软件自动化构建(包括编译.发布.自动化测试)方面有着重要的作用,在之前,前端项目简单,很多时候发布都只是一些简单的拷贝,而随着w ...
- web SPA 移动端手机H5项目适配(vw+postcss)
在以前的时候,适配移动端我们一般使用rem,通过动态改变根fontsize来使页面缩放.其中很著名的就是淘宝开源的Flexible.当初为了能让页面更好的适配各种不同的终端,通过Hack手段来根据设备 ...
- Web前端深色模式适配方案
众所周知,GitHub 网站在前不久支持了深色模式.我在看 GitHub 的时候发现浏览器默认的滚动条也变成了深色样式: 我当时猜测应该有一个属性可以声明配色方案,然后浏览器根据声明的配色方案采用相应 ...
- H5项目兼容PC端和移动端的方案(持续跟新)
文章目录 一.利用CSS媒体查询维护两套样式 拓展-媒体查询 二.移动端1像素线问题 三.移动端 H5 滑动穿透 四.适配深色模式 一.利用CSS媒体查询维护两套样式 媒体查询:实现页面在不同设备下正 ...
- android开发适配深色模式,手机不支持深色模式,如何用软件解决深色模式的问题?(附有系统全局深色模式实现方法...
本帖最后由 巷子口的你 于 2020-8-8 07:57 编辑 1.92允许通过设置为助手应用来饮捷切频深色模式(设置入口一般为系统默认应用-助手和语音输人, MIU需要设置为语音助手)提醒:稳定模式 ...
- 鸿蒙系统下的搜狗输入法,搜狗输入法率先适配iPhone 11深色模式,用搜狗就对了!...
11 日凌晨,苹果秋季新品发布会在乔布斯大剧院举行,除iPhone 11 等新硬件产品外,其中最受瞩目的莫过于IOS13 的深色模式了.在本次第三方APP的适配竞速赛中,拥有庞大用户量的搜狗输入法率先 ...
最新文章
- AI一分钟 | 妈呀!连地铁都开始无人驾驶了,飞机还远吗;北京无人驾驶新规出台,终于知道李彦宏该不该被罚了(12月19日)
- 02027_线程池练习:返回两个数相加的结果
- 近期项目中用到的一些自己写的或者整理而成的前端效果干货(二)
- llinux环境变量查看和修改
- Linux下载源码编译出错,linux下fortran中编译代码时“undefined reference to `_gfortran_st_”错误...
- 工业以太网的冗余功能有哪些?
- ajax 批量上传图片插件,TinyMCE多图片批量上传(Ajax)教程
- ZZULIOJ 1060:逆序数字
- 信息学奥赛一本通(1154:亲和数)
- Docker容器管理
- io_service线程安全队列效率
- 维、哈、柯文字符代码及键盘标准
- 通过企业微信Api向企业微信用户发送消息的实现
- python -PyPDF2对pdf 进行拆分
- 箱形图适用于哪种数据_python数据分布型图表箱形图系列带误差线箱形图
- android源代码目录详解
- 透明图片怎么发给别人_苹果实况图片怎么发给别人
- 关于健身的那点儿事儿
- 怎么在matlab画双坐标,如何利用matlab的plotyy函数画双坐标图??
- SAP S4 MM配置详解之三:物料主数据-定义物料类型/物料状态/字段选择控制/物料组