J'ai un bouton avec un arrière-plan dégradé linéaire, une bordure orange et du texte. Lorsque je passe la souris sur le bouton, je veux que l'arrière-plan devienne transparent sans changer les autres propriétés du bouton.
J'ai essayé de faire passer l'opacité à 0, mais évidemment, cela masquera la bordure et le texte. J'ai également essayé de faire la transition de l'arrière-plan, mais cela ne fonctionne pas car je n'ai pas de point de terminaison vers lequel effectuer la transition car il doit être transparent.
<button class="button">Submit</button>
body { background-color: darkblue; } .button { background-image: linear-gradient(red,yellow); border: solid orange 2px; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; }
4 Réponses :
Cela peut aider:
<button class="button">Submit</button>
body { background-color: darkblue; } .button { background-image: linear-gradient(red,yellow); border: solid orange 2px; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; transition: 2s; z-index: 1000; } button:hover{ background:linear-gradient(transparent, transparent); }
Donc, je viens de définir le survol sur un dégradé linéaire de transparent, car vous n'avez pas de couleur fixe.
il n'y a pas de transition dans votre exemple
J'ai créé avec des variables javascript et CSS.
<button class="button">Submit</button>
body { background-color: darkblue; } .button { --a:1; --b:1; background-image: linear-gradient(rgba(255,0,0,var(--a)),rgba(255,255,0,var(--b))); background-color:transparent; border: solid orange 2px; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; }
const b = document.querySelector(".button"); b.addEventListener("mouseover",function(){ let i = 1; setInterval(function(){ if(i>0){ i=i - 0.009; b.style.setProperty("--a", i); b.style.setProperty("--b", i); } },5); }); b.addEventListener("mouseout",function(){ let i = 0; setInterval(function(){ if(i<1){ i=i + 0.009; b.style.setProperty("--a", i); b.style.setProperty("--b", i); } },5); });
Utilisez un pseudo élément pour l'arrière-plan et vous pouvez facilement le faire:
<button class="button">Submit</button>
body { background-color: darkblue; } .button { border: solid orange 2px; background: linear-gradient(red, yellow), transparent; background-size:100% 100%; background-position:left; /*change this to change the way the transtion happen*/ background-repeat:no-repeat; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; transition:1s; } .button:hover { background-size:0% 100%; }
Voici une autre idée sans l'utilisation de pseudo élément où vous pouvez compter sur le changement de background-color
et background-size
. L'astuce est de garder l'une des couleurs du dégradé transparente afin que nous puissions voir la background-color
(vous pouvez avoir une transition sur celle-ci vers transparente). Ensuite, vous augmentez la background-size
pour masquer la couleur du bas et nous ne voyons que le transparent.
<button class="button">Submit</button>
body { background-color: darkblue; } .button { border: solid orange 2px; background-image: linear-gradient(transparent, yellow); background-size:100% 100%; background-color:red; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; transition:1s; } .button:hover { background-color:transparent; background-size:100% 500%; }
Ou envisagez d'ajuster background-size
pour avoir un autre type de transition:
<button class="button">Submit</button>
body { background-color: darkblue; } .button { border: solid orange 2px; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; position: relative; overflow: hidden; z-index:0; background:transparent; } .button::before { content: ""; position: absolute; z-index:-1; top: 0; left: 0; right: 0; bottom: 0; background-image: linear-gradient(red, yellow); transition:1s; } .button:hover::before { opacity:0; }
La dernière transition est exactement ce que j'allais mettre en œuvre après avoir compris comment passer à un arrière-plan transparent, alors merci beaucoup!
Dans Chrome avec les fonctionnalités de la plate-forme Web expérimentale activées ( voir ), nous pouvons utiliser:
<button class="button">Submit</button>
body { background-color: darkblue; } .button { --alpha: 1; background: linear-gradient(rgba(255,0,0,var(--alpha)), rgba(255,255,0,var(--alpha))) transparent; border: solid orange 2px; border-radius: 10px; color: white; padding: 15px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 24px; transition: --alpha 1s linear; } .button:hover { --alpha: 0; }
CSS.registerProperty({ name: '--alpha', syntax: '<number>', initialValue: 1, inherits: true, })