通常,元素在按壓態/點擊態時會使用 :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
的元素時,事件會按mouseover
→ mousemove
→ mousedown
→ mouseup
→ click
的順序到達,然後用戶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>
- …
參考文檔