הפיכת תוכן מכווץ לנגיש באמצעות hidden=until-found

ג'ואי ארהר
ג'ואי ארה

קטעי תוכן מתכווצים, שמתוארים לפעמים כאקורדיון, הם תבנית נפוצה בממשק המשתמש. עם זאת, לא ניתן יהיה לחפש תוכן מוסתר בקטעים המכווצים באמצעות חיפוש מסוג 'חיפוש בדף'. כמו כן, לא ניתן לקשר לקטעי טקסט בתוך אזורים מכווצים.

מאפיין ה-HTML hidden=until-found והאירוע beforematch יכולים לפתור את הבעיות האלה. הוספה של hidden=until-found למאגר התגים של התוכן המוסתר מאפשרת לדפדפן לחפש טקסט באזור המוסתר הזה ולחשוף את הקטע אם נמצאה התאמה.

התכונות האלה זמינות ב-Chrome 102, אז בוא ונראה איך הן פועלות.

איך להשתמש בעמודה

אם כבר יש באתר מדורים שניתנים לכיווץ ואתם רוצים לאפשר חיפוש בהם, מחליפים את הסגנונות שמסתירים את הקטע באמצעות המאפיין hidden=until-found. אם לדף יש גם מצב אחר שצריך להיות מסונכרן עם חשיפה או הסתרה של הקטע, יש להוסיף פונקציות event listener של beforematch שיופעלו ברכיב hidden=until-found ממש לפני שהרכיב ייחשף על ידי הדפדפן.

נקודות שצריך לשים לב אליהן:

כדי לספק חוויית משתמש עקבית, התוכן של hidden=until-found צריך להיות גלוי ללא שימוש בתכונה 'חיפוש בדף'. לא כל המשתמשים ישתמשו ב'חיפוש בדף', ודפדפנים שלא תומכים ב-hidden=until-found ייהנו מהחוויה המקורית של תוכן מוסתר ללא חשיפה מסוג 'חפש בדף'.

אם רוצים להבטיח שהתוכן המוסתר יהיה זמין בחיפוש בדפדפנים שלא תומכים ב-hidden=until-found, תמיד אפשר להרחיב את התוכן המוסתר בדפדפנים האלה. ניתן לזהות תכונות על ידי בדיקת הנוכחות של הגורם המטפל באירועים של beforematch:

if (!(‘onbeforematch' in document.body)) {
  // expand all hidden content
}

hidden=until-found מחילה את נכס ה-CSS content-visibility:hidden במקום את הנכס display:none שעליו חל המאפיין המוסתר הרגיל. הפעולה הזו נדרשת לחיפוש בתוכן כשהוא סגור, אבל יש לה גם את תופעות הלוואי הבאות:

  • בחלק מממשקי ה-API לפריסה, כמו getBoundingClientRect, יישלח דיווח שהתוכן המוסתר ברכיב hidden=until-found תופס מקום ויש לו מיקום בדף.
  • צמתים צאצאים של הרכיב hidden=until-found לא יעברו עיבוד, אך לרכיב ה-hidden=until-found עצמו עדיין תופיע תיבה. המשמעות היא שמאפייני CSS כגון גבול וגודל מפורש עדיין ישפיעו על העיבוד.

לדוגמה, ההדגמה הבאה מוסיפה שוליים, גבול ומרווח פנימי לרכיב שהחיל hidden=until-found. התוכן המוסתר מופיע בתיבה עם גבול אפור, שממלא את התוכן המוסתר כאשר הוא נחשף. זוהי התיבה של הרכיב המוסתר.

כדי להימנע מהבעיה הזו, צריך להוסיף את הגבול לרכיב שהוצב בתוך המאגר שמכיל hidden=until-found.

תמונה ראשית (Hero) של תומאס בורמן.