This article gives you the content is about how to use the pure CSS to achieve a metal-shiny stereo button animation effect (with source), there is a certain reference value, the need for friends can refer to, I hope you have some help.
Effect Preview
Source code Download
Https://github.com/comehope/front-end-daily-challenges/tree/master/004-metallic-glossy-3d-button-effects
Code interpretation
Define a container in the DOM:
<div class= "box" >BUTTON</div>
The container centers on the display:
html, body {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: skyblue;
}
Set the 2d style of the button, in order to make it easier to adjust the button size, use the variable:
.box {
background: linear-gradient(to right, gold, darkorange);
color: white;
--width: 250px;
--height: calc(var(--width) / 3);
width: var(--width);
height: var(--height);
text-align: center;
line-height: var(--height);
font-size: calc(var(--height) / 2.5);
font-family: sans-serif;
letter-spacing: 0.2em;
border: 1px solid darkgoldenrod;
border-radius: 2em;
}
Set the 3d style of the button:
.box {
transform: perspective(500px) rotateY(-15deg);
text-shadow: 6px 3px 2px rgba(0, 0, 0, 0.2);
box-shadow: 2px 0 0 5px rgba(0, 0, 0, 0.2);
}
Defines the mouse-over animation effect for a button:
.box:hover {
transform: perspective(500px) rotateY(15deg);
text-shadow: -6px 3px 2px rgba(0, 0, 0, 0.2);
box-shadow: -2px 0 0 5px rgba(0, 0, 0, 0.2);
}
.box {
transition: 0.5s;
}
Add luster with pseudo elements:
.box {
position: relative;
}
.box::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(to right, transparent, white, transparent);
left: 0;
}
To define a gloss animation effect:
.box::before {
left: -100%;
transition: 0.5s;
}
.box:hover::before {
left: 100%;
}
Finally, hide the content outside the container:
.box {
overflow: hidden;
}
Done!