【译】媒体查询特性 - 适应用户偏好 | perfers-reduced-motion | prefers-color-scheme | Save data

简介: 【译】媒体查询特性 - 适应用户偏好 | perfers-reduced-motion | prefers-color-scheme | Save data


为了践行新的一年能翻译12+的国外技术博客文章的目标,今天就让我们开始第一篇。

本篇文章翻译自一位专注于H5、CSS、web性能的自由开发者: Michael Scharnagl。

译者引言:

当我们在使用APP时,我们在 设置中常会发现这么一项操作:如无图模式夜间模式等等,这些设置项来自对用户偏好的考量。为了打造轻应用的进展中,在web中也将逐步实现这样的特性。今天,我们就来了解一下关于在web中打造用户偏好的特性。

适应用户偏好

在过去的几年里,浏览器实现了各种功能,可以使用CSS、JavaScript或检查服务器端的首选项来响应web上的用户偏好。在本文中,将展示浏览器当前公开的用户偏好、处理它们的最佳方式,以及对未来的展望,以了解可能很快就会出现什么。

perfers-reduced-motion

让我们从减少运动媒体查询perfers-reduced-motion)开始。这项特性是在Safari10.1中引入的,目前在Safari、IOS Safari、Firefox和Chrome的最新版本中得到支持。

perfers-reduced-motion这项特性被用于检测用户是否需要系统将其使用的动画或运动最小化。你可以用下面的方式检测:

@media (perfers-reduced-motion: reduce) {
    /* disable animations/transitions 禁用动画或过渡*/ 
}

或者使用另一种方式:

var motionQuery = matchMedia('(perfers-reduced-motion)');
function handleReduceMotionChanged() {
  if (motionQuery.matches) {
    /*disabled animations/transitions 禁用动画或过渡*/
  }else {
    /*enable animations/transitions 开启动画或过渡*/
  }
}
motionQuery.addListenet(handleReduceMotionChanged);
handleReduceMotionChanged();

但是,对所有CSS 动画(animation)和过渡(transition)禁用perfers-reduced-motion:reduce的方式是:

@media (perfers-reduced-motion: reduce) {
    * {
      transition: none !important;
      animation: none !important;
    }
}

但是,这样做并不会触发动画开始/结束事件或关键帧(animation start/end events or keyframe states)状态。所以,如果你的代码依赖于这些事件,你还需要这么做:

@media (perfers-reduced-motion: reduce) {
    * {
      transition-duration: 0.1s !important;
      animation-duration: 0.1s !important;
    }
}

这样做的好处就是,即使用户喜欢 perfers-reduced-motion,你也能对部分元素使用animation或transition

这里,我们推荐您阅读 这篇文章 : Designing Safer Web Animation For Motion Sensitivity 作者介绍了关于何时应该使用animation/transition。

prefers-color-scheme

另一个用户偏好 是媒体查询中的prefers-color-scheme特性。目前Safari12.1和Firefox67均已得到支持(2019年3月10日)。

perfers-color-scheme这项特性很可能在MacOS的Dark/Light模式中比较熟悉。

例如,你可是在CSS中使用下面如下的方式来检查用户是否喜欢Dark模式。而对于Light模式,perfers-colors-scheme的默认值就是light

@media (perfers-color-scheme: dark) {
  /* adust style for dark mode 调整为Dark模式*/
}

同时,你可以使用js检测:

var colorSchemeQuery = matchMedia('(perfers-color-schme:dark)');
function handleColorsSchemeChanged() {
  if(colorSchemeQuery.matches) {
    /* dark mode*/
  }else {
    /* light mode */
  }
}
colorSchemeQuery.addListener(handleColorSchemeChanged);
handleColorsSchemeChanged()l

关于Dark 模式的设计,你可以阅读这篇文字 : designing for dark mode

Save data

接下来,我们看看 SaveData这个请求头

用户可以在他们的浏览器中激活 SaveData 模式。而如果当用户启用这项模式时,开发人员可以设法提供系统字体而不是Web字体,或提供低分辨率图像而不是高分辨率图像等等,这样我们就能够提供一个轻应用的方式。

我们通过js方式检测:

if("connection" in navigator) {
  if (navigator.connection && navigator.connection.saveData === true) {
    // saveDate 模式 开启 - 不要假装高分辨率图像或网页字体等**重资源**
  }
}

或者使用服务端程序进行检测。例如PHP的方式是:

if (isset($_server[”HTTP_SAVE_DATA“]) && strtolower($_SERVER["HTTP_SAVE_DATA"])=== "on") {
  // 检测到 'Save-Data'
  $saveData = true; 
}

目前,还没有针对Save-Data的媒体查询。

更多关于快速和轻应用程序的信息与保存数据,推荐这篇文字。

Do Not Track

这也是一项请求头特性。由于这项特性会跟踪用户,所以在Safari Technology Preview 75中被禁用了。同时,不确定其他浏览器是否也会禁用这项功能。

你可以使用js检测它:

