• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    详解Html5项目适配系统深色模式方案总结

    发布者: 浪子 | 发布时间: 2025-6-16 12:24| 查看数: 61| 评论数: 0|帖子模式

    一、背景

    随着 iOS 13 的发布,深色模式(Dark Mode)越来越多地出现在大众的视野中,支持深色模式已经成为现代移动应用和网站的一个潮流,前段时间更是因为微信的适配再度引起热议。深色模式不仅可以大幅减少电量的消耗,减弱强光对比,还能 提供更好的可视性和沉浸感。
    如何切换深色模式
         
    • iOS:“设置”–“显示与亮度”–“外观”,选择“深色”   
    • Android:“系统设置”–“显示”–“深色模式”。
    二、问题

    如果系统设置了深色模式,H5页面不做相应的处理,会出现背景色冲突、深色文字显示异常,深色图标显示异常等一些显示上的问题。
    所以,需要对深色模式进行一些适配。
    我尝试了一些方案:
    三、H5项目适配深色模式方案

    1.声明 color-scheme

    color-scheme
    有两种方式。
    1.1meta
    在head中声明
    1. <meta name="color-scheme" content="light dark">
    复制代码
    ,声明当前页面支持 light 和 dark 两种模式,系统切换到深色模式时,浏览器默认样式也会切换到深色;
    1.2CSS
    下面的 css 同样可以实现上面 meta 声明的效果
    1. :root {
    2.     color-scheme: light dark;
    3. }
    复制代码
    注意:此声明并非为页面做自动适配,只影响浏览器默认样式
    更多信息可查阅 W3C 文档 《CSS Color Adjustment Module Level1》
    2.通过 CSS 媒体查询

    prefers-color-scheme
    CSS 媒体特性用于检测用户是否有将系统的主题色设置为亮色或者暗色。
    no-preference
    表示系统未得知用户在这方面的选项。在布尔值上下文中,其执行结果为 false。
    light
    表示用户已告知系统他们选择使用浅色主题的界面。
    dark
    表示用户已告知系统他们选择使用暗色主题的界面。
    1. :root {
    2.     color-scheme: light dark;
    3.     background: white;
    4.     color: black;
    5. }

    6. @media (prefers-color-scheme: dark) {
    7.     :root {
    8.         background: black;
    9.         color: white;
    10.     }
    11. }
    12. //颜色较多的情况,建议使用CSS变量对颜色值进行管理
    复制代码
    3.图片适配

    利用picture+source标签,设置不同模式下的图片 url。
    HTML <picture>元素通过包含零或多个 <source> 元素和一个 <img> 元素来为不同的显示/设备场景提供图像版本。
    浏览器会选择最匹配的子 <source> 元素,如果没有匹配的,就选择 <img> 元素的 src 属性中的URL。然后,所选图像呈现在<img>元素占据的空间中。
    1. <picture>
    2.     <!-- 深色模式下的图片 -->
    3.     <source srcset="dark.jpg" media="(prefers-color-scheme: dark)" />
    4.     <!-- 默认模式下的图片 -->
    5.     <img src="light.jpg"/>
    6. </picture>
    复制代码
    4. JavaScript中判断当前模式&监听模式变化

    4.1matchMedia
    Window 的matchMedia()方法返回一个新的MediaQueryList 对象,表示指定的媒体查询 (en-US)字符串解析后的结果。返回的MediaQueryList 可被用于判定Document是否匹配媒体查询,或者监控一个document 来判定它匹配了或者停止匹配了此媒体查询。
    4.2addListener()
    MediaQueryList接口的addListener()方法向MediaQueryListener添加一个侦听器,该侦听器将运行自定义回调函数以响应媒体查询状态的更改。
    JavaScript监听判断
    1. const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')

    2. function darkModeHandler() {
    3.     if (mediaQuery.matches) {
    4.         console.log('现在是深色模式')
    5.     } else {
    6.         console.log('现在是浅色模式')
    7.     }
    8. }

    9. // 判断当前模式
    10. darkModeHandler()
    11. // 监听模式变化
    12. mediaQuery.addListener(darkModeHandler)
    复制代码
    到此这篇关于详解Html5项目适配系统深色模式方案总结的文章就介绍到这了,更多相关Html5深色模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/html5/771568.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表