iOS:active或-webkit-tap-highlight無效的原因及解決方案

通常,元素在按壓態/點擊態時會使用 :active僞類 來設置特定的樣式,這個操作在pc/Android上都沒有問題,但 iOS上的點擊事件(click)是模擬出來的,在iOS上使用 :active 僞類 需要設置一個touch事件,這樣元素的:active僞類才能被正確觸發。一般是給body標籤上加一個ontouchstart屬性,但是但是~注意body的渲染範圍,要保證元素上的touch事件能冒到body上纔行

除了:active僞類外,還有一條css屬性更適合做“點元素時元素上面覆蓋一層遮罩顏色”的效果:-webkit-tap-highlight,此屬性非標準,只有WebKit/Safari, Blink/Chrome和某些版本的IE、Edge可以用

可是有時候,-webkit-tap-highlight在iOS上並不能像預期一樣工作,這就和Safari on iOS上“clickable 元素”的概念分不開了。

在iOS,當用戶tap一個clickable的元素時,事件會按mouseovermousemovemousedownmouseupclick的順序到達,然後用戶tap另一個clickable元素的時候才觸發這個元素的mouseout事件;而當用於tap一個nonclickable元素的時候,啥事件都不會發生,如圖所示:
在這裏插入圖片描述

因此,給一個被識別成了nonclickable的元素設置-webkit-tap-highlight-color屬性是沒用的。

不過可以給nonclickable的元素加一些響應用戶操作的事件/css屬性,讓它被識別成clickable元素,例如:

  • cursor: pointer;
  • οnclick=“void(0)”

還可以用一些天生自帶clickable的標籤換掉nonclickable(主要是 div)的元素:

  • 帶有href屬性的<a>
  • 帶href屬性的<area>
  • <button>
  • <img>
  • <input>
  • 綁了form的<label>
  • <textarea>

參考文檔

https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html#//apple_ref/doc/uid/TP40006510-SW5

https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章