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/6-shadow-dom-style/article-fr.md
+112-1Lines changed: 112 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -111,4 +111,115 @@ customElements.define('custom-dialog', class extends HTMLElement {
111
111
112
112
Maintenant les styles additionnels concernant le centrage sont uniquement appliqués au premier dialogue : `<custom-dialog centered>`.
113
113
114
-
Pour résumé, nous pouvons utiliser une famille de sélecteur `:host` pour appliquer des styles à l'élément principal du composant. Ces styles (excepté `!important`) peuvent être outrepasser par le document.
114
+
Pour résumé, nous pouvons utiliser une famille de sélecteur `:host` pour appliquer des styles à l'élément principal du composant. Ces styles (excepté `!important`) peuvent être outrepasser par le document.
115
+
116
+
## Application de style au contenu "slotted"
117
+
118
+
Maintenant considèrons la situation avec des slots.
119
+
120
+
Les éléments "slotted" proviennent du light DOM, donc ils utilisent les styles du document. Les styles locaux n'affectent pas les contenus "slotted".
121
+
122
+
Dans l'exemple ci-dessous, la `<span>` "slotted" est en gras, de par le style du document, mais `background` du style local n'est pas pris en compte :
customElements.define('user-card', class extends HTMLElement {
165
+
connectedCallback() {
166
+
this.attachShadow({mode: 'open'});
167
+
this.shadowRoot.innerHTML = `
168
+
<style>
169
+
*!*
170
+
slot[name="username"] { font-weight: bold; }
171
+
*/!*
172
+
</style>
173
+
Name: <slot name="username"></slot>
174
+
`;
175
+
}
176
+
});
177
+
</script>
178
+
```
179
+
180
+
Ici `<p>John Smith</p>` devient gras, grâce à l'héritage du CSS entre `<slot>` et son contenu. Mais dans le CSS lui-même, toutes les propriétés ne sont pas héritée.
181
+
182
+
Une autre option est d'utiliser la pseudo classe `::slotted(selector)`. Elle fait correspondre deux éléments selon deux conditions :
183
+
184
+
1. Il s'agit d'un élément "slotted", ça vient du light DOM. Le nom du slot n'a pas d'importance. Ça fonctionne pour tout élément "slotted", mais seulement pour l'élément lui-même, pas pour ses enfants.
185
+
2. L'élément correspond au `sélecteur`.
186
+
187
+
Dans notre exemple, `::slotted(div)` selectionne uniquement `<div slot="username">`, mais pas ses enfants :
188
+
189
+
```html run autorun="no-epub" untrusted height=80
190
+
<user-card>
191
+
<div slot="username">
192
+
<div>John Smith</div>
193
+
</div>
194
+
</user-card>
195
+
196
+
<script>
197
+
customElements.define('user-card', class extends HTMLElement {
198
+
connectedCallback() {
199
+
this.attachShadow({mode: 'open'});
200
+
this.shadowRoot.innerHTML = `
201
+
<style>
202
+
*!*
203
+
::slotted(div) { border: 1pxsolidred; }
204
+
*/!*
205
+
</style>
206
+
Name: <slot name="username"></slot>
207
+
`;
208
+
}
209
+
});
210
+
</script>
211
+
```
212
+
213
+
Veuillez noter, le sélecteur `::slotted` ne peut pas descendre plus bas dans le slot. Ces sélecteurs sont invalides :
214
+
215
+
```css
216
+
::slotted(divspan) {
217
+
/* Notre <div> "slotted" ne correspond pas */
218
+
}
219
+
220
+
::slotted(div) p {
221
+
/* Ne peut pas aller dans le light DOM */
222
+
}
223
+
```
224
+
225
+
Aussi, `::slotted` peut être utilisé uniquement en CSS. On ne peut pas l'utiliser dans `querySelector`.
0 commit comments