پیشنمایش زنده
کد HTML
<div class="wrap">
<div class="card">
<div class="content">👋 Hi!!</div>
<div class="mask-wrap">
<div class="mask mask-left"></div>
<div class="mask mask-right"></div>
</div>
<div class="loading-wrap">
<div class="ball ball1"></div>
<div class="ball ball2"></div>
</div>
</div>
<p class="hover-tip">hover ☝️</p>
</div>
کد CSS
.warp {
display: flex;
flex-direction: column;
gap: 4px;
}
.hover-tip {
text-align: center;
font-weight: bold;
}
.card {
--ballSize: 80px;
--gap: 16px;
--duration: 4s;
width: 200px;
height: 300px;
gap: var(--gap);
filter: contrast(20);
background-color: #222;
position: relative;
overflow: hidden;
border: 1px solid #333;
border-radius: 8px;
}
.content {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
opacity: 0;
transition: all 0.3s 0.3s;
}
.mask-wrap {
--color: #fff;
width: 100%;
height: 100%;
position: absolute;
inset: 0;
transform: scale(1.1);
display: flex;
pointer-events: none;
.mask {
width: 100%;
height: 100%;
background: var(--color);
filter: blur(18px);
transition: all 0.5s 0.3s;
}
}
.loading-wrap {
--color: #000;
width: 60px;
height: 60px;
margin: -30px 0 0 -30px;
position: absolute;
inset: 50%;
pointer-events: none;
transition: all 0.3s 0.3s;
}
.ball {
filter: blur(4px);
&.ball1 {
width: 100%;
height: 100%;
border-radius: 50%;
border: 6px solid var(--color);
animation: animBall1 3s steps(4) infinite;
}
&.ball2 {
width: 12px;
height: 12px;
margin: -6px 0 0 -6px;
position: absolute;
inset: 50%;
border-radius: 50%;
border: 6px solid var(--color);
animation: animBall2 3s ease-in-out infinite;
}
}
@keyframes animBall1 {
100% {
transform: rotate(360deg);
}
}
@keyframes animBall2 {
50% {
transform: translateY(18px);
}
}
.card:hover {
.content {
opacity: 1;
}
.mask-left {
transform: translateX(-100%);
}
.mask-right {
transform: translateX(100%);
}
.loading-wrap {
opacity: 0;
}
}