ویژگی تصویر

طراحی اعلان (Notification) با CSS — راهنمای کامل

  /  CSS   /  طراحی اعلان (Notification) با CSS
بنر تبلیغاتی الف

اعلان‌ها (Notifications) یکی از عناصر کلیدی در تجربهٔ کاربری مدرن هستند. از پیام‌های فوری (toasts) گرفته تا بنرهای اطلاع‌رسان و پنجره‌های مودال، طراحی اعلان باید هم زیبا باشد و هم دسترسی‌پذیر، سبک و بهینه. در این مقاله به صورت عملی و مرحله‌به‌مرحله روش طراحی اعلان با CSS را توضیح می‌دهیم و مثال‌های واقعی، نکات حرفه‌ای و بهبودهای لازم را نشان می‌دهیم.

انواع اعلان‌ها و موارد استفاده

  • Toast: اعلان‌های کوچک و موقتی که گوشهٔ صفحه نمایش داده می‌شوند. مناسب برای بازخورد سریع (مثلاً «ذخیره شد»).
  • Inline: اعلان‌هایی که داخل محتوا (مثلاً فرم) نمایش داده می‌شوند تا خطاها یا هشدارها را نشان دهند.
  • Banner: اعلان‌های عرضی در بالای صفحه برای اطلاع‌رسانی عمومی (مثلاً نگهداری سایت).
  • Modal: اعلان‌های مهم که نیاز به تعامل کاربر دارند (مثلاً تأیید حذف).

اصول طراحی اعلان با CSS

  • وضوح (Clarity): پیام باید مختصر و قابل فهم باشد.
  • دستیابی (Accessibility): استفاده از aria-live، نقش‌ها و کنتراست مناسب رنگ.
  • قابلیت بستن (Dismissibility): همیشه امکان بستن اعلان به وسیلهٔ کیبرد و ماوس.
  • اولویت‌بندی رنگ‌ها: سبز برای موفقیت، قرمز برای خطا، زرد برای هشدار، آبی برای اطلاعات.
  • انیمیشن‌ها: استفاده از transition/transform به جای انیمیشن‌های سنگین برای عملکرد بهتر.

نمونهٔ ساده: Toast با HTML/CSS/JS

/* CSS */.toast {
  position: fixed;
  bottom: 20px;
  right: 20px;
  background: #323232;
  color: #fff;
  padding: 12px 16px;
  border-radius: 8px;
  box-shadow: 0 6px 18px rgba(0,0,0,0.25);
  transform: translateY(20px);
  opacity: 0;
  transition: transform 300ms ease, opacity 300ms ease;
  z-index: 9999;
}

.toast.show {
  transform: translateY(0);
  opacity: 1;
}

/* HTML */<div id="toast" class="toast" role="status" aria-live="polite">Saved successfully</div>
/* JavaScript */ const toast = document.getElementById('toast'); function showToast() { toast.classList.add('show'); setTimeout(() => toast.classList.remove('show'), 3000); } showToast();

توضیح: این مثال یک اعلان از نوع toast را نشان می‌دهد. استایل پایه اعلان در کلاس .toast تعریف شده و با افزودن کلاس .show، اعلان وارد نما شده و با transition ظاهر می‌شود. در HTML از role=”status” و aria-live=”polite” استفاده شده تا محتوای اعلان برای خواننده‌های صفحه‌خوان اعلام شود. در نهایت با جاوااسکریپت کلاس .show به مدت سه ثانیه نشان داده می‌شود.

بهبودها و نکات حرفه‌ای

  • استفاده از CSS variables برای سفارشی‌سازی سریع رنگ و فاصله.
  • پشتیبانی از prefers-reduced-motion برای کاربران با حساسیت به حرکت.
  • امکان استک شدن چند اعلان به صورت منظم (stacking) با gap ثابت.
  • اضافه کردن دکمهٔ بستن با دسترسی کیبوردی و ویژگی aria-label.

نسخهٔ بهبود یافته: دسترسی، متغیرها و کاهش حرکت

