aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/css/attr()/index.md
blob: 89a7c5fdd16d7f3b71321383d29ae95c259fcf8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
---
title: attr()
slug: Web/CSS/attr()
tags:
  - CSS
  - Fonction
  - Reference
translation_of: Web/CSS/attr()
---
{{CSSRef}}

La fonction **`attr()`** est utilisée afin de récupérer la valeur d'un attribut d'un élément pour l'utiliser dans la feuille de style. Cette fonction peut également être utilisée sur [les pseudo-éléments](/fr/docs/Web/CSS/Pseudo-elements) auquel cas c'est la valeur correspondant à l'élément source qui est renvoyée.

```css
/* Utilisation simple */
attr(data-count);
attr(title);

/* Avec un type */
attr(src url);
attr(data-count number);
attr(data-width px);

/* Avec une valeur par défaut */
attr(data-count number, 0);
attr(src url, "");
attr(data-width px, inherit);
attr(data-something, "default");
```

> **Note :** La fonction `attr()` peut être utilisée sur n'importe quelle propriété CSS. Toutefois, en dehors de {{cssxref("content")}}, la prise en charge des navigateurs est expérimentale. Voir le tableau de compatibilité en fin d'article.

## Syntaxe

### Valeurs

- `attribute-name`
  - : Le nom de l'attribut de l'élément HTML ciblé par la déclaration CSS.
