HTML & CSS

النماذج والجداول في HTML — دليل شامل 2026

📅 2026-10-24⏱ 10 دقائق قراءة
في المقال السابق، تعلمت الصور والروابط. الآن سنتعلم **النماذج** و **الجداول** — وهما عنصران أساسيان في أي موقع تفاعلي. في هذا الدليل العملي، سنأخذك خطوة بخطوة لفهم النماذج والجداول، مع تمارين وحلول. ## ما هو النموذج (Form)؟ **النموذج** هو **حاوية** لجمع بيانات المستخدم. يُستخدم في: - تسجيل الدخول. - التسجيل. - البحث. - الاتصال. - الطلبات. **الصيغة الأساسية:** ```html <form action="/submit" method="POST"> <!-- حقول الإدخال --> <input type="text" name="username"> <button type="submit">إرسال</button> </form> ``` ## سمات النموذج (form) <table> <thead> <tr> <th>السمة</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>action</code></td> <td>عنوان URL الذي يُرسل إليه النموذج</td> </tr> <tr> <td><code>method</code></td> <td>طريقة الإرسال (GET أو POST)</td> </tr> <tr> <td><code>target</code></td> <td>أين يُعرض الرد</td> </tr> <tr> <td><code>enctype</code></td> <td>نوع الترميز (لرفع الملفات)</td> </tr> <tr> <td><code>autocomplete</code></td> <td>الإكمال التلقائي (on/off)</td> </tr> </tbody> </table> **الفرق بين GET و POST:** <table> <thead> <tr> <th>المعيار</th> <th>GET</th> <th>POST</th> </tr> </thead> <tbody> <tr> <td><strong>البيانات</strong></td> <td>في الرابط</td> <td>في الجسم</td> </tr> <tr> <td><strong>الأمان</strong></td> <td>❌ غير آمن</td> <td>✅ أكثر أماناً</td> </tr> <tr> <td><strong>الحجم</strong></td> <td>محدود</td> <td>غير محدود</td> </tr> <tr> <td><strong>الاستخدام</strong></td> <td>البحث</td> <td>البيانات الحساسة</td> </tr> </tbody> </table> ## حقول الإدخال (input) وسم `<input>` هو **الأكثر استخداماً** في النماذج. له **أنواع** كثيرة: ### 1. النص (text) ```html <label for="name">الاسم:</label> <input type="text" id="name" name="name" placeholder="أدخل اسمك" required> ``` ### 2. البريد الإلكتروني (email) ```html <label for="email">البريد:</label> <input type="email" id="email" name="email" placeholder="example@email.com" required> ``` ### 3. كلمة المرور (password) ```html <label for="password">كلمة المرور:</label> <input type="password" id="password" name="password" minlength="8" required> ``` ### 4. الأرقام (number) ```html <label for="age">العمر:</label> <input type="number" id="age" name="age" min="18" max="100" step="1"> ``` ### 5. التاريخ (date) ```html <label for="birthdate">تاريخ الميلاد:</label> <input type="date" id="birthdate" name="birthdate"> ``` ### 6. الوقت (time) ```html <label for="meeting">موعد الاجتماع:</label> <input type="time" id="meeting" name="meeting"> ``` ### 7. اللون (color) ```html <label for="color">اختر لوناً:</label> <input type="color" id="color" name="color" value="#3b82f6"> ``` ### 8. المدى (range) ```html <label for="volume">مستوى الصوت:</label> <input type="range" id="volume" name="volume" min="0" max="100" value="50"> ``` ### 9. مربع الاختيار (checkbox) ```html <label> <input type="checkbox" name="agree" value="yes"> أوافق على الشروط </label> ``` ### 10. زر الراديو (radio) ```html <p>الجنس:</p> <label> <input type="radio" name="gender" value="male"> ذكر </label> <label> <input type="radio" name="gender" value="female"> أنثى </label> ``` **⚠️ مهم:** أزرار الراديو التي تنتمي لنفس المجموعة **يجب أن تحمل نفس `name`**. ### 11. الملف (file) ```html <label for="avatar">صورة شخصية:</label> <input type="file" id="avatar" name="avatar" accept="image/*"> ``` ### 12. البحث (search) ```html <input type="search" name="q" placeholder="ابحث..."> ``` ## جدول أنواع input <table> <thead> <tr> <th>النوع</th> <th>الاستخدام</th> <th>المثال</th> </tr> </thead> <tbody> <tr> <td><code>text</code></td> <td>نص عادي</td> <td>الاسم</td> </tr> <tr> <td><code>email</code></td> <td>بريد إلكتروني</td> <td>user@mail.com</td> </tr> <tr> <td><code>password</code></td> <td>كلمة مرور</td> <td>••••••</td> </tr> <tr> <td><code>number</code></td> <td>أرقام</td> <td>25</td> </tr> <tr> <td><code>date</code></td> <td>تاريخ</td> <td>2026-10-24</td> </tr> <tr> <td><code>time</code></td> <td>وقت</td> <td>14:30</td> </tr> <tr> <td><code>color</code></td> <td>لون</td> <td>#FF0000</td> </tr> <tr> <td><code>range</code></td> <td>مدى</td> <td>50</td> </tr> <tr> <td><code>checkbox</code></td> <td>خيارات متعددة</td> <td>☑️</td> </tr> <tr> <td><code>radio</code></td> <td>اختيار واحد</td> <td>🔘</td> </tr> <tr> <td><code>file</code></td> <td>ملف</td> <td>📎</td> </tr> <tr> <td><code>submit</code></td> <td>زر إرسال</td> <td>إرسال</td> </tr> <tr> <td><code>reset</code></td> <td>زر إعادة</td> <td>إعادة</td> </tr> </tbody> </table> ## القوائم المنسدلة (select) ```html <label for="country">الدولة:</label> <select id="country" name="country"> <option value="">اختر دولة</option> <option value="jo">الأردن</option> <option value="eg">مصر</option> <option value="sa">السعودية</option> </select> ``` **قائمة متعددة:** ```html <select name="skills" multiple size="4"> <option value="html">HTML</option> <option value="css">CSS</option> <option value="js">JavaScript</option> <option value="react">React</option> </select> ``` **مجموعات (optgroup):** ```html <select name="food"> <optgroup label="فواكه"> <option value="apple">تفاح</option> <option value="banana">موز</option> </optgroup> <optgroup label="خضروات"> <option value="tomato">طماطم</option> <option value="cucumber">خيار</option> </optgroup> </select> ``` ## منطقة النص (textarea) ```html <label for="message">رسالتك:</label> <textarea id="message" name="message" rows="5" cols="40" placeholder="اكتب رسالتك..."></textarea> ``` **السمات:** - **`rows`:** عدد الأسطر. - **`cols`:** عدد الأعمدة. - **`maxlength`:** الحد الأقصى للأحرف. ## الأزرار ### 1. زر الإرسال (submit) ```html <button type="submit">إرسال</button> ``` ### 2. زر عادي (button) ```html <button type="button" onclick="alert('مرحباً')">اضغط</button> ``` ### 3. زر الإعادة (reset) ```html <button type="reset">مسح النموذج</button> ``` **الفرق بين `<input type="submit">` و `<button>`:** ```html <!-- الأقدم: --> <input type="submit" value="إرسال"> <!-- الأحدث (أفضل): --> <button type="submit">إرسال</button> ``` **`<button>` أفضل** لأنه يمكن أن يحتوي على نص، صور، وأيقونات. ## التسميات (label) **`<label>`** يربط النص بحقل الإدخال. **طريقتان:** ```html <!-- الطريقة 1: using for + id --> <label for="username">الاسم:</label> <input type="text" id="username"> <!-- الطريقة 2: التغليف --> <label> الاسم: <input type="text"> </label> ``` **⚠️ مهم:** `<label>` يحسّن: - **الوصول:** النقر على النص يفعّل الحقل. - **إمكانية الوصول:** قارئ الشاشة يفهم الحقل. ## التحقق من الإدخال (Validation) HTML5 يوفر **تحققاً مدمجاً**: <table> <thead> <tr> <th>السمة</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>required</code></td> <td>حقل إلزامي</td> </tr> <tr> <td><code>minlength</code></td> <td>الحد الأدنى للأحرف</td> </tr> <tr> <td><code>maxlength</code></td> <td>الحد الأقصى للأحرف</td> </tr> <tr> <td><code>min</code></td> <td>الحد الأدنى (للأرقام)</td> </tr> <tr> <td><code>max</code></td> <td>الحد الأقصى (للأرقام)</td> </tr> <tr> <td><code>pattern</code></td> <td>نمط (Regex)</td> </tr> </tbody> </table> **مثال:** ```html <input type="text" name="username" required minlength="3" maxlength="20" pattern="[a-zA-Z0-9]+" placeholder="3-20 حرفاً" > ``` ## مجموعات الحقول (fieldset) لتجميع حقول مرتبطة: ```html <fieldset> <legend>المعلومات الشخصية</legend> <label for="fname">الاسم الأول:</label> <input type="text" id="fname" name="fname"> <label for="lname">اسم العائلة:</label> <input type="text" id="lname" name="lname"> </fieldset> ``` **النتيجة:** إطار حول المجموعة + عنوان. ## ما هو الجدول (Table)؟ **الجدول** هو عرض **بيانات منظمة** في صفوف وأعمدة. **الصيغة:** ```html <table> <thead> <tr> <th>العمود 1</th> <th>العمود 2</th> </tr> </thead> <tbody> <tr> <td>خلية 1</td> <td>خلية 2</td> </tr> </tbody> </table> ``` ## وسوم الجدول <table> <thead> <tr> <th>الوسم</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>&lt;table&gt;</code></td> <td>الجدول</td> </tr> <tr> <td><code>&lt;thead&gt;</code></td> <td>رأس الجدول</td> </tr> <tr> <td><code>&lt;tbody&gt;</code></td> <td>جسم الجدول</td> </tr> <tr> <td><code>&lt;tfoot&gt;</code></td> <td>تذييل الجدول</td> </tr> <tr> <td><code>&lt;tr&gt;</code></td> <td>صف (Table Row)</td> </tr> <tr> <td><code>&lt;th&gt;</code></td> <td>خلية رأس (Table Header)</td> </tr> <tr> <td><code>&lt;td&gt;</code></td> <td>خلية عادية (Table Data)</td> </tr> <tr> <td><code>&lt;caption&gt;</code></td> <td>عنوان الجدول</td> </tr> </tbody> </table> ## مثال جدول كامل ```html <table> <caption>درجات الطلاب</caption> <thead> <tr> <th>الاسم</th> <th>الرياضيات</th> <th>العلوم</th> <th>العربي</th> </tr> </thead> <tbody> <tr> <td>أحمد</td> <td>95</td> <td>88</td> <td>92</td> </tr> <tr> <td>محمد</td> <td>85</td> <td>90</td> <td>88</td> </tr> <tr> <td>علي</td> <td>78</td> <td>82</td> <td>80</td> </tr> </tbody> <tfoot> <tr> <td>المتوسط</td> <td>86</td> <td>86.6</td> <td>86.6</td> </tr> </tfoot> </table> ``` ## دمج الخلايا ### 1. الدمج الأفقي (colspan) ```html <table> <tr> <th colspan="2">الاسم الكامل</th> </tr> <tr> <td>أحمد</td> <td>محمد</td> </tr> </table> ``` ### 2. الدمج العمودي (rowspan) ```html <table> <tr> <th rowspan="2">الاسم</th> <th>المادة 1</th> </tr> <tr> <th>المادة 2</th> </tr> <tr> <td>أحمد</td> <td>95</td> </tr> </table> ``` ## أمثلة عملية ### 1. نموذج تسجيل ```html <form action="/register" method="POST"> <fieldset> <legend>معلومات الحساب</legend> <label for="username">الاسم:</label> <input type="text" id="username" name="username" required> <label for="email">البريد:</label> <input type="email" id="email" name="email" required> <label for="password">كلمة المرور:</label> <input type="password" id="password" name="password" minlength="8" required> </fieldset> <fieldset> <legend>معلومات إضافية</legend> <label for="birthdate">تاريخ الميلاد:</label> <input type="date" id="birthdate" name="birthdate"> <label for="country">الدولة:</label> <select id="country" name="country"> <option value="">اختر</option> <option value="jo">الأردن</option> <option value="eg">مصر</option> </select> <label> <input type="checkbox" name="agree" required> أوافق على الشروط </label> </fieldset> <button type="submit">تسجيل</button> <button type="reset">مسح</button> </form> ``` ### 2. نموذج اتصال ```html <form action="/contact" method="POST"> <label for="name">الاسم:</label> <input type="text" id="name" name="name" required> <label for="email">البريد:</label> <input type="email" id="email" name="email" required> <label for="subject">الموضوع:</label> <select id="subject" name="subject"> <option value="inquiry">استفسار</option> <option value="support">دعم فني</option> <option value="feedback">ملاحظات</option> </select> <label for="message">الرسالة:</label> <textarea id="message" name="message" rows="5" required></textarea> <button type="submit">إرسال</button> </form> ``` ### 3. جدول مقارنة ```html <table> <caption>مقارنة الخطط</caption> <thead> <tr> <th>الميزة</th> <th>مجاني</th> <th>مدفوع</th> </tr> </thead> <tbody> <tr> <td>المقالات</td> <td>10</td> <td>غير محدود</td> </tr> <tr> <td>الدعم</td> <td>❌</td> <td>✅</td> </tr> <tr> <td>التحميلات</td> <td>5</td> <td>غير محدود</td> </tr> </tbody> </table> ``` ## تمارين عملية ### تمرين 1: نموذج تسجيل دخول أنشئ نموذجاً بحقول البريد وكلمة المرور. **الحل:** ```html <form> <label for="email">البريد:</label> <input type="email" id="email" name="email" required> <label for="password">كلمة المرور:</label> <input type="password" id="password" name="password" required> <button type="submit">دخول</button> </form> ``` ### تمرين 2: نموذج تسجيل أنشئ نموذجاً بحقول: الاسم، البريد، كلمة المرور، العمر، الجنس. **الحل:** ```html <form> <label for="name">الاسم:</label> <input type="text" id="name" name="name" required> <label for="email">البريد:</label> <input type="email" id="email" name="email" required> <label for="password">كلمة المرور:</label> <input type="password" id="password" name="password" minlength="8" required> <label for="age">العمر:</label> <input type="number" id="age" name="age" min="18" max="100"> <p>الجنس:</p> <label><input type="radio" name="gender" value="male"> ذكر</label> <label><input type="radio" name="gender" value="female"> أنثى</label> <button type="submit">تسجيل</button> </form> ``` ### تمرين 3: نموذج بحث أنشئ نموذج بحث بسيط. **الحل:** ```html <form action="/search" method="GET"> <input type="search" name="q" placeholder="ابحث..."> <button type="submit">بحث</button> </form> ``` ### تمرين 4: جدول درجات أنشئ جدولاً لدرجات 3 طلاب في 3 مواد. **الحل:** ```html <table> <thead> <tr> <th>الاسم</th> <th>رياضيات</th> <th>علوم</th> <th>عربي</th> </tr> </thead> <tbody> <tr> <td>أحمد</td> <td>95</td> <td>88</td> <td>92</td> </tr> <tr> <td>محمد</td> <td>85</td> <td>90</td> <td>88</td> </tr> <tr> <td>علي</td> <td>78</td> <td>82</td> <td>80</td> </tr> </tbody> </table> ``` ### تمرين 5: جدول منتجات أنشئ جدولاً للمنتجات مع السعر والكمية. **الحل:** ```html <table> <thead> <tr> <th>المنتج</th> <th>السعر</th> <th>الكمية</th> </tr> </thead> <tbody> <tr> <td>لابتوب</td> <td>5000 $</td> <td>10</td> </tr> <tr> <td>هاتف</td> <td>2000 $</td> <td>25</td> </tr> </tbody> </table> ``` ### تمرين 6: نموذج مع checkbox أنشئ نموذجاً لاختيار المهارات. **الحل:** ```html <form> <p>مهاراتك:</p> <label><input type="checkbox" name="skills" value="html"> HTML</label> <label><input type="checkbox" name="skills" value="css"> CSS</label> <label><input type="checkbox" name="skills" value="js"> JavaScript</label> <label><input type="checkbox" name="skills" value="react"> React</label> <button type="submit">إرسال</button> </form> ``` ### تمرين 7: نموذج رفع ملف أنشئ نموذجاً لرفع صورة. **الحل:** ```html <form enctype="multipart/form-data" method="POST"> <label for="avatar">صورة شخصية:</label> <input type="file" id="avatar" name="avatar" accept="image/*"> <button type="submit">رفع</button> </form> ``` ### تمرين 8: نموذج اتصال كامل أنشئ نموذج اتصال مع كل ما تعلمته. **الحل:** ```html <form action="/contact" method="POST"> <fieldset> <legend>معلوماتك</legend> <label for="name">الاسم:</label> <input type="text" id="name" name="name" required> <label for="email">البريد:</label> <input type="email" id="email" name="email" required> <label for="phone">الهاتف:</label> <input type="tel" id="phone" name="phone"> </fieldset> <fieldset> <legend>رسالتك</legend> <label for="subject">الموضوع:</label> <select id="subject" name="subject"> <option>استفسار</option> <option>دعم فني</option> <option>ملاحظات</option> </select> <label for="message">الرسالة:</label> <textarea id="message" name="message" rows="5" required></textarea> </fieldset> <label> <input type="checkbox" required> أوافق على معالجة بياناتي </label> <button type="submit">إرسال</button> </form> ``` ## حل المشاكل الشائعة ### 🔴 المشكلة 1: النموذج لا يرسل **الأسباب:** - `name` مفقود في الحقل. - `action` غير محدد. - زر الإرسال بدون `type="submit"`. **الحل:** تحقق من أن كل حقل له `name`، وأن هناك `<button type="submit">`. ### 🔴 المشكلة 2: زر الراديو لا يعمل **السبب:** أزرار الراديو لها `name` مختلفة. **الحل:** ```html <!-- ❌ خطأ: --> <input type="radio" name="g1" value="male"> <input type="radio" name="g2" value="female"> <!-- ✅ صحيح: --> <input type="radio" name="gender" value="male"> <input type="radio" name="gender" value="female"> ``` ### 🔴 المشكلة 3: الجدول غير منظم **السبب:** عدم استخدام `thead` و `tbody`. **الحل:** نظّم الجدول بـ `thead`, `tbody`, `tfoot`. ### 🔴 المشكلة 4: `label` لا يعمل **السبب:** `for` لا يطابق `id`. **الحل:** ```html <label for="username">الاسم:</label> <input type="text" id="username"> ``` **⚠️ لاحظ:** `for="username"` = `id="username"`. ### 🔴 المشكلة 5: الجدول يستخدم للتخطيط **السبب:** استخدام `<table>` لتخطيط الصفحة. **الحل:** استخدم `<div>` و CSS Grid/Flexbox بدلاً من ذلك. ## جدول الوسوم <table> <thead> <tr> <th>الوسم</th> <th>الوظيفة</th> </tr> </thead> <tbody> <tr> <td><code>&lt;form&gt;</code></td> <td>نموذج</td> </tr> <tr> <td><code>&lt;input&gt;</code></td> <td>حقل إدخال</td> </tr> <tr> <td><code>&lt;label&gt;</code></td> <td>تسمية</td> </tr> <tr> <td><code>&lt;select&gt;</code></td> <td>قائمة منسدلة</td> </tr> <tr> <td><code>&lt;option&gt;</code></td> <td>خيار</td> </tr> <tr> <td><code>&lt;textarea&gt;</code></td> <td>منطقة نص</td> </tr> <tr> <td><code>&lt;button&gt;</code></td> <td>زر</td> </tr> <tr> <td><code>&lt;fieldset&gt;</code></td> <td>مجموعة</td> </tr> <tr> <td><code>&lt;legend&gt;</code></td> <td>عنوان المجموعة</td> </tr> <tr> <td><code>&lt;table&gt;</code></td> <td>جدول</td> </tr> <tr> <td><code>&lt;tr&gt;</code></td> <td>صف</td> </tr> <tr> <td><code>&lt;th&gt;</code></td> <td>خلية رأس</td> </tr> <tr> <td><code>&lt;td&gt;</code></td> <td>خلية</td> </tr> </tbody> </table> ## قائمة تحقق نهائية <table> <thead> <tr> <th>المهمة</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>بناء نموذج تسجيل دخول</td> <td>⬜</td> </tr> <tr> <td>استخدام أنواع input المختلفة</td> <td>⬜</td> </tr> <tr> <td>استخدام select و textarea</td> <td>⬜</td> </tr> <tr> <td>إضافة التحقق (validation)</td> <td>⬜</td> </tr> <tr> <td>بناء جدول بيانات</td> <td>⬜</td> </tr> <tr> <td>دمج الخلايا (colspan, rowspan)</td> <td>⬜</td> </tr> <tr> <td>حل التمارين الثمانية</td> <td>⬜</td> </tr> </tbody> </table> ## ماذا بعد هذا المقال؟ الآن بعد أن أتقنت النماذج والجداول، أنت جاهز للمقال التالي: 1. **الوسوم الدلالية** — HTML احترافي. 2. **CSS** — التصميم والأنماط. 3. **مشروع متكامل** — موقع كامل. ## الخلاصة في هذا المقال، تعلمت: - ✅ إنشاء النماذج (forms). - ✅ جميع أنواع `input`. - ✅ القوائم المنسدلة (select). - ✅ مناطق النص (textarea). - ✅ التحقق من الإدخال. - ✅ الجداول (tables). - ✅ دمج الخلايا (colspan, rowspan). - ✅ حل 8 تمارين عملية. **تذكر:** النماذج والجداول هما أدوات أساسية لأي موقع تفاعلي.