这是一个示例 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;
}
}
尝试一下,这是一个非常简单的菜单,将鼠标悬停在中间的带子菜单的项目上,将显示一个简单的子菜单,使用简单的CSS :hover
。
点击最后一个项目,它有一个点击事件,它会正确触发。
现在在Chrome的移动设备模拟器中打开并模拟触摸。
点击/触摸带子菜单的项目,子菜单将在父元素内打开。这是期望的行为。
现在点击/触摸最后一个元素。点击事件将不会触发。
如何仅使用CSS的hover
来修复这个问题?
更新:据我所知,问题在于第一次触摸时,最后一个悬停的元素(带有子菜单的li
)变得未悬停,并且子菜单ul
被隐藏,父级ul
的高度缩小,而被触摸点下方的li
元素向上移动,因此它不再在触摸点下方,并且无法被点击/触摸!!!
li:hover > ul
声明。保留两者都不会有任何变化。 - Gwellin