前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 CSS prefers-* 规范,提升网站的可访问性与健壮性

使用 CSS prefers-* 规范,提升网站的可访问性与健壮性

作者头像
Sb_Coco
发布于 2021-06-08 13:47:26
发布于 2021-06-08 13:47:26
67300
代码可运行
举报
文章被收录于专栏:Coco的专栏Coco的专栏
运行总次数:0
代码可运行

文本将介绍 CSS 媒体查询中新增的几个特性功能:

  • prefers-reduced-motion
  • prefers-color-scheme
  • prefers-contrast
  • prefers-reduced-transparency
  • prefers-reduced-data

利用好它们,能够很好的提升我们网站的健壮性与可访问性!

互联网发展到今天,对于我们的前端而言,我们的关注点不应该仅仅是我们产出的页面能不能用,也需要更多的去关注我们的页面好不好用,有没有照顾到更多的用户群体?

要知道,截至 2020 年 12 月,中国网民规模达 9.89 亿(数据来源 - 第47次《中国互联网络发展状况统计报告》 ),并不是每个用户都在使用 iPhone12 Pro Max 这种高端旗舰,更多的人群可能使用的还是百元机、千元机,十几年前的 PC。也并非每个用户都是身体或者生理上完全健全的,会存在各种视觉障碍、听觉障碍、行动障碍等用户。

我们的页面需要渐进增强,使用各种新的、花里胡哨的特性,添加各种酷炫的效果。

同时,也要考虑一些使用低端机型的用户体验,考虑部分残障人士的使用,或者是尊重用户的个性化配置。基于此,CSS 规范提出了一系列有益的属性,用于适配用户的一些个性化配置,提升页面的可访问性及健壮性。

也就是上面提到的 5 个 prefers-* 的内容,下面我们逐一介绍。

CSS @media 规范

prefers-reduced-motionprefers-color-schemeprefers-contrastprefers-reduced-transparencyprefers-reduced-data 都属于 CSS @media 规范中的内容,最新的 CSS @media 规范出到了第五版 - Media Queries Level 5

它们的用法基本一致,像是这样,与我们常写的视口媒体查询类似,以 prefers-reduced-motion 为例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ele {
    animation: aniName 5s infinite linear;
}

@media (prefers-reduced-motion: reduce) {
    .ele {
        animation: none;
    }
}

那么,它们都有什么用呢?

prefers-reduced-motion 减弱动画效果

prefers-reduced-motion 规则查询用于减弱动画效果,除了默认规则,只有一种语法取值 prefers-reduced-motion: reduce,开启了该规则后,相当于告诉用户代理,希望他看到的页面,可以删除或替换掉一些会让部分视觉运动障碍者不适的动画类型。

规范原文:Indicates that user has notified the system that they prefer an interface that removes or replaces the types of motion-based animation that trigger discomfort for those with vestibular motion disorders.

vestibular motion disorders 是一种视觉运动障碍患者,中文我只能谷歌翻译,翻译出来是前庭运动障碍,我感觉不太对,谷歌了一下是一种会导致眩晕的一类病症,譬如一个动画一秒闪烁多次,就会导致患者的不适。

使用方法,还是上面那段代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ele {
    animation: aniName 5s infinite linear;
}

@media (prefers-reduced-motion: reduce) {
    .ele {
        animation: none;
    }
}

如果我们有一些类似这样的动画:

在用户开启了 prefers-reduced-motion: reduce 时,就应该把它去掉。那么该如何开启这个选项呢?MDN -- prefers-reduced-motion 给出的是:

  • 在 GTK/Gnome 中,可以通过 GNOME Tweaks (在“通用”或“外观”菜单中,取决于具体版本) 的配置,设置 gtk-enable-animations 的值为 false
  • 可以在 GTK 3 的配置文件中的 [Settings] 模块下设置 gtk-enable-animations = false
  • Windows 10 中:设置 > 轻松获取 > 显示 > 在 Windows 中显示动画
  • 在 Windows 7 中:控制面板 > 轻松获取 > ?是计算机更易于查看 > 关闭不必要动画
  • MacOS 中:系统偏好 > 辅助使用 > 显示 > 减少运动
  • iOS 上:设置 > 通用 > 辅助性 > 减少运动
  • Android 9+ 上:设置 > 辅助性 > 移除动画

