本项目来自Silvana-kite/html-css-js-project: 前端小小项目,请支持原作者。
HTML
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D 玻璃立方体 Loader</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #111;
overflow: hidden;
}
.loader {
position: relative;
width: 300px;
height: 300px;
transform-style: preserve-3d;
transform: rotateX(35deg) rotateZ(345deg);
animation: animate 4s linear infinite;
}
@keyframes animate {
0% {
transform: rotateX(35deg) rotateZ(0deg);
}
100% {
transform: rotateX(35deg) rotateZ(360deg);
}
}
.loader span {
position: absolute;
inset: 0;
background: rgba(255,255,255,0.05);
border: 2px solid rgba(255,255,255,0.25);
backdrop-filter: blur(24px);
transition: 2.5s;
}
/* 用 nth-child 让每个 span 沿 Z 轴错开 */
.loader span:nth-child(1) { transform: rotateY(0deg) translateZ(150px); }
.loader span:nth-child(2) { transform: rotateY(60deg) translateZ(150px); }
.loader span:nth-child(3) { transform: rotateY(120deg) translateZ(150px); }
.loader span:nth-child(4) { transform: rotateY(180deg) translateZ(150px); }
.loader span:nth-child(5) { transform: rotateY(240deg) translateZ(150px); }
.loader span:nth-child(6) { transform: rotateY(300deg) translateZ(150px); }
.loader i {
position: absolute;
inset: 0;
transform-style: preserve-3d;
transition: 2.5s;
}
.loader i::before {
content: '';
position: absolute;
inset: 15px;
background: linear-gradient(45deg, #ff0080, #ff8c00);
transform: translateZ(-90px);
}
.loader i::after {
content: '';
position: absolute;
inset: 15px;
background: rgba(255,255,255,0.1);
border: 2px solid rgba(255,255,255,0.25);
backdrop-filter: blur(12px);
transform: translateZ(90px);
}
.loader:hover i,
.loader:hover span {
transform: rotateX(360deg);
}
</style>
</head>
<body>
<div class="loader">
<i></i>
<!-- 六层玻璃面 -->
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</body>
</html>


发表回复