Question:
I have a button with a linear gradient background, orange border and text.
When hovering over the button, I want the background to become transparent without changing the other properties of the button. I tried to set the opacity to zero, but obviously that will hide the border and the text.
I also tried to move the background
, but that doesn't work because I don't have an endpoint for the transition
, since the background needs to be transparent.
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;
}
<button class="button">Submit</button>
CSS button transition linear-gradient background into transparent background]( https://stackoverflow.com/q/54855781/7394871 ) by @Nick .
Answer:
When using a pseudo element for the background, you can easily do this:
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;
}
<button class="button">Submit</button>
Here is another idea without using pseudo element where you can use background-color
and background-size
change.
The trick is to keep one of the gradient colors transparent so we can see background-color
(you can have a transition
to transparent).
Then you increase the background-size
to hide the bottom color and we only see the transparent one.
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%;
}
<button class="button">Submit</button>
Or consider adjusting the background size to have a different kind of transition
:
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%;
}
<button class="button">Submit</button>
A loose translation of the CSS button transition linear-gradient background into transparent background answer by @Temani Afif .