איך יוצרים טבלה ב-HTML
טבלה היא אלמנט <table> שבנוי משורות (<tr>), וכל שורה בנויה מתאים: <th> לתאי כותרת ו-<td> לתאי נתונים.
לטבלה אין גבולות משלה; כלל ה-CSS היחיד מוסיף אותם כדי שתוכלו לראות את התאים. העמודות נוצרות מהתאים: התא הראשון בכל שורה הוא עמודה אחת, השני הוא עמודה שתיים, וכן הלאה. בכל שורה צריך להיות אותו מספר תאים. מחקו <td> והשורה הזו נגמרת מוקדם ומשאירה חור.
תאי <th> מודגשים וממורכזים כברירת מחדל. זה רק המראה; מה שחשוב הוא שהם תוויות, ועל זה החלק הבא.
אלמנטי הטבלה
| אלמנט | מה הוא |
|---|---|
<table> | הטבלה |
<caption> | הכותרת של הטבלה, הילד הראשון של <table> |
<thead> | קבוצת שורות הכותרת |
<tbody> | קבוצת שורות הגוף (בטבלה יכולות להיות כמה) |
<tfoot> | קבוצת השורות התחתונות, כמו סיכומים |
<tr> | שורה |
<th> | תא כותרת |
<td> | תא נתונים |
<colgroup>, <col> | עמודות, לעיצוב עמודה שלמה (רוחב, רקע) |
גבולות מוסברים ב-HTML table border, ותאים שמתפרשים על כמה עמודות או שורות ב-colspan ו-rowspan.
תאי כותרת, scope ו-caption
טבלה עם כותרות לאורך החלק העליון ולאורך הצד צריכה לומר לאיזה כיוון כל כותרת מצביעה. scope="col" נותן שם לעמודה שמתחתיו, scope="row" נותן שם לשורה שלצידו. <caption> נותן לטבלה כותרת גלויה:
עם הקוד הזה, קורא מסך שעובר לתא 14:00 יכול להכריז "Saturday, Closes, 14:00", כך שהמספר אף פעם לא מוקרא לבדו. בטבלה פשוטה עם שורת כותרת אחת, דפדפנים בדרך כלל מסיקים את הכותרות גם בלי scope, אבל לכתוב אותו לא עולה כלום ומבטל את הניחושים.
ה-caption הוא גם מה שקורא מסך מכריז כשהוא מגיע לטבלה. העדיפו אותו על פני כותרת שממוקמת מעל הטבלה ואינה מחוברת אליה.
thead, tbody ו-tfoot
שלוש הקבוצות מחלקות את השורות לכותרת, לגוף ולחלק התחתון. החלק התחתון הוא המקום לסיכומים:
שני פרטים הופכים את המספרים לקריאים: text-align: end מיישר את הנקודות העשרוניות (לכל מחיר יש שתי ספרות אחרי הנקודה), ו-font-variant-numeric: tabular-nums נותן לכל ספרה אותו רוחב.
אם כותבים <tr> ישירות בתוך <table>, כמו בדוגמה הראשונה, הדפדפן מוסיף <tbody> סביב השורות בכל מקרה. לכן סלקטור CSS כמו table > tr אף פעם לא מתאים לשום דבר: בעמוד, השורות נמצאות בתוך tbody. השתמשו ב-table tr, או כתבו את ה-<tbody> בעצמכם.
עיצוב טבלה: פסים, ריחוף ורוחב
:nth-child צובע שורות לסירוגין, :hover מדגיש את השורה שמתחת לסמן, ו-width: 100% מותח את הטבלה לרוחב המיכל שלה:
text-align: start מיישר את טקסט הכותרת עם הנתונים שמתחתיו; אחרת th ממורכז. start במקום left שומר על יישור נכון בשפות מימין לשמאל.
טבלאות רספונסיביות שנגללות
טבלה לא יכולה להתכווץ מתחת לרוחב התוכן שלה. בטלפון, טבלה רחבה דוחפת את כל העמוד הצידה. עטפו אותה במיכל שנגלל במקום:
המיכל מוגבל כאן ל-300 פיקסלים כדי לדמות מסך טלפון; גללו אותו הצידה. tabindex="0" מאפשר למשתמשי מקלדת להעביר פוקוס למיכל ולגלול אותו עם מקשי החצים, ו-role="region" עם aria-label נותן לעצירה הזו שם.
טבלאות הן לנתונים
השתמשו בטבלה כשלתוכן באמת יש שורות ועמודות: מחירים, לוחות זמנים, השוואות, תוצאות. אל תשתמשו בה כדי למקם דברים זה לצד זה בעמוד. טבלאות פריסה מבלבלות קוראי מסך, שמכריזים על שורות ועמודות שאין להן משמעות, והן לא יכולות להסתגל למסכים קטנים. את הפריסה עושים flexbox ו-grid של CSS.
טעויות נפוצות
- שורות עם מספר תאים שונה. השורות הקצרות נגמרות מוקדם והעמודות מפסיקות להתיישר.
- שימוש ב-
<td>עם טקסט מודגש לכותרות. השתמשו ב-<th>כדי שהכותרות יהיו תוויות אמיתיות. - המאפיינים המיושנים
border,cellpadding,cellspacing,bgcolorו-align. השתמשו ב-CSS במקום. - לשים תוכן ישירות בתוך
<tr>או<table>, מחוץ לכל תא. דפדפנים מוציאים אותו מהטבלה, בדרך כלל אל מעליה. - כותרת מעל הטבלה במקום
<caption>. table > trב-CSS. הדפדפן הכניס<tbody>; כתבוtable trאוtbody tr.
שאלות נפוצות
איך יוצרים טבלה ב-HTML?
עטפו אותה ב-<table>, כתבו <tr> אחד לכל שורה, ושימו בתוכו את התאים: <th> לתאי כותרת ו-<td> לתאי נתונים. בכל שורה צריך להיות אותו מספר תאים, אלא אם חלק מהתאים מתפרשים על כמה עמודות.
מה ההבדל בין th ל-td?
<th> הוא תא כותרת שנותן שם לעמודה או לשורה, ו-<td> הוא תא נתונים. דפדפנים מציגים את <th> מודגש וממורכז, וקוראי מסך מקריאים את הכותרת המתאימה לפני כל תא נתונים כדי שהמספרים יהיו מובנים.
מה עושים thead, tbody ו-tfoot?
הם מקבצים שורות לכותרת, לגוף ולכותרת התחתונה (סיכומים) של הטבלה. הם מבהירים את המבנה לטכנולוגיה מסייעת, נותנים ל-CSS משהו לפנות אליו, וכשמדפיסים טבלה ארוכה, דפדפנים יכולים לחזור על ה-<thead> בכל עמוד.
למה לטבלת ה-HTML שלי אין גבולות?
לטבלאות אין גבולות כברירת מחדל. הוסיפו אותם עם CSS: table { border-collapse: collapse; } th, td { border: 1px solid #ccc; }. המאפיין הישן border="1" מיושן.
איך הופכים טבלת HTML לרספונסיבית?
שימו את הטבלה במיכל עם overflow-x: auto. במסך צר הטבלה נגללת הצידה בתוך המיכל במקום להרחיב את כל העמוד.