Skip to content

Commit 8cc60df

Browse files
committed
سایه => shadow
1 parent 5208942 commit 8cc60df

1 file changed

Lines changed: 25 additions & 25 deletions

File tree

8-web-components/3-shadow-dom/article.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# DOM سایه
22

3-
دلیل استفاده از DOM سایه جداسازی یا کپسوله کردن است.DOM سایه به یک المنت اجازه می دهد تا سند DOM "سایه‌ی" خود را داشته باشد، که به طور کامل از DOM سند اصلی جداسازی شده است، سند DOM سایه می‌تواند قوانین خاص خود را داشته باشد مثل style محلی مربوط به خود.
3+
دلیل استفاده از shadow DOM جداسازی یا کپسوله کردن است. shadow DOM به یک المنت اجازه می دهد تا سند DOM نهان(shadow) خود را داشته باشد، که به طور کامل از DOM سند اصلی جداسازی شده است، سند shadow DOM می‌تواند قوانین خاص خود را داشته باشد مثل style محلی مربوط به خود.
44

55
## DOM سایه های داخلی (Built-in)
66

@@ -35,22 +35,22 @@ input::-webkit-slider-runnable-track {
3535
<input type="range" />
3636
```
3737

38-
فراموش نکنید که `pseudo` یک ویژگی غیر استاندارد است. مرورگر‌ها در ابتدا به پیاده‌سازی آزمایشی کنترل‌های داخلی با استفاده از المان‌های DOM کردند بعد از گذشت زمان DOM سایه استاندارد سازی شد تا توسعه دهندگان بتوانند المان‌های کنترلی خود را بسازند.
38+
فراموش نکنید که `pseudo` یک ویژگی غیر استاندارد است. مرورگر‌ها در ابتدا به پیاده‌سازی آزمایشی کنترل‌های داخلی با استفاده از المان‌های DOM کردند بعد از گذشت زمان shadow DOM استاندارد سازی شد تا توسعه دهندگان بتوانند المان‌های کنترلی خود را بسازند.
3939

40-
در ادامه از DOM سایه استاندارد استفاده خواهیم کرد که در [DOM spec](https://dom.spec.whatwg.org/#shadow-trees) توضیحات کاملی از آن موجود است.
40+
در ادامه از shadow DOM استاندارد استفاده خواهیم کرد که در [DOM spec](https://dom.spec.whatwg.org/#shadow-trees) توضیحات کاملی از آن موجود است.
4141

4242
## درخت سایه (Shadow Tree)
4343

4444
یک المان DOM می‌تواند دو نوع زیرمجموعه DOM داشته باشد:
4545

46-
1. درخت روشن -- یک زیر مجموعه معمولی از DOM است که از زیرمجموعه HTML ساخته شده است. تمام مثال‌های که در فصول قبل دیدیم از نوع روشن بودند.
47-
2. درخت سایه -- یک زیرمجموعه پنهان از DOM است که در HTML نمایش داده نمی‌شود و از چشم مخفی است.
46+
1. light tree -- یک زیر مجموعه معمولی از DOM است که از زیرمجموعه HTML ساخته شده است. تمام مثال‌های که در فصول قبل دیدیم از نوع روشن بودند.
47+
2. shadow tree -- یک زیرمجموعه پنهان از DOM است که در HTML نمایش داده نمی‌شود و از چشم مخفی است.
4848

49-
اگر المانی هر دو زیرمجموعه را داشت مرورگر فقط قسمت تاریک را نمایش خواهد داد. اما می توانیم نوعی ترکیب بندی بین درختان سایه و روشن ایجاد کنیم. جزیات بیشتر را در <info:slots-composition> خواهیم خواند.
49+
اگر المانی هر دو زیرمجموعه را داشت مرورگر فقط قسمت shadow را نمایش خواهد داد. اما می توانیم نوعی ترکیب بندی بین shadow trees و light ایجاد کنیم. جزیات بیشتر را در <info:slots-composition> خواهیم خواند.
5050

51-
می‌توان از درخت سایه برای پنهان سازی المان‌های داخلی استفاده کرد و از استایل دهی محلی برای المان جدید استفاده کرد.
51+
می‌توان از shadow tree برای پنهان سازی المان‌های داخلی استفاده کرد و از استایل دهی محلی برای المان جدید استفاده کرد.
5252

53-
برای مثال`<show-hello>` المان‌های داخلی خود را در درخت سایه پنهان می‌کند و مقدار نمایش داده شده را به عنوان ویژگی دریافت می‌کند.
53+
برای مثال`<show-hello>` المان‌های داخلی خود را در shadow tree پنهان می‌کند و مقدار نمایش داده شده را به عنوان ویژگی دریافت می‌کند.
5454

5555
```html run autorun height=60
5656
<script>
@@ -71,19 +71,19 @@ customElements.define('show-hello', class extends HTMLElement {
7171

7272
![](shadow-dom-say-hello.png)
7373

74-
در ابتدا `elem.attachShadow({mode: …})` یک درخت سایه ایجاد می‌کند.
74+
در ابتدا `elem.attachShadow({mode: …})` یک shadow tree ایجاد می‌کند.
7575

7676
ما در این جا ۲ محدودیت داریم:
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 داشته باشند.
7979

8080
گزینه `mode` سطح جداسازی (encapsulation) را مشخص می‌کند. و باید یکی از دو مقدار زیر را داشته باشد:
81-
- `"open"` -- قابل دسترس باشد `elem.shadowRoot` که باعث می‌شود سایه تحت.
81+
- `"open"` -- قابل دسترس باشد `elem.shadowRoot` که باعث می‌شود shadow توسط.
8282

83-
هر کدی قابلیت دسترسی به درخت سایه المان `elem` را دارد.
83+
هر کدی قابلیت دسترسی به shadow tree المان `elem` را دارد.
8484
- `"closed"` -- است `null` همیشه `elem.shadowRoot`.
8585

86-
فقط با استفاده از مقدار(refrance) براگردانده شده از `attachShadow`(که احتمالا یک کلاس پنهان داخلی دارد) می‌توانیم به DOM سایه دسترسی پیدا کنیم. اما در مورد درخت‌های سایه بومی مرورگر مثل `<input type="range">` که بسته(`"closed"`) هستند٬ هیچ راهی برای دسترسی به این درخت‌های سایه وجود ندارد.
86+
فقط با استفاده از مقدار(refrance) براگردانده شده از `attachShadow`(که احتمالا یک کلاس پنهان داخلی دارد) می‌توانیم به shadow DOM دسترسی پیدا کنیم. اما در مورد shadow trees بومی مرورگر مثل `<input type="range">` که بسته(`"closed"`) هستند٬ هیچ راهی برای دسترسی به این shadow trees وجود ندارد.
8787

8888
با [shadow root](https://dom.spec.whatwg.org/#shadowroot) که خروجی `attachShadow` است می‌توان مثل یک المان معمولی برخورد کرد و از `innerHTML` یا `append` برای پر کردن آن استفاده کرد.
8989

@@ -96,17 +96,17 @@ alert(elem.shadowRoot.host === elem); // true
9696

9797
## جداسازی (Encapsulation)
9898

99-
دسترسی DOM سایه به طول کامل از سند اصلی گرفته شده است.
99+
دسترسی shadow DOM به طول کامل از سند اصلی گرفته شده است.
100100

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) در آن عمل نمی‌کنند.
103103

104104
به مثال زیر توجه کنید:
105105

106106
```html run untrusted height=40
107107
<style>
108108
*!*
109-
/* اجرا نمی‌شود (۱) #elem استایل سند بر درخت تاریک در
109+
/* اجرا نمی‌شود (۱) #elem استایل سند بر shadow tree در
110110
*/!*
111111
p { color: red; }
112112
</style>
@@ -116,24 +116,24 @@ alert(elem.shadowRoot.host === elem); // true
116116
<script>
117117
elem.attachShadow({mode: 'open'});
118118
*!*
119-
// درخت تاریک استایل خود را دارد (۲)
119+
// shadow tree استایل خود را دارد (۲)
120120
*/!*
121121
elem.shadowRoot.innerHTML = `
122122
<style> p { font-weight: bold; } </style>
123123
<p>Hello, John!</p>
124124
`;
125125
126126
*!*
127-
// (۳) ‌های داخل درخت تاریک قابل دسترسی است qury فقط از <p>
127+
// (۳) ‌های داخل shadow tree قابل دسترسی است qury فقط از <p>
128128
*/!*
129129
alert(document.querySelectorAll('p').length); // 0
130130
alert(elem.shadowRoot.querySelectorAll('p').length); // 1
131131
</script>
132132
```
133133

134-
1. استایل از سند اصلی هیچ تاثیری روی درخت تاریک ندارد.
134+
1. استایل از سند اصلی هیچ تاثیری روی shadow tree ندارد.
135135
2. اما استایل از داخل به خوبی کار می‌کند.
136-
3. برای دریافت المان‌های داخل درخت تاریک باید از داخل درخت تاریک این query‌ها را اجرا کنیم.
136+
3. برای دریافت المان‌های داخل shadow tree باید از داخل shadow tree این query‌ها را اجرا کنیم.
137137

138138
## منابع
139139

@@ -144,14 +144,14 @@ alert(elem.shadowRoot.host === elem); // true
144144

145145
## خلاصه
146146

147-
سایه DOM روشی است برای ایجاد یک المان محلی برای DOM.
147+
DOM روشی است برای ایجاد یک المان محلی برای shadow DOM.
148148

149149
1. `shadowRoot = elem.attachShadow({mode: open|closed})` --یک دام سایه برای `elem` می‌سازد. اگر "mode="open باشد این المان با ویژگی `elem.shadowRoot` قابل دسترسی است.
150150
2. با استفاده از ویژگی `innerHtml` یا ویژگی های دیگر DOM موجود در `shadowRoot` می‌توان اجزای جدید به آن اضافه کرد.
151151

152152
المان‌های DOM سایه:
153153
- داری فضای مجزای خود هستند.
154154
- از انتخابگر‌های جاوا اسکریپت موجد در DOM اصلی مثل `querySelector` پنهان هستند.
155-
- از استایل‌های موجود در درخت تاریک خود استفاده می‌کنند و نه از استایل موجود در DOM اصلی.
155+
- از استایل‌های موجود در shadow tree خود استفاده می‌کنند و نه از استایل موجود در DOM اصلی.
156156

157-
اگر المانی در صفحه دارای DOM سایه بود، مرورگر به صورت پیشفرض المان‌های موجود در درخت تاریک را نمایش می‌دهد و از المان‌های DOM روشن یا همان زیرمجموعه‌های HTML معمول صرف نظر می‌کند. در فصل <info:slots-composition> در مورد ترکیب این دو بیشتر مطالعه می‌کنیم.
157+
اگر المانی در صفحه دارای DOM سایه بود، مرورگر به صورت پیشفرض المان‌های موجود در shadow tree را نمایش می‌دهد و از المان‌های DOM روشن یا همان زیرمجموعه‌های HTML معمول صرف نظر می‌کند. در فصل <info:slots-composition> در مورد ترکیب این دو بیشتر مطالعه می‌کنیم.

0 commit comments

Comments
 (0)