1) comprendre le code
ici on clique sur un lien qui pointe vers l'élément avec l'id "menu"
côté css on peut ajouter des conditions sur le fait que le menu soit l'élément ciblé, ce qu'on voit avec tous les #menu:target et on se sert de ça pour déclencher des animations css
on a un second lien qui pointe vers un élément n'existant pas, qui sert seulement à retiré le ciblage sur le menu et donc à retourner à l'état initial
2) comprendre quoi changer
logiquement on a pas envie de lier l'animation au survol, on veut seulement la délencher et qu'elle reste en l'état jusqu'à ce qu'on décide de retourner à l'état initial (pour ça on peut garder le lien de fermeture déjà présent)
du coup le plus simple c'est
- d'utiliser un listener côté js
- de lier l'animation à la présence d'une classe ajoutée via le listener (je vais appeler cette classe "opened")
3) procéder aux changements
coté HTML :
- supprimer le lien d'ouverture (#open-menu) qui ne nous servira plus
- ajouter un id "hide-menu" sur le lien de fermeture
côté CSS :
- remplacer tous les
:target par .opened - diminuer tous les
menu-item:nth-child(x) puisqu'on vient de supprimer un élément (note: on pourrait pointer directement vers des id ou des classes, ce serait plus lisible)
côté JS :
window.onload = function() {
const menu = document.getElementById("menu");
/** ajout de la classe "opened" quand le curseur survol le menu **/
menu.addEventListener('mouseenter', (event) => {event.target.classList.add('opened');
}, false);
/** retrait de la classe et donc retour à l'état initial au clic sur le lien de fermeture **/
document.getElementById("hide-menu").addEventListener('click', (event) => {
menu.classList.remove('opened');
}, false);
};