You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 8-web-components/3-shadow-dom/article.md
+25-25Lines changed: 25 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# DOM سایه
2
2
3
-
دلیل استفاده از DOM سایه جداسازی یا کپسوله کردن است.DOM سایه به یک المنت اجازه می دهد تا سند DOM "سایهی" خود را داشته باشد، که به طور کامل از DOM سند اصلی جداسازی شده است، سند DOM سایه میتواند قوانین خاص خود را داشته باشد مثل style محلی مربوط به خود.
3
+
دلیل استفاده از shadow DOM جداسازی یا کپسوله کردن است. shadow DOM به یک المنت اجازه می دهد تا سند DOM نهان(shadow) خود را داشته باشد، که به طور کامل از DOM سند اصلی جداسازی شده است، سند shadow DOM میتواند قوانین خاص خود را داشته باشد مثل style محلی مربوط به خود.
فراموش نکنید که `pseudo` یک ویژگی غیر استاندارد است. مرورگرها در ابتدا به پیادهسازی آزمایشی کنترلهای داخلی با استفاده از المانهای DOM کردند بعد از گذشت زمان DOM سایه استاندارد سازی شد تا توسعه دهندگان بتوانند المانهای کنترلی خود را بسازند.
38
+
فراموش نکنید که `pseudo` یک ویژگی غیر استاندارد است. مرورگرها در ابتدا به پیادهسازی آزمایشی کنترلهای داخلی با استفاده از المانهای DOM کردند بعد از گذشت زمان shadow DOM استاندارد سازی شد تا توسعه دهندگان بتوانند المانهای کنترلی خود را بسازند.
39
39
40
-
در ادامه از DOM سایه استاندارد استفاده خواهیم کرد که در [DOM spec](https://dom.spec.whatwg.org/#shadow-trees) توضیحات کاملی از آن موجود است.
40
+
در ادامه از shadow DOM استاندارد استفاده خواهیم کرد که در [DOM spec](https://dom.spec.whatwg.org/#shadow-trees) توضیحات کاملی از آن موجود است.
41
41
42
42
## درخت سایه (Shadow Tree)
43
43
44
44
یک المان DOM میتواند دو نوع زیرمجموعه DOM داشته باشد:
45
45
46
-
1.درخت روشن -- یک زیر مجموعه معمولی از DOM است که از زیرمجموعه HTML ساخته شده است. تمام مثالهای که در فصول قبل دیدیم از نوع روشن بودند.
47
-
2.درخت سایه -- یک زیرمجموعه پنهان از DOM است که در HTML نمایش داده نمیشود و از چشم مخفی است.
46
+
1.light tree -- یک زیر مجموعه معمولی از DOM است که از زیرمجموعه HTML ساخته شده است. تمام مثالهای که در فصول قبل دیدیم از نوع روشن بودند.
47
+
2.shadow tree -- یک زیرمجموعه پنهان از DOM است که در HTML نمایش داده نمیشود و از چشم مخفی است.
48
48
49
-
اگر المانی هر دو زیرمجموعه را داشت مرورگر فقط قسمت تاریک را نمایش خواهد داد. اما می توانیم نوعی ترکیب بندی بین درختان سایه و روشن ایجاد کنیم. جزیات بیشتر را در <info:slots-composition> خواهیم خواند.
49
+
اگر المانی هر دو زیرمجموعه را داشت مرورگر فقط قسمت shadow را نمایش خواهد داد. اما می توانیم نوعی ترکیب بندی بین shadow trees و light ایجاد کنیم. جزیات بیشتر را در <info:slots-composition> خواهیم خواند.
50
50
51
-
میتوان از درخت سایه برای پنهان سازی المانهای داخلی استفاده کرد و از استایل دهی محلی برای المان جدید استفاده کرد.
51
+
میتوان از shadow tree برای پنهان سازی المانهای داخلی استفاده کرد و از استایل دهی محلی برای المان جدید استفاده کرد.
52
52
53
-
برای مثال`<show-hello>` المانهای داخلی خود را در درخت سایه پنهان میکند و مقدار نمایش داده شده را به عنوان ویژگی دریافت میکند.
53
+
برای مثال`<show-hello>` المانهای داخلی خود را در shadow tree پنهان میکند و مقدار نمایش داده شده را به عنوان ویژگی دریافت میکند.
54
54
55
55
```html run autorun height=60
56
56
<script>
@@ -71,19 +71,19 @@ customElements.define('show-hello', class extends HTMLElement {
71
71
72
72

73
73
74
-
در ابتدا `elem.attachShadow({mode: …})` یک درخت سایه ایجاد میکند.
74
+
در ابتدا `elem.attachShadow({mode: …})` یک shadow tree ایجاد میکند.
75
75
76
76
ما در این جا ۲ محدودیت داریم:
77
-
1. هر المان در صفحه فقط میتواند یک سایه داشته باشد.
78
-
2. المان `elem` باید یک المان سفارشی سازی شده(custom) یا یکی از المان های "article", "aside", "blockquote", "body", "div", "footer", "h1..h6", "header", "main" "nav", "p", "section", "span" باشد. دیگر المان ها مثل `<img>` نمیتوانند سایه داشته باشند.
77
+
1. هر المان در صفحه فقط میتواند یک shadow داشته باشد.
78
+
2. المان `elem` باید یک المان سفارشی سازی شده(custom) یا یکی از المان های "article", "aside", "blockquote", "body", "div", "footer", "h1..h6", "header", "main" "nav", "p", "section", "span" باشد. دیگر المان ها مثل `<img>` نمیتوانند shadow داشته باشند.
79
79
80
80
گزینه `mode` سطح جداسازی (encapsulation) را مشخص میکند. و باید یکی از دو مقدار زیر را داشته باشد:
81
-
-`"open"` -- قابل دسترس باشد `elem.shadowRoot` که باعث میشود سایه تحت.
81
+
-`"open"` -- قابل دسترس باشد `elem.shadowRoot` که باعث میشود shadow توسط.
82
82
83
-
هر کدی قابلیت دسترسی به درخت سایه المان `elem` را دارد.
83
+
هر کدی قابلیت دسترسی به shadow tree المان `elem` را دارد.
84
84
-`"closed"` -- است `null` همیشه `elem.shadowRoot`.
85
85
86
-
فقط با استفاده از مقدار(refrance) براگردانده شده از `attachShadow`(که احتمالا یک کلاس پنهان داخلی دارد) میتوانیم به DOM سایه دسترسی پیدا کنیم. اما در مورد درختهای سایه بومی مرورگر مثل `<input type="range">` که بسته(`"closed"`) هستند٬ هیچ راهی برای دسترسی به این درختهای سایه وجود ندارد.
86
+
فقط با استفاده از مقدار(refrance) براگردانده شده از `attachShadow`(که احتمالا یک کلاس پنهان داخلی دارد) میتوانیم به shadow DOM دسترسی پیدا کنیم. اما در مورد shadow trees بومی مرورگر مثل `<input type="range">` که بسته(`"closed"`) هستند٬ هیچ راهی برای دسترسی به این shadow trees وجود ندارد.
87
87
88
88
با [shadow root](https://dom.spec.whatwg.org/#shadowroot) که خروجی `attachShadow` است میتوان مثل یک المان معمولی برخورد کرد و از `innerHTML` یا `append` برای پر کردن آن استفاده کرد.
دسترسی DOM سایه به طول کامل از سند اصلی گرفته شده است.
99
+
دسترسی shadow DOM به طول کامل از سند اصلی گرفته شده است.
100
100
101
-
1. المانهای DOM سایه توسط `querySelector` های DOM روشن قابل شناسایی نیستنتد. به طور دقیقتر المانهای داخلی DOM سایه ممکن است id هایی یکسانی با المانهای DOM روشن داشته باشند اما این idها باید در درخت سایه یکتا باشند.
102
-
2. سند DOM سایه stylesheet مجزای مخصوص به خود را دارد. قوانین style خارجی (light DOM) در آن عمل نمیکنند.
101
+
1. المانهای shadow DOM توسط `querySelector` های DOM روشن قابل شناسایی نیستنتد. به طور دقیقتر المانهای داخلی shadow DOM ممکن است id هایی یکسانی با المانهای DOM روشن داشته باشند اما این idها باید در shadow tree یکتا باشند.
102
+
2. سند stylesheet, DOM shadow مجزای مخصوص به خود را دارد. قوانین style خارجی (light DOM) در آن عمل نمیکنند.
103
103
104
104
به مثال زیر توجه کنید:
105
105
106
106
```html run untrusted height=40
107
107
<style>
108
108
*!*
109
-
/* اجرا نمیشود (۱) #elem استایل سند بر درخت تاریک در
109
+
/* اجرا نمیشود (۱) #elem استایل سند بر shadow tree در
سایه DOM روشی است برای ایجاد یک المان محلی برای DOM.
147
+
DOM روشی است برای ایجاد یک المان محلی برای shadow DOM.
148
148
149
149
1.`shadowRoot = elem.attachShadow({mode: open|closed})` --یک دام سایه برای `elem` میسازد. اگر "mode="open باشد این المان با ویژگی `elem.shadowRoot` قابل دسترسی است.
150
150
2. با استفاده از ویژگی `innerHtml` یا ویژگی های دیگر DOM موجود در `shadowRoot` میتوان اجزای جدید به آن اضافه کرد.
151
151
152
152
المانهای DOM سایه:
153
153
- داری فضای مجزای خود هستند.
154
154
- از انتخابگرهای جاوا اسکریپت موجد در DOM اصلی مثل `querySelector` پنهان هستند.
155
-
- از استایلهای موجود در درخت تاریک خود استفاده میکنند و نه از استایل موجود در DOM اصلی.
155
+
- از استایلهای موجود در shadow tree خود استفاده میکنند و نه از استایل موجود در DOM اصلی.
156
156
157
-
اگر المانی در صفحه دارای DOM سایه بود، مرورگر به صورت پیشفرض المانهای موجود در درخت تاریک را نمایش میدهد و از المانهای DOM روشن یا همان زیرمجموعههای HTML معمول صرف نظر میکند. در فصل <info:slots-composition> در مورد ترکیب این دو بیشتر مطالعه میکنیم.
157
+
اگر المانی در صفحه دارای DOM سایه بود، مرورگر به صورت پیشفرض المانهای موجود در shadow tree را نمایش میدهد و از المانهای DOM روشن یا همان زیرمجموعههای HTML معمول صرف نظر میکند. در فصل <info:slots-composition> در مورد ترکیب این دو بیشتر مطالعه میکنیم.
0 commit comments