On m’a demandé une vingtaine de fois comment reproduire l’effet d’animation assez simple de mes menus sur la barre latérale de ce blog (si le design actuel est toujours le même d’ici à ce que vous lisiez cet article). Du coup je prends un peu de temps pour vous faire un mini tutoriel et vous expliquer le principe !
La base HTML du menu
À quelques variations près, votre menu va certainement ressembler à cela au niveau du code HTML :
<ul class="menu-vertical">
<li class="mv-item"><a href="#">Lorem ipsum</a></li>
<li class="mv-item"><a href="#">Dolor Sit</a></li>
<li class="mv-item"><a href="#">Amet consectetur</a></li>
<li class="mv-item"><a href="#">Adipiscing elit</a></li>
</ul>
Il s’agit d’une bête liste de liens. À vous de voir s’il convient de la placer en plus dans un élément HTML5 nav
ou pas.
Les classes sont à adapter selon votre projet et votre nomenclature, bien entendu.
Un exemple de CSS
Il va donc falloir supprimer les styles de base d’une liste, et animer les changements de propriété grâce à transition
.
Je mets des commentaires dans le code pour vous faciliter sa compréhension.
/* style du bloc ul */
.menu-vertical {
width: 250px; /* optionnel, c'est pour la démo */
list-style: none; /* supprime les puces de liste */
padding: 4px; /* on fait un peu de place autour des liens */
margin: 0; /* on annule les marges */
background: #F2F2F2;
}
/* styles des liens et éléments de liste */
.mv-item,
.mv-item a {
/* les liens et item deviennent des blocs */
/* suffit théoriquement à virer les puces de liste */
display: block;
}
/* styles des liens */
.mv-item a {
margin: 1px 0; /* espace les liens d'1 px */
padding: 8px 20px; /* marges internes pour aérer */
color: #666;
background: #FFF;
text-decoration: none; /* on vire le soulignement */
/* on définit la transition pour les navigateurs */
-webkit-transition: all .3s; /* Chrome/Safari */
-moz-transition: all .3s; /* Firefox (plus trop nécessaire) */
transition: all .3s; /* syntaxe officielle */
}
/* styles changeants au survol et focus */
.mv-item a:hover,
.mv-item a:focus {
background: #1ABC9C;
color: #FFF;
padding-left: 30px; /* décalage du contenu de 10px vers la droite (30-20 = 10) */
}
Grosso-modo le code force une largeur globale du menu, mais votre conteneur fera peut-être déjà le travail, vous pouvez donc supprimer cette ligne width: 250px;
si vous placez le menu dans une barre latérale dimensionnée.
Notez bien que les liens n’ont pas de largeur définie, du coup la marge intérieure changeante ne provoque pas de redimensionnement complet de l’élément. Si jamais vous avez donné un width
à vos liens, il faudra peut-être envisager d’utiliser le code suivant sur vos liens :
/* changement du type de boîte */
.mv-item a {
-webkit-box-sizing: padding-box;
-moz-box-sizing: padding-box;
box-sizing: padding-box;
}
La valeur border-box
peut-être envisagée si vous utilisez en plus une bordure sur vos liens.
Amusez-vous bien !
Bonjour, SVP je créé un site internet en local en utilisant le logiciel web est pro 5 . Et j’aimerais ajouter un menu vertical car le logiciel me propose un model avec menu vertical pouvez vous m’aider SVP !!!
Bonjour,
Désolé je ne connais pas ce logiciel, je ne vais pas pouvoir être d’une grande aide.
Bonnes recherches 😉
Clair et bien expliqué, Merci !
Merci pour ce tuto sympa, et facile à reproduire 🙂
Je t’en prie. Merci pour ton retour d’expérience 😉
Salut,
Superbe menu , je le trouve très sympa.
J’aurais juste une question et je ne sais pas si tu saurais me répondre mais j’aimerais me servir de ton menu comme base pour un petit site perso que je fais.
Mes compétences étant limitées, je voulais savoir si tu avais une petite solution pour insérer un menu déroulant ?
merci dans tous les cas 😉
Hello,
Tu as la possibilité en CSS3 uniquement (peu recommandable à cause de l’accessibilité), autrement tu as ce script de mon cru.
Mais ce ne sont que les ressources internes du blog. Tu devrais pouvoir trouver ton bonheur sur la toile en recherchant sur Google 🙂
Bonne soirée.
Bonjour,
Je commence à m’intéresser aux animations CSS, suivant ce que tu nous expliques et suivant tes recommandations sur doisjeutiliser.fr !
Seulement, j’ai déjà un menu avec BootStrap en horizontal, et je voulais créer une animation.
Lorsque l’on met sa souris sur un lien, pour le moment (en local), la case devient en surbrillance. Je voudrais améliorer cela en faisant venir cette surbrillance ainsi que le texte par le haut de l’écran en une sorte de déroulée.
Faut-il créer une case qui est hors écran au chargement, et sur « :hover » qui va venir sur la case, ou bien est-ce encore autrement ?
Merci pour ton aide 🙂
Bonjour Louis,
Je pense que tu peux regarder du côté de cet article sur Codrops :
http://tympanus.net/codrops/2013/06/13/creative-button-styles/
Il devrait répondre à tes questions, voire davantage encore 🙂
Bon courage !
P-A-R-F-A-I-T !! (et merci pour ton extrême rapidité, c’est très agréable en plus du contenu :P)
Bonjour,
Je suis tomber (ouille ça fait mal !) sur ce menu qui est une petite merveille pour les site personnels.
Cependant, après adaptation de certains éléments, je ne parvient pas à mettre les textes à droite de l’image.
Voici le lien du menu : senpan.myds.me/TEST2.html
Bonjour,
Le plus simple reste encore d’utiliser la propriété
float
sur votre image.Il faudra certainement enlevé le saut de ligne (balise
br
) juste après l’image.Bonne chance 🙂
Bonjour,
J’voulais vous remercier, grâce à votre code j’ai le menu que je voulais maintenant que j’ai ça j’ai trafiquer un peu le code mais ça marche pas je comprends pas ce qu’il faut mettre genre je voudrais que au passage de la souris le fond du lien s’étire en même temps que le texte à l’intérieur et que quand on retire le curseur ça se remet comme avant. Je sais pas si c’est faisable par contre, auriez vous une idée s’il vous plaît ?
Merci d’avance,
Ah non finalement c’est bon j’ai réussie j’suis choquée, merci beaucoup le résultat est une tuerie hahaha i’m so happy depuis le temps que j’cherchais c’est merveilleux !
Merci bonne journée à vous, ce site j’le lâche plus
Hello,
Super si tu as trouvé la solution. Merci pour ton commentaire. A bientôt !
Super tuto !
Parfait pour les débutant en CSS comme moi, continue à publier !
merci bien pour le tuto mais il ne fonctionne pas chez moi. j’utilise firefox
mon menu
Edit: code HTML non échappé, il n’a pas pu être interprété correctement.
Bonjour,
Pour partager un exemple de code, merci de la faire via Codepen comme le propose le message d’aide juste au-dessus du formulaire de commentaire.