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
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
|
---
title: Syntaxe de définition des valeurs
slug: Web/CSS/Value_definition_syntax
tags:
- CSS
- Débutant
- Reference
translation_of: Web/CSS/Value_definition_syntax
original_slug: Web/CSS/Syntaxe_de_définition_des_valeurs
---
<div>{{CSSRef}}</div>
<p><strong>La syntaxe de définition des valeurs CSS</strong> est une grammaire formelle qui définit les règles pour créer des règles CSS valides. En plus de ces règles, il peut y avoir des contraintes sémantiques (ex. un nombre doit être positif pour une propriété donnée).</p>
<p>La syntaxe de définition décrit les valeurs qui sont permises et les interactions entre ces valeurs. Un composant peut-être un mot-clé, un littéral, une valeur d'un type donné ou une autre propriété CSS.</p>
<h2 id="Les_types_de_composants">Les types de composants</h2>
<h3 id="Les_mots-clés">Les mots-clés</h3>
<h4 id="Les_mots-clés_génériques">Les mots-clés génériques</h4>
<p>Un mot-clé avec une signification prédéfinie, qui peut apparaître littéralement, sans apostrophes ou guillemets (ex. <code>auto</code>, <code>smaller</code> ou <code>ease-in</code>).</p>
<h4 id="inherit_initial_et_unset"><code>inherit</code>, <code>initial</code> et <code>unset</code></h4>
<p>Toutes propriétés CSS acceptent les mots-clés <code>inherit</code>, <code>initial</code> et <code>unset</code> définies par la spécification CSS. Ces mots-clés ne sont pas listés dans la définition de la syntaxe et sont définies implicitement.</p>
<h3 id="Les_littéraux">Les littéraux</h3>
<p>En CSS, quelques caractères peuvent apparaître directement (ex. la barre oblique « / » ou la virgule « , ») et sont utilisés dans les définitions d'une propriété pour séparer ses composantes. La virgule est généralement utilisée pour séparer des valeurs d'une liste ou des paramètres d'une fonction. La barre oblique sépare des composantes sémantiquement différentes mais avec une syntaxe similaire. Généralement, la barre oblique est utilisée dans les propriétés raccourcies pour séparer les composants du même type mais qui sont associés aux différentes propriétés détaillées.</p>
<p>Ces deux symboles sont utilisés tels quels dans la définition d'une valeur.</p>
<h3 id="Les_types_de_donnée">Les types de donnée</h3>
<h4 id="Les_types_de_donnée_simples">Les types de donnée simples</h4>
<p>Certains types de donnée sont utilisés pour différentes propriétés et sont définis pour l'ensemble des valeurs de la spécification. Ce sont les types de donnée simples et sont représentés par leur nom encadré par des chevrons (le type <code>angle</code> est donc représenté par : {{ cssxref("<angle>") }}, {{cssxref("<string>")}}, et ainsi de suite).</p>
<h4 id="Les_types_de_donnée_non_terminaux">Les types de donnée non terminaux</h4>
<p>D'autres types de donnée, moins utilisés, sont appelés types de donné non-terminaux et sont également encadrés par des chevrons.</p>
<p>Les types de donnée non terminaux sont de deux sortes :</p>
<ul>
<li>Les types de donnée qui utilisent le même nom qu'une propriété. Dans ce cas, le type de donnée correspond à l'ensemble des valeurs utilisé par la propriété. Ceux-ci sont généralement utilisés dans les définitions des propriétés raccourcies.</li>
<li>Les types de donnée dont le nom de n'est pas celui d'une propriété. Ces types de donnée sont très proches des types simples. La seule différence est l'emplacement de leur définition : dans ce cas, la définition est généralement très proche de la définition de la propriété qui les utilise.</li>
</ul>
<h2 id="Les_combinateurs">Les combinateurs</h2>
<h3 id="Les_crochets">Les crochets</h3>
<p>Les crochets permettent de regrouper plusieurs entités, combinateurs et multiplicateurs pour les transformer en un seul composant. Cela permet de grouper les composants afin d' appliquer des règles de priorités (supérieures aux règles de précédence).</p>
<pre class="syntaxbox">bold [ thin && <length> ]</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold thin 2vh</code></li>
<li><code>bold 0 thin</code></li>
<li><code>bold thin 3.5em</code></li>
</ul>
<p>Mais ne correspondra pas à :</p>
<ul>
<li><code>thin bold 3em</code> car <code>bold</code> est juxtaposé au composant défini entre les crochets alors qu'il doit apparaître avant.</li>
</ul>
<h3 id="Juxtaposition">Juxtaposition</h3>
<p>Si on place plusieurs mots-clés, littéraux ou types de donnée les uns à la suite des autres, séparés par un ou plusieurs blancs, cela indique que tous les composants sont <strong>obligatoires et doivent apparaître dans cet ordre</strong>.</p>
<pre class="syntaxbox">bold <length> , thin
</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold 1em, thin</code></li>
<li><code>bold 0, thin</code></li>
<li><code>bold 2.5cm, thin</code></li>
<li><code>bold 3vh, thin</code></li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>thin 1em, bold</code> car les entités ne sont pas dans l'ordre indiqué</li>
<li><code>bold 1em thin</code> car les entités sont obligatoires et la virgule qui est un littéral doit être présente</li>
<li><code>bold 0.5ms, thin</code> car les valeurs <code>ms</code> ne sont pas des valeurs du type {{cssxref("<length>")}}</li>
</ul>
<h3 id="Double_esperluette">Double esperluette</h3>
<p>Lorsqu'on sépare deux ou plusieurs composants par une double esperluette, cela signifie que <strong>toutes les entités sont obligatoires mais peuvent apparaître dans n'importe quel ordre</strong>.</p>
<pre class="syntaxbox">bold && <length>
</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold 1em</code></li>
<li><code>bold 0</code></li>
<li><code>2.5cm bold</code></li>
<li><code>3vh bold</code></li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>bold</code> car les deux composants doivent apparaître.</li>
<li><code>bold 1em bold</code> car les deux composants doivent apparaître exactement une fois.</li>
</ul>
<div class="note"><strong>Note :</strong> La juxtaposition est prioritaire par rapport à la double esperluette. <code>bold thin && <length></code> est donc équivalent à <code>[ </code><code>bold thin ] && <length></code>. Il décrit <code>bold thin <length></code> ou <code><length></code><code> bold thin</code> mais pas <code>bold <length></code><code> thin</code>.</div>
<h3 id="Double_barre">Double barre</h3>
<p>Lorsque deux ou plusieurs composants sont séparés par une double barre verticale <code>||</code>. Cela signifie qu'au moins un composant doit <strong>être présent et qu'ils peuvent apparaître dans n'importe quel ordre</strong>. Généralement, ceci est utilisé pour définir les différentes valeurs d'une propriété raccourcie.</p>
<pre class="syntaxbox"><'border-width'> || <'border-style'> || <'border-color'>
</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>1em solid blue</code></li>
<li><code>blue 1em</code></li>
<li><code>solid 1px yellow</code></li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>blue yellow</code> car le composant doit apparaître au plus une fois.</li>
<li><code>bold</code> car le mot-clé n'est pas permis pour aucune valeur de l'entité.</li>
</ul>
<div class="note"><strong>Note :</strong> La double esperluette est prioritaire par rapport à la double barre. <code>bold || thin && <length></code> est équivalent à <code>bold || [ thin && <length> ]</code> qui décrit <code>bold</code>, <code>thin</code> <code><length></code>, <code>bold thin</code> <code><length></code>, ou <code>thin <length> bold</code> mais pas <code><length></code><code> bold thin</code> car bold, s'il est présent doit apparaître avant <code>thin && <length></code>.</div>
<h3 id="La_barre_verticale">La barre verticale</h3>
<p>Lorsqu'on sépare deux entités par une barre verticale. Cela signifie que les différentes options sont exclusives : <strong>seule une des options doit être présente</strong>. Généralement, cela permet de séparer différents mots-clés possible.</p>
<pre class="syntaxbox"><percentage> | <length> | left | center | right | top | bottom</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>3%</code></li>
<li><code>0</code></li>
<li><code>3.5em</code></li>
<li><code>left</code></li>
<li><code>center</code></li>
<li><code>right</code></li>
<li><code>top</code></li>
<li><code>bottom</code></li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>center 3%</code> car seul un seul des composants doit être présent.</li>
<li><code>3em 4.5em</code> car un composant doit être présent au plus une seule fois.</li>
</ul>
<div class="note">
<p><strong>Note :</strong> La double barre verticale est prioritaire par rapport à la simple barre verticale. Ainsi <code>bold | thin || <length></code> est équivalent à <code>bold | [ thin || <length> ]</code> qui décrit <code>bold</code>, <code>thin</code>, <code><length></code>, <code><length> thin</code> ou <code>thin <length> </code>mais pas <code>bold <length></code> car seule entité peut être présente.</p>
</div>
<h2 id="Les_multiplicateurs">Les multiplicateurs</h2>
<p>Un multiplicateur est un signe qui indique nombre de fois qu'une entité peut être répétée. Sans aucun multiplicateur, une entité doit apparaître exactement une fois.</p>
<h3 id="L'astérisque_(*)">L'astérisque (<code>*</code>)</h3>
<p>L'astérisque indique qu'une entité peut apparaître <strong>zéro, une ou plusieurs fois</strong>.</p>
<pre class="syntaxbox">bold smaller*</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold</code></li>
<li><code>bold smaller</code></li>
<li><code>bold smaller smaller</code></li>
<li><code>bold smaller smaller smaller</code> and so on.</li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>smaller</code> car <code>bold</code> est juxtaposé et doit apparaître avant le mot-clé <code>smaller</code>.</li>
</ul>
<h3 id="Plus_()">Plus (<code>+</code>)</h3>
<p>Le multiplicateur « plus » indique que l'entité peut apparaître <strong>une ou plusieurs fois</strong>.</p>
<pre class="syntaxbox">bold smaller+</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold smaller</code></li>
<li><code>bold smaller smaller</code></li>
<li><code>bold smaller smaller smaller</code> and so on.</li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>bold</code> car <code>smaller</code> doit apparaître au moins une fois</li>
<li><code>smaller</code> car <code>bold</code> est juxtaposé et doit apparaitre avant <code>smaller</code>.</li>
</ul>
<h3 id="Le_point_d'interrogation_()">Le point d'interrogation (<code>?</code>)</h3>
<p>Le point d'interrogation indique que l'entité est optionnelle et doit apparaître<strong> zéro ou une fois</strong>.</p>
<pre class="syntaxbox">bold smaller?</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold</code></li>
<li><code>bold smaller</code></li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>bold smaller smaller</code> car <code>smaller</code> doit apparaître au plus une fois</li>
<li><code>smaller</code> car <code>bold</code> est juxtaposé et doit apparaître avant le mot-clé <code>smaller</code> s'il est présent.</li>
</ul>
<h3 id="Les_accolades_(_)">Les accolades (<code>{ }</code>)</h3>
<p>Les accolades encadrent deux entiers A et B, séparés par une virgule et indiquent que l'entité <strong>doit apparaître au moins A fois et au plus B fois</strong>.</p>
<pre class="syntaxbox">bold smaller{1,3}</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold smaller</code></li>
<li><code>bold smaller smaller</code></li>
<li><code>bold smaller smaller smaller</code></li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>bold</code> car <code>smaller</code> doit apparaître au moins une fois.</li>
<li><code>bold smaller smaller smaller smaller</code> car <code>smaller</code> doit apparaître au plus trois fois.</li>
<li><code>smaller</code> car <code>bold</code> est juxtaposé et doit apparaître avant le mot-clé <code>smaller</code>.</li>
</ul>
<h3 id="Dièse_()">Dièse (<code>#</code>)</h3>
<p>Le symbole dièse indique qu'une entité doit être répétée <strong>une ou plusieurs fois et que chaque occurrence est séparée par une virgule</strong>.</p>
<pre class="syntaxbox">bold smaller#</pre>
<p>Cet exemple pourra illustrer les valeurs suivantes :</p>
<ul>
<li><code>bold smaller</code></li>
<li><code>bold smaller, smaller</code></li>
<li><code>bold smaller, smaller, smaller</code> and so on.</li>
</ul>
<p>Mais il ne correspondra pas à :</p>
<ul>
<li><code>bold</code> car <code>smaller</code> doit apparaître au moins une fois.</li>
<li><code>bold smaller smaller smaller</code> car les différentes occurrences de <code>smaller</code> doivent être séparées par des virgules.</li>
<li><code>smaller</code> car <code>bold</code> est juxtaposé et doit apparaître avant toute occurrence du mot-clé <code>smaller</code>.</li>
</ul>
<h3 id="Point_d'exclamation_(!)">Point d'exclamation (<code>!</code>)</h3>
<p>Le multiplicateur <em>point d'exclamation</em> est utilisé après un groupe pour indiquer que celui-ci ne doit produire qu'une seule valeur. Ici, même si la grammaire des éléments du groupe indiquent que tous les composants peuvent être absents, il faut qu'il y ait au moins un composant présent.</p>
<pre class="syntaxbox">[ bold? smaller? ]!
</pre>
<p>Cet exemple correspondra aux valeurs suivantes :</p>
<ul>
<li><code>bold</code></li>
<li><code>smaller</code></li>
<li><code>bold smaller</code></li>
</ul>
<p>Mais pas à :</p>
<ul>
<li>ni <code>bold</code> ni <code>smaller</code>, car il faut au moins l'un des deux.</li>
<li><code>smaller bold</code>, car <code>bold</code> est juxtaposé et doit apparaître avant le mot-clé <code>smaller</code>.</li>
<li><code>bold smaller bold</code>, car <code>bold</code> et <code>smaller</code> doivent apparaître au plus une fois.</li>
</ul>
<h2 id="Récapitulatif">Récapitulatif</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Signe</th>
<th scope="col">Nom</th>
<th scope="col">Description</th>
<th scope="col">Exemple</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="4">Combinateurs</th>
</tr>
<tr>
<td> </td>
<td>Juxtaposition</td>
<td>Les composants sont obligatoires et doivent apparaître dans cet ordre.</td>
<td><code>solid <length></code></td>
</tr>
<tr>
<td><code>&&</code></td>
<td>Double esperluette</td>
<td>Les composants sont obligatoires mais peuvent apparaître dans n'importe quel ordre.</td>
<td><code><length> && <string></code></td>
</tr>
<tr>
<td><code>||</code></td>
<td>Double barre</td>
<td>Au moins un des composants doit être présent et ils peuvent apparaître dans n'importe quel ordre.</td>
<td><code><'border-image-outset'> || <'border-image-slice'></code></td>
</tr>
<tr>
<td><code>|</code></td>
<td>Barre simple</td>
<td>Un et un seul des composants doit être présent.</td>
<td><code>smaller | small | normal | big | bigger</code></td>
</tr>
<tr>
<td><code>[ ]</code></td>
<td>Crochets</td>
<td>Les composants peuvent être groupés pour avoir une priorité supérieure aux règles précédentes.</td>
<td><code>bold [ thin && <length> ]</code></td>
</tr>
<tr>
<th colspan="4">Multiplicateurs</th>
</tr>
<tr>
<td> </td>
<td>Aucun multiplicateur</td>
<td>Exactement 1 fois.</td>
<td><code>solid</code></td>
</tr>
<tr>
<td><code>*</code></td>
<td>Astérisque</td>
<td>0 ou plus.</td>
<td><code>bold smaller*</code></td>
</tr>
<tr>
<td><code>+</code></td>
<td>Signe plus</td>
<td>1 ou plus.</td>
<td><code>bold smaller+</code></td>
</tr>
<tr>
<td><code>?</code></td>
<td>Point d'interrogation</td>
<td>0 ou 1 fois (autrement dit, la valeur est optionnelle<em>)</em></td>
<td><code>bold smaller?</code></td>
</tr>
<tr>
<td><code>{A,B}</code></td>
<td>Accolades</td>
<td>Au moins <code>A</code> fois et au plus <code>B</code> fois.</td>
<td><code>bold smaller{1,3}</code></td>
</tr>
<tr>
<td><code>#</code></td>
<td>Dièse</td>
<td>1 ou plus de fois mais chaque occurrence doit être séparée d'une autre par une virgule.</td>
<td><code>bold smaller#</code></td>
</tr>
</tbody>
</table>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Spécification</th>
<th scope="col">État</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName("CSS3 Values", "#value-defs", "Value definition syntax")}}</td>
<td>{{Spec2('CSS3 Values')}}</td>
<td>Ajout du multiplicateur avec le dièse.</td>
</tr>
<tr>
<td>{{SpecName("CSS2.1", "about.html#value-defs", "Value definition syntax")}}</td>
<td>{{Spec2('CSS2.1')}}</td>
<td>Ajout de la double esperluette.</td>
</tr>
<tr>
<td>{{SpecName("CSS1", "#notation-for-property-values", "Value definition syntax")}}</td>
<td>{{Spec2('CSS1')}}</td>
<td>Définition initiale.</td>
</tr>
</tbody>
</table>
|