پیشنمایش زنده
کد HTML
<div class="mybtn-container">
<a class="mybtn-button"
><span>CLICK</span>
<div class="mybtn-shimmer">
<div></div>
<div></div>
<div></div>
</div>
</a>
</div>
کد CSS
.mybtn-container {
--sz: clamp(16px, 22px, 24px);
--rotate-hour: 0;
display: flex;
justify-content: center;
align-items: center;
height: 500px; /* no vh */
width: 500px; /* no vw */
position: relative;
background: #1e1e1e;
font-family: sans-serif;
overflow: hidden;
}
/* Localized noise overlay */
.mybtn-container::after {
content: "";
z-index: 100;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
pointer-events: none;
background: radial-gradient(circle at 50% 50%, #000, #0000),
url("data:image/svg+xml,%3Csvg viewBox='0 0 600 600' xmlns='://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='2' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
filter: contrast(100%) brightness(200%) invert(1) grayscale(1) opacity(0.1);
mix-blend-mode: screen;
}
/* BUTTON */
.mybtn-button {
display: block;
width: fit-content;
height: fit-content;
position: relative;
margin: auto;
background: linear-gradient(#ccc, #1e1e1e);
box-shadow:
inset 0 0 0.1em 0 #ccc,
0 0.3em 0.1em -0.2em #aaa,
0 0.3em 0 0 #333,
0 0.4em 0 0.1em #0004,
-0.4em 0.4em 0.2em 0 #000a;
border-radius: 0.2em;
text-decoration: none;
color: #1e1e1e;
font-weight: 1000;
text-shadow:
0 -2px 1px #0004,
0 2px 1px #fff4;
padding: 0.4em 1em;
transition: all 0.2s ease;
cursor: pointer;
--x: 0%;
}
.mybtn-button span {
user-select: none;
}
.mybtn-button::before {
content: "";
display: block;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
width: 0;
height: 100%;
background: linear-gradient(
90deg,
#fff0 0%,
#fff4 30%,
#fff6 40%,
#fff0 100%
);
transform: skewX(-32deg);
translate: 2em;
transition: all 0.2s ease;
}
.mybtn-button:hover {
translate: 0 0.3em;
color: #fff;
text-shadow: 0 0 5px #fff;
box-shadow:
inset 0 0 0.1em 0 #ccc,
0 0em 0.1em -0.2em #aaa,
0 0em 0 0 #333,
0 0.1em 0 0.1em #0004,
-0.1em 0 0.2em 0 #000a;
background: linear-gradient(
-182deg,
#fff 0%,
#aaa 16%,
#555 36%,
#777 70%,
#555 84%
);
}
.mybtn-button:hover::before {
width: 2em;
transform: skewX(0deg);
translate: -3em;
opacity: 0;
}
.mybtn-button:hover .mybtn-shimmer {
opacity: 1;
}
/* SHIMMER */
.mybtn-shimmer {
position: absolute;
left: 0;
right: 0;
top: 12%;
z-index: 3;
margin: auto;
transition:
all 0.2s ease,
translate 0.8s ease-out;
--shimmer-size: 3em;
--shimmer-clr: #fffde7;
opacity: 0;
pointer-events: none;
translate: var(--x);
}
.mybtn-shimmer > div,
.mybtn-shimmer > div::before {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
z-index: 100;
}
.mybtn-shimmer > div {
--ani-speed: 8s;
width: calc(2 * var(--shimmer-size));
height: calc(2 * var(--shimmer-size));
animation: flicker-spin var(--ani-speed) linear infinite;
}
.mybtn-shimmer > div:nth-child(2) {
animation-delay: calc(-1 * var(--ani-speed) / 3);
}
.mybtn-shimmer > div:nth-child(3) {
animation-delay: calc(-2 * var(--ani-speed) / 3);
}
.mybtn-shimmer > div::before {
content: "";
width: calc(var(--shimmer-size) / 4);
height: calc(var(--shimmer-size) / 4);
background: var(--shimmer-clr);
filter: blur(4px);
animation: flicker-spin calc(var(--ani-speed) / 2) linear reverse infinite;
}
/* KEYFRAMES */
@keyframes flicker-spin {
0% {
border-image: radial-gradient(var(--shimmer-clr) 69%, #0000 70%) 2%/45%;
rotate: 0deg;
}
50% {
border-image: radial-gradient(var(--shimmer-clr) 69%, #0000 70%) 0%/42%;
}
100% {
border-image: radial-gradient(var(--shimmer-clr) 69%, #0000 70%) 2%/45%;
rotate: 360deg;
}
}