active的问题

首先active是什么?

:active 伪类向激活(在鼠标点击与释放之间发生的事件)的元素添加特殊的样式。 ---w3cSchool

在移动web端,可理解为手指按下,但并未弹出系统菜单的这段过程。

经测试(荣耀6plus,iPhoneSE), active在Andriod和IOS上的表现行为不一致,其他手机暂时未测。

<style>    
     html *{-webkit-tap-highlight-color: rgba(0, 0, 0, 0);outline:none;-webkit-user-select:none; /*webkit浏览器*/  user-select:none;}
    .link{display:block;width:100%;height:50px;line-height:50px; -webkit-touch-callout:none;}
    .link:active{background-color:#ccc;}
    .link + .link{margin-top:10px;}
</style>  

//a标签的active
<a class="link" href="javascript:;">a标签</a>

//li标签的active
<ul><li class="link">li标签</li></ul>

//div标签的active
<div class="link">div标签</div>

在Andriod的UC和微信中,a、li、div标签的 active 都有效。

但是在 IOS 的 微信 和 safari 中都无效,原因是因为 Safari Mobile 默认不使用:active 状态,除非元素上或上有一个touchstart 事件处理器。 -- MDN

所以解决方案如下:

document.body.addEventListener('touchstart', function () {});

给body或者DOM元素上添加一个touchstart事件,函数为空即可。

用这种方案,Andriod和IOS系统上的UC和微信,DOM元素就都会有active效果了。

results matching ""

    No results matching ""