【发布时间】:2011-05-19 18:36:42
【问题描述】:
我正在尝试制作一个按钮,这样当用户单击它时,它会在按住鼠标按钮的同时改变其样式。如果在移动浏览器中触摸它,我也希望它以类似的方式改变其样式。对我来说看似显而易见的事情是使用 CSS :active 伪类,但这不起作用。我尝试了:focus,但也没有用。我尝试了:悬停,它似乎工作,但是在我将手指从按钮上移开后它保持了这种风格。所有这些观察结果都是在 iPhone 4 和 Droid 2 上进行的。
是否有任何方法可以在移动浏览器(iPhone、iPad、Android 以及希望其他浏览器)上复制该效果?现在,我正在做这样的事情:
<style type="text/css">
#testButton {
background: #dddddd;
}
#testButton:active, #testButton.active {
background: #aaaaaa;
}
</style>
...
<button type="button" id="testButton">test</button>
...
<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.1.min.js'></script>
<script type='text/javascript'>
$("*").live("touchstart", function() {
$(this).addClass("active");
}).live("touchend", function() {
$(this).removeClass("active");
});
</script>
:active 伪类用于桌面浏览器,active 类用于触摸浏览器。
我想知道是否有更简单的方法可以做到这一点,而不涉及 Javascript。
【问题讨论】:
-
几乎每个触控浏览器处理
hover和mousedown/mouseup等内容的方式都不同,很难全部容纳。 -
Android 和 iOS 都有可以使用的 :touchstart、:touchmove、:touchend 和 :touchcancel 伪类。
-
我尝试为 :touchstart 和 :touchend 伪类设置样式,但它们在 iPhone 或 Droid 上不起作用。 @Paul Hanbury,您确定您没有将 CSS 伪类与 Javascript 事件混淆吗?
-
@mikez302 - 我认为你是对的。 plugins.jquery.com/plugin-tags/touchstart
-
我会觉得提交这个作为答案很愚蠢,但事实上,答案是“不,这不可能,你必须使用 Javascript。”您要求的不是 CSS2 或 CSS3 的一部分。我认为 :active 不起作用的事实是用户代理问题,您可能会报告为 iOS 和 Android 浏览器中的错误,但只是为了解决您的最终用户问题......是的,您必须使用 JS .您可以将兼容性代码包装在 check for ontouchstart support 中。
标签: javascript jquery html css mobile