עניינים בסדר 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 כדי להעביר את המיקוד בין הלחצנים.

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

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

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

תוכן שלא מופיע במסך

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

חלונית פתוחה מחוץ למסך יכולה לגנוב את המיקוד.

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

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

חלונית נפתחת שלא מוצגת בה אף אחת.
חלונית שניתן להחליק כדי להציג בה בלוק.

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