- `<type-or-unit>` {{experimental_inline}}

  - : Un mot-clé indiquant le type de valeur pour l'attribut ou l'unité dans laquelle elle est exprimée. Si la valeur `<type-or-unit>` est invalide pour l'attribut ciblé, l'expression `attr()` sera également considérée comme invalide. Si cette valeur est absente, elle vaudra `string` par défaut. La liste des valeurs valides est :

    <table class="standard-table">
      <thead>
        <tr>
          <th scope="col">Mot-clé</th>
          <th scope="col">Type associé</th>
          <th scope="col">Commentaires</th>
          <th scope="col">Valeur par défaut</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><code>string</code></td>
          <td>{{cssxref("&lt;string&gt;")}}</td>
          <td>
            La valeur de l'attribut est traitée comme une chaîne de caractères. Elle
            n'est pas réanalysée et les caractères sont utilisés tels quels (les
            échappements CSS ne sont pas transformés).
          </td>
          <td>Une chaîne vide.</td>
        </tr>
        <tr>
          <td><code>color</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;color&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un code sur 3 ou 6 chiffres
            ou comme un mot-clé. Elle doit être une valeur
            {{cssxref("&lt;string&gt;")}} valide. Les blancs en début et
            en fin de chaîne sont supprimés.
          </td>
          <td><code>currentColor</code></td>
        </tr>
        <tr>
          <td><code>url</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;uri&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme une chaîne, utilisée dans une
            fonction <code>url()</code>.<br />Une URL relative sera résolue par
            rapport au document original et non par rapport à la feuille de style.
            Les blancs en début et en fin de chaîne sont supprimés.
          </td>
          <td>
            L'URL <code>about:invalid</code> qui pointe vers un document inexistant.
          </td>
        </tr>
        <tr>
          <td><code>integer</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;integer&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un entier
            ({{cssxref("&lt;integer&gt;")}}). Si elle n'est pas valide (si
            ce n'est pass un entier ou s'il sort de l'intervalle autorisé par la
            propriété), ce sera la valeur par défaut qui sera utilisée.<br />Les
            blancs en début et en fin de chaîne sont supprimés.
          </td>
          <td>
            <code>0</code>, ou, si <code>0</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>number</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;number&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un nombre
            ({{cssxref("&lt;number&gt;")}}). Si elle n'est pas valide (si
            ce n'est pas un nombre ou que celui-ci sort de l'intervalle autorisé par
            la propriété), ce sera la valeur par défaut qui sera utilisée.<br />Les
            blancs en début et en fin de chaîne sont supprimés.
          </td>
          <td>
            <code>0</code>, ou, si <code>0</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>length</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;length&gt;")}}</td>
          <td>
            <p>
              La valeur de l'attribut est analysée comme une longueur
              ({{cssxref("&lt;length&gt;")}}) et inclut l'unité (par
              exemple <code>12.5em</code>). Si la valeur n'est pas valide (si ce
              n'est pas une longueur ou que celle-ci sort de l'intervalle autorisé
              par la propriété), ce sera la valeur par défaut qui sera utilisée.<br />Si
              l'unité fournie est une unité relative, <code>attr()</code> calculera
              la valeur absolue correspondante. Les blancs en début et en fin de
              chaîne sont supprimés.
            </p>
          </td>
          <td>
            <code>0</code>, ou, si <code>0</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td>
            <code>em</code>, <code>ex</code>, <code>px</code>, <code>rem</code>,
            <code>vw</code>, <code>vh</code>, <code>vmin</code>, <code>vmax</code>,
            <code>mm</code>, <code>cm</code>, <code>in</code>, <code>pt</code>, or
            <code>pc</code> {{experimental_inline}}
          </td>
          <td>{{cssxref("&lt;length&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un nombre
            ({{cssxref("&lt;number&gt;")}}) (il n'y a pas d'unité) et
            interprétée comme une longueur
            ({{cssxref("&lt;length&gt;")}}) grâce à l'unité passée comme
            argument. Si la valeur n'est pas valide (ce n'est pas un nombre ou
            celui-ci sort de l'intervalle autorisé par la propriété), ce sera la
            valeur par défaut qui sera utilisée.<br />Si l'unité indiquée est une
            unité de longueur relative, <code>attr()</code> calculera la valeur
            absolue correspondante.<br />Les blancs en début et en fin de chaîne
            sont supprimés.
          </td>
          <td>
            <code>0</code>, ou, si <code>0</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>angle</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;angle&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un angle
            ({{cssxref("&lt;angle&gt;")}}) et inclut l'unité (par exemple
            <code>30.5deg</code>). Si la valeur n'est pas valide (si ce n'est pas un
            angle ou si la valeur sort de l'intervalle autorisé par la propriété
            CSS), ce sera la valeur par défaut qui sera utilisée.<br />Les blancs en
            début et en fin de chaîne sont supprimés.
          </td>
          <td>
            <code>0deg</code>, ou, si <code>0deg</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td>
            <code>deg</code>, <code>grad</code>,
            <code>rad</code> {{experimental_inline}}
          </td>
          <td>{{cssxref("&lt;angle&gt;")}}</td>
          <td>
            <p>
              La valeur de l'attribut est analysée comme un nombre
              ({{cssxref("&lt;number&gt;")}}) (il n'y a pas d'unité) et
              est interprétée comme un angle ({{cssxref("&lt;angle&gt;")}})
              avec l'unité indiquée en paramètre. Si la vlaeur n'est pas vliade (ce
              n'est pas un nombre ou celui-ci sort de l'intervalle autorisé par la
              propriété), ce sera la valeur par défaut qui sera utilisée.<br />Les
              blancs en début et en fin de chaîne sont supprimés.
            </p>
          </td>
          <td>
            <code>0deg</code>, ou, si <code>0deg</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>time</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;time&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme une durée
            ({{cssxref("&lt;time&gt;")}}) et inclut l'unité (par exemple
            <code>30.5ms</code>). Si elle n'est pas valide (la valeur n'est pas une
            durée ou n'est pas comprise dans l'intervalle autorisée), ce sera la
            valeur par défaut qui sera utilisée.<br />Les blancs en début et en fin
            de chaîne sont supprimés.
          </td>
          <td>
            <code>0s</code>, ou, si <code>0s</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>s</code>, <code>ms</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;time&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un nombre
            ({{cssxref("&lt;number&gt;")}}) sans unité (par exemple
            <code>12.5</code>) et est interprétée comme une durée
            ({{cssxref("&lt;time&gt;")}}) grâce à l'unité passée en
            paramètre. Si la valeur n'est pas valide (ce n'est pas un nombre ou
            celui-ci n'est pas compris dans l'intervalle autorisé), ce sera la
            valeur par défaut qui sera utilisée.<br />Les blancs en début et en fin
            de chaîne sont supprimés.
          </td>
          <td>
            <code>0s</code>, ou, si <code>0s</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>frequency</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;frequency&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme une fréquence
            ({{cssxref("&lt;frequency&gt;")}}) et inclut l'unité (par
            exemple <code>30.5kHz</code>). Si elle n'est pas valide (ce n'est pas
            une fréquence ou celle-ci n'est pas comprise dans l'intervalle
            autorisé), ce sera la valeur par défaut qui sera utilisée. Les blancs en
            début et en fin de chaîne sont supprimés.
          </td>
          <td>
            <code>0Hz</code>, ou, si <code>0Hz</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td>
            <code>Hz</code>, <code>kHz</code> {{experimental_inline}}
          </td>
          <td>{{cssxref("&lt;frequency&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un nombre
            ({{cssxref("&lt;number&gt;")}}) sans unité (par exemple
            <code>12.5</code>) et est interprétée comme une fréquence grâce à
            l'unité indiquée. Si la valeur n'est pas valide (ce n'est pas un nombre
            ou celui-ci n'est pas compris dans l'intervalle autorisé), ce sera la
            valeur par défaut qui sera utilisée.<br />Les blancs en début et en fin
            de chaîne sont supprimés.
          </td>
          <td>
            <code>0Hz</code>, ou, si <code>0Hz</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
        <tr>
          <td><code>%</code> {{experimental_inline}}</td>
          <td>{{cssxref("&lt;percentage&gt;")}}</td>
          <td>
            La valeur de l'attribut est analysée comme un nombre
            ({{cssxref("&lt;number&gt;")}}) sans unité (par exemple
            <code>12.5</code>) et est interprétée comme un pourcentage
            ({{cssxref("&lt;percentage&gt;")}}). Si elle n'est pas valide
            (ce n'est pas un nombre ou celui-ci n'est pas compris dans l'intervalle
            autorisé par la propriété), ce sera la valeur par défaut qui sera
            utilisée.<br />Si la valeur fournie est utilisée comme une longueur,
            <code>attr()</code> calcule la longueur absolue correspondante.<br />Les
            blancs en début et en fin de chaîne sont supprimés.
          </td>
          <td>
            <code>0%</code>, ou, si <code>0%</code> n'est pas valide, la valeur
            minimale de la propriété.
          </td>
        </tr>
      </tbody>
    </table>

- `<fallback>` {{experimental_inline}}
  - : La valeur qui sera utilisée si l'attribut est absent ou contient une valeur invalide. La valeur indiquée avec ce paramètre doit être valide et ne doit pas contenir une autre expression `attr()`. Si `attr()` n'est pas le seul composant de la valeur d'une propriété, la valeur `<fallback>` doit correspondre au type défini par `<type-or-unit>`. Si ce paramètre n'est pas utilisé, le moteur de rendu utilisera la valeur par défaut définie par `<type-or-unit>`.

### Syntaxe formelle

{{csssyntax}}

## Exemples

### Utiliser la propriété `content`

#### HTML

```html
<p data-toto="coucou">world</p>
```

#### CSS

```css
[data-toto]::before {
  content: attr(data-toto) " ";
}
```

#### Résultat

{{EmbedLiveSample("Utiliser_la_propriété_content", "100%", "50")}}

### Valeur `<color>`

{{SeeCompatTable}}

#### HTML

```html
<div class="background" data-background="lime"></div>
```

#### CSS

```css
html,
body,
.background {
  height: 100vh;
}
```

```css
.background {
  background-color: red;
}

.background[data-background] {
  background-color: attr(data-background color, red);
}
```

#### Résultat

{{EmbedLiveSample("Valeur_&lt;color&gt;", "100%", "50")}}

## Spécifications

| Spécification                                                            | État                             | Commentaires                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------------------------ | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| {{SpecName("CSS4 Values", "#attr-notation", "attr()")}} | {{Spec2("CSS4 Values")}} | Aucune modification.                                                                                                                                                                                                                                                                                              |
| {{SpecName('CSS3 Values', '#attr-notation', 'attr()')}} | {{Spec2('CSS3 Values')}} | Ajout de deux paramètres optionnels. La fonction peut être utilisée sur toutes les propriétés et renvoyer des valeurs qui ne sont pas des chaînes de caractères. Ces modifications sont expérimentales et pourront être abandonnées pour la recommandation si la prise en charge des navigateurs est trop faible. |
| {{SpecName('CSS2.1', 'generate.html#x18', 'attr()')}} | {{Spec2('CSS2.1')}}         | Utilisation limitée à {{cssxref("content")}}, la fonction renvoie toujours une chaîne de caractères ({{cssxref("&lt;string&gt;")}}).                                                                                                                                                             |

## Compatibilité des navigateurs

{{Compat("css.types.attr")}}

## Voir aussi

- [Sélecteur d'attribut](/fr/docs/Web/CSS/Attribute_selectors)
- [Attributs HTML `data-*`](/fr/docs/Web/HTML/Global_attributes/data-*)
- [Attributs SVG `data-*`](/fr/docs/Web/SVG/Attribute/data-*)