A modern and visually engaging loading animation built using pure HTML and CSS. Featuring orbiting particles, smooth transitions, and glowing effects, this loader enhances user experience with a premium and elegant design.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Orbit Pulse | Premium Loading Animation</title>
</head>
<body>
<div class="loading-bar">
<div class="load-section">
<!-- 6 orbiting particles that create hypnotic loading sequence -->
<div class="circle">
<div class="dot"></div>
</div>
<div class="circle">
<div class="dot"></div>
</div>
<div class="circle">
<div class="dot"></div>
</div>
<div class="circle">
<div class="dot"></div>
</div>
<div class="circle">
<div class="dot"></div>
</div>
<div class="circle">
<div class="dot"></div>
</div>
<div class="loading-text">Loading...</div>
</div>
</div>
</body>
</html>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
background: linear-gradient(145deg, #c20000 0%, #8b0000 100%);
min-height: 100vh;
text-align: center;
align-items: center;
justify-content: center;
font-family: system-ui, 'Segoe UI', 'Verdana', sans-serif;
overflow: hidden;
position: relative;
}
/* subtle animated background grain / shimmer (optional premium touch) */
body::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(circle at 20% 40%, rgba(255,255,200,0.08) 0%, rgba(0,0,0,0) 70%);
pointer-events: none;
animation: softGlow 6s infinite alternate;
}
@keyframes softGlow {
0% { opacity: 0.3; }
100% { opacity: 0.8; }
}
.loading-bar {
width: 100%;
display: flex;
position: relative;
justify-content: center;
align-items: center;
perspective: 800px;
}
.load-section {
top: -35px;
position: absolute;
transform: scale(1.5);
transform-style: preserve-3d;
}
/* circle container for each orbiting dot */
.circle {
width: 1px;
height: 5px;
position: absolute;
animation: rotate 3.5s cubic-bezier(0.55, 0.15, 0.35, 0.95) infinite;
transform-origin: center;
}
/* glowing dot with subtle shadow */
.circle .dot {
top: 30px;
width: 7px;
height: 7px;
background: #fff;
border-radius: 50%;
position: relative;
box-shadow: 0 0 6px rgba(255, 255, 255, 0.8), 0 0 12px rgba(255, 220, 100, 0.5);
transition: all 0.1s ease;
}
/* loading text style with smooth tracking & elegance */
.loading-text {
color: #fff;
bottom: -85px;
font-size: 26px;
font-weight: 500;
letter-spacing: 2px;
margin-left: -50px;
position: absolute;
font-family: 'Segoe UI', 'Verdana', 'Geneva', sans-serif;
text-transform: uppercase;
background: linear-gradient(135deg, #ffffff, #ffdd99);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
text-shadow: 0 2px 5px rgba(0,0,0,0.2);
backdrop-filter: blur(2px);
animation: textPulse 1.8s infinite alternate;
white-space: nowrap;
}
@keyframes textPulse {
0% {
opacity: 0.65;
letter-spacing: 1px;
background: linear-gradient(135deg, #fff, #ffcc88);
background-clip: text;
-webkit-background-clip: text;
}
100% {
opacity: 1;
letter-spacing: 3px;
background: linear-gradient(135deg, #fffaec, #ffaa66);
background-clip: text;
-webkit-background-clip: text;
}
}
/*
Enhanced keyframe:
smooth rotation with orbiting momentum + fade-out/fade-in effect
to give "loading loop" dynamic style.
The original creative timing keeps the dots rotating elegantly.
*/
@keyframes rotate {
0% {
transform: rotate(0deg);
opacity: 0;
}
10% {
opacity: 1;
}
30% {
transform: rotate(220deg);
opacity: 1;
}
40% {
transform: rotate(450deg);
opacity: 1;
}
70% {
transform: rotate(700deg);
opacity: 1;
}
75% {
transform: rotate(720deg);
opacity: 1;
}
76% {
opacity: 0;
}
95% {
opacity: 0;
transform: rotate(0deg);
}
100% {
opacity: 0;
transform: rotate(0deg);
}
}
/* Delay cascade: creates wave-like orbital motion */
.circle:nth-child(1) {
animation-delay: 0.15s;
}
.circle:nth-child(2) {
animation-delay: 0.3s;
}
.circle:nth-child(3) {
animation-delay: 0.45s;
}
.circle:nth-child(4) {
animation-delay: 0.6s;
}
.circle:nth-child(5) {
animation-delay: 0.75s;
}
.circle:nth-child(6) {
animation-delay: 0.9s;
}
/* responsive & maintain perfect centering on any device */
@media (max-width: 550px) {
.load-section {
transform: scale(1.2);
top: -30px;
}
.loading-text {
font-size: 22px;
margin-left: -40px;
bottom: -75px;
white-space: nowrap;
}
.circle .dot {
width: 6px;
height: 6px;
top: 28px;
}
}
@media (max-width: 380px) {
.load-section {
transform: scale(1);
top: -20px;
}
.loading-text {
font-size: 18px;
margin-left: -35px;
bottom: -65px;
}
}
/* optional: add small smooth focus ring removal, just for aesthetics */
:focus-visible {
outline: none;
}
</style>