prefers-color-scheme 适配明暗主题

prefers-color-scheme 还是非常好理解的,它用于匹配用户通过操作系统设置的明亮或夜间(暗)模式。它有两个不同的取值:

  • prefers-color-scheme: light: 明亮模式
  • prefers-color-scheme: dark: 夜间(暗)模式

语法如下,如果我们默认的是明亮模式,只需要适配夜间模式即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body {
    background: white;
    color: black;
}

@media (prefers-color-scheme: dark) {
    body {
        background: black;
        color: white;
    }
}

当然,上述只是 CSS 代码示意,要做到两套主题的切换肯定不是这么简单,方法也很多,本文不赘述,读者可以自行了解各种实现主题切换,或者是明暗切换的方案。

prefers-contrast 调整内容色彩对比度

prefers-contrast 该 CSS 媒体功能是用来检测用户是否要求将网页内容以更高或者更低的对比度进行呈现。其中:

  • prefers-contrast: no-preference:默认值,不作任何变化
  • prefers-contrast: less:希望使用对比度更低的界面
  • prefers-contrast: more:希望使用对比度更高的界面

prefers-contrast: less 为例子,语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body {
    background: #fff; // 文字与背景对比度为 5.74
    color: #666;
}

// 提升对比度
@media (prefers-contrast: more) {
    body {
        background: #fff; // 文字与背景对比度为 21
        color: #000;
    }
}

上面只是伪 CSS 代码,具体可能需要对具体的一些元素进行处理,或者使用 filter: contrast() 全局统一处理,当开启配置时,用于实现类似这样的功能:

那为什么需要调整页面的对比度呢?此举是为了让一些视觉障碍的用户有更好的体验,这里补充一些对比度可访问性相关的知识。内容取自我的这篇文章 -- 前端优秀实践不完全指南

可访问性 -- 色彩对比度

颜色,也是我们天天需要打交道的属性。对于大部分视觉正常的用户,可能对页面的颜色敏感度还没那么高。但是对于一小部分色弱、色盲用户,他们对于网站的颜色会更加敏感,不好的设计会给他们访问网站带来极大的不便。

什么是色彩对比度

是否曾关心过页面内容的展示,使用的颜色是否恰当?色弱、色盲用户能否正常看清内容?良好的色彩使用,在任何时候都是有益的,而且不仅仅局限于对于色弱、色盲用户。在户外用手机、阳光很强看不清,符合无障碍标准的高清晰度、高对比度文字就更容易阅读。

这里就有一个概念 -- 颜色对比度,简单地说,描述就是两种颜色在亮度(Brightness)上的差别。运用到我们的页面上,大多数的情况就是背景色(background-color)与内容颜色(color)的对比差异。

最权威的互联网无障碍规范 —— WCAG AA规范规定,所有重要内容的色彩对比度需要达到 4.5:1 或以上(字号大于18号时达到 3:1 或以上),才算拥有较好的可读性。

借用一张图 -- 知乎 -- 助你轻松做好无障碍的15个UI设计工具推荐

很明显,上述最后一个例子,文字已经非常的不清晰了,正常用户都已经很难看得清了。

检查色彩对比度的工具

Chrome 浏览器从很早开始,就已经支持检查元素的色彩对比度了。以我当前正在写作的页面为例子,Github Issues 编辑页面的两个按钮:

审查元素,分别可以看到两个按钮的色彩对比度:

可以看到,绿底白字按钮的色彩对比度是没有达到标准的,也被用黄色的叹号标识了出来。

除此之外,在审查元素的 Style 界面的取色器,改变颜色,也能直观的看到当前的色彩对比度:

prefers-reduced-transparency 减少透明元素

prefers-reduced-transparency 该 CSS 媒体功能是用来检测用户是否要求减少网页中的透明元素:

  • prefers-contrast: no-preference:默认值,不作任何变化
  • prefers-contrast: reduce:希望界面元素存在尽可能少的透明元素

