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);
}
}
};