הכירו את השכבה העליונה: פתרון ל-z-index:10000

השכבה העליונה נמצאת מעל ל-document הקשורה אליה באזור התצוגה של הדפדפן, ולכל document יש שכבה עליונה משויכת אחת. כלומר, רכיבים שמקודמים לשכבה העליונה לא צריכים לדאוג להיררכיית z-index או ל-DOM. הם גם מקבלים פסאודו-רכיב מגניב של ::backdrop שאפשר לשחק איתו. המפרט של Fullscreen API מספק יותר פרטים כי Fullscreen היה דוגמה מצוינת לשכבה העליונה שהייתה בשימוש לפני שהוספנו תמיכה ב-dialog.

השכבה העליונה עוזרת לפתור את הבעיה של עיבוד תוכן מעל שאר ה-document.

מה שחשוב לזכור: - השכבה העליונה נמצאת מחוץ לזרימת document. - ל-z-index אין השפעה בשכבה העליונה. - לכל רכיב בשכבה העליונה יש פסאודו-רכיב ::backdrop שניתן לעצב. - כל רכיב ו-::backdrop יוצרים הקשר ערימה חדש. - הרכיבים בשכבה העליונה מוערמות לפי הסדר שבו הם מופיעים בקבוצה. ההודעה האחרונה שפורסמה מופיעה למעלה. אם רוצים לקדם רכיב, צריך להסיר אותו ולהוסיף אותו שוב.

איך חיקינו את השכבה העליונה עד עכשיו? ובכן, לפעמים מפתחים משמיטים רכיב מאגר ריק בסוף ה-body. לאחר מכן היא תשמש כשכבה עליונה "מזופת". הרעיון הוא שהמאגר הזה ימוקם מעל כל שאר הפריטים במקבץ. אם רוצים לקדם פריט כלשהו מעל כל דבר אחר, מוסיפים אותו למאגר התגים הזה. ניתן לראות זאת בחבילות פופולריות כמו SweetAlert , reactjs-popup , Magnific Popup ועוד.

עם רכיבים מובנים וממשקי API חדשים, כגון <dialog> ו-"Popover", לא יהיה צורך להשתמש בפתרונות העקיפים האלה. ניתן לקדם את התוכן בשכבה העליונה.

frameworks של ממשק משתמש מאפשרות לנו לאתר רכיבים מקודמים עם הרכיבים המקבילים שלהם. אבל בדרך כלל הם מופרדים ב-DOM בכל הנוגע לעיבוד.

על ידי שימוש בשכבה העליונה, רכיבים מקודמים הם המקום שבו תציב אותם בקוד המקור שלך (לדוגמה, <dialog>). לא משנה כמה שכבות למטה ב-DOM נמצא הרכיב. הוא יקודם לשכבה העליונה, וניתן לבדוק אותו במיקום הרצוי, כשהוא ממוקם יחד עם רכיב ה-HTML שלך. כך קל יותר לבדוק גם את רכיב הטריגר וגם את הרכיב המקודם ב-DOM בו-זמנית. זה שימושי במיוחד אם רכיב הטריגר מבצע עדכוני מאפיינים, למשל. יש לכך גם יתרון נוסף לנגישות, עכשיו שהאלמנטים נמצאים במיקום משותף.

כדי להמחיש את השכבה העליונה לעומת z-index הגבוהה, אפשר להדגים את ההדגמה הזו.

בהדגמה הזו, ניתן לפתוח חלון קופץ של SweetAlert וגם לפתוח את השכבה העליונה <dialog>. פותחים את <dialog>, ולאחר מכן מנסים לפתוח את החלון הקופץ של SweetAlert. אפשר לראות אותו מתחת לרכיב של השכבה העליונה. והשורש של החלון הקופץ של SweetAlert משתמש במספר z-index של 10000 עם position: fixed.

.swal-overlay {
  z-index: 10000;
  position: fixed;
}

אין צורך להחיל סגנונות על <dialog> כדי שהוא יופיע מעל כל תוכן אחר.

DevTools

ואנחנו מגיעים לתמיכה של כלי הפיתוח. כלי הפיתוח ל-Chrome מוסיפים תמיכה ברכיבים בשכבה העליונה כדי שתוכלו לבדוק את השכבה העליונה. כך קל יותר לנפות באגים ולראות איך פריטים מקובצים בשכבה העליונה או מה אפילו בשכבה העליונה.

הדגמה של תמיכה בשכבה העליונה של כלי הפיתוח בקובץ GIF

לאינה וארקי יש מאמר מקיף שמסביר בהרחבה על השימוש בכלים האלה. הם זמינים כרגע כגרסת טרום-השקה (Preview) בגרסה 105 של Chrome Canary.

סיימתם!

מבוא קצר לשכבה העליונה. היכולת לומר "ביי!" לדברים כמו:

.popup-container {
  z-index: 10000;
}

מה הייתם דוחפים בשכבה העליונה? ניסית את dialog? או לנסות את OpenUI Popover API? שתף אותנו!