Je souhaite créer une page similaire à celle-ci: https://lp.anzi.kr /? page = auditeurs . Lorsque vous passez la souris sur un bouton, il se déplace vers le haut et du texte s'affiche avec un arrière-plan.
J'essaye de faire ceci avec le code suivant: https://jsfiddle.net/rcv8b0kh/3/
<div> <button> </button> <div class="textcontent"> <p>some text</p> </div> </div>
button { background-color: red; border-radius: 50%; width: 10rem; height: 10rem; } button:hover { box-shadow: 0px 4rem 6rem -2rem rgba(0, 0, 0, 0.57); -moz-box-shadow: 0px 2px 40px -10px rgba(0, 0, 0, 0.57); transform: translateY(-3.5rem); transition: all .3s ease 0s; border: none; } .textcontent { visibility: hidden; } .active { visibility: 1; transform: translateY(-3.5rem); transition: all .3s ease 0s background-color: black; color: white }
$button = document.querySelector('button'); $textcontent = document.querySelector('.textcontent'); if ($button.hover) { $textcontent.classList.add('active') }
Je vois aussi des gens utiliser :: before
et :: after
pour ce genre d'animations mais je ne sais pas vraiment comment les implémenter ici .
4 Réponses :
Voici une solution avec du CSS pur et : après
pseudo élément:
<div> <p>some text</p> </div>
div { position: relative; width: 10em; } p { text-align: center; transform: translateY(4rem); } p:after { content: ""; display: block; background-color: red; border-radius: 50%; width: 10rem; height: 10rem; transition: all .3s ease 0s; transform: translateY(-5rem); } div:hover p:after { transform: translateY(-12rem); }
Vous semblez être confus entre javascript et jquery. Cependant, je ne pense pas que ($ button.hover)
serait une condition valide dans l'un ou l'autre.
<div> <button> </button> <div class="textcontent"> <p>some text</p> </div> </div>
button { background-color: red; border-radius: 50%; width: 10rem; height: 10rem; } button:hover { box-shadow: 0px 4rem 6rem -2rem rgba(0, 0, 0, 0.57); -moz-box-shadow: 0px 2px 40px -10px rgba(0, 0, 0, 0.57); transform: translateY(-3.5rem); transition: all .3s ease 0s; border: none; } .textcontent { opacity: 0; transition: opacity 0.2s linear; } .active { opacity: 1; }
button = document.querySelector('button'); textcontent = document.querySelector('.textcontent'); button.addEventListener('mouseover', handlerIn) button.addEventListener('mouseout', handlerOut) function handlerIn() { textcontent.classList.add('active') } function handlerOut() { textcontent.classList.remove('active') }
Vous ne devriez vraiment pas avoir besoin de Javascript pour cela.
Je ne suis pas vraiment sûr de ce que vous recherchez, mais j'utiliserais une transition largeur / opacité sur le .textContent (lorsque le bouton est survolé) et il obtient des résultats très similaires à la page que vous avez liée.
/ p>
<div> <button> </button> <div class="textcontent"> <p>some text</p> </div> </div>
button { background-color: red; border-radius: 50%; border: none; width: 10rem; height: 10rem; transition: all .3s ease 0s; } button:hover { box-shadow: 0px 3rem 4rem -2rem rgba(0, 0, 0, 0.57); -moz-box-shadow: 0px 3rem 4rem -2rem rgba(0, 0, 0, 0.57); transform: translateY(-3.5rem); transition: all .3s ease 0s; border: none; } .textcontent p{ width:0px; opacity:0; transition: opacity .3s ease 0s; } button:hover + .textcontent p{ width:200px; opacity:1; transition: all .3s ease 0s; }
vous n'avez pas besoin de js pour faire cela, c'est une simple méthode css
.hoverbtn { background-color: red; border-radius: 50%; width: 10rem; height: 10rem; } .hoverbtn:hover { box-shadow: 0px 4rem 6rem -2rem rgba(0, 0, 0, 0.57); -moz-box-shadow: 0px 2px 40px -10px rgba(0, 0, 0, 0.57); transform: translateY(-3.5rem); transition: all 0.3s ease 0s; border: none; } .textcontent { opacity: 0; } .hoverbtn:hover+.textcontent { opacity: 1; }
et voici css pour masquer et afficher le texte
Si le deuxième élément est directement à l'intérieur du conteneur:
#hoverbtn:hover ~ #textcontent { opacity : 1 }
Si le deuxième élément est à côté (après la balise de fermeture des conteneurs) du conteneur:
#hoverbtn:hover #textcontent { opacity : 1 }
Si le deuxième élément est quelque part dans le conteneur:
#hoverbtn:hover + #textcontent { opacity : 1 }
Si le second élément est un frère du conteneur:
#hoverbtn:hover > #textcontent { opacity : 1 }
voici donc votre css:
<div> <button class="hoverbtn" id="hoverbtn"> </button> <div id="textcontent" class = "textcontent"> <span>some text</span> </div> </div>
référence: https: // stackoverflow. com / a / 4502693/6550949