【问题标题】:IE10 css Hover not working with touch devicesIE10 css Hover 不适用于触摸设备
【发布时间】:2013-04-08 14:04:53
【问题描述】:

您好,我的页面上有一个简单的 CSS 悬停菜单,但在使用触摸设备时,它似乎不适用于 IE10。

有没有办法解决这个问题?

示例:http://jsfiddle.net/Z8Q8T/

HTML:

<ul class="Menu">
  <li>
    <a href="javascript:void(0);">First</a>
    <ul>
      <li>
        <a href="#1" class="Active">1</a>
      </li>
      <li>
        <a href="#2">2</a>
      </li>
      <li>
        <a href="#3">3</a>
      </li>
      <li>
        <a href="#4">4</a>
      </li>
    </ul>
  </li>
  <li>
    <a href="javascript:void(0);">Second</a>
    <ul>
      <li>
        <a href="#5">5</a>
      </li>
      <li>
        <a href="#6">6</a>
      </li>
      <li>
        <a href="#7">7</a>
      </li>
      <li>
        <a href="#8">8</a>
      </li>
    </ul>
  </li>
</ul>

CSS:

.Menu, .Menu ul {
    list-style: none;
    display: block;
    margin: 0;
}
.Menu > li {
    float: left;
    padding-bottom: 1px;
    margin: 0 10px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 11px;
    text-transform: uppercase;
}
.Menu > li:hover, .Menu > li:active {
    position: relative;
}
.Menu li a {
    display: block;
    color: #000000;
    text-decoration: none;
}
.Menu > li > a {
    border-bottom-style: solid;
    border-bottom-width: 3px;
    border-bottom-color: transparent;
}
.Menu > li > a:hover, .Menu > li > a:active {
    border-bottom-color: #A9A9A9;
}
.Menu li > ul {
    margin-top: 0px;
    /* to ensure that we dont leave the ul and the hovering effect stops */
    border-radius: 0 0 3px 3px;
    -o-border-radius: 0 0 3px 3px;
    -ms-border-radius: 0 0 3px 3px;
    box-shadow: 0px 0px 3px #888;
    padding: 0px 2px 2px 2px;
    background-color: White;
    position: absolute;
    left: -4000px;
    /* Hack to fix animation */
    min-width: 100%;
    opacity: 0;
    transition: opacity 0.2s linear;
    -webkit-transition: opacity 0.2s linear;
    -moz-transition: opacity 0.2s linear;
}
.Menu li:hover > ul, .Menu li a:active + ul {
    left: -4px;
    z-index: 100;
    opacity: 1;
}
.Menu li ul > li {
    border-left-style: solid;
    border-left-width: 3px;
    border-left-color: transparent;
    padding: 0 3px;
    margin: 3px 0;
    white-space: nowrap;
}
.Menu li ul > li:hover, .Menu li ul > li:active {
    border-left-color: #A9A9A9;
}
.Menu li ul > li.Active {
    border-left-color: black;
}

【问题讨论】:

    标签: html css menu touch internet-explorer-10


    【解决方案1】:

    Win8 上的 IE 10 似乎通过 aria 属性有解决方案:http://msdn.microsoft.com/en-us/library/jj152141%28v=vs.85%29.aspx

    "在具有切换交互内容可见性的悬停行为的页面元素上,将元素的 aria-haspopup 属性设置为 "true" "
    “当启用触摸的设备上的 Internet Explorer 10 用户第一次点击页面元素时,用户的体验将与将光标悬停在该元素上的用户的体验相同。直到用户点击页面上的其他位置,点击再次点击元素,或导航到另一个页面,该元素将保持悬停状态。此外,第一次点击页面元素时不会执行 onclick 事件的默认操作(例如链接的导航)。”

    【讨论】:

    • 这是最好的解决方案,我所要做的就是将 aria-haspopup 添加到我的 a 标签中。
    【解决方案2】:

    您可以在每次使用 :hover 时添加 :focus,这将使菜单与选项卡和移动设备一起使用。

    希望这对您有所帮助。

    编辑:注意:您最好隐藏折叠打开的菜单并使其在悬停和聚焦时可见。它现在构建的方式点击选项卡仍然会通过“不可见”链接。而且,遗憾的是,它们现在不会下拉焦点。

    解决方案?:我做了一些努力并找到了一个“修复”。 This jsFiddle 应该可以工作。但仍应在其他 CSS 规则中添加 :focus 以使样式在所有情况下都正常。当“下拉”中的链接成为焦点时,菜单应保持打开状态。 (但我认为这不会在移动设备上造成任何问题。)

    我只是更改了一点 CSS:

    .Menu li a:hover + ul,
    .Menu li a:focus + ul,
    .Menu li a:active + ul
    {
        left: -4px;
        z-index: 100;
        opacity: 1;
    }
    

    注意'+'。

    【讨论】:

    • 我尝试了您的更改,但没有成功jsfiddle.net/Z8Q8T/1 WP8 上的 IE10 仍然无法打开子菜单
    • 感谢,即使子菜单变得与页面一样宽,它似乎也能正常工作(但我猜是其他一些 IE10 错误)。
    • 它在 FF 中也是如此,它是一些 CSS 规则并没有生效。虽然不确定是哪一个:s
    • 嗯,您应用的修复程序似乎破坏了桌面上的菜单......添加回“.Menu li:hover > ul”后它再次工作......
    • @Petoj 我已经删除了所有现有的 CSS 并添加了基础知识,以便以另一种方式执行相同的操作。检查this jsFiddle。如您所见,您需要再次应用您的设计。如果这在所有情况下都不起作用,您应该选择 javascript 解决方案或在 google 上搜索另​​一个 CSS :)
    猜你喜欢
    • 2014-09-02
    • 2015-11-23
    • 2014-06-29
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2013-07-06
    相关资源
    最近更新 更多