【发布时间】:2017-06-19 01:44:33
【问题描述】:
我知道标题太笼统了。我找不到具体的标题。
这里是示例https://jsfiddle.net/Exlord/1soagsL5/
HTML
<ul>
<li>item1</li>
<li>item1</li>
<li>item with submenu >
<ul>
<li>item1</li>
<li>item1</li>
</ul>
</li>
<li>item1</li>
<li id='clickable'>item1</li>
</ul>
JavaScript
var el = document.getElementById('clickable');
el.addEventListener('click', function(e) {
console.log(e.target);
}, false);
CSS
ul {
list-style: none;
margin: 0;
padding: 0;
width: 200px;
max-width: 100%;
}
li {
background: gray;
padding: 5px;
border: solid 1px black;
position: relative;
}
li:hover > ul {
display: block;
}
@media all and (min-width: 481px) {
ul ul {
display: none;
position: absolute;
left: 100%;
top: 0;
}
}
@media all and (max-width: 480px) {
ul ul {
display: none;
}
}
试一试,这是一个非常简单的菜单,悬停在中间的item item with submenu,一个简单的子菜单会显示一个简单的CSS :hover。
点击最后一项,它有一个点击事件,它会正确触发。
现在在带有触摸模拟的 Chrome 移动设备模块中打开它。
单击/触摸带有子菜单的项目,子菜单将在父元素内打开。这是预期的行为。
现在单击/触摸最后一个元素。点击事件不会触发。
如何仅使用 CSS hover 解决此问题?
更新:据我所知,问题是第一次触摸最后一个悬停元素(li 带有子菜单)被取消悬停,子菜单ul 被隐藏并且父ul 的高度缩小并且触摸点下方的li 元素向上移动,因此它不再位于触摸点下方,也不会被点击/触摸!!!!
【问题讨论】: