Un effet de zoom en css sur image.
Bonjour à tous
Comment réaliser un effet de zoom au survol de la souris très simplement en css sur une image sans l'aide de script ou tout autre programmation.
C'est une question que je rencontre assez régulièrement dans les forums, alors je m'y suis collé pour vous faire quelque chose de très simple et surtout :
Compatible avec tous les navigateurs et respectueux des standard du web.
Ce tutoriel, ou plutôt la page de test a été passé au validateur W3C.
Cet effet de zoom à été testé avec IE7, IE8, firefox, google chrome, safari, opéra.
Voir l'effet que cela donne dans votre navigateur en cliquant ici.
Dans ce tutoriel, je suis partis avec les photos originales, cet à dire sans avoir besoin de modifier leurs tailles.
Pour info ces images font respectivement 1500 x 1176 px, 1500 x 1000 px, et 1280 x 960 px .
Il est préférable de choisir la même orientation d'image pour ce tutoriel, la dimension importe peu, par contre ne mélangez pas une orientation "portrait" avec des "paysages", vous aurez des déformations sur vos images selon le choix de tailles dans vos codes css !
Pour réaliser cet effet, nous allons créer un conteneur qui va nous servir à insérer nos images et ainsi pouvoir placer cet élément dans la page.
Ce conteneur le voici :
<div class="conteneur_images"></div>
Pas de complication, juste une div avec un nom explicite pour la class, vous pouvez bien sur choisir un autre nom.
Ensuite l'idée pour parvenir à avoir cet effet de zoom correct, et de placer chaque image dans une div.
Comme ceci :
<div class="image"><img src="pied.jpg" title="Des pieds à la plage !" alt="des pieds"/></div> <div class="image"><img src="velo.jpg" title="Des vélos en atente de location !" alt="des vélos"/></div> <div class="image"><img src="cerf_volant.jpg" title="Un cerf volant !" alt="cerf volant"/></div>
Rien de compliqué, il faut juste insérer une div avec le même attribut pour chaque image.
Ce qui vous fera au final une structure html comme celle-ci :
<div class="conteneur_images">
<div class="image"><img src="pied.jpg" title="Des pieds à la plage !" alt="des pieds"/></div>
<div class="image"><img src="velo.jpg" title="Des vélos en atente de location !" alt="des vélos"/></div>
<div class="image"><img src="cerf_volant.jpg" title="Un cerf volant !" alt="cerf volant"/></div>
</div>
Passons maintenant au CSS.
Tout d'abord plaçons notre conteneur à images avec ses propriétés :
.conteneur_images {
background:#FFFFFF;
border: 1px solid black;
height: 127px;
margin: 0 auto;
width: 510px;
}
J'ai choisi d'y mettre un fond blanc ainsi qu'une bordure pour le styler, c'est bien sur tout à fait optionnel.
La marge automatique est là pour centrer mon conteneur dans l'élément.
Par contre il est important de bien définir la largeur et la hauteur:
la largeur doit correspondre à l'addition de chaque élément d'image plus les marges, attention il ne s'agit pas de la dimension de vos images, mais de la dimension que vous allez définir dans le code de chaque image.
Pour faire plus clair, la largeur ici de 510px correspond à l'addition du width du code "image" plus l'addition de chaque marge attribué à chaque image !
Autrement dit (voyez le code "image" plus bas) j'ai trois images, donc 3 x 150 = 450, plus l'addition de chaque marge, trois blocs d'images avec chacune 10px de chaque coté, donc 3 x 20 = 60, ce qui nous fait un total de 450 + 60 = 510px.
Pour la hauteur, dans le code image j'ai mis un height de 127px plus deux marges de 10px.
un bloc d'image pour la hauteur à 107px + deux marges haut et bas à 10px chacune = 127px.
Si vous ne comprenez pas, n'hésitez pas à me le dire dans les commentaires
Le code pour chaque image.
Code qui affiche les images en miniature.
.image {
float: left;
height: 107px;
margin: 10px;
width: 150px;
}
Tout d'abord, j'indique un float left, pour placer mes images en horizontal sinon elles se placeront à la vérticale.
On retrouve la marge de 10px qui est optionnel, mais qui permet d'avoir un espace entre chaque photos pour plus de clarté.
Ensuite les largeurs et hauteurs sont ici pour redimensionner mes images, cet à dire que mes images au départ ont une taille comprise entre 1500 et 960 px vont se retrouver réduite en 150 par 107px sans avoir recours à un quelconque logiciel.
Le code pour la balise "img"
img {
height: 100%;
width: 100%;
}
j'indique ici que je veux que mes images occupe la totalité de l'espace défini par les dimensions du code "image".
Le code qui nous intéresse et qui nous permet le zoom.
img:hover {
background:#FFFFFF;
border: 1px solid black;
height: 250%;
left: -110px;
padding: 3px;
position: relative;
top: -50px;
width: 250%;
}
J'indique tout simplement un hover sur ma balise img.
Ensuite mes choix optionnels tel que le background et la bordure.
Le zoom est réalisé tout simplement en définissant un pourcentage plus important sur les hauteur et largeur avec 250%, mettez y le pourcentage qui vous plait.
Le positionnement d'image n'est pas forcément obligatoire, c'est juste un choix personnel qui permet de remonter l'image avec le top à -50px et la centrer avec un left à -110px. Si vous n'en mettez pas l'image partira du coin supérieur gauche !
Le plus important ici est la position relative, celle-ci permet d'afficher correctement l'image dans la taille que vous définissez dans ce code.
Si vous mettez une position absolute, celle-ci ne dépendra plus de son conteneur et s'affichera dans sa taille réelle, enfin plus précisément dans sa taille réelle mais avec le pourcentage définie dans le code hover, peut être pas évident à comprendre si vous débutez en css... bref suivez le tuto à la lettre et tous se passera bien.(c'était juste une parenthèse et précision !)
Résumé du css
Voici le css intégral qui permet le zoom.
.conteneur_images {
background:#FFFFFF;
border: 1px solid black;
height: 127px;
margin: 0 auto;
width: 510px;
}
.image {
float: left;
height: 107px;
margin: 10px;
width: 150px;
}
img {
height: 100%;
width: 100%;
}
img:hover {
background:#FFFFFF;
border: 1px solid black;
height: 250%;
left: -110px;
padding: 3px;
position: relative;
top: -50px;
width: 250%;
}
Voila, j'espère que ce tutoriel vous à aidé, n'hésitez pas à me laisser un commentaire s'il vous à plus ou bien si vous rencontrez des erreurs ou si vous n'y arriver pas !

about 1 year ago
bonjour, merci pour ce tuto.
etant débutant, j' ai quelques questions svp:
- ou mettre la partie html ? dois je l' utiliser ou pas ?
- dois je utiliser le résumé du code css tout seul ?je
about 1 year ago
re bonjour markopolo
pour le html oui il faut l'utiliser et je vous ai répondu dans votre premier commentaire pour savoir ou le mettre.
pour le css, oui le résumé est le css qui va servir pour la partie html.
les deux sont indissociable !
about 11 months ago
! Je fais le tour !
C'est top trop cool !
Magnifique et super efficace !...
Modifiable à souhait, simple, accessible !
Super...
C'est peu dire que cireasy est en Marque page !!
Luc.
about 11 months ago
vas y fais le tour, te prive pas
merci pour ta reconnaissance, ça me fais bien plaisir
about 11 months ago
ca marche pas avec ie8 , ?
es-ce que tu as un truc ?
merci a l'avance
about 11 months ago
bonjour jimbo
ça marche bien chez moi avec ie8 !
peut tu me donner l'adresse de la page ou tu as inséré le code que je me rende compte du problème ?
about 7 months ago
Bonjour bien ce tuto , je vais essayer ça , mais actuellement je suis sur un probleme , je voudrai créé un compteur ( en php ) pour mes liens de téléchargements mais je n'arrive pas ,aurai tu une idée , je sais que c'est pas le sujet ici mais bon je tente , si tu veux m'aider , Merci d'avance.
about 7 months ago
bonjour Michel
le php n'est pas mon fort, par contre je t'invite à venir poser ta question sur le forum : http://www.net-simple.com/index.php
tu va devoir lire le règlement, te présenter et ensuite poser ta question, on arrivera certainement à trouver une solution à ton problème !
about 2 months ago
Bonjour et merci pour ce tuto très pratique et clair juste une petite question, est il possible de mettre une image différente dans le zoom par exemple image A dans le cadre et lorsque l on passe la souris sur l'image A celle ci fait apparaitre en zoom une image B
Merci d'avance
about 2 months ago
Bonjour,
merci pour ton commentaire
alors pour répondre à ta question, oui c'est possible, mais du coup je pense qu'il faudrait passer l'image B dans le css et modifier un peu ses propriétés.
mais oui c'est tout à fait réalisable sans trop bouger le code présent
about 2 months ago
( suite commentaire image différente) bonsoir Merci pour ta réponse c'est encourageant mais j avoue que je ne sais pas trop ou modifier le code si quelqu un a une idée ou propo pour que je bidouille un peu cela elle sera la bienvenue , n'hésite pas même si ta propo ne marche pas complétement je ferai les tests et essais ensuite nomme IMAGEA et IMAGEB ds l'exemple si tu veux ou peut ds tout les cas le zoom presenter ici est vraiment sympa et simple.
about 2 months ago
Je viens de voir ton commentaire !
Il est un peu tard pour que je bidouille quelque chose, je te propose de me retrouver sur le forum : http://www.net-simple.com/ et de poser ta question, lis le règlement et présente toi stp, comme ça je ne t'oublierais pas et je te concocterais quelques chose demain soir quand je rentrerais du boulot.
about 2 months ago
Bonjour et merci cire69, ok je te rejoins sur le forum .
about 2 months ago
Bonjour et merci cire69, ok je te rejoins sur le forum .
mais avant j ai un soucis lorsque j ajoute ce zoom et ses codes ok ca marche mais mon gros soucis , ca modifie toutes les images que j ai sur ma page qui servent à un diaporama sur la page genre elles sont fixes mais chacune est zoomée et une après l autre le zoom est Exponentiel de plus l'effet décalage et fond et bordure du zoom s applique sur tous les gifs, jpg et png et autres images se trouvant sur la page...gros hic...
about 2 months ago
salut,
oui il est tout à fait probable que tes images présentes se retrouve prise par le css que j'indique, car dans mon tuto j'applique un effet directement aux balises images !
pour régler le soucis tu va devoir ajouter le nom de la class dans le code css.
voici la modif à faire dans le css :
.image img {
height: 100%;
width: 100%;
}
.image img:hover {
background:#FFFFFF;
border: 1px solid black;
height: 250%;
left: -110px;
padding: 3px;
position: relative;
top: -50px;
width: 250%;
}
il suffit juste de rajouter ".image" devant ces deux codes.
si tu n'y arrive pas, pose ta question sur le forum STP
je me ferais un plaisir de t'aider
about 4 days ago
Bonjour,
J'ai juste une question avant de me lancer à faire le css pour le zoom image.
Cet effet de zoom grâce à hover marche t-il pour des images en diapo via un javascript?
Merci d'avance pour vos réponses
about 3 days ago
bonjour Mel
bonne question ! à vrai dire je ne sais pas, j'en doute même !
le java et moi ça fait deux !
ben je te dirais, essai tu verra bien, il n'y a pas de risque !