Ich weiß, der Titel ist zu allgemein. Ich konnte keinen bestimmten Titel finden.Css Hover + Klick/Touch seltsames Verhalten auf Touch-Geräten
Hier ist die Probe 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;
}
}
Probieren Sie es aus, es ist ein sehr einfaches Menü, schweben die mittlerer Artikel Artikel mit Untermenü, ein einfaches Untermenü wird mit einfachem CSS :hover
angezeigt.
Klicken Sie auf das letzte Element, es hat ein Klickereignis, es wird korrekt ausgelöst.
Jetzt öffnen Sie dies in Chrome Mobilgerät Mod mit Touch-Simulation.
Klicken/berühren Sie den Eintrag mit dem Untermenü, das Untermenü wird im übergeordneten Element geöffnet. Dies ist das erwartete Verhalten.
Klicken/tippen Sie auf das letzte Element. Das Klickereignis wird nicht ausgelöst.
Wie kann ich das nur mit CSS beheben ?
UPDATE: Soweit ich das Problem sagen kann ist, dass auf der ersten Berührung der letzte hovered Element (li
mit Untermenü) unhovered wird und das Untermenü ul
wird ausgeblendet und die Eltern ul
‚s Höhe schrumpft und das li
Element, das war unter dem berührten Punkt bewegt sich nach oben, so ist es nicht unter dem berührten Punkt mehr und es wird nicht angeklickt/berührt !!!!
nein, das hat nicht funktioniert. Das Problem ist, dass bei der ersten Berührung das letzte Element verschwindet, das Untermenü "ul" wird ausgeblendet und das "li" Element, das sich unter dem berührten Punkt befand, bewegt sich nach oben, also nicht mehr unter dem berührten Punkt geklickt/berührt !!!! – Exlord
Nur zur Klarstellung, da ich das in der Antwort nicht gesagt habe, war die Absicht, Ihre 'li: hover> ul' Deklaration durch mein Code-Snippet zu ersetzen. Beide zu verlassen, würde nichts ändern. – Gwellin
nein, versuchen Sie das auch. Funktioniert nicht. – Exlord