【问题标题】:How can I avoid the first item in a pure css pull-down menu to be auto-selected on Android如何避免在 Android 上自动选择纯 CSS 下拉菜单中的第一项
【发布时间】:2015-04-20 12:32:39
【问题描述】:

我有一个pure css pull-down menu,它可以在台式机、iPad 和旧版 Android 浏览器上正常运行。

但是 Android 5 上的 Chrome 有一个问题:当我选择菜单标题(“第一个菜单”)时,总是自动选择第一项(“Lorem”)。我怎样才能避免这种情况?

我无法在其他移动浏览器中重现此问题。它在旧 Android 版本的 Chrome 中也能正常工作。

HTML:

<div class="menuouter"><div onClick=”return true;” class="firstmenu menuinner">First menu<ul>
    <li><a class="menuitem " href="#">Lorem</a></li>
    <li><a class="menuitem " href="#">Ipsum</a></li>
    <li><a class="menuitem " href="#">Lorem</a></li>
    <li><a class="menuitem " href="#">Ipsum</a></li>
</ul></div></div>

CSS:

*, *:before, *:after {
    box-sizing: border-box;
}
.menuouter {
    height: 2.2em;
    display: inline-block;
    vertical-align: top;
    width: 200px;
    margin: 0 10px 0 0;
}
.firstmenu {
    z-index: 1;
}
.menuinner { 
    line-height: 2.0em;
    margin: 10px;
    padding: 0; 
    border: 2px solid purple; 
    width: 100%;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    position: relative;
}
.menuinner > ul { 
    display: none;
    width: 100%;
    margin: 0;
    padding: 0;
}
.menuinner > ul li {
    margin: 0;
    list-style-type: none;
}
.menuinner > ul li a {
    background-color: #ccc;
    width: 100%;
    display: block;
    padding: 5px;
    border-bottom: 1px solid red;
}
.menuinner > ul li a:last-child {
    border-bottom: none;
}
.menuinner:hover > ul {
    padding: 0; 
    margin: 0; 
    list-style-type: none; 
    display: block; 
    background: #f9f9f9; 
    border-top: 1px solid purple;
}
.menuinner:hover > ul > li {}
.menuinner:hover > ul > li:hover a {
    background: #ccc;
}
.menuinner:hover > ul > li:hover > a { 
    color: red;
    background-color: blue;
}

【问题讨论】:

    标签: android css google-chrome drop-down-menu


    【解决方案1】:

    我没有看到 Android 5 上的 Chrome 的行为与其他版本不同。我相信您正在体验香肠手指/微型电话的效果...没有冒犯:-)。

    当您单击下拉菜单时,您与之交互的区域恰好与第一个 li 所在的位置重叠......从而触发悬停。

    试试这个版本,点击区域更大:fiddle

    我会考虑在触摸设备上完全禁用li:hover。您可以使用媒体查询或 javascript 来检测设备类型(请参阅this question),然后使用pointer-events: none; 禁用悬停(请参阅docs)。请注意,这假定了触摸或鼠标功能,并且不适用于同时具备这两种功能的设备。

    有关其他方法的全面说明,请参阅Disable hover effects on mobile browsers

    【讨论】:

    • 你好,如果涉及到香肠,也许想知道,你可以用一个转换延迟来测试这个:jsfiddle.net/nxq55ppr/14(不是显示,而是触发延迟的高度)。
    • @GCyrillus 好主意!是的,过渡延迟似乎奏效了。至少在我的设备上。不过,它可能仍会在滞后的设备上突出显示。
    • @pschueller:它确实在我的手机上自动选择,并且不涉及香肠。我在其他手机上尝试过 Chrome,在我手机上也尝试过其他浏览器,它运行良好(即:第一个没有得到蓝色)。
    • @neu242 这很奇怪。我已经尝试过运行 5.0.0 和新安装的 Chrome 的 Nexus7 和 Oppo Find 5,但我似乎无法重现该问题。似乎也可以在我的虚拟设备上使用,你有什么手机?
    • @pschueller:我有一个 Nexus 5。我现在使用的是 Android 5.1,但仍然存在同样的问题。恼人的! :(
    猜你喜欢
    • 2022-10-17
    • 1970-01-01
    • 2018-08-21
    • 2018-03-30
    • 2012-06-29
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多