本文是对2015年Dev.opera作品的大大扩展更新,阐明了有关媒体查询级别4相互作用媒体功能的误解( pointer
, hover
, any-pointer
, any-hover
)。原始文章误解了any-hover: none
;该版本与最新的工作草案保持一致,解决了浏览器实现之间的不一致之处(请参阅当前的测试结果和相关的错误报告)。
媒体查询4级旨在根据用户输入设备调整网站样式和功能(通过window.matchMedia
的CSS Interactivity或JavaScript行为)。虽然通常得到很好的支持,但实施变化持续存在。
常见用例涉及根据触摸屏与鼠标/手写笔的使用调整控制大小,或者有条件地启用基于悬停的菜单:
<code>@media (pointer: fine) { /* Mouse or stylus: small controls okay */ } @media (pointer: coarse) { /* Touchscreen: larger touch targets */ } @media (hover: hover) { /* Enable hover menus */ } @media (hover: none) { /* Disable hover menus */ }</code>
开发人员经常利用这些功能进行触摸检测,通常在检测pointer: coarse
时聆听触摸事件:
if(window.matchmedia && window.matchmedia(“(指针:cooly)”)。匹配){ / *粗指针:听触摸事件 */ target.AddeventListener(“ TouchStart”,...); } 别的 { / *否则,使用鼠标/键盘事件 */ }
但是,这种方法是简单的,并且误解了功能的目的。
主要输入限制
pointer
和hover
仅揭示主要指针输入的特征。这可能与用户的实际主要输入有所不同,尤其是在设备/输入线模糊的情况下。至关重要的是,这些功能无法检测到仅键盘的用户。因此,无论查询结果如何,请确保键盘可访问性。
带有蓝牙鼠标的手机可能会报告pointer: coarse
和hover: none
。相反,表面平板电脑可能主要使用触控板( pointer: fine
),但是用户可能更喜欢触摸屏。
any-pointer
和any-hover
都可以解决此问题。
评估所有投入
any-pointer
和any-hover
反映了所有指针输入的组合功能。如果输入具有不同的特征,则多个值可以匹配。当前的实施通常的行为如下:
为了改善原始用例,对所有指针输入的基本决策:“如果任何输入很粗糙,放大控件”和“如果至少一个输入支持悬停的话,则启用Hover Menus。”
<code>@media (any-pointer: coarse) { /* At least one coarse pointer: larger controls */ } @media (any-hover: hover) { /* At least one hover-capable input: enable hover menus */ }</code>
any-pointer: none
仅当不存在指针输入时,没有一个是正确的。 any-hover: none
仅当没有任何输入支持悬停的情况下,就不是正确的,从而使其在很大程度上冗余。
结合细微差别的查询
结合查询以进行精致评估:
<code>@media (pointer: coarse) and (any-pointer: fine) { /* Primary input is touchscreen, but a fine input exists. Prioritize touch, but mouse/stylus users can still interact. */ } @media (pointer: fine) and (any-pointer: coarse) { /* Primary input is mouse/stylus, but a touchscreen exists. Larger controls might be safest. */ } @media (hover: none) and (any-hover: hover) { /* Primary input lacks hover, but another input supports it. Treat hover as optional. */ }</code>
响应环境变化,浏览器会动态重新评估查询(例如,添加蓝牙鼠标)。
可能需要脚本
交互媒体功能并未表示当前使用的输入。类似于输入的工具?跟踪JavaScript事件,但这仅在互动开始后提供信息,并且由于伪造的事件(辅助技术,iOS完整键盘支持)可能不准确。
避免经历破裂
基于事件的触摸检测( pointer: coarse
- >听触摸事件)是有缺陷的。它可以防止在触摸设备上使用非电视屏幕屏幕输入,并在主要由鼠标驱动的设备上使用触摸屏输入。相反,请务必收听鼠标/键盘事件,并仅在any-pointer: coarse
为TRUE时才添加触摸事件侦听器:
/ *始终收听鼠标/键盘事件 */ target.AddeventListener(“ click”,...); if(window.matchmedia && window.matchmedia(“(任何点:croun)”)。匹配){ / *如果存在粗线,也请听触摸事件 */ target.AddeventListener(“ TouchStart”,...); }
或者,使用指针事件进行统一输入处理。
明确的用户选择
提供一个可供用户选择的模式(触摸/鼠标),以避免输入检测陷阱。使用媒体查询通知默认设置,并检测触摸输入以提示模式开关。
负责的查询
了解交互媒体功能的局限性。不要假设单个输入类型,只依靠pointer
和hover
,或忽略键盘可访问性。取而代之的是,优先考虑触摸友好性,提供用户选择,并始终确保键盘可访问性。
以上是交互媒体特征及其潜力(对于错误的假设)的详细内容。更多信息请关注PHP中文网其他相关文章!

React生态系统为我们提供了许多库,所有库都集中在拖放的相互作用上。我们有反应,反应,可爱dnd,

我可以说我经常使用背景折叠。 IT Wager IT几乎从未在日常CSS工作中使用。但是在斯特凡·朱迪斯(Stefan Judis)的帖子中,我想起了它,

使用RequestAnimationFrame进行动画化应该很容易,但是如果您还没有彻底阅读React的文档,那么您可能会遇到一些事情

听着,我不是GraphQL专家,但我确实喜欢与之合作。作为前端开发人员,它向我曝光数据的方式非常酷。它就像一个菜单


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

禅工作室 13.0.1
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver CS6
视觉化网页开发工具