/* CSS */:root {
  --toast-bg: #222;
  --toast-color: #fff;
  --toast-radius: 10px;
  --toast-padding: 12px 16px;
  --toast-gap: 10px;
}

#toast-container {
  position: fixed;
  bottom: 20px;
  right: 20px;
  display: flex;
  flex-direction: column;
  gap: var(--toast-gap);
  z-index: 9999;
}

.toast {
  background: var(--toast-bg);
  color: var(--toast-color);
  padding: var(--toast-padding);
  border-radius: var(--toast-radius);
  box-shadow: 0 6px 18px rgba(0,0,0,0.25);
  transform: translateY(12px);
  opacity: 0;
  transition: transform 250ms cubic-bezier(.2,.8,.2,1), opacity 250ms;
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-width: 200px;
}

/* Respect reduced motion */@media (prefers-reduced-motion: reduce) {
  .toast {
    transition: none;
    transform: none;
    opacity: 1;
  }
}

.toast.show {
  transform: translateY(0);
  opacity: 1;
}

.toast button.close {
  background: transparent;
  border: none;
  color: inherit;
  font-size: 16px;
  margin-left: 12px;
  cursor: pointer;
}

توضیح: در این نسخه از CSS variables برای تنظیم سریع ویژگی‌ها استفاده شده و اعلان‌ها داخل #toast-container قرار می‌گیرند تا بتوان چند اعلان را با gap مشخص استک کرد. با مدیا کوئری prefers-reduced-motion از انتقال‌ها چشم‌پوشی می‌شود تا کاربران حساس به حرکت مشکلاتی نداشته باشند. دکمهٔ بستن با استایل ساده تعریف شده تا دسترسی‌پذیری حفظ شود.

رنگ‌ها و معناشناسی اعلان‌ها

نوع اعلانمعنینمونه رنگ
Successعملیات موفقسبز (#28a745)
Errorخطا یا شکستقرمز (#dc3545)
Warningهشدارزرد/نارنجی (#ffc107)
Infoاطلاعات عمومیآبی (#17a2b8)

نکتهٔ عملی: همیشه کنتراست متن با زمینه را بررسی کنید (حداقل نسبت کنتراست 4.5:1 برای متن عادی) تا قابلیت خواندن برای همه تأمین شود.

دستورالعمل دسترسی (Accessibility)

  • برای اعلان‌های غیرمداخله‌ای از aria-live=”polite” و برای اعلان‌های فوری از aria-live=”assertive” استفاده کنید.
  • هر دکمهٔ بستن باید tabindex داشته باشد و aria-label معنادار (مثلاً “Close notification”) داشته باشد.
  • از نقش مناسب مانند role=”status” یا role=”alert” طبق اهمیت اعلان بهره ببرید.
  • اجازه دهید اعلان توسط صفحه‌خوان و کیبورد قابل تعامل باشد.

عملکرد و نکات فنی

  • از انیمیشن‌های CSS سبک استفاده کنید و از انیمیشن‌های layout-changing پرهیز کنید.
  • برای مقیاس‌پذیری از transform و opacity به جای تغییرات top/left بهره بگیرید.
  • اگر تعداد اعلان‌ها زیاد می‌شود، محدودیت در تعداد نمایش هم‌زمان اعمال کنید و بقیه را صف کنید.

جمع‌بندی و توصیه‌های نهایی

طراحی اعلان خوب ترکیبی است از زیبایی، عملکرد و دسترسی. با استفاده از CSS variables، انیمیشن‌های مناسب، و رعایت اصول ARIA می‌توانید اعلان‌هایی بسازید که هم زیبا و هم مفید باشند. همیشه اعلان‌ها را در محیط واقعی (موبایل و دسکتاپ) تست کنید و فیدبک کاربران را برای بهبود تجربه لحاظ کنید.

در نهایت، اعلان‌ها نباید آزاردهنده باشند؛ آنها باید اطلاعات مفید را در زمان مناسب و به شیوهٔ قابل‌درکی به کاربر ارائه دهند.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: