javascript - CSS :hover/:focus vs click event on (mobile) touch devices

标签 javascript android html css touch

我经常遇到这样的情况,我需要在悬停时显示菜单,而对于移动设备,菜单应该在点击时打开。现在例如考虑以下示例:

.btn {
  width: 200px;
  background-color: #333;
  color: white;
  padding: 10px;
}
.menu {
  display: none;
  padding: 15px;
}
.btn:hover .menu {
  display: block;
}
.btn:focus .menu {
  display: block;
}
<div class="btn">
  Button
  <div class="menu">I am menu</div>
</div>

现在这会自动在移动设备上运行,因为悬停状态在触摸设备上是粘性的。但是这个 hack 适用于所有触摸设备吗?也就是说,值得冒险吗?会有一些触摸设备没有悬停状态粘性吗?显然,另一种方法是在触摸设备上使用 JavaScript 分配触摸/点击事件,但这似乎是多余的,因为我还没有看到任何没有粘性悬停状态的触摸设备?

所以我的问题是:

可以使用悬停状态 hack 还是我应该使用 JavaScript 事件来使其更可靠?

最佳答案

我想说的是,只要您对菜单或用户单击单独元素时关闭的任何内容没问题,就可以为大多数悬停坚持使用 css。

我不知道有任何移动浏览器不遵守此行为,至少不是主要浏览器。如果任何主要浏览器放弃此功能,则需要重建大量移动网络。

可能是安全的!

关于javascript - CSS :hover/:focus vs click event on (mobile) touch devices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302918/

相关文章:

javascript - Google 时区 API key

android - AOSP - 添加默认 Wifi SSID

html - 导航栏,最后 li 与其他导航栏不一致,我不能使用导航栏的最后大约 50 像素?

html - 使用 Bootstrap 拉伸(stretch)图像和居中内容

html - 仅CSS的砌体布局

javascript - 很难使用 flowtype.js 使我的文本更具响应性

javascript - 如何使用 web3 js 在 uniswap 上交换 token

android - 仅隐藏底部操作栏 Android

javascript - 序列化表单的数据并将其反序列化为关联数组

android - 在 Android 上打开 HTML 文件