@@ -131,60 +131,6 @@ Defining Custom Properties: the '--*' family of properties</h2>
131
131
It's expected that the CSS Extensions spec [[CSS-EXTENSIONS]]
132
132
will expand on these use-cases and make them easier to do.
133
133
134
- <h3 id='syntax'>
135
- Custom Property Value Syntax</h3>
136
-
137
- The allowed syntax for <a>custom properties</a> is extremely permissive.
138
- The <<declaration-value>> production matches <em> any</em> sequence of one or more tokens,
139
- so long as the sequence does not contain
140
- <<bad-string-token>> ,
141
- <<bad-url-token>> ,
142
- unmatched <<)-token>> , <<]-token>> , or <<}-token>> ,
143
- or top-level <<semicolon-token>> tokens or <<delim-token>> tokens with a value of "!".
144
-
145
- In addition, if the value of a <a>custom property</a> contains a ''var()'' reference,
146
- the ''var()'' reference must be valid according to the specified ''var()'' grammar.
147
- If not, the <a>custom property</a> is invalid and must be ignored.
148
-
149
- Note: This definition,
150
- along with the general CSS syntax rules,
151
- implies that a custom property value never includes an unmatched quote or bracket,
152
- and so cannot have any effect on larger syntax constructs,
153
- like the enclosing style rule,
154
- when reserialized.
155
-
156
- Note: Custom properties can contain a trailing ''!important'' ,
157
- but this is automatically removed from the property's value by the CSS parser,
158
- and makes the custom property "important" in the CSS cascade.
159
- In other words, the prohibition on top-level "!" characters
160
- does not prevent ''!important'' from being used,
161
- as the ''!important'' is removed before syntax checking happens.
162
-
163
- <div class='example'>
164
- For example, the following is a valid custom property:
165
-
166
- <pre>
167
- --foo: if(x > 5) this.width = 10;
168
- </pre>
169
-
170
- While this value is obviously useless as a <em> variable</em> ,
171
- as it would be invalid in any normal property,
172
- it might be read and acted on by JavaScript.
173
- </div>
174
-
175
- The values of custom properties,
176
- and the values of ''var()'' functions substituted into custom properties,
177
- are <em> case-sensitive</em> ,
178
- and must be preserved in their original author-given casing.
179
- (Many CSS values are <a>ASCII case-insensitive</a> ,
180
- which user agents can take advantage of by "canonicalizing" them into a single casing,
181
- but that isn't allowed for custom properties.)
182
-
183
- The initial value of a <a>custom property</a> is an empty value;
184
- that is, nothing at all.
185
- This initial value has a special interaction with the ''var()'' notation,
186
- which is explained in the section defining ''var()'' .
187
-
188
134
Custom properties are ordinary properties,
189
135
so they can be declared on any element,
190
136
are resolved with the normal inheritance and cascade rules,
@@ -262,6 +208,55 @@ Custom Property Value Syntax</h3>
262
208
to make maintaining the translations simpler.
263
209
</div>
264
210
211
+ <h3 id='syntax'>
212
+ Custom Property Value Syntax</h3>
213
+
214
+ The allowed syntax for <a>custom properties</a> is extremely permissive.
215
+ The <<declaration-value>> production matches <em> any</em> sequence of one or more tokens,
216
+ so long as the sequence does not contain
217
+ <<bad-string-token>> ,
218
+ <<bad-url-token>> ,
219
+ unmatched <<)-token>> , <<]-token>> , or <<}-token>> ,
220
+ or top-level <<semicolon-token>> tokens or <<delim-token>> tokens with a value of "!".
221
+
222
+ In addition, if the value of a <a>custom property</a> contains a ''var()'' reference,
223
+ the ''var()'' reference must be valid according to the specified ''var()'' grammar.
224
+ If not, the <a>custom property</a> is invalid and must be ignored.
225
+
226
+ Note: This definition,
227
+ along with the general CSS syntax rules,
228
+ implies that a custom property value never includes an unmatched quote or bracket,
229
+ and so cannot have any effect on larger syntax constructs,
230
+ like the enclosing style rule,
231
+ when reserialized.
232
+
233
+ Note: Custom properties can contain a trailing ''!important'' ,
234
+ but this is automatically removed from the property's value by the CSS parser,
235
+ and makes the custom property "important" in the CSS cascade.
236
+ In other words, the prohibition on top-level "!" characters
237
+ does not prevent ''!important'' from being used,
238
+ as the ''!important'' is removed before syntax checking happens.
239
+
240
+ <div class='example'>
241
+ For example, the following is a valid custom property:
242
+
243
+ <pre>
244
+ --foo: if(x > 5) this.width = 10;
245
+ </pre>
246
+
247
+ While this value is obviously useless as a <em> variable</em> ,
248
+ as it would be invalid in any normal property,
249
+ it might be read and acted on by JavaScript.
250
+ </div>
251
+
252
+ The values of custom properties,
253
+ and the values of ''var()'' functions substituted into custom properties,
254
+ are <em> case-sensitive</em> ,
255
+ and must be preserved in their original author-given casing.
256
+ (Many CSS values are <a>ASCII case-insensitive</a> ,
257
+ which user agents can take advantage of by "canonicalizing" them into a single casing,
258
+ but that isn't allowed for custom properties.)
259
+
265
260
<h3 id='guaranteed-invalid'>
266
261
Guaranteed-Invalid Values</h3>
267
262
@@ -272,7 +267,7 @@ Guaranteed-Invalid Values</h3>
272
267
273
268
This value serializes as the empty string,
274
269
but actually writing an empty value into a custom property,
275
- like ''--foo: ;'' ,
270
+ like <nobr> ''--foo: ;'' </nobr> ,
276
271
is a valid (empty) value,
277
272
not the [=guaranteed-invalid value=] .
278
273
If, for whatever reason,
@@ -337,8 +332,9 @@ Resolving Dependency Cycles</h3>
337
332
}
338
333
</pre>
339
334
340
- Both '--one' and '--two' now compute to their initial value,
341
- rather than lengths.
335
+ Both '--one' and '--two' are now [=cyclic at computed-value time=] ,
336
+ and compute to the [=guaranteed-invalid value=]
337
+ rather than than lengths.
342
338
</div>
343
339
344
340
It is important to note that
@@ -354,12 +350,14 @@ Resolving Dependency Cycles</h3>
354
350
these custom properties are <strong> not</strong> cyclic,
355
351
and all define valid variables:
356
352
357
- <pre>
358
- <one><two><three /></two></one>
359
- one { --foo: 10px; }
360
- two { --bar: calc(var(--foo) + 10px); }
361
- three { --foo: calc(var(--bar) + 10px); }
362
- </pre>
353
+ <xmp highlight=markup>
354
+ <one><two><three /></two></one>
355
+ <style>
356
+ one { --foo: 10px; }
357
+ two { --bar: calc(var(--foo) + 10px); }
358
+ three { --foo: calc(var(--bar) + 10px); }
359
+ </style>
360
+ </xmp>
363
361
364
362
The <one> element defines a value for '--foo' .
365
363
The <two> element inherits this value,
@@ -441,7 +439,8 @@ Using Cascading Variables: the ''var()'' notation</h2>
441
439
The first argument to the function is the name of the <a>custom property</a> to be substituted.
442
440
The second argument to the function, if provided,
443
441
is a fallback value,
444
- which is used as the substitution value when the referenced <a>custom property</a> is invalid.
442
+ which is used as the substitution value when the value of the referenced <a>custom property</a>
443
+ is the [=guaranteed-invalid value=] .
445
444
446
445
Note: The syntax of the fallback, like that of <a>custom properties</a> , allows commas.
447
446
For example, ''var(--foo, red, blue)'' defines a fallback of ''red, blue'' ;
@@ -544,7 +543,7 @@ Using Cascading Variables: the ''var()'' notation</h2>
544
543
''var()'' functions are <a lt="substitute a var()">substituted</a> at computed-value time.
545
544
If a declaration,
546
545
once all ''var()'' functions are substituted in,
547
- is invalid ,
546
+ does not match its declared grammar ,
548
547
the declaration is <a>invalid at computed-value time</a> .
549
548
550
549
<div class='example'>
@@ -572,14 +571,14 @@ Using Cascading Variables: the ''var()'' notation</h2>
572
571
<h3 id='invalid-variables'>
573
572
Invalid Variables</h3>
574
573
575
- When a <a>custom property</a> has its initial value,
574
+ When a <a>custom property’s </a> value is the [=guaranteed-invalid value=] ,
576
575
''var()'' functions cannot use it for substitution.
577
576
Attempting to do so
578
577
makes the declaration <a>invalid at computed-value time</a> ,
579
578
unless a valid fallback is specified.
580
579
581
580
A declaration can be <dfn export>invalid at computed-value time</dfn>
582
- if it contains a ''var()'' that references a <a>custom property</a> with its initial value,
581
+ if it contains a ''var()'' that references a <a>custom property</a> with the [=guaranteed-invalid value=] ,
583
582
as explained above,
584
583
or if it uses a valid <a>custom property</a> ,
585
584
but the property value,
@@ -764,16 +763,15 @@ Changes since the May 6 2014 Last Call Working Draft</h2>
764
763
<h2 id="acks">
765
764
Acknowledgments</h2>
766
765
767
- <p>
768
- Many thanks to several people in the CSS Working Group for keeping the dream of variables alive over the years,
769
- particularly Daniel Glazman and David Hyatt.
770
- Thanks to multiple people on the mailing list for helping contribute to the development of this incarnation of variables,
771
- particularly
772
- Brian Kardell,
773
- David Baron,
774
- François Remy,
775
- Roland Steiner,
776
- and Shane Stephens.
766
+ Many thanks to several people in the CSS Working Group for keeping the dream of variables alive over the years,
767
+ particularly Daniel Glazman and David Hyatt.
768
+ Thanks to multiple people on the mailing list for helping contribute to the development of this incarnation of variables,
769
+ particularly
770
+ Brian Kardell,
771
+ David Baron,
772
+ François Remy,
773
+ Roland Steiner,
774
+ and Shane Stephens.
777
775
778
776
Privacy and Security Considerations {#priv-sec}
779
777
===============================================
0 commit comments