מה האלמנט label עושה
<label> נותן לשדה בטופס את השם שלו. חברו אותו עם for, שערכו ה-id של השדה, וקורים שני דברים: קוראי מסך מקריאים את התווית כשהשדה מקבל פוקוס, ולחיצה על טקסט התווית מעבירה את הפוקוס לשדה. לחצו על שני הטקסטים שלמטה:
לחיצה על "City" מכניסה את הסמן לשדה שלו. לחיצה על "Country" לא עושה כלום, וקורא מסך שמגיע לשדה השני שומע רק "edit text", בלי שם. השניים נראים זהים; רק לאחד יש תווית.
שתי דרכים לחבר תווית
השתמשו ב-for וב-id, או שימו את השדה בתוך התווית:
for ו-id | עטיפה | |
|---|---|---|
צריך id | כן, ייחודי בעמוד | לא |
| התווית והשדה יכולים להיות מופרדים | כן (תא בטבלה, grid) | לא, השדה בפנים |
| קל לשבור | בשגיאת הקלדה או ב-id כפול | בהכנסת שני שדות לתווית אחת |
for חייב להתאים ל-id של השדה, לא ל-name שלו. לעיתים קרובות שניהם אותה מילה, וזה מסתיר את הטעות עד שמישהו משנה אחד מהם. לעשות את שניהם (לעטוף וגם להוסיף for) זה בסדר ונפוץ.
אפשר לחבר תווית ל-<input> (חוץ מ-type="hidden"), ל-<select>, ל-<textarea>, ל-<button>, ל-<meter>, ל-<output> ול-<progress>. תווית אחת נותנת שם לשדה אחד. לשדה יכולה להיות יותר מתווית אחת, אבל תווית ברורה אחת קלה יותר לכולם.
אזור לחיצה גדול יותר לתיבות סימון ולכפתורי רדיו
בפקדים קטנים התווית חשובה במיוחד: לחיצה בכל מקום עליה מסמנת את התיבה, כך שאזור הלחיצה הוא כל שורת הטקסט ולא ריבוע של 13 פיקסלים. עיצוב התווית יכול להגדיל את האזור עוד יותר:
לחצו על הריפוד של כל שורה, רחוק מהתיבה. השורה הראשונה מתחלפת; השנייה לא עושה כלום אלא אם פוגעים בתיבה עצמה. עוד על תיבות סימון ב-HTML checkbox.
רמזים והודעות שגיאה
תווית צריכה להיות קצרה: השם של השדה. הוראות נוספות והודעות שגיאה נכנסות לאלמנטים נפרדים, שמחוברים עם aria-describedby, כך שקוראי מסך מקריאים קודם את התווית ואחריה את התיאור:
לחצו על Create כשהשדה ריק, אחר כך עם AB, ואחר כך עם ada99. עם aria-describedby, קורא מסך מקריא משהו כמו "Username, required, edit text, 3 to 16 lowercase letters or digits, Enter a username." הכוכבית מסומנת aria-hidden כי המאפיין required כבר אומר "required"; לשמוע "star" לא מוסיף כלום.
תוויות מוסתרות
לחלק מהשדות יש רמז גלוי שאינו תווית טקסט, כמו תיבת חיפוש ליד כפתור Search. עדיין צריך תווית; הסתירו אותה חזותית אבל השאירו אותה בעמוד בשביל קוראי מסך:
אל תסתירו אותה עם display: none או visibility: hidden: הם מסתירים אותה גם מקוראי מסך, ולא כל דפדפן וקורא מסך עדיין משתמשים בתווית מוסתרת כשם. האפשרות השנייה היא aria-label="Search courses" על ה-input, שנותן לו שם בלי שום אלמנט label. תווית גלויה היא עדיין הבחירה הטובה ביותר בכל פעם שיש מקום: כולם מרוויחים מלראות למה השדה משמש.
טעויות נפוצות
forשמצביע על ה-nameבמקום על ה-id. שום דבר לא מתחבר.- ids כפולים.
forמתחבר לאלמנט הראשון עם ה-id הזה, שיכול להיות שדה בטופס אחר בעמוד. - placeholder במקום תווית. הוא נעלם בזמן ההקלדה ואינו שם אמין.
- שני שדות בתוך תווית אחת. תווית נותנת שם לשדה אחד; השני נשאר בלי תווית.
- קישור בתוך התווית של checkbox, כמו "קראתי את התנאים" כש"התנאים" הוא קישור. חלק מהשורה מסמן את התיבה וחלק פותח עמוד, וקל לפגוע בטעות. שימו את הקישור מחוץ לתווית.
- הסתרת התווית עם
display: none. השתמשו ב-class שמסתיר חזותית. - טקסט ליד שדה שאינו
<label>. הוא נראה אותו דבר ולא עושה כלום. לטופס שמסביב לשדות, ראו HTML forms.
שאלות נפוצות
מה עושה התגית label ב-HTML?
היא נותנת שם לשדה בטופס. קוראי מסך מקריאים את התווית כשהשדה מקבל פוקוס, ולחיצה על התווית מעבירה את הפוקוס לשדה, או מסמנת ומבטלת סימון ב-checkbox או בכפתור רדיו.
מה זה המאפיין for ב-label?
for מכיל את ה-id של השדה שהתווית שייכת אליו: <label for="email">Email</label> <input id="email">. הוא חייב להתאים בדיוק ל-id, לא ל-name.
לשים את ה-input בתוך ה-label או להשתמש ב-for?
שתי הדרכים עובדות בדפדפנים ובקוראי המסך של היום. עטיפה לא דורשת ids; for ו-id מאפשרים לתווית ולשדה לשבת במקומות שונים בקוד, למשל בתאי טבלה נפרדים. צוותים רבים עוטפים וגם מוסיפים for.
אפשר להחליף label ב-placeholder?
לא. ה-placeholder נעלם ברגע שמתחילים להקליד, הניגודיות שלו לרוב נמוכה, והוא לא תמיד מוקרא כשם השדה. השתמשו ב-<label> גלוי ושמרו את ה-placeholder לערך לדוגמה, אם בכלל.
איך מסתירים label אבל משאירים אותו לקוראי מסך?
השאירו את ה-<label> והסתירו אותו חזותית עם class שמכווץ אותו לפיקסל אחד וחותך אותו, במקום display: none, שמסתיר אותו גם מקוראי מסך. לשדה שאין בו מקום לשום תווית, החלופה היא aria-label על השדה עצמו.