درحال ایجاد اعلان‌های Toast

اعلان‌های کادری پیام‌های وضعیت گذرا هستند. برخلاف منوها، وقتی کاربر با بخش‌های دیگر صفحه تعامل برقرار می‌کند، نباید بسته شوند. حالت popover="manual" ایده‌آل است زیرا رفتار «light-dismiss» ندارد و اجازه می‌دهد چندین اعلان به‌طور هم‌زمان وجود داشته باشند.

رهنمودهای پیاده‌سازی

  • اجباری: از popover="manual" استفاده کنید تا اعلان تا زمانی که صریحاً بسته شود یا زمان آن توسط یک اسکریپت تمام شود، قابل‌مشاهده باقی بماند.
  • باید از یک محفظه برای مدیریت پشته‌سازی چند پیام موقت استفاده کنید. ازآنجایی‌که پاپ‌اورها در «لایه بالایی» شاخص z والد را نادیده می‌گیرند، باید آن‌ها را به‌صورت جداگانه یا در یک گروه چیدمان مشترک قرار دهید.
  • باید از sibling-index()‎ برای افزودن حاشیه بین اعلان‌های زودگذر استفاده کنید تا موارد پایین‌تر در پشته قابل‌مشاهده باشند.
  • باید بااستفاده از popovertargetaction="hide"، دکمه «بستن» صریحی در اعلان زودگذر ارائه دهید.
  • باید از جاوا اسکریپت برای زمان‌سنج‌های رد کردن خودکار استفاده کنید (برای مثال، فراخوانی hidePopover()‎ پس‌از ۳۰۰۰ میلی‌ثانیه).
  • باید از transition-behavior: allow-discrete برای پویانمایی ورود و خروج از «لایه بالایی» استفاده کنید.

راهبردهای جایگزین

پشتیبانی مرورگر و بازگشت به حالت قبلی برای Popover

«میانای برنامه‌سازی کاربردی Popover» عمدتاً ارتقای پیش‌رو است، اما رفتارهای تعریف‌کننده آن (ارتقای لایه بالایی، رد کردن با کلیک در خارج از عنصر، و فراخوانی popovertarget) معادل CSS-only ندارند. مرورگرهای قدیمی‌تر به شبیه‌ساز مرورگر نیاز دارند، یا اگر ترجیح می‌دهید شبیه‌ساز مرورگر ارسال نکنید، به بازگشت دستی نیاز دارند.

شبیه‌ساز مرورگر: برای پشتیبانی از مشخصه popover در مرورگرهای قدیمی‌تر، @oddbird/popover-polyfill را به‌صورت شرطی بار کنید. اجباری: ویژگی را با بررسی کردن ویژگی popover در HTMLElement.prototype شناسایی کنید و شبیه‌ساز مرورگر را فقط زمانی بار کنید که پشتیبانی بومی وجود ندارد — آن را بدون قیدوشرط بار نکنید.

با بسته‌بندی یا نقشه واردات:

// MANDATORY: Feature detect 'popover' on HTMLElement.prototype.
if (!("popover" in HTMLElement.prototype)) {
  import("@oddbird/popover-polyfill");
}

بدون بسته‌بندی، از CDN داخل <script type="module"> وارد کنید:

<script type="module">
  if (!("popover" in HTMLElement.prototype)) {
    import("https://unpkg.com/@oddbird/popover-polyfill@latest/dist/popover.min.js");
  }
</script>

هشدار سبک‌بندی: شبیه‌ساز مرورگر نمی‌تواند کلاس کاذب واقعی :popover-open را تعریف کند، بنابراین به‌جای آن کلاس .\:popover-open را اعمال می‌کند. اجباری: این دو را با :is() یا :where() ترکیب کنید، درغیراین‌صورت مرورگرهایی که فاقد :popover-open هستند کل قانون را نادیده می‌گیرند:

[popover]:is(:popover-open, .\:popover-open) {
  display: block;
}

یا برای بازگشت به نسخه قدیمی بدون شبیه‌ساز مرورگر، از position: fixed استفاده کنید و مختصات را به‌صورت دستی ازطریق getBoundingClientRect() محاسبه کنید یا اگر برای مورد استفاده قابل‌قبول است، به موقعیت‌یابی پیش‌فرض با inset: auto تکیه کنید.

sibling-index()

  • راهنمایی: اگر sibling-index()‎ پشتیبانی نمی‌شود، از عملگر + برای افزودن دستی حاشیه استفاده کنید. یعنی popover + popover { margin-top: 1rem }

موقعیت‌یابی لنگر

  • راهنمایی: از CSS Anchor Positioning Polyfill استفاده کنید. برای بازگشت به حالت قبلی غیرشبیه‌ساز مرورگر، نکته‌ابزار را بااستفاده از @supports not (anchor-name: --foo) به‌طور پیش‌فرض در موقعیت ثابتی در پایین نمای دید قرار دهید.

transition-behavior

  • راهنمایی: اگر transition-behavior پشتیبانی نمی‌شود، از JavaScript برای افزودن پویانمایی ازطریق کلاس‌ها هنگام انتقال عنصر toast به داخل و خارج استفاده کنید.