prefers-contrast: reduce 为例子,语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ele {
    opacity: 0.5;
}

// 减少透明元素
@media (prefers-contrast: reduce) {
    .ele {
        opacity: 1;
    }
}

不过,这是仍处于实验室的功能,暂时没有任何浏览器支持该媒体查询~ ?

prefers-reduced-data 减少数据传输

对于部分网速较差的地区,或者流量很贵的情况,用户会希望减少页面中的流量请求,基于此有了 prefers-reduced-data

prefers-reduced-data 该 CSS 媒体查询功能是用于告知用户代理,希望减少页面的流量请求。

  • prefers-reduced-data: no-preference:默认值,不作任何变化
  • prefers-reduced-data: reduce:希望界面元素消耗更少的互联网流量

prefers-reduced-data: reduce 为例子,语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ele {
    background-image: url(image-1800w.jpg);
}

// 降低图片质量
@media (prefers-reduced-data: reduce) {
    .ele {
        background-image: url(image-600w.jpg);
    }
}

当检测到用户开启了 prefers-reduced-data: reduce,我们将提供压缩度更高,尺寸更小,消耗流量更少的图片。

当然,上述代码只是个示意,我们可以做的其实有更多。

不过,这是仍处于实验室的功能,暂时没有任何浏览器支持该媒体查询~ ?

当然,从 Chrome 85+ 开始,可以通过开启 #enable-experimental-web-platform-features 实验室选项开启该功能!

最后

提升网站的可访问性与用户体验并非易事,规范在持续优化进步的同时我们也需要同步提升自己的相关知识技能。用户群体的扩大必然会存在各种需求的用户,现在不太受重视可访问性未来一定会越来越重要。

