逻辑是用伪元素做过渡移动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body,
html,
h1 {
margin: 0;
padding: 0;
font-family: '微软雅黑';
}
.box {
position: relative;
width: 300px;
height: 200px;
margin: 60px auto;
border-radius: 13px;
text-align: center;
overflow: hidden;
transition: 0.7s;
background-image: linear-gradient(to right, #fb7299, #ff5c7c);
box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.7);
}
.box::after {
position: absolute;
left: 0;
top: 0;
content: '';
display: block;
width: 800px;
height: 70px;
background-image: linear-gradient(
0deg,
rgba(0, 0, 0, 0),
rgba(255, 255, 255, 0.3),
rgba(0, 0, 0, 0)
);
transform: rotate(-45deg) translate(0, -360px);
}
.box:hover::after {
/* 过渡效果只能再鼠标放上去生效 不然鼠标离开也会有效果 */
transition: 1s ease-in-out;
transform: rotate(-45deg) translate(0, 60px);
}
.box:hover {
margin-top: 55px;
box-shadow: 10px 10px 10px rgba(0, 0, 0, 0.5);
}
h1 {
color: white;
font-size: 40px;
line-height: 200px;
}
</style>
</head>
<body>
<div class="box">
<h1>bilibili</h1>
</div>
</body>
</html>