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