好了,本文到此结束,希望对你有帮助 ?

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
密码字段通过 GET 方法传输
密码字段通过 GET 方法传输是不安全的,因为在传输过程,用户凭据以明文等形式被放在请求的 URL 中。大多数 Web 服务器将记录所有请求的参数和 URL ,因此当凭据属于 URL 的一部分时,它们将显示在 Web 服务器日志中,这样就可能会有一些隐私信息被第三方查看获取。另外,攻击者也可以通过中间人攻击等手段,截获到 GET 请求 URL 中到用户凭据,增加了敏感信息泄露的风险。而 POST 请求方式通过“请求体”传递数据,参数内容不会在 URL 中显示,相较于 GET 请求方式会更加安全。
LuckySec
2023/01/30
8520
暴力破解漏洞
暴力破解的产生是由于服务器端没有做合理的限制,导致攻击者可以通过暴力的手段破解所需信息,如用户名、密码、验证码等。暴力破解的关键在于字典的大小,暴力破解需要一个庞大的字典,如4位数字的验证码,那么暴力破解的范围就是0000~9999。该漏洞常存在于应用系统的登录模块中,攻击者可以通过事先准备的字典或者社工生成的字典,对特定目标口令进行大量登录尝试,直至暴力破解成功。
LuckySec
2023/01/30
1.3K0
HOST头注入漏洞
在很多情况下,开发人员都会信任 HTTP 请求包 Header 中的 Host 字段值,并使用它来生成链接、导入脚本,甚至使用其值生产密码重置链接。这种行为非常不当,因为 HTTP HOST 字段值可能会被攻击者控制。如果应用程序没有对 Host 字段值进行处理,攻击者就可以使用 Web 缓存中毒和滥用替代通道(例如密码重置电子邮件)等手段来利用此漏洞。
LuckySec
2022/11/08
2.1K0
HOST头注入漏洞
用户名枚举漏洞
在应用系统登录的过程中,当输入错误的用户名信息时,应用程序将反馈相应的诸如“用户不存在”的错误提示,攻击者可通过该提示为依据对用户名进行枚举,猜解出已存在于应用系统的用户名信息,最终攻击者再对已有用户的密码进一步猜解,从而降低暴力破解的成本。
LuckySec
2023/01/30
4.6K0
Weblogic SSRF漏洞(CVE-2014-4210)
WebLogic Server是Oracle公司的一款适用于云环境和传统环境的应用服务器,它提供了一个现代轻型开发平台,支持应用从开发到生产的整个生命周期管理,并简化了应用的部署和管理。Oracle Fusion Middleware 10.0.2.0和10.3.6.0版本的Oracle WebLogic Server组件中的WLS - Web Services子组件存在安全漏洞。Weblogic中间件默认带有“UDDI 目录浏览器”且为未授权访问,通过该应用,可进行无回显的SSRF请求。远程攻击者可利用该漏洞对企业内网进行大规模扫描,了解内网结构,并可能结合内网edis、Fastcgi等脆弱组件漏洞直接获取服务器权限。
LuckySec
2022/11/15
1K0
Weblogic SSRF漏洞(CVE-2014-4210)
Lanproxy路径遍历漏洞
Lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具。Lanproxy 存在目录遍历漏洞,攻击者构造恶意请求,可直接获取到Lanproxy配置文件,从而登录Lanproxy管理后台进入内网。
LuckySec
2022/11/02
5370
Lanproxy路径遍历漏洞
Alibaba Nacos 权限认证绕过漏洞
Alibaba Nacos是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
LuckySec
2022/11/08
1.6K0
Alibaba Nacos 权限认证绕过漏洞
验证码重放漏洞
验证码就是每次访问页面时随机生成的图片,内容一般是数字和字母,需要访问者把图中的数字字母填到表单中提交,这样能有效地防止暴力破解、信息枚举、恶意灌水、广告帖等。例如在登陆的地方设置访问一个脚本文件,该文件生成含验证码的图片并将值写入到session里,提交的时候验证登陆的脚本就会判断提交的验证码是否与session里的一致。如果服务器端受理请求后,没有将上一次保存的session验证码及时清空,将会导致验证码可重复使用。
LuckySec
2022/11/15
1.6K0
验证码重放漏洞
短信验证码回显
由于网站程序开发人员在设计验证码时为了方便使用,会选择将验证码回显在响应中,来判断用户输入的验证码是否和响应中的验证码一致,如果一致就会通过身份校验。攻击者可以通过拦截数据包等手段获取短信验证码值,根据短信验证码使用场景的不同,将会导致任意账户登录、任意密码重置、用户身份盗用等更多高危的风险产生。
LuckySec
2022/11/15
9.1K0
短信验证码回显
OpenSSL心脏滴血漏洞
2014年4月7日,OpenSSL发布安全公告,在OpenSSL1.0.1版本至OpenSSL1.0.1f Beta1版本中存在漏洞,该漏洞中文名称为心脏滴血,英文名称为HeartBleed。其中Heart是指该漏洞位于心跳协议上,Bleed是因为该漏洞会造成数据泄露,即HeartBleed是在心跳协议上的一个数据泄露漏洞,OpenSSL库中用到了该心跳协议。
LuckySec
2022/11/02
1.2K0
OpenSSL心脏滴血漏洞
Apache Tomcat 拒绝服务漏洞通告
作者 | 360CERT 来源 | https://www.oschina.net/news/164556 报告编号:B6-2021-101501 报告来源:360CERT 报告作者:360CERT 更新日期:2021-10-15 1 漏洞简述 2021年10月15日,360CERT监测发现Apache 官方发布了Apache Tomcat 拒绝服务漏洞的风险通告,漏洞编号为CVE-2021-42340,漏洞等级:高危,漏洞评分:7.8。 Tomcat是由Apache软件基金会下属的Jakarta项目开发的
程序猿DD
2023/04/04
6990
Apache Tomcat 拒绝服务漏洞通告
短信验证码爆破
短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破成功的可能性。输入手机号获取验证码,输入任意短信验证码发起请求并抓取数据包,将短信验证码参数字段设置成payloads取值范围为000000-999999进行暴力破解,根据返回响应包状态或长度等特征进一步判断是否爆破成功。
LuckySec
2022/11/15
12.6K0
短信验证码爆破
任意用户登录漏洞(响应内容绕过)
逻辑设计缺陷是由于应⽤在最初设计时由于未考虑全⾯,在登录、注册、找回密码、⽀付模块中程序的判断逻辑及程序的处理流程上存在缺陷,导致攻击者可以绕过程序的处理流程,从⽽达到特定的⽬的,如暴⼒破解密码,任意⽤户注册、任意用户登录、任意密码重置及各种⽀付漏洞。
LuckySec
2022/11/02
5.7K0
任意用户登录漏洞(响应内容绕过)
GoTTY 未授权远程命令执行漏洞
GoTTY 是一个简单的基于 Go 语言的命令行工具,它可以将终端(TTY)作为 Web 程序共享。GoTTY 的架构是基于 Hterm + Web Socket 的,它能在 Web 浏览器上运行一个基于 Java 的终端,并支持通过 HTTP 和 HTTPS 访问。当 GoTTY 未正确配置身份验证启动时,任意用户可通过 GoTTY 程序的 Web 页面未授权远程命令执行。
LuckySec
2022/11/02
1.5K0
GoTTY 未授权远程命令执行漏洞
Weblogic Console弱口令后台getShell
Weblogic Server是Oracle公司的一款适用于云环境和传统环境的应用服务器,它提供了一个现代轻型开发平台,支持应用从开发到生产的整个生命周期管理,并简化了应用的部署和管理。Weblogic Console控制台由于管理员配置疏忽没有更改默认密码,或者存在账号弱口令漏洞,攻击者可在获取到账号密码的前提下登录管理后台,通过控制台“部署”功能模块部署恶意war包,进而getShell获取服务器管理权限。
LuckySec
2022/11/18
2.6K0
Weblogic Console弱口令后台getShell
手机号重复绑定漏洞
许多网站在用户注册时都会要求用户绑定手机号或者邮箱进行注册,通过绑定的手机号和邮箱常用于用户忘记密码时接收验证码来判断是否本人操作。一般一个手机号限定绑定一个用户账号,如果一个手机号可同时绑定多个账号,可能造成账户信息泄露、账号身份被盗用的风险。
LuckySec
2022/11/15
1.5K1
手机号重复绑定漏洞
任意用户注册漏洞(身份认证缺失)
逻辑设计缺陷是由于应⽤在最初设计时由于未考虑全⾯,在登录、注册、找回密码、⽀付模块中程序的判断逻辑及程序的处理流程上存在缺陷,导致攻击者可以绕过程序的处理流程,从⽽达到特定的⽬的,如暴⼒破解密码,任意⽤户注册、任意用户登录、任意密码重置及各种⽀付漏洞。
LuckySec
2022/11/02
4.5K0
任意用户注册漏洞(身份认证缺失)
缓慢的Http拒绝服务攻击漏洞的验证(slowhttptest的安装)
缓慢的http拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成了拒绝服务。 慢速HTTP拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是Slow headers、Slow body、Slow read。以Slow headers为例,Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每40秒才向服务器发送一个HTTP头部,而Web服务器再没接收到2个连续的rn时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称为慢速HTTP拒绝服务攻击。
p4nda
2023/01/03
5.4K0
缓慢的Http拒绝服务攻击漏洞的验证(slowhttptest的安装)
内网IP地址泄露
内网 IP 通常显现在 Web 应用程序/服务器所生成的错误消息中,或显现在 HTML/JavaScript 注释和部分页面跳转链接中。通过网站信息收集,发现其内网使用的 IP 地址(例如:内网 IP 地址段、IP 路由等等),可以帮助攻击者进行旨在渗透组织内部基础设施的网络层攻击。RFC 1918 规定了保留给私人网络使用的IP地址范围,这些地址不能在公共互联网上进行路由传输。内部 IP 定义为下列 IP 地址范围内:
LuckySec
2022/11/15
4.8K0
内网IP地址泄露
Weblogic T3协议远程代码执行漏洞(CVE-2020-2883)
- Weblogic T3协议远程代码执行漏洞(CVE-2020-2883) -
LuckySec
2022/11/18
1.2K0
Weblogic T3协议远程代码执行漏洞(CVE-2020-2883)
相关推荐
密码字段通过 GET 方法传输
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文