我知道标题太笼统。我找不到具体的标题。Css悬停+点击/触摸触摸设备上的奇怪行为
这里是样品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的移动设备mod中用触摸模拟打开它。
单击/触摸具有子菜单的项目,子菜单将在父元素内部打开。这是预期的行为。
现在点击/触摸最后一个元素。点击事件不会触发。
我该如何解决这个与CSS只有hover
?
更新:据我可以告诉的问题是,在第一次触摸的最后悬停的元素(li
与子菜单)返回unhovered和子菜单ul
被隐藏,而家长ul
的高度萎缩,那是li
元素在触摸点下移动,所以它不在触摸点了,它不会被点击/触摸!
不,不起作用。我认为这个问题是,第一次触摸时,最后一个被覆盖的元素被隐藏起来,子菜单'ul'被隐藏起来,并且被触摸点之下的'li'元素向上移动,所以它不再处于触摸点之下,而且它不得到点击/感动!!!! – Exlord
只是为了澄清,因为我没有在答案中这么说,其目的是用我的代码片段替换你的'li:hover> ul'声明。两者都离不开。 – Gwellin
nope,尝试一下。不工作。 – Exlord