Je sais que le titre est trop général. Je n'ai pas trouvé de titre spécifique.Css hover + clic/toucher comportement bizarre sur les appareils tactiles
Voici l'échantillon 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;
}
}
Essayez, il est un menu très simple, placez le article moyen élément avec sous-menu, un sous-menu simple sera affiché avec CSS simple :hover
.
Cliquez sur le dernier objet, il y a un événement click, il se déclenchera correctement.
Maintenant, ouvrez-le dans le mod de l'appareil mobile de Chrome avec simulation tactile.
Cliquez/touchez l'élément avec le sous-menu, le sous-menu s'ouvrira à l'intérieur de l'élément parent. C'est le comportement attendu.
Maintenant, cliquez/touchez le dernier élément. L'événement click ne se déclenchera pas.
Comment puis-je résoudre ce problème avec CSS seulement hover
?
MISE À JOUR: Pour autant que je peux dire le problème est que le premier contact le dernier élément plané (li
avec sous-menu) s'unhovered et le sous-menu ul
se cache et la hauteur du parent ul
se rétrécit et l'élément li
qui était sous le point touché se déplace vers le haut, donc ce n'est plus sous le point touché et il ne soit pas cliqué/touché !!!!
non, cela n'a pas fonctionné. le problème, je pense, c'est qu'au premier contact, le dernier élément survolé se décompose, le sous-menu 'ul' est caché et l'élément' li' qui se trouvait sous le point touché remonte, donc il n'est plus sous le point touché et être cliqué/touché !!!! – Exlord
Juste pour clarifier, puisque je ne l'ai pas dit dans la réponse, l'intention était de remplacer votre déclaration 'li: hover> ul' par mon fragment de code. Partir tous les deux ne ferait rien changer. – Gwellin
non, essayez aussi. Ne fonctionne pas – Exlord