h5 开发 webapp 各种按钮,为了更友好地展示交互效果,需要添加一些点击效果,在 pc 端的元素用 :focus:hover:active 等伪元素来实现,超链接元素还有 :link:visited

很重要的一点是,由于 css 的规则,优先级相同的样式后面会覆盖前面的,所以伪类顺序很重要,一般是

(:link 或者:visited) ~ :focus ~ :hover ~ :active

safari 和 chorme 会有突出颜色显示,可以用 -webkit-tap-highlight-color 来取消

.btn {
-webkit-tap-highlight-color: transparent;
}

windows phone 的 ie 可以用 meta 标签来实现触摸取消这种效果

<meta name="msapplication-tap-highlight" content="no" />

火狐有一个 -moz-focus-inner 伪类,在触摸元素添加一个轮廓,可以设置 border: 0 移除

在 button 元素会对元素应用渐变,可以通过 background-image: none 移除

.btn {
background-image: none;
}
.btn::-moz-focus-inner {
border: 0;
}

在移动端的浏览器上,android 的按下效果可以用 :active 或者 :hover 伪元素来实现,而在 ios 上,可以通过 js 为元素添加 touchstart 事件来解决这个问题

window.onload = function () {
if (/iP(hone|ad)/.test(window.navigator.userAgent)) {
document.body.addEventListener('touchstart', function () {}, false);
}
};

替代方案是向页面中的所有可交互元素添加触摸开始侦听器,从而缓解部分性能问题。

window.onload = function () {
if (/iP(hone|ad)/.test(window.navigator.userAgent)) {
var elements = document.querySelectorAll('button');
var emptyFunction = function () {};
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('touchstart', emptyFunction, false);
}
}
};