J'ai un élément que je veux fade avec CSS3 . Cela peut être fait simplement par 2 classes avec opacity: 0
et opacity: 1
, mais le problème est un élément défilant qui est un menu déroulant et qui contient éléments sous it, donc même s'il a l'opacité: 0, c'est toujours ' clickable 'et les éléments under ne sont pas.
Si j'ajoute l'attribut display: none;
, l'élément est non animé.
Est-il possible avec css seulement de l'éviter?
J'ai vérifié ceci mais je n'ai pas trouvé de solution de travail
Au lieu de display:none
, essayez d'utiliser visibility: hidden;
Voir cet article qui dit:
la visibilité est animée malgré la spécification de modèle de base CSS Basic «Animable: non»
Vous pouvez le faire avec du code 100% CSS pur.
.menu > li > ul{
display: none;
}
.menu > li:hover > ul {
display: block;
animation-duration: 0.5s;
animation-name: fadeInFromNone;
animation-fill-mode: forwards;
-webkit-animation-duration: 0.5s;
-webkit-animation-name: fadeInFromNone;
-webkit-animation-fill-mode: forwards;
-ms-animation-duration: 0.5s;
-ms-animation-name: fadeInFromNoneIE;
-ms-animation-fill-mode: forwards;
}
@-webkit-keyframes fadeInFromNone {
0% {
opacity: 0
}
1% {
opacity: 0
}
100% {
opacity: 1
}
}
@keyframes fadeInFromNoneIE {
0% {
opacity: 0
}
1% {
opacity: 0
}
100% {
opacity: 1
}
}
@keyframes fadeInFromNone {
0% {
opacity: 0
}
1% {
opacity: 0
}
100% {
opacity: 1
}
}
Vous pouvez faire en sorte qu'un élément n'accepte pas les clics avec ceci:
.hidden
{
pointer-events:none;
}
Remarqué que l'exemple dans JS Fiddle ci-dessus était cassé, corrigé le code ici:
<style>
div {
position: absolute;
transition: all 2s;
}
div.opa {
opacity: 0;
visibility:hidden;
}
</style>
<div class=opa>dsdsds</div>
<br> <br>
<p><a href="#">clickme</a></p>
<script>
$('a').click(function(){
$('div').toggleClass('opa');
})
</script>
Correction du violon :
essayez de créer un élément qui n'accepte pas de clic en appliquant z-index à une valeur négative.
a{z-index: -999;}
Oh! J'ai compris ton problème. Vous pouvez définir visibility: collapse;
mieux que caché, je pense.