var doNotTrack = (navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1" || window.doNotTrack === "1");
if (!doNotTrack) {
  /* 如果确实需要track,请加载分析*/
}

或者使用服务端程序进行检测。例如PHP的方式是:

$donottrack= (isset($_SERVER['HTTP_DNT']) && $_SERVER['HTTP_DNT'] == 1); 
if (!$donottrack) {
  echo 'embed analytics script if you really need to'; 
}

展望

把决定权交给用户

如果您尊重用户的偏好,那么您还应该确保用户可以在您的站点上重新设置它,这是非常好的。一般情况下,用户可能更喜欢暗模式,但您的站点上可能更喜欢亮模式——所以您应该有一个设置来更改主题,并使用该设置覆盖浏览器公开/默认的一般用户设置。同时,总是要确保用户可以很容易地找到这些设置。

下一步

从媒体查询 Level 5这个阶段开始,我们可以看到接下来浏览器将会出现什么功能支持用户偏好。

如:inverted-colorsperfers-reduced-transparencyperfers-contrast

正如你所看到的,目前有各种各样的方法来调整你的网站,以满足用户的偏好,在未来还会有更多的方法。这一特性有助于提高可访问性、性能和隐私,当您适应这些特性时,您可以让您的用户满意。

@ 本篇译文地址

参考



相关文章
|
10月前
|
编解码 弹性计算 大数据
软硬结合助力倚天云原生算力再进化,加速大数据、视频转码上云步伐
本文介绍了云原生算力的进化,重点讨论了倚天710 CPU在大数据和视频转码场景中的应用与优势。倚天710采用ARM架构,通过物理核设计和CIPU加速卡优化,显著提升了高负载下的性能稳定性,并在实际应用中帮助客户实现了20%-40%的性能提升和成本降低。此外,文章还探讨了操作系统、编译器等底层软件的优化,以及如何通过龙蜥社区和阿里云平台支持更多应用场景,助力企业实现高效迁移和性能优化。
|
12月前
|
监控 前端开发 安全
如何开发一个网站:全面解析与实战指南
在数字化时代,网站是企业和个人展示形象、传播信息的关键平台。本文提供从规划、设计、开发、上线到后期维护的全方位网站开发指南,涵盖明确目标、分析用户、设定功能需求、设计风格、技术选型、测试部署及优化升级等内容,帮助你打造既美观又实用的网站。
831 4
ly~
|
存储 安全 网络安全
云数据库的安全性如何保障?
云数据库的安全性可通过多种方式保障,包括多因素身份验证、基于角色的访问控制及最小权限原则,确保仅有授权用户能访问所需数据;采用SSL/TLS加密传输和存储数据,加强密钥管理,防止数据泄露;定期备份数据并进行异地存储与恢复演练,确保数据完整性;通过审计日志、实时监控及安全分析,及时发现并应对潜在威胁;利用防火墙、入侵检测系统和VPN保护网络安全;选择信誉良好的云服务提供商,确保数据隔离及定期安全更新。
ly~
889 2
|
存储 JSON 开发框架
循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储
循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储
|
12月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
1003 0
|
数据采集 存储 数据挖掘
CDGA|解锁数据价值:基础数据治理的至关重要性
在数据驱动时代,数据成为企业的宝贵资产。本文探讨了数据治理的重要性,介绍其为核心管理活动,确保数据的可用性、完整性、安全性和合规性。良好的数据治理能提升数据质量、加强安全、促进共享,并支持高效决策,从而帮助企业最大化数据价值。通过明确目标、建立组织、制定政策和强化技术支持,企业可以构建起科学的数据治理体系,推动未来发展。
ly~
|
供应链 监控 搜索推荐
大数据的应用场景
大数据在众多行业中的应用场景广泛,涵盖金融、零售、医疗保健、交通物流、制造、能源、政府公共服务及教育等领域。在金融行业,大数据用于风险评估、精准营销、反欺诈以及决策支持;零售业则应用于商品推荐、供应链管理和门店运营优化等;医疗保健领域利用大数据进行疾病预测、辅助诊断和医疗质量评估;交通物流业通过大数据优化物流配送、交通管理和运输安全;制造业则在生产过程优化、设备维护和供应链协同方面受益;能源行业运用大数据提升智能电网管理和能源勘探效率;政府和公共服务部门借助大数据改善城市管理、政务服务及公共安全;教育行业通过大数据实现个性化学习和资源优化配置;体育娱乐业则利用大数据提升赛事分析和娱乐制作水平。
ly~
2578 2
|
关系型数据库 MySQL 数据库
MySQL删除全局唯一索引unique
这篇文章介绍了如何在MySQL数据库中删除全局唯一的索引(unique index),包括查看索引、删除索引的方法和确认删除后的状态。
696 9
|
容器
echarts的grid——图表的位置配置
echarts的grid——图表的位置配置
2138 1
|
JSON 数据格式
HttpClient远程调用基本使用(详解)
HttpClient远程调用基本使用(详解)
548 0