Skip to content

Commit 5671e3a

Browse files
committed
docs: translate last section
1 parent ae4daa2 commit 5671e3a

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

8-web-components/6-shadow-dom-style/article-fr.md

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,75 @@ Veuillez noter, le sélecteur `::slotted` ne peut pas descendre plus bas dans le
222222
}
223223
```
224224
225-
Aussi, `::slotted` peut être utilisé uniquement en CSS. On ne peut pas l'utiliser dans `querySelector`.
225+
Aussi, `::slotted` peut être utilisé uniquement en CSS. On ne peut pas l'utiliser dans `querySelector`.
226+
227+
## Les Hooks en CSS avec des propriétés personnalisées
228+
229+
Comment appliquons-nous du style aux éléments internes à un composant depuis le document principal ?
230+
231+
Les sélecteurs comme `:host` appliquent des règles aux éléments `<custom-dialog>` ou `<user-card>`, mais comment appliquons-nous du style shadow DOM qui leurs sont internes ?
232+
233+
Il n'y a pas de sélecteurs qui puisse directement affecté les styles du shadow DOM depuis le document. Mais comme nous venons d'exposer des méthodes pour interagir avec notre composant, nous pouvons exposer des variables CSS (propriétés CSS personnalisées) pour lui appliquer du style.
234+
235+
**Les propriétés CSS personnalisées existent à tous les niveaux, dans le light et le shadow.**
236+
237+
Par exemple, dans le shadow DOM nous pouvons utiliser la variable CSS `--user-card-field-color` pour appliquer du style aux champs, et pouvoir définir la valeur dans le document extérieur :
238+
239+
```html
240+
<style>
241+
.field {
242+
color: var(--user-card-field-color, black);
243+
/* Si --user-card-field-color n'est pas définie, utiliser la couleur noir*/
244+
}
245+
</style>
246+
<div class="field">Name: <slot name="username"></slot></div>
247+
<div class="field">Birthday: <slot name="birthday"></slot></div>
248+
```
249+
250+
Alors, on peut déclarer cette propriété dans le document extérieur pour `<user-card>` :
251+
252+
```css
253+
user-card {
254+
--user-card-field-color: green;
255+
}
256+
```
257+
258+
Les propriétés CSS personnalisées passent au travers du shadow DOM, elles sont visibles depuis n'importe où, donc la règle intérieure `.field` s'en servira.
259+
260+
Voici l'exemple complet :
261+
262+
```html run autorun="no-epub" untrusted height=80
263+
<style>
264+
*!*
265+
user-card {
266+
--user-card-field-color: green;
267+
}
268+
*/!*
269+
</style>
270+
271+
<template id="tmpl">
272+
<style>
273+
*!*
274+
.field {
275+
color: var(--user-card-field-color, black);
276+
}
277+
*/!*
278+
</style>
279+
<div class="field">Name: <slot name="username"></slot></div>
280+
<div class="field">Birthday: <slot name="birthday"></slot></div>
281+
</template>
282+
283+
<script>
284+
customElements.define('user-card', class extends HTMLElement {
285+
connectedCallback() {
286+
this.attachShadow({mode: 'open'});
287+
this.shadowRoot.append(document.getElementById('tmpl').content.cloneNode(true));
288+
}
289+
});
290+
</script>
291+
292+
<user-card>
293+
<span slot="username">John Smith</span>
294+
<span slot="birthday">01.01.2001</span>
295+
</user-card>
296+
```

0 commit comments

Comments
 (0)