css - Safari 手机 : Toggle contents on touch

标签 css mobile-safari

我正在调整一个网站,以使其在 iPad 上具有原生的感觉。

该网站的导航显示了一个下拉菜单,鼠标悬停时有子导航。 这在 iPad 上就像一个魅力。当您触摸子导航时,它会在您点击/触摸其他地方时再次打开和关闭。

现在我有需求,当导航点再次被触摸时,它会再次关闭。

我在想,我可以将 pointer-events:none 设置为 iPad 的悬停和事件状态,但这会使子导航闪烁并且不起作用...

我也尝试过用 before 选择器设置的元素覆盖导航点并将其指针事件设置为无,但这不起作用...

知道如何使用仅使用 CSS 来解决这个问题。 (我不能修改 HTML 和 JS)

PS:您可以在 www.macprime.ch 上复制它例如...(单击顶部的主导航,然后再次尝试关闭下拉菜单)

edit 好的,我尝试了几乎所有仅使用 CSS 的方法。我认为这不可能。如果有人能告诉我原因,他/她将获得赏金。

最佳答案

您可以在您点击的元素上方显示第二个透明元素。这样,当用户再次点击时,他们将选择另一个元素,而第一个元素将失去其悬停状态:

<div class="blocker" onclick="void()"></div>
<div class="menuItem" onclick="void()"></div>

<style>
    .blocker, .menuItem {
        /* use the same position, width, height, etc */
    }
    .menuItem {
        /* make it look pretty */
        z-index: 100;
    }
    .blocker {
        z-index: 99;
    }
    .menuItem:hover {
        z-index: 98;
    }
</style>

当然,这会对桌面产生负面影响,因此您需要执行以下操作:

<style>
    .blocker { display: none; }
    .touchevents .blocker { display: block; }
</style>
<script>
    if('ontouchstart' in document)
        document.body.className += ' touchevents';
</script>

更新 添加了 onclick 事件以使其可点击。

您可以在此处查看工作演示:http://fiddle.jshell.net/vfkqS/6/

不幸的是,我找不到不需要更改 HTML 或 JavaScript 的解决方案,但我能够将它们保持在最低限度。

您总共需要进行两项非 CSS 更改:

  1. 添加一个 JavaScript 机制来识别是否支持触摸事件。请参见上面的两行示例。
  2. 为每个菜单添加一个可点击的 div (onclick="void()"),并具有可将其链接到菜单的唯一标识符。

可能可以使用 CSS 完成这两件事,但我不确定。平板电脑检测在 CSS 中会有点粗略,我不认为你可以用 :before 或 :after 伪选择器做出那么复杂的东西。

关于css - Safari 手机 : Toggle contents on touch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647013/

相关文章:

javascript - 如何检查是否已下载所有 CSS 文件以使用 JavaScript 插入 HTML?

html - web2py 站点没有加载通常的 css,只是普通丑陋的 html

JavaScript : Prevent showing alert when the url being opened is invalid

ipad - iOS 4.2.1 Mobile Safari 不会显示海报图片

html - @media 查询在 Chrome 或 Safari iOS 中不起作用

html - Mobile Safari 5mb HTML5 应用程序缓存限制?

javascript - 主页 slider 在移动设备上显示不佳

javascript - SVG 使虚线变为实线

html - 为什么 iOS Safari(和 iOS Chrome)显示背景图片的方式与其他浏览器不同?

html - 将搜索栏放在导航栏中