استفاده از Shadow DOM در پروژهها برای مدرنسازی و جداسازی استایلها انتخاب هوشمندانهای محسوب میشود. با اینحال، مواقعی پیش میآید که بخواهیم در این استایلها تغییراتی ایجاد کنیم، مخصوصاً با توجه به شایع شدن استفاده از @media query ها برای ساخت رابطهای کاربری واکنشگرا. میتوانید استایلهای پیوست شده در Shadow DOM را به طور مستقیم و یا با اسکریپت ویرایش کنید.
یک روش برای تغییرات استایل، استفاده از JavaScript برای ادغام یا تغییر رسانهها در استایلهای Shadow است. به طور خاص، میتوانید به stylesheet های مرتبط دسترسی بگیرید و تغییرات مورد نظر خود را اعمال کنید. اگر شما تجربه استفاده از shadow root را ندارید، ابتدا ضروری است تا با مفاهیم پایهای آن آشنا شوید - مفاهیمی که شامل encapsulation و در عین حال دسترسیها است.
یکی دیگر از روشهای مؤثر، ساخت یک کلاس CSS درون Shadow DOM است که به وسیلهٔ JavaScript یا HTML در صورت لزوم کلاسها را تغییر دهید. این استراتژی، راه حلی ساده و قابل پیاده سازی است که به راحتی کنترل تغییرات را به شما میدهد و در عین حال مختصر و قابل نگهداری است.
راهحل پایدارتر، استفاده از @import
برای بارگذاری استایلهای خارجی در shadow root است. این روش کمتر ترجیح داده میشود چرا که بارگذاریهای اضافی را در پی دارد، اما هنوز هم روشی کاربردی و مؤثر به شمار میآید.
کد نمونه
<style>
.content {
color: black;
}
@media (max-width: 600px) {
.content {
color: blue;
}
}
</style>
<script>
let shadow = document.querySelector('#host').attachShadow({mode: 'open'});
shadow.innerHTML = '<style>
.content { color: black; }
@media (max-width: 600px) {
.content { color: blue; }
}
</style> <div class="content">Sample Content</div>';
</script>
توضیحات خط به خط کد
<style>
تعریف قسمت داخلی استایل که قرار است رسانهها شامل آن باشند..content
استایل کلاس آغازین که در حالت معمول قابل اجراست.@media
استفاده از media query برای اعمال تغییرات در صورت تغییر اندازه صفحه.(max-width: 600px)
شرطی که بررسی میکند صفحه کمتر از 600px پهنا داشته باشد.color: blue;
تغییر رنگ متن به آبی وقتی رسانه condition برقرار باشد.<script>
درون فایل HTML، ایجاد و الحاق shadow root.document.querySelector('#host')
انتخاب عنصر اصلی که نقش host را ایفا میکند.attachShadow({mode: 'open'})
روش پیوست کردن یک shadow root به عنصر انتخاب شده.innerHTML
جایگزینی محتوای داخلی shadow root با استایل و HTML مشخص شده.