09Huy hiệu loading lấp lánh holographic
Một dải chéo cầu vồng quét lặp lại trên huy hiệu 'đang xử lý', giữ cho nó lấp lánh cho đến khi xong.
Dùng choHuy hiệu đang xử lý thanh toán, báo tiến trình upload/đồng bộ, trạng thái chờ AI tạo nội dung
repeating-linear-gradientbackground-position 애니메이션transform: scale 펄스

<main class="stage">
<div class="loading-badge">
<span class="loading-badge__shine" aria-hidden="true"></span>
<span class="loading-badge__dot" aria-hidden="true"></span>
<span class="loading-badge__label">Đang xử lý</span>
</div>
</main>@use "../../../../site/static/demo-tokens" as *;
$duration: $dur-loop; // 시머 띠가 한 번 훑는 시간
$easing: linear;
$color: $subject-blue; // 점 색
@include stage($stage-ink);
.loading-badge {
position: relative;
overflow: hidden;
display: inline-flex;
align-items: center;
gap: $sp-2;
padding: $sp-2 $sp-4;
border-radius: $r-pill;
background: $stage-ink;
box-shadow: $shadow-press;
border: 1px solid rgba($stage-paper, .12);
}
.loading-badge__shine {
position: absolute; inset: 0;
background: repeating-linear-gradient(115deg,
transparent 0 12%, rgba(255, 94, 203, .55) 12% 16%, rgba(94, 241, 255, .55) 16% 20%,
rgba(163, 255, 94, .55) 20% 24%, transparent 24% 36%);
background-size: 260% 260%;
animation: shimmer-sweep $duration $easing infinite;
}
.loading-badge__dot {
position: relative; z-index: 1;
width: 8px; height: 8px; border-radius: $r-pill;
background: $color;
animation: dot-pulse $duration $ease-out infinite;
}
.loading-badge__label { position: relative; z-index: 1; font-size: 11px; font-weight: 700; color: $stage-paper; font-family: inherit; }
@keyframes shimmer-sweep {
0% { background-position: 0% 0%; }
100% { background-position: -260% -260%; }
}
@keyframes dot-pulse {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.4); opacity: .6; }
}
@media (prefers-reduced-motion: reduce) {
.loading-badge__shine,
.loading-badge__dot { animation: none; }
}html, body {
margin: 0;
overflow: hidden;
}
.stage {
box-sizing: border-box;
min-height: 100vh;
display: grid;
place-items: center;
margin: 0;
background: #17141a;
font-family: -apple-system, "Segoe UI", "Noto Sans KR", sans-serif;
padding: clamp(8px, 4vw, 24px);
}
.loading-badge {
position: relative;
overflow: hidden;
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 16px;
border-radius: 999px;
background: #17141a;
box-shadow: 0 6px 12px rgba(23, 20, 26, 0.32);
border: 1px solid rgba(255, 255, 255, 0.12);
}
.loading-badge__shine {
position: absolute;
inset: 0;
background: repeating-linear-gradient(115deg, transparent 0 12%, rgba(255, 94, 203, 0.55) 12% 16%, rgba(94, 241, 255, 0.55) 16% 20%, rgba(163, 255, 94, 0.55) 20% 24%, transparent 24% 36%);
background-size: 260% 260%;
animation: shimmer-sweep 2s linear infinite;
}
.loading-badge__dot {
position: relative;
z-index: 1;
width: 8px;
height: 8px;
border-radius: 999px;
background: #2f6df6;
animation: dot-pulse 2s ease-out infinite;
}
.loading-badge__label {
position: relative;
z-index: 1;
font-size: 11px;
font-weight: 700;
color: #ffffff;
font-family: inherit;
}
@keyframes shimmer-sweep {
0% {
background-position: 0% 0%;
}
100% {
background-position: -260% -260%;
}
}
@keyframes dot-pulse {
0%, 100% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.4);
opacity: 0.6;
}
}
@media (prefers-reduced-motion: reduce) {
.loading-badge__shine,
.loading-badge__dot {
animation: none;
}
}import type { CSSProperties } from "react";
import styles from "./LoadingShimmerBadge.module.scss";
export type LoadingShimmerBadgeProps = {
label: string;
/** 시머 띠가 한 번 훑는 시간 (기본 2000ms) */
duration?: number;
easing?: string;
/** 점 색 */
color?: string;
};
type Vars = CSSProperties & { "--duration"?: string; "--easing"?: string; "--color"?: string };
export default function LoadingShimmerBadge({
label,
duration = 2000,
easing = "linear",
color = "#2f6df6",
}: LoadingShimmerBadgeProps) {
const vars: Vars = { "--duration": `${duration}ms`, "--easing": easing, "--color": color };
return (
<div className={styles.badge} style={vars}>
<span className={styles.shine} aria-hidden="true" />
<span className={styles.dot} aria-hidden="true" />
<span className={styles.label}>{label}</span>
</div>
);
}09 Huy hiệu loading lấp lánh holographic — Diện tích đo được 1.649% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · 9 hiệu ứng CSS Holographic Card Effect copy-paste
Bài viết chứa demo này
9 hiệu ứng CSS Holographic Card Effect copy-pasteHiệu ứng css holographic card effect giả lập cách lá thiếc phản chiếu ánh sáng theo góc nhìn, chỉ bằng CSS — lấp lánh nh Xem tất cả demo trong bài này


