HTML: سمات HTML

توفر السمات (attributes) معلومات تكوين إضافية لوسوم HTML، مما يجعل سلوك العناصر ومظهرها أكثر ثراءً.

1. ما هي السمات

سمات HTML هي كلمات رئيسية خاصة تُكتب داخل وسم البداية، تستخدم لتكوين الوسوم بمزيد من التفصيل. تُكتب السمات بصيغة name="value" داخل وسم البداية. يمكن أن يحتوي الوسم على سمات متعددة، مفصولة بمسافات.

▶ مثال

HTML
<!-- سمة واحدة -->
<a href="https://example.com">هذا رابط</a>

<!-- سمات متعددة، مفصولة بمسافات -->
<img src="photo.jpg" alt="صورة منظر طبيعي" width="800" height="600">

<!-- يُوصى بأن تُغلف قيم السمات بعلامات اقتباس مزدوجة، لكن المفردة تعمل أيضًا -->
<p title='نص تلميح'>فقرة مع تلميح</p>
▶ جرّب الكود

في الأمثلة أعلاه، href و src و alt و width و height و title كلها أسماء سمات، والمحتوى داخل علامات الاقتباس هو قيم السمات المحددة. أسماء السمات تكون دائمًا بحروف صغيرة، ويُوصى باستخدام علامات الاقتباس المزدوجة لقيم السمات.

📌 قاعدة كتابة السمات: في HTML5، يمكن حذف علامات الاقتباس حول قيم السمات (إذا كانت القيمة لا تحتوي على أحرف خاصة مثل المسافات)، لكن يُوصى بشدة باستخدام علامات الاقتباس المزدوجة دائمًا. هذا يجعل الكود أوضح ويتجنب الأخطاء غير المتوقعة.


2. السمات العامة الشائعة

السمات العامة (Global Attributes) هي سمات يمكن استخدامها على أي وسم HTML. إليك أكثر السمات العامة استخدامًا:

(1) id — معرف فريد

سمة id تعين معرفًا فريدًا لعنصر ما. داخل نفس الصفحة، يمكن استخدام كل id مرة واحدة فقط. تُستخدم عادةً للروابط المرجعية ومحددات CSS وعمليات JavaScript.

HTML
<h1 id="page-title">مرحبًا بكم في موقعي</h1>
### ▶ مثال
<!-- يمكن استخدام #page-title للقفز إلى موضع هذا العنوان -->
<a href="#page-title">اقفز إلى العنوان</a>

(2) class — اسم الفئة

سمة class تعين اسم فئة أو أكثر لعنصر. على عكس id، يمكن إعادة استخدام نفس اسم الفئة عبر عناصر متعددة، وهي الطريقة الأساسية لتنسيق CSS واختيار JavaScript.

HTML
<!-- عناصر متعددة يمكنها استخدام نفس الفئة -->
### ▶ مثال
<p class="highlight">سيتم تمييز هذا النص</p>
<p class="highlight">سيتم تمييز هذا النص أيضًا</p>

<!-- عنصر واحد يمكن أن يكون له فئات متعددة، مفصولة بمسافات -->
<div class="box bordered rounded">هذا صندوق دائري بحدود</div>

(3) style — أنماط مضمنة

سمة style تسمح بكتابة أنماط CSS مباشرة داخل الوسم. على الرغم من عدم التوصية باستخدامها بكثافة (من الأفضل الاحتفاظ بالأنماط في ملفات CSS منفصلة)، إلا أنها مريحة جدًا للاختبار السريع أو تجاوز الأنماط ديناميكيًا.

HTML
<p style="color: red; font-size: 18px;">هذا نص أحمر كبير</p>
### ▶ مثال
<div style="background: #f0f0f0; padding: 10px; border-radius: 5px;">
هذا صندوق دائري بلون خلفية
</div>

(4) title — نص التلميح

سمة title توفر معلومات إضافية للعنصر. عندما يمرر المستخدم الماوس فوق العنصر، يعرض المتصفح تلميحًا.

