JSFiddle - React, Tailwind, and code Playground
by luka kupunia
HTML
<div class="button">
<div class="layer-1"></div>
<div class="layer-2"></div>
<div class="text text-1">
<div>Accept</div>
</div>
<div class="text text-2">
<div>Accept</div>
</div>
</div>
CSS
* {
transition-timing-function: cubic-bezier(0.67, 0.01, 0.15, 1.01);
}
.button {
width: 500px;
height: 50px;
font-size: 20px;
background: grey;
color: white;
margin: 20px auto;
border-radius: 10px;
overflow: hidden;
position: relative;
cursor: pointer;
}
.text {
text-align: center;
overflow: hidden;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
.text div {
transition: .45s;
}
.text-2 div {
transition-delay: .15s;
}
.text-1 div{
transform: translate(0,100%);
}
.layer-1 {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: darkred;
transform: scaleY(0);
transition: .45s .15s;
transform-origin: bottom;
}
.button:hover .text-2 div{
transform: translate(0,-100%);
transition-delay: 0s;
backface-visibility: hidden;
}
.button:hover .layer-1 {
transform: scaleY(1);
backface-visibility: hidden;
}
.button:hover .text-1 div {
transform: translate(0,0);
transition-delay: .3s;
backface-visibility: hidden;
}