J'ai un div avec une icône imbriquée et un autre texte caché
<nav class="contact-menu centered"> <div class="contact-menu-wrapper"> <div class="contact-menu-item"> <div class="contact-menu-call-box"> <a href="tel:1234567890">123 456 7890</a> <a href="tel:0987654321">098 765 4321</a> <img class="contact-menu-img" src="http://vivoda.ga/img/icons/phone.svg" /> </div> </div> <div class="contact-menu-item"> <img class="contact-menu-img" src="http://vivoda.ga/img/icons/mail.svg" /> </div> <div class="contact-menu-item"> <img class="contact-menu-img" src="http://vivoda.ga/img/icons/location.svg" /> </div> </div> </nav>
La taille initiale du div est égale à l'icône et lorsque l'icône est survolée, les étendues doivent être visibles et le div doit se développer pour s'adapter à la taille du contenu.
Je sais comment faire ça, le problème est d'animer l'élargissement du div.
:root { --nero: #1C0904; --marrone: #843A26; --arancione: #F25B1A; --giallo: #F49F0A; --bianco: #F2F2F2; --icon-size: 36px; } .home-section { width: 100%; height: 100vh; } .home-section h1 { text-align: center; margin-bottom: 30px; } .centered { display: flex; align-items: center; justify-content: center; } .contact-menu { position: fixed; top: 0; bottom: 0; right: 0; padding: 20px; } .contact-menu-wrapper { padding-right: 12px; } .contact-menu-img { height: var(--icon-size); float: right; cursor: pointer; } .contact-menu-item { margin: 20px 0; overflow: auto; } .contact-menu-call-box { width: var(--icon-size); height: var(--icon-size); border-radius: calc(var(--icon-size) / 2); background: var(--marrone); float: right; position: relative; overflow: hidden; padding: 10px; box-sizing: border-box; transition: .5s; } .contact-menu-call-box a { width: 0; height: 0; opacity: 1; display: block; color: var(--bianco); white-space: nowrap; transition: .5s; } .contact-menu-call-box:hover { width: 100%; height: 100%; padding-right: var(--icon-size); transition: .5s; } .contact-menu-call-box:hover a { width: 100%; height: 100%; opacity: 1; transition: .5s; } .contact-menu-call-box img { position: absolute; bottom: 0; right: 0; }
<div> <span class="hidden">Lorem Ipsum</span> <span class="hidden">Dolor Sit Amet</span> <img src="icon.svg" /> </div>
3 Réponses :
Je pense que vous pourriez y parvenir avec des transitions CSS de base. Voir cet exemple .
quelque chose comme ça
<!DOCTYPE html> <html> <head> </head> <body> <h1>The transition Property</h1> <p>Hover over the div element below, to see the transition effect:</p> <div> <section> </section> </div> <p><b>Note:</b> This example does not work in Internet Explorer 9 and earlier versions.</p> </body> </html>
div { width: 100px; height: 100px; background: red; } section{ background: black; width: 50px; height: 50px; transition: width 2s, height 2s;} section:hover { width: 100%; height: 100%; }
Je les utilise déjà, mais la largeur fonctionne alors que la hauteur n'est pas affectée par l'animation.
Voir ma réponse mise à jour pour une explication complète de la façon de faire la hauteur et la largeur.
Merci d'avoir été si gentil, mais ce que je demande, c'est que j'ai une largeur et une hauteur initiales et que j'anime à 100% du contenu intérieur, pas de valeurs spécifiées.
Je vois, d'accord, je l'ai mis à jour à nouveau. Je pense que c'est plus ce que vous demandez?
Évidemment, je n'étais pas totalement clair. Je n'ai pas de boîte qui étend le div à, mais j'ai le div et du contenu, lorsque je passe la souris sur l'icône, le contenu doit être visible et le div doit être redimensionné pour s'adapter au contenu interne et non à la taille du icône plus (voir le dessin dans la question).
J'ai pu recréer ce que vous demandez en utilisant d'autres propriétés CSS, en transférant la propriété CSS max-width
:
.hidden { display: inline-block; max-width: 0px; overflow: hidden; transition: 1s; } div.container:hover .hidden { max-width: 100%; } div.container { display: inline-block; border: 1px solid gray; }
<div class="container"> <span class="hidden">Lorem Ipsum</span> <span class="hidden">Dolor Sit Amet</span> <img src="https://i.stack.imgur.com/GKbCl.png" /> </div>
Si vous lisiez un peu mieux, vous auriez compris que je sais faire ça et ce avec quoi je lutte, ce sont les transitions.
Désolé pour ça. Je n'ai pas vu cette dernière phrase. J'ai mis à jour ma réponse. Devrait fonctionner maintenant.
Bonne idée d'étendre les éléments internes au lieu de l'extérieur, mais je ne sais pas pourquoi cela ne fonctionne pas sur mon site Web
Assurez-vous que les éléments .hidden
sont affichés en tant que inline-block
, ainsi que le div qui les contient.
Vous devez partager quelque chose. Il n'y a aucun moyen de savoir quelle est l'erreur à moins que vous ne nous donniez quelque chose de votre code.
div { width: 100px; height: 100px; background: red; transition: width 2s, height 2s; } div:hover { display: inline; width: 300px; height: 300px; }
Pouvez-vous montrer un peu plus de votre code, Simone?
C'est un site Web entier et il y a beaucoup de classes uniquement pour cette partie du site. Mais, si vous le souhaitez vraiment, voici le github repo .
@isherwood J'ai essayé de le minimiser mais il ne semble pas agir de la même manière que le site Web.
@isherwood j'ai mis à jour avec l'extrait