آموزش طراحی سایت و برنامهنویسی وب
سورس کد انیمیشن لودینگ صفحه با CSS (۳ مدل آماده + پیشلودر)
- سه مدل انیمیشن لودینگ آماده با CSS خالص: حلقهٔ گرادیانی، نقطههای پرشی و نوار لودینگ.
- حلقه با
maskساخته شده و برخلاف نسخههای قدیمی، روی هر رنگ پسزمینهای درست نمایش داده میشود. - پیشلودر تمامصفحه بعد از رویداد
loadو حداکثر بعد از ۲.۵ ثانیه پنهان میشود. - لودینگ را برای انتظار واقعی (ارسال فرم، Ajax) استفاده کنید؛ پنهان کردن کل صفحه به سرعت و سئو ضربه میزند.
انیمیشن لودینگ به کاربر میگوید «صبر کن، کار در حال انجام است». یک لودینگ خوب انتظار را کوتاهتر نشان میدهد و از کلیکهای تکراری جلوگیری میکند. در این آموزش سورس کد سه مدل انیمیشن لودینگ صفحه را با CSS خالص میسازیم، یک پیشلودر تمامصفحه اضافه میکنیم و در انتها میگوییم کجا نباید از لودینگ استفاده کرد.
دموی زنده انیمیشنهای لودینگ
سه مدل لودینگ و یک پیشلودر
دکمه، پیشلودر را در کادر سوم شبیهسازی میکند؛ در سایت واقعی کل صفحه را میپوشاند.
مدل ۱: لودینگ حلقهای گرادیانی
HTML فقط یک div است. role="status" و aria-label باعث میشوند صفحهخوانها هم بفهمند محتوا در حال بارگذاری است:
<div class="loader" role="status" aria-label="در حال بارگذاری"></div>conic-gradient حلقهٔ رنگی را میسازد و mask وسط آن را خالی میکند. اندازه و ضخامت با دو متغیر قابل تغییر است:
.loader {
--size: 80px;
--thickness: 10px;
width: var(--size);
aspect-ratio: 1;
border-radius: 50%;
background: conic-gradient(#ec4899, #ef4444, #eab308, transparent 80%);
/* سوراخ وسط حلقه با mask؛ روی هر پسزمینهای درست دیده میشود */
-webkit-mask: radial-gradient(farthest-side, transparent calc(100% - var(--thickness)), #000 calc(100% - var(--thickness) + 1px));
mask: radial-gradient(farthest-side, transparent calc(100% - var(--thickness)), #000 calc(100% - var(--thickness) + 1px));
animation: loader-spin .8s linear infinite;
}
@keyframes loader-spin {
to { transform: rotate(360deg); }
}تفاوت با نسخهٔ قدیمی: در نسخهٔ اولیهٔ این سورس وسط حلقه با یک دایرهٔ همرنگ پسزمینه پوشانده میشد و روی پسزمینههای رنگی یا تصویری خراب دیده میشد. نسخهٔ mask این مشکل را ندارد.
مدل ۲: لودینگ سه نقطه
<div class="dots" role="status" aria-label="در حال بارگذاری">
<span></span><span></span><span></span>
</div>تأخیر متفاوت هر نقطه (animation-delay) حرکت موجی را میسازد:
.dots { display: flex; gap: 8px; }
.dots span {
width: 14px; height: 14px; border-radius: 50%;
background: #5f01af;
animation: dots-bounce .6s ease-in-out infinite alternate;
}
.dots span:nth-child(2) { animation-delay: .2s; }
.dots span:nth-child(3) { animation-delay: .4s; }
@keyframes dots-bounce {
to { transform: translateY(-14px); opacity: .4; }
}مدل ۳: نوار لودینگ
HTML آن یک div با کلاس line-loader است. مناسب بالای کارتها، جدولها و فرمهاست:
.line-loader {
width: 160px; height: 6px; border-radius: 99px;
background: #ede4fa; overflow: hidden; position: relative;
}
.line-loader::before {
content: ""; position: absolute; inset: 0; width: 40%;
border-radius: inherit;
background: linear-gradient(90deg, #8224e3, #5f01af);
animation: line-move 1.1s ease-in-out infinite;
}
@keyframes line-move {
from { transform: translateX(-100%); }
to { transform: translateX(250%); }
}و در انتها برای احترام به تنظیمات کاربر:
/* برای کاربرانی که حرکت کمتر میخواهند */
@media (prefers-reduced-motion: reduce) {
.loader, .dots span, .line-loader::before { animation-duration: 2.5s; }
}ساخت پیشلودر تمامصفحه
این کد را بلافاصله بعد از تگ <body> قرار دهید:
<div id="preloader">
<div class="loader" role="status" aria-label="در حال بارگذاری"></div>
</div>#preloader {
position: fixed; inset: 0; z-index: 9999;
display: grid; place-items: center;
background: #fff;
transition: opacity .4s, visibility .4s;
}
#preloader.is-hidden { opacity: 0; visibility: hidden; }نکتهٔ مهم، زمانسنج پشتیبان است؛ اگر یک تصویر یا اسکریپت خارجی دیر بارگذاری شود، کاربر پشت پیشلودر گیر نمیکند:
const preloader = document.getElementById('preloader');
const hide = () => preloader && preloader.classList.add('is-hidden');
window.addEventListener('load', hide); // بعد از بارگذاری کامل صفحه
setTimeout(hide, 2500); // حداکثر ۲.۵ ثانیه، حتی اگر load دیر شودانیمیشن لودینگ و سرعت سایت

گوگل با شاخصهایی مثل LCP زمان نمایش محتوای اصلی را میسنجد. پیشلودری که کل صفحه را تا رویداد load پنهان میکند، عملاً محتوایی را که آماده است از کاربر پنهان میکند و تجربهٔ کاربری را بدتر میکند. اگر سایت شما کند است، راهحل پیشلودر نیست؛ بهینهسازی تصاویر، کش و کدهاست. راهکارهای افزایش سرعت سایت را بخوانید یا از خدمات افزایش سرعت سایت کمک بگیرید.
هنگام ارسال فرم، دکمه را غیرفعال و لودینگ کوچک را داخل آن نمایش دهید.
برای لیستها و کارتها، بهجای چرخنده، طرح خاکستری محتوا را نشان دهید.
ویدیوی این سورس را هم در اینستاگرام طاووس وب ببینید. سورسهای مرتبط: نوار پیشرفت ساده و دکمه عضویت در خبرنامه.
سایت شما کند بارگذاری میشود؟بهجای پنهان کردن کندی پشت لودینگ، ریشهٔ آن را حل کنید. طاووس وب سرعت سایت را با بهینهسازی واقعی و سئو تکنیکال بالا میبرد.
افزایش سرعت سایتسؤالات متداول انیمیشن لودینگ
آیا پیشلودر روی سئو سایت اثر منفی دارد؟
اگر کل صفحه را تا بارگذاری کامل پنهان کند، بله؛ نمایش محتوای اصلی دیرتر دیده میشود و تجربهٔ کاربر بدتر میشود. پیشلودر را کوتاه نگه دارید و بهتر است لودینگ را فقط برای انتظارهای واقعی مثل ارسال فرم استفاده کنید.
چطور رنگ و اندازهٔ لودینگ را تغییر دهم؟
در مدل حلقهای، متغیرهای –size و –thickness اندازه و ضخامت را تعیین میکنند و رنگها در conic-gradient قابل تغییرند. در مدل نقطهای، رنگ background را تغییر دهید.
آیا این انیمیشنها به جاوااسکریپت نیاز دارند؟
خیر. هر سه مدل با CSS خالص کار میکنند. جاوااسکریپت فقط برای پنهان کردن پیشلودر تمامصفحه بعد از بارگذاری لازم است.
چطور لودینگ را در وردپرس اضافه کنم؟
HTML پیشلودر را با یک افزونهٔ درج کد بعد از تگ body، CSS را در CSS اضافی و JavaScript را در فوتر قرار دهید. بسیاری از قالبها هم گزینهٔ پیشلودر داخلی دارند.