HTML
<p title="هذا نص تلميح">مرر الماوس فوق هذا النص لترى ماذا يحدث</p>
### ▶ مثال
<abbr title="لغة ترميز النص التشعبي">HTML</abbr>

(5) ملخص السمات العامة

السمةالغرضالتفردمدى الاستخدامidمعرف فريد للعنصر، يُستخدم للمراسي و CSS و JSفريد في الصفحة⭐⭐⭐⭐⭐classتعيين اسم فئة للعنصر، يُستخدم لـ CSS / JSقابل لإعادة الاستخدام⭐⭐⭐⭐⭐styleكتابة أنماط CSS مباشرة داخل الوسم—⭐⭐titleعرض نص تلميح عند تمرير الماوس—⭐⭐langإعلان لغة محتوى العنصر—⭐⭐dirتحديد اتجاه النص (ltr / rtl)—⭐


3. السمات المنطقية (Boolean Attributes)

السمات المنطقية هي نوع خاص من السمات — لا تحتاج إلى قيمة؛ مجرد ظهورها يعني "تشغيل/صحيح". السمات المنطقية الشائعة تشمل disabled و checked و readonly و required.

HTML
<!-- حقل إدخال معطل -->
<input type="text" disabled>

<!-- خانة اختيار محددة مسبقًا -->
<input type="checkbox" checked> أوافق على الشروط

<!-- حقل إدخال للقراءة فقط -->
<input type="text" value="محتوى للقراءة فقط" readonly>
### ▶ مثال

<!-- حقل إجباري -->
<input type="email" required>

يمكن أيضًا كتابة السمات المنطقية كـ name="name"، على سبيل المثال disabled="disabled". كلا الشكلين ينتجان نفس التأثير تمامًا. يُوصى بالشكل المختصر (اسم السمة فقط).

💡 أفضل ممارسة: بالنسبة للسمات المنطقية، يُوصى بكتابة اسم السمة فقط (بدون قيمة) — الكود أكثر إيجازًا. استخدم صيغة name="name" فقط عندما تتطلب XHTML ذلك بدقة.


4. سمات البيانات المخصصة data-*

قدم HTML5 ميزة مرنة جدًا: سمات البيانات المخصصة. يمكنك إنشاء سماتك الخاصة على أي وسم HTML، طالما أن اسم السمة يبدأ بـ data-. الغرض منها هو تخزين بيانات إضافية داخل وسوم HTML لاستخدامها بواسطة JavaScript و CSS.

على سبيل المثال، تخيل أن لديك قائمة منتجات وتريد تخزين سعر وكمية المخزون لكل منتج — هذه البيانات لا تحتاج إلى العرض على الصفحة، لكن JavaScript يحتاج إلى قراءتها للمنطق التفاعلي.

HTML
<ul>
<li data-product-id="101" data-price="29.9" data-stock="50">قميص - 29.9$</li>
<li data-product-id="102" data-price="99.9" data-stock="20">حقيبة ظهر - 99.9$</li>
<li data-product-id="103" data-price="199" data-stock="0">سماعات رأس - 199$ (نفد المخزون)</li>
</ul>

<script>
// الوصول إلى data-* عبر واجهة dataset
const items = document.querySelectorAll('li');
for (let item of items) {
  console.log(item.dataset.productId);  // "101", "102", "103"
  console.log(item.dataset.price);      // "29.9", "99.9", "199"
}
</script>

في هذا المثال، data-product-id و data-price و data-stock كلها سمات عرّفناها بأنفسنا. لن تؤثر على عرض الصفحة، لكن JavaScript يمكنه قراءتها بسهولة. انقر على "جرّب" أدناه، ثم افتح وحدة تحكم المطور (F12) لرؤية البيانات المقروءة.

قواعد التسمية: في HTML، استخدم data-user-name (بشرطة). في JavaScript، الوصول المقابل هو dataset.userName (بصيغة الجمل). يتم تحويل الحرف الأول بعد كل شرطة تلقائيًا إلى حرف كبير.

▶ مثال

HTML
<div data-user-name="أحمد" data-user-age="20">معلومات المستخدم</div>

<script>
// قراءة data-user-name ← dataset.userName (صيغة الجمل)
const div = document.querySelector('div');
console.log(div.dataset.userName);  // "أحمد"
console.log(div.dataset.userAge);   // "20"
</script>
▶ جرّب الكود
📌 سيناريوهات الاستخدام: سمات data-* شائعة جدًا في تطوير الواجهة الأمامية، على سبيل المثال لتخزين معرفات المستخدمين وحالات الفرز وأنواع الأزرار وتكوينات المخططات إلخ. إنها أكثر بديهية من الاحتفاظ بكائن بيانات منفصل في JavaScript، لأن البيانات "تعيش معًا" مع هيكل HTML المقابل. ستستخدم هذه الميزة بكثافة في فصول JavaScript اللاحقة.

⚠️ ملاحظة: يجب استخدام سمات data-* فقط لتخزين البيانات المتعلقة بعرض الصفحة، وليس كبديل لقواعد البيانات أو التخزين الخلفي. يجب ألا توضع المعلومات الحساسة (مثل كلمات المرور ومفاتيح API) أبدًا في data-* — لأن أي شخص يمكنه رؤيتها من خلال عرض كود مصدر الصفحة.

▶ مثال


❓ أسئلة شائعة

س هل يجب أن تكون قيم السمات دائمًا بين علامات اقتباس؟ ما الفرق بينعلامة اقتباس مفردة ومزدوجة؟
ج يتطلب HTML5 أن تكون قيم السمات بين علامات اقتباس —علامة اقتباس المزدوجة ("قيمة") هي المعيار الصناعي.علامة اقتباس المفردة ('قيمة') صالحة أيضًا في HTML5، لكنعلامة اقتباس المزدوجة مفضلة للقراءة والاتساق. استخدمعلامة اقتباس المفردة فقط عندما تحتوي القيمة علىعلامة اقتباس مزدوجة (مثل title='قال "مرحبا"'). حذفعلامة اقتباس قد يعمل في بعض الحالات لكنه قد يسبب أخطاء في التحليل — غير موصى به أبدًا.
س ما الفرق بين id و class؟ متى أستخدم كل منهما؟
ج id مثل بطاقة الهوية — كل صفحة يمكن أن يكون لها عنصر واحد فقط بقيمة id معينة، مما يجعله فريدًا. class مثل اسم الفصل — يمكن لعناصر متعددة مشاركة نفس class، مما يجعله قابلًا لإعادة الاستخدام. في الممارسة العملية، استخدم class في 90% من الحالات لأن إعادة استخدام الأنماط هي القاعدة. id له أعلى أولوية CSS، لكن لا تسيء استخدامه من أجل الأولوية. تذكر: id لاستهداف JavaScript، class لأنماط CSS.
س لماذا لا تحتاج بعض السمات مثل disabled و checked إلى قيمة؟
ج هذه تسمى "السمات المنطقية" — وجودها يعني "تشغيل" وغيابها يعني "إيقاف". مثل مفتاح الإضاءة: وجود المفتاح يعني تشغيل، وغيابه يعني إيقاف. HTML5 تنص على أن السمات المنطقية لا يمكن أن تكون false؛ للتعطيل، احذف السمة ببساطة. مثال: <input disabled> يعطّل الإدخال؛ احذف disabled للتمكين. لا تكتب disabled="true" (مكرر) أو disabled="false" (لن يعطّل — خطأ شائع).

📖 ملخص

📝 تمارين

  1. تمرين دمج السمات: أنشئ صفحة تحتوي على العناصر التالية:
  1. تمرين data-*: أنشئ قائمة بطاقات منتجات حيث تستخدم كل بطاقة سمات data-* لتخزين اسم المنتج وسعره ومخزونه. ثم استخدم JavaScript لقراءة هذه البيانات في وحدة تحكم المتصفح عبر document.querySelectorAll و dataset.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%