ما هو Shadow DOM؟
تشرح هذه المقالة ما هو Shadow DOM۔
YouTube Video
فهم Shadow DOM
Shadow DOM
هي ميزة قوية في معيار Web Components تتيح تغليف الأنماط وبنية DOM داخل المكونات۔ تمنع هذه الميزة تداخل الأنماط والسكربتات بين المكونات والمستند الرئيسي۔
ما هو Shadow DOM
؟
Shadow DOM
يوفر طريقة لإنشاء شجرة DOM محدودة ترتبط بعنصر DOM عادي۔ تكون هذه الشجرة الظلية معزولة عن المستند الكلي، حيث لا تؤثر عليها الأنماط والسكربتات الخارجية، ولا تتسرب الأنماط والسكربتات الداخلية منها۔
على سبيل المثال، إذا قمت بإنشاء مكون زر مخصص باستخدام Shadow DOM
، فإن أنماطه لن تتداخل مع العناصر الأخرى على الصفحة۔ وبالمثل، لن تتعارض العناصر التي تحمل نفس اسم الفئة۔
فوائد Shadow DOM
-
التغليف: يفصل
Shadow DOM
بين الأنماط والوظائف، مما يمنع التعارض مع الأنماط والسكربتات العالمية۔ -
إعادة الاستخدام: يمكن إعادة استخدام المكونات المصممة باستخدام
Shadow DOM
عبر مشاريع مختلفة دون القلق بشأن تعارض الأنماط۔ -
سهولة الصيانة: يتيح التغليف للمكونات أن تكون مكتفية ذاتياً من حيث المنطق والأنماط، مما يجعل التصحيح والصيانة أسهل۔
إنشاء Shadow DOM
لاستخدام Shadow DOM
، تحتاج إلى إرفاق جذر الظل بعنصر HTML۔ إليك مثال بسيط:۔
1// Select the host element
2const hostElement = document.querySelector('#shadow-host');
3
4// Attach a shadow root
5const shadowRoot = hostElement.attachShadow({ mode: 'open' });
6
7// Add content to the shadow root
8shadowRoot.innerHTML = `
9 <style>
10 p {
11 color: blue;
12 font-weight: bold;
13 }
14 </style>
15 <p>This is inside the Shadow DOM!</p>
16`;
الشرح
-
عنصر المضيف: هو عنصر DOM عادي يتم إرفاق جذر الظل به (في هذه الحالة
#shadow-host
)۔ -
جذر الظل: هو الجذر لشجرة الظل التي يتم إنشاؤها باستخدام
attachShadow
۔ -
الوضع: في الوضع
open
، يمكن لجافاسكريبت الخارجية الوصول إلى جذر الظل عبرelement.shadowRoot
۔ من ناحية أخرى، لا يسمح الوضعclosed
بالوصول۔
التنسيق داخل Shadow DOM
لـ Shadow DOM
نطاق أنماطه الخاص۔ الأنماط المحددة داخل شجرة الشادو تنطبق فقط على العناصر داخل تلك الشجرة۔ إليك مثالاً:۔
1shadowRoot.innerHTML = `
2 <style>
3 p {
4 color: green;
5 }
6 </style>
7 <p>Scoped style inside Shadow DOM.</p>
8`;
حتى إذا كانت هناك أنماط متضاربة في المستند الرئيسي، فإن الفقرات داخل شجرة الشادو تظل غير متأثرة:
1<style>
2 p {
3 color: red;
4 }
5</style>
6<p>This is in the main DOM.</p>
7<div id="shadow-host"></div>
8<script>
9 // JavaScript code to create the shadow DOM
10</script>
الفقرات داخل Shadow DOM تظل باللون الأخضر، بينما الفقرات الخارجية باللون الأحمر۔
الأحداث داخل Shadow DOM
الأحداث داخل Shadow DOM
تشبه الأحداث العادية في DOM ولكنها قد تتصرف بشكل مختلف من حيث الانتشار بسبب التغليف۔ الأحداث التي تحدث داخل شجرة الشادو يمكن أن تنتقل إلى عنصر المضيف ولكنها لا تنتقل مباشرة إلى المستند بالكامل۔
إليك مثالاً:
1// Add an event listener inside Shadow DOM
2shadowRoot.innerHTML = `
3 <button id="shadow-button">Click Me</button>
4`;
5
6shadowRoot.querySelector('#shadow-button').addEventListener('click', (event) => {
7 console.log('Button clicked inside Shadow DOM');
8});
9
10// Add an event listener on the host
11hostElement.addEventListener('click', (event) => {
12 console.log('Event bubbled to the host element');
13});
عند النقر على الزر، يتم تشغيل كلا المستمعين، مما يظهر سلوك انتقال الأحداث۔
الفتحات: توزيع محتوى Light DOM
تسمح الفتحات بعرض المحتوى من Light DOM داخل Shadow DOM
۔ إليك مثالاً:۔
1shadowRoot.innerHTML = `
2 <slot name="header"></slot>
3 <slot name="content"></slot>
4`;
في المستند الرئيسي، يمكنك القيام بما يلي:
1<div id="shadow-host">
2 <h1 slot="header">Header Content</h1>
3 <p slot="content">Main Content</p>
4</div>
عناصر slot
داخل Shadow DOM
تعرض محتوى Light DOM مع السمة slot
المطابقة۔
الخاتمة
يُعتبر Shadow DOM
أداة أساسية لبناء مكونات ويب قوية وقابلة لإعادة الاستخدام وسهلة الصيانة۔ من خلال تغليف الأنماط والوظائف، يقلل من احتمال حدوث تعارضات ويُبسط إدارة قاعدة الشيفرة۔
يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