交互媒體特徵及其潛力(對於錯誤的假設)
本文是對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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...
