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.md
+60-59Lines changed: 60 additions & 59 deletions
Original file line number
Diff line number
Diff line change
@@ -1,21 +1,22 @@
1
-
# Shadow DOM styling
1
+
# Application de style depuis le Shadow DOM
2
2
3
-
Shadow DOM may include both `<style>` and `<link rel="stylesheet" href="…">` tags. In the latter case, stylesheets are HTTP-cached, so they are not redownloaded for multiple components that use same template.
3
+
Le Shadow DOM peut inclure des balises `<style>` and `<link rel="stylesheet" href="…">`. Dans le dernier cas, les feuilles de style sont mises en cache (HTTP-Cached), donc elles ne sont pas retéléchargées pour plusieurs composants qui utilisent le même template.
4
4
5
-
As a general rule, local styles work only inside the shadow tree, and document styles work outside of it. But there are few exceptions.
5
+
En règle générale, les styles locaux fonctionnent au sein de l'arborescence Shadow, et les styles du document fonctionnent en dehors. Mais il y a quelques exceptions.
6
6
7
7
## :host
8
8
9
-
The `:host`selector allows to select the shadow host (the element containing the shadow tree).
9
+
Le sélecteur `:host`permet de sélectionner l'hôte shadow (l'élément contenant l'arborescence shadow).
10
10
11
-
For instance, we're making `<custom-dialog>`element that should be centered. For that we need to style the `<custom-dialog>`element itself.
11
+
Par exemple, nous créeons un élément `<custom-dialog>`qui doit être centré. Pour cela nous avons besoin d'appliquer un style depuis l'élément `<custom-dialog>`lui-même.
12
12
13
-
That's exactly what `:host`does:
13
+
C'est exactement ce que fait `:host` :
14
14
15
15
```html run autorun="no-epub" untrusted height=80
16
16
<templateid="tmpl">
17
17
<style>
18
-
/* the style will be applied from inside to the custom-dialog element */
18
+
/* La règle de style sera appliquée depuis
19
+
l'intérieur de l'élément custom-dialog */
19
20
:host {
20
21
position: fixed;
21
22
left: 50%;
@@ -44,30 +45,29 @@ customElements.define('custom-dialog', class extends HTMLElement {
44
45
45
46
## Cascading
46
47
47
-
The shadow host (`<custom-dialog>`itself) resides in the light DOM, so it's affected by document CSS rules.
48
+
L'hôte shadow (`<custom-dialog>`lui-même) réside dans le light DOM, donc il est affecté par les règles CSS du document.
48
49
49
-
If there's a property styled both in `:host` locally, and in the document, then the document style takes precedence.
50
+
S'il y a une propriété de style locale dans `:host`, et dans le document, alors le style du document prendra le pas.
50
51
51
-
For instance, if in the document we had:
52
+
Par exemple, si nous avons dans le document :
52
53
```html
53
54
<style>
54
55
custom-dialog {
55
56
padding: 0;
56
57
}
57
58
</style>
58
59
```
59
-
...Then the`<custom-dialog>`would be without padding.
60
+
...Alors le`<custom-dialog>`n'aura pas de marge interne.
60
61
61
-
It's very convenient, as we can setup "default" component styles in its `:host` rule, and then easily override them in the document.
62
-
63
-
The exception is when a local property is labelled `!important`, for such properties, local styles take precedence.
62
+
C'est vraiment pratique, comme nous pouvons définir des styles par défaut dans les règles d'`:host`, et les outrepasser dans le document.
64
63
64
+
L'exception est quand une propriété locale est marquée `!important`, pour de telles propriétés, les styles locaux prennent le pas.
65
65
66
66
## :host(selector)
67
67
68
-
Same as`:host`, but applied only if the shadow host matches the `selector`.
68
+
Tout comme`:host`, mais appliqué si l'hôte shadow correspond au `sélecteur`.
69
69
70
-
For example, we'd like to center the `<custom-dialog>`only if it has`centered`attribute:
70
+
Par exemple, nous aimerions centrer le `<custom-dialog>`seulement s'il a l'attribut`centered` :
71
71
72
72
```html run autorun="no-epub" untrusted height=80
73
73
<templateid="tmpl">
@@ -109,17 +109,18 @@ customElements.define('custom-dialog', class extends HTMLElement {
109
109
</custom-dialog>
110
110
```
111
111
112
-
Now the additional centering styles are only applied to the first dialog: `<custom-dialog centered>`.
112
+
Maintenant les styles additionnels concernant le centrage sont uniquement appliqués au premier dialogue : `<custom-dialog centered>`.
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.
113
115
114
-
To summarize, we can use `:host`-family of selectors to style the main element of the component. These styles (unless `!important`) can be overridden by the document.
116
+
## Application de style au contenu "slotted"
115
117
116
-
## Styling slotted content
118
+
Maintenant considèrons la situation avec des slots.
117
119
118
-
Now let's consider the situation with slots.
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".
119
121
120
-
Slotted elements come from light DOM, so they use document styles. Local styles do not affect slotted content.
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 :
121
123
122
-
In the example below, slotted `<span>` is bold, as per document style, but does not take `background` from the local style:
123
124
```html run autorun="no-epub" untrusted height=80
124
125
<style>
125
126
*!*
@@ -148,11 +149,11 @@ customElements.define('user-card', class extends HTMLElement {
148
149
</script>
149
150
```
150
151
151
-
The result is bold, but not red.
152
+
Le résultat est gras, mais pas rouge.
152
153
153
-
If we'd like to styleslotted elements in our component, there are two choices.
154
+
Si nous voulions appliquer du stylesur les éléments "slotted" dans notre composant, il y a deux possibilités.
154
155
155
-
First, we can stylethe `<slot>` itself and rely on CSS inheritance:
156
+
La première, on pourrait appliquer du styleà `<slot>` elle même et compter sur l'héritage du CSS :
156
157
157
158
```html run autorun="no-epub" untrusted height=80
158
159
<user-card>
@@ -176,14 +177,14 @@ customElements.define('user-card', class extends HTMLElement {
176
177
</script>
177
178
```
178
179
179
-
Here `<p>John Smith</p>` becomes bold, because CSS inheritance is in effect between the `<slot>` and its contents. But in CSS itself not all properties are inherited.
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.
180
181
181
-
Another optionis to use`::slotted(selector)`pseudo-class. It matches elements based on two conditions:
182
+
Une autre optionest d'utiliser la pseudo classe `::slotted(selector)`. Elle fait correspondre deux éléments selon deux conditions:
182
183
183
-
1. That'sa slotted element, that comes from the light DOM. Slot name doesn't matter. Just any slotted element, but only the element itself, not its children.
184
-
2. The element matches the `selector`.
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`.
185
186
186
-
In our example, `::slotted(div)` selects exactly `<div slot="username">`, but not its children:
187
+
Dans notre exemple, `::slotted(div)` selectionne uniquement `<div slot="username">`, mais pas ses enfants :
187
188
188
189
```html run autorun="no-epub" untrusted height=80
189
190
<user-card>
@@ -209,54 +210,54 @@ customElements.define('user-card', class extends HTMLElement {
209
210
</script>
210
211
```
211
212
212
-
Please note, `::slotted` selector can't descend any further into the slot. These selectors are invalid:
213
+
Veuillez noter, le sélecteur `::slotted` ne peut pas descendre plus bas dans le slot. Ces sélecteurs sont invalides :
213
214
214
215
```css
215
216
::slotted(divspan) {
216
-
/*our slotted <div> does not match this*/
217
+
/*Notre <div> "slotted" ne correspond pas*/
217
218
}
218
219
219
220
::slotted(div) p {
220
-
/*can't go inside light DOM */
221
+
/*Ne peut pas aller dans le light DOM */
221
222
}
222
223
```
223
224
224
-
Also, `::slotted` can only be used in CSS. We can't use it in `querySelector`.
225
+
Aussi, `::slotted` peut être utilisé uniquement en CSS. On ne peut pas l'utiliser dans `querySelector`.
225
226
226
-
## CSS hooks with custom properties
227
+
## Les Hooks en CSS avec des propriétés personnalisées
227
228
228
-
How do westyleinternal elements of a component from the main document?
229
+
Comment appliquons-nous dustyleaux éléments internes à un composant depuis le document principal ?
229
230
230
-
Selectors like `:host` apply rules to `<custom-dialog>` element or `<user-card>`, but how to styleshadow DOM elements inside them?
231
+
Les sélecteurs comme `:host` appliquent des règles aux éléments `<custom-dialog>` ou `<user-card>`, mais comment appliquons-nous du styleshadow DOM qui leurs sont internes ?
231
232
232
-
There's no selector that can directly affect shadow DOM styles from the document. But just as we expose methods to interact with our component, we can expose CSS variables (custom CSS properties) to style it.
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.
233
234
234
-
**Custom CSS properties exist on all levels, both in light andshadow.**
235
+
**Les propriétésCSS personnalisées existent à tous les niveaux, dans le light et leshadow.**
235
236
236
-
For example, in shadow DOM we can use`--user-card-field-color` CSS variable to stylefields, and the outer document can set its value:
237
+
Par exemple, dans le shadow DOM nous pouvons utiliser la variable CSS `--user-card-field-color` pour appliquer du styleaux champs, et pouvoir définir la valeur dans le document extérieur :
237
238
238
239
```html
239
240
<style>
240
241
.field {
241
242
color: var(--user-card-field-color, black);
242
-
/*if --user-card-field-color is not defined, use black color */
243
+
/*Si --user-card-field-color n'est pas définie, utiliser la couleur noir*/
Then, we can declare this property in the outer document for `<user-card>`:
250
+
Alors, on peut déclarer cette propriété dans le document extérieur pour `<user-card>`:
250
251
251
252
```css
252
253
user-card {
253
254
--user-card-field-color: green;
254
255
}
255
256
```
256
257
257
-
Custom CSS properties pierce through shadow DOM, they are visible everywhere, so the inner `.field`rule will make use of it.
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.
258
259
259
-
Here's the full example:
260
+
Voici l'exemple complet :
260
261
261
262
```html run autorun="no-epub" untrusted height=80
262
263
<style>
@@ -294,26 +295,26 @@ customElements.define('user-card', class extends HTMLElement {
294
295
</user-card>
295
296
```
296
297
298
+
## Résumé
297
299
300
+
Le Shadow DOM peut inclure des styles, tels que `<style>` ou `<link rel="stylesheet">`.
298
301
299
-
## Summary
302
+
Les styles locaux peuvent affectés :
300
303
301
-
Shadow DOM can include styles, such as `<style>` or `<link rel="stylesheet">`.
304
+
- l'arborescence shadow,
305
+
- l'hôte shadow avec `:host` et les pseudo classes `:host()`,
306
+
- les éléments "slotted" (qui proviennet du light DOM), `::slotted(selector)` permet de selectionner les éléments "slotted" en eux-même, mais pas leurs enfants.
302
307
303
-
Local styles can affect:
304
-
- shadow tree,
305
-
- shadow host with `:host` and `:host()` pseudoclasses,
306
-
- slotted elements (coming from light DOM), `::slotted(selector)` allows to select slotted elements themselves, but not their children.
308
+
Les styles du document peuvent affectés :
307
309
308
-
Document styles can affect:
309
-
- shadow host (as it lives in the outer document)
310
-
- slotted elements and their contents (as that's also in the outer document)
310
+
- l'hôte shadow (puisqu'il existe dans le document extérieur)
311
+
- les éléments "slotted" et leurs contenus (puisqu'ils existent aussi dans le document extérieur)
311
312
312
-
When CSS properties conflict, normally document styles have precedence, unless the property is labelled as `!important`. Then local styles have precedence.
313
+
Quand les propriétésCSS entrent en conflit, les styles du document prennent le pas, sauf lorsque la propriété est marquée `!important`. Dans ce cas les styles locaux prennent le pas.
313
314
314
-
CSS custom properties pierce through shadow DOM. They are used as "hooks" to stylethe component:
315
+
Les propriétésCSS personnalisées passent au travers le shadow DOM. Elles sont utilisées comme des "hooks" pour appliquer du styleau composant :
315
316
316
-
1. The component uses a custom CSS property to stylekey elements, such as `var(--component-name-title, <default value>)`.
317
-
2. Component author publishes these properties for developers, they are same important as other public component methods.
318
-
3. When a developer wants to styleatitle, they assign `--component-name-title` CSS property for the shadowhost or above.
319
-
4. Profit!
317
+
1. Le composant utilise une propriété CSS personnalisée pour appliquer du styleaux éléments clés, tels que `var(--component-name-title, <default value>)`.
318
+
2. L'autheur d'un composant publie ces propriétés pour les développeurs, elles sont aussi importantes que les autres méthodes du composant.
319
+
3. Quand un développeur veut appliquer du styleà un titre, ils assignent une propriété CSS `--component-name-title` pour l'hôte shadowou au dessus.
0 commit comments