توسيع العناصر المضمّنة
تخصيص العناصر الحالية باستخدام السمة is
توسيع العناصر المضمّنة درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
نوعان من العناصر المخصّصة
يحدد المعيار نوعين من العناصر المخصّصة: العناصر المستقلة، التي توسّع HTMLElement وتُستخدم كـ <my-card>، والعناصر المضمّنة المخصّصة، التي توسّع فئة مضمّنة محددة وتُستخدم كـ <button is="my-button">. وترث العناصر المضمّنة المخصّصة دلالات العناصر الأصلية تلقائيًا.
لماذا نوسّع عنصرًا مضمّنًا؟
لا يحصل <my-button> المستقل على أي من سلوك <button> المضمّن — فلا تفعيل بالضغط على Enter أو Space، ولا مشاركة في النماذج، ولا role="button" لتقنيات المساعدة. أما الزر المضمّن المخصّص (is="my-button") فيرث كل ذلك تلقائيًا.
توسيع الفئة
وسّع فئة HTML المحددة بدلًا من HTMLElement: class MyButton extends HTMLButtonElement {}. يحتفظ العنصر بكل سلوكه المضمّن — إرسال النماذج، وإدارة التركيز، وحالة التعطيل — وتضيف تحسيناتك فوق ذلك.
class MyButton extends HTMLButtonElement {
connectedCallback() {
this.style.fontWeight = "bold";
}
}التسجيل باستخدام خيار extends
customElements.define("my-button", MyButton, { extends: "button" }). يخبر المعامل الثالث السجلَّ بعلامة HTML المضمّنة التي يوسّعها العنصر. وبدونه، يفشل التسجيل بإطلاق استثناء.
سمة is
استخدم العناصر المضمّنة المخصّصة مع سمة is على العلامة الموجودة: <button is="my-button">Click</button>. أما كتابة <my-button> بدلًا من ذلك فتنشئ عنصرًا مستقلًا وتفقده السلوك المضمّن.
لا يدعم Safari ذلك
رفض Safari تنفيذ العناصر المضمّنة المخصّصة، مستندًا إلى مخاوف تتعلق بإمكانية الوصول. وهي تعمل في Chrome وEdge وFirefox؛ أما في Safari فتُتجاهل سمة is ويتصرف العنصر كأنه <button> عادي. استخدم polyfill الرسمي عند الحاجة إلى دعم Safari.
خيارات polyfill
يعيد polyfill @ungap/custom-elements دعم العناصر المضمّنة المخصّصة في Safari. وهو صغير الحجم ويحظى بصيانة جيدة؛ أدرجه عندما يحتاج فريقك إلى دعم المتصفحات المختلفة دون التخلي عن نمط سمة is.
البديل المستقل
إذا كان دعم Safari دون polyfill مهمًا، فأنشئ عنصرًا مستقلًا بدلًا من ذلك وكرّر السلوك المطلوب يدويًا: أضف role="button" وtabindex="0" ومعالجات لوحة المفاتيح لـ Enter وSpace، واربطه بالنماذج عبر واجهة ElementInternals API.
واجهة برمجة التطبيقات لربط النماذج
يمكن للعناصر المستقلة المشاركة في إرسال النماذج عبر تعيين static formAssociated = true واستخدام this.attachInternals(). ويوفر كائن ElementInternals الناتج الدالتين setFormValue وsetValidity للتكامل الكامل مع النماذج.
متى تختار كل نوع؟
اختر العناصر المضمّنة المخصّصة للمكونات التي تتصرف في الغالب مثل عنصر مضمّن، كزر متطور أو حقل إدخال ذكي، عندما تكون منصتك تدعم Chrome وFirefox أو عندما تقبل استخدام polyfill. واختر العناصر المستقلة للمكونات الجديدة بالكامل، مثل البطاقات ومربعات الحوار، التي لا يوجد لها نظير مضمّن.
خطأ شائع: الأزرار المستقلة
أكثر أخطاء مكونات الويب شيوعًا هو إنشاء <my-button> كعنصر مستقل. فهو لن يرسل النماذج، ولن يستجيب للضغط على Enter أو Space، ولن تعلن عنه تقنيات المساعدة باعتباره زرًا. إما أن توسّع HTMLButtonElement أو تكرّر بعناية كل سلوكيات الزر الحقيقي.
اختبار المعرفة
ما الميزة العملية لتوسيع HTMLButtonElement، أي إنشاء عنصر مضمّن مخصّص، بدلًا من توسيع HTMLElement، أي إنشاء عنصر مستقل، لمكوّن يشبه الزر؟
الخلاصة
توسّع العناصر المضمّنة المخصّصة فئة HTML محددة، مثل HTMLButtonElement أو HTMLInputElement، وتُستخدم عبر سمة is، مع وراثة كل السلوك الأصلي. سجّلها باستخدام خيار { extends: "button" }. لا يدعم Safari هذه العناصر أصلًا — فاستخدم polyfill أو عناصر مستقلة مع تكرار السلوك يدويًا عند الحاجة إلى دعم كامل للمتصفحات المختلفة.
الأسئلة الشائعة
هل درس «توسيع العناصر المضمّنة» مجاني؟
نعم — نص درس «توسيع العناصر المضمّنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «توسيع العناصر المضمّنة»؟
تخصيص العناصر الحالية باستخدام السمة is تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «توسيع العناصر المضمّنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف العناصر باستخدام customElements.define
- connectedCallback وdisconnectedCallback
- السمات المرصودة وattributeChangedCallback
- توسيع العناصر المضمّنة