עניינים בסדר DOM

החשיבות של סדר ברירת המחדל של DOM

Dave Gash
Dave Gash
Meggin Kearney
Meggin Kearney

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

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

<button>I Should</button>
<button>Be Focused</button>
<button>Last!</button>

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

<button style="float: right">I Should</button>
<button>Be Focused</button>
<button>Last!</button>

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

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

תוכן מחוץ למסך

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

חלונית שנכנסת מהצד מחוץ למסך עלולה להסיט את המיקוד.

לפעמים צריך לבצע קצת עבודת בלשות כדי להבין לאן הלך המיקוד. אפשר להשתמש ב-document.activeElement במסוף כדי לברר איזה רכיב נמצא כרגע במוקד.

אחרי שמזהים איזה רכיב מחוץ למסך נמצא בפוקוס, אפשר להגדיר אותו ל-display: none או ל-visibility: hidden, ואז להגדיר אותו חזרה ל-display: block או ל-visibility: visible לפני שמציגים אותו למשתמש.

חלונית נגללת שמוגדרת להציג &#39;ללא&#39;.
חלונית נגללת שמוגדרת להצגת חסימה.

באופן כללי, אנחנו ממליצים למפתחים להקיש על Tab באתרים שלהם לפני כל פרסום כדי לוודא שסדר הכרטיסיות לא נעלם או לא קופץ מתוך רצף לוגי. אם זה קורה, צריך לוודא שאתם מסתירים בצורה נכונה תוכן מחוץ למסך באמצעות display: none או visibility: hidden, או לשנות את המיקומים הפיזיים של הרכיבים ב-DOM כך שיוצגו בסדר לוגי.