كيف تنشئ جدولًا في HTML
الجدول عنصر <table> مكوّن من صفوف (<tr>)، وكل صف مكوّن من خلايا: <th> لخلايا العناوين و<td> لخلايا البيانات.
الجدول بلا حدود خاصة به، وقاعدة CSS الوحيدة تضيفها كي ترى الخلايا. الأعمدة تأتي من الخلايا: الخلية الأولى في كل صف هي العمود الأول، والثانية العمود الثاني، وهكذا. يجب أن يحتوي كل صف على عدد الخلايا نفسه. احذف <td> وسينتهي ذلك الصف مبكرًا تاركًا فراغًا.
خلايا <th> عريضة وموسَّطة افتراضيًا. هذا مجرد مظهر، والمهم أنها تسميات، وهذا موضوع القسم التالي.
عناصر الجدول
| العنصر | ما هو |
|---|---|
<table> | الجدول |
<caption> | عنوان الجدول، أول عنصر ابن لـ <table> |
<thead> | مجموعة صفوف الرأس |
<tbody> | مجموعة صفوف المتن (يمكن أن يحتوي الجدول على عدة مجموعات) |
<tfoot> | مجموعة صفوف التذييل، مثل المجاميع |
<tr> | صف |
<th> | خلية عنوان |
<td> | خلية بيانات |
<colgroup>, <col> | الأعمدة، لتنسيق عمود كامل (العرض، الخلفية) |
الحدود مشروحة في حدود الجدول في HTML، والخلايا الممتدة على عدة أعمدة أو صفوف في colspan وrowspan.
خلايا العناوين وscope وcaption
الجدول الذي فيه عناوين في الأعلى وعلى الجانب يحتاج إلى أن يقول في أي اتجاه يشير كل عنوان. scope="col" تسمّي العمود الذي تحتها، وscope="row" تسمّي الصف الذي بجانبها. و<caption> تعطي الجدول عنوانًا ظاهرًا:
مع هذه البنية يستطيع قارئ الشاشة عند الانتقال إلى الخلية 14:00 أن يعلن «Saturday، Closes، 14:00»، فلا يُقرأ الرقم وحده أبدًا. في الجدول البسيط ذي صف العناوين الواحد تستنتج المتصفحات العناوين عادةً من دون scope، لكن كتابتها لا تكلف شيئًا وتزيل التخمين.
والتسمية التوضيحية هي أيضًا ما يعلنه قارئ الشاشة حين يصل إلى الجدول. فضّلها على عنوان موضوع فوق الجدول لا يرتبط به.
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. على الشاشة الضيقة يتمرر الجدول أفقيًا داخل الحاوية بدلًا من توسيع الصفحة كلها.