css3-transitions/Overview.src.html

Mon, 11 Feb 2013 14:11:00 -0800

author
L. David Baron <dbaron@dbaron.org>
date
Mon, 11 Feb 2013 14:11:00 -0800
changeset 7431
92247480ee75
parent 7423
802063087266
child 7459
8c3f1f081e76
permissions
-rw-r--r--

[css3-transitions] Update previous version link for tomorrow's publication.

dino@936 1 <!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN'
dino@936 2 'http://www.w3.org/TR/html4/strict.dtd'>
dino@936 3
dino@936 4 <html lang="en">
dino@936 5 <head>
simon@2533 6 <title>CSS Transitions</title>
dbaron@5319 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
fantasai@4174 8 <link rel="stylesheet" type="text/css" href="../default.css">
dino@936 9 <style type="text/css">
simon@4394 10 table.animatable-properties {
dino@936 11 border-collapse: collapse;
dino@936 12 }
simon@4394 13 table.animatable-properties td {
dino@936 14 padding: 0.2em 1em;
dino@936 15 border: 1px solid black;
dino@936 16 }
dbaron@6736 17 div.prod { margin: 1em 2em; }
dino@936 18 </style>
simon@4394 19 <link rel="stylesheet" type="text/css" href="http://www.w3.org/StyleSheets/TR/W3C-ED.css">
dino@936 20 </head>
dino@936 21
dino@936 22 <body>
dino@936 23
dino@936 24 <div class="head">
dino@936 25 <!--logo-->
dino@936 26
simon@2533 27 <h1>CSS Transitions</h1>
dino@936 28
dino@936 29 <h2 class="no-num no-toc">[LONGSTATUS] [DATE]</h2>
dino@936 30 <dl>
dino@936 31 <dt>This version:
dino@936 32 <dd>
bert@1102 33 <a href="[VERSION]">
bert@1102 34 http://dev.w3.org/csswg/css3-transitions/</a>
bert@5386 35 <!--http://www.w3.org/TR/[YEAR]/WD-[SHORTNAME]-[CDATE]/-->
dino@936 36 <dt>Latest version:
dbaron@5320 37 <dd><a href="http://www.w3.org/TR/css3-transitions/">
bert@1102 38 [LATEST]</a>
dbaron@4580 39 <dt>Editor's draft:
dbaron@4580 40 <dd><a href="http://dev.w3.org/csswg/[SHORTNAME]/">http://dev.w3.org/csswg/[SHORTNAME]/</a>
bert@1102 41 <dt>Previous version:
dbaron@7431 42 <dd><a href="http://www.w3.org/TR/2013/WD-css3-transitions-20130212/">http://www.w3.org/TR/2013/WD-css3-transitions-20130212/</a>
dino@936 43 <dt id="editors-list">Editors:
dino@936 44 <dd><a href="mailto:dino@apple.com">Dean Jackson</a> (<a
dino@936 45 href="http://www.apple.com/">Apple Inc</a>)
dino@936 46 <dd><a href="mailto:hyatt@apple.com">David Hyatt</a> (<a
dino@936 47 href="http://www.apple.com/">Apple Inc</a>)
dino@936 48 <dd><a href="mailto:cmarrin@apple.com">Chris Marrin</a> (<a
dino@936 49 href="http://www.apple.com/">Apple Inc</a>)
dbaron@4580 50 <dd class=vcard><a class=fn href="http://dbaron.org/">L. David Baron</a> (<a
dbaron@5320 51 class=org href="http://www.mozilla.org/">Mozilla</a>)
dbaron@4528 52
dbaron@4528 53 <dt>Issues list:
dbaron@4528 54 <dd><a href="https://www.w3.org/Bugs/Public/buglist.cgi?query_format=advanced&amp;product=CSS&amp;component=Transitions&amp;resolution=---&amp;cmdtype=doit">in Bugzilla</a>
dbaron@4528 55
dbaron@5229 56 <dt>Discussion:</dt>
dbaron@5229 57 <dd><a href="http://lists.w3.org/Archives/Public/www-style/">www-style@w3.org</a> with subject line &ldquo;<kbd>[[SHORTNAME]] <var>&hellip; message topic &hellip;</var></kbd>&rdquo;
dbaron@5229 58
dbaron@4528 59 <dt>Test suite:
dbaron@4528 60 <dd>none yet
dino@936 61 </dl>
dino@936 62
dino@936 63 <!--copyright-->
dino@936 64
dino@936 65 <hr title="Separator for header">
dino@936 66 </div>
dino@936 67
dino@936 68 <h2 class="no-num no-toc" id="abstract">Abstract</h2>
dino@936 69
dino@936 70 <p>CSS Transitions allows property changes in CSS values to occur smoothly
dino@936 71 over a specified duration.
dino@936 72
dino@936 73 <h2 class="no-num no-toc" id="status">Status of this document</h2>
dino@936 74 <!--status-->
dino@936 75
dino@1531 76 <p>
dino@1531 77 The <a href="ChangeLog">list of changes made to this specification</a> is
dino@1531 78 available.
dino@1531 79 </p>
dino@936 80
dbaron@7411 81 <h2 class="no-num no-toc" id="contents">Table of Contents</h2>
dino@936 82 <!--toc-->
dino@936 83
dino@936 84
dino@936 85 <h2 id="introduction">Introduction</h2>
dino@936 86
simon@1766 87 <p><em>This section is not normative.</em>
dino@936 88 <p>
dino@936 89 This document introduces new CSS features to enable <em>implicit transitions</em>, which describe how CSS properties can be made to change smoothly from one value to another over a given duration.
dino@936 90 </p>
simon@1766 91
dbaron@5333 92 <h2 id="transitions"><a id="transitions-">Transitions</a></h2>
dino@936 93 <p>
dino@936 94 Normally when the value of a CSS property changes, the rendered result is instantly updated, with the affected elements immediately changing from the old property value to the new property value. This section describes a way to specify transitions using new CSS properties. These properties are used to animate smoothly from the old state to the new state over time.
dino@936 95 </p>
dino@936 96 <p>
dbaron@7301 97 For example, suppose that transitions of one second have been defined on the 'left' and
dbaron@7301 98 'background-color' properties. The following diagram illustrates the effect of updating those properties on an element, in this case moving it to the right and changing the background from red to blue. This assumes other transition parameters still have their default values.
dino@936 99 </p>
dino@936 100 <div class="figure">
dino@936 101 <img src="transition1.png" alt="">
dino@936 102 </div>
dino@936 103 <p class="caption">
dbaron@7301 104 Transitions of 'left' and 'background-color'
dino@936 105 </p>
dino@936 106 <p>
dino@936 107 Transitions are a presentational effect. The computed value of a property transitions over time from the old value to the new value. Therefore if a script queries the computed style of a property as it is transitioning, it will see an intermediate value that represents the current animated value of the property.
dino@936 108 </p>
dino@936 109 <p>
dino@936 110 Only animatable CSS properties can be transitioned. See the table at the end of this document for a list
dino@936 111 of properties that are animatable.
dino@936 112 </p>
dino@936 113 <p>
dino@936 114 The transition for a property is defined using a number of new properties. For example:
dino@936 115 </p>
dino@936 116 <div class="example">
dino@936 117 <p style="display:none">
dino@936 118 Example(s):
dino@936 119 </p>
dino@936 120 <pre>
dino@936 121 div {
dino@936 122 transition-property: opacity;
dino@936 123 transition-duration: 2s;
dino@936 124 }
dbaron@7301 125 </pre>The above example defines a transition on the 'opacity' property that, when a new value is assigned to it, will cause a smooth change between the old value and the new value over a period of two seconds.
dino@936 126 </div>
dino@936 127 <p>
dino@936 128 Each of the transition properties accepts a comma-separated list, allowing multiple transitions to be defined, each acting on a different property. In this case, the individual transitions take their parameters from the same index in all the lists. For example:
dino@936 129 </p>
dino@936 130 <div class="example">
dino@936 131 <p style="display:none">
dino@936 132 Example(s):
dino@936 133 </p>
dino@936 134 <pre>
dino@936 135 div {
dino@936 136 transition-property: opacity, left;
dino@936 137 transition-duration: 2s, 4s;
dino@936 138 }
dino@936 139
dbaron@7301 140 </pre>This will cause the 'opacity' property to transition over a period of two seconds and the left property to transition over a period of four seconds.
dino@1469 141 </div>
dbaron@5231 142
dbaron@5247 143 <p id="list-matching">
dbaron@5231 144 In the case where the lists of values in transition properties
dbaron@5231 145 do not have the same length, the length of the
dbaron@5231 146 'transition-property' list determines the number of items in
dbaron@5231 147 each list examined when starting transitions. The lists are
dbaron@5231 148 matched up from the first value: excess values at the end are
dbaron@5231 149 not used. If one of the other properties doesn't have enough
dbaron@5231 150 comma-separated values to match the number of values of
dbaron@5231 151 'transition-property', the UA must calculate its used value by
dbaron@5231 152 repeating the list of values until there are enough. This
dbaron@5231 153 truncation or repetition does not affect the computed value.
dbaron@5231 154 <span class="note">
dbaron@5231 155 Note: This is analogous to the behavior of the 'background-*'
dbaron@5231 156 properties, with 'background-image' analogous to
dbaron@5231 157 'transition-property'.
dbaron@5231 158 </span>
dbaron@1542 159 </p>
dbaron@5231 160
dino@1469 161 <div class="example">
dino@1469 162 <p style="display:none">
dino@1469 163 Example(s):
dino@1469 164 </p>
dino@1469 165 <pre>
dino@1469 166 div {
dino@1469 167 transition-property: opacity, left, top, width;
dino@1469 168 transition-duration: 2s, 1s;
dino@1469 169 }
dbaron@7301 170 </pre>The above example defines a transition on the 'opacity' property of 2 seconds duration, a
dbaron@7301 171 transition on the 'left' property of 1
dbaron@7301 172 second duration, a transition on the 'top' property of 2 seconds duration and a
dbaron@7301 173 transition on the 'width' property of 1
dino@1469 174 second duration.
dino@1469 175
dino@1469 176 </div>
dbaron@7313 177
dbaron@7313 178 <p>
dbaron@7313 179 While authors can use transitions to create dynamically changing content,
dbaron@7313 180 dynamically changing content can lead to seizures in some users.
dbaron@7313 181 For information on how to avoid content that can lead to seizures, see
dbaron@7313 182 <a href="http://www.w3.org/TR/WCAG20/#seizure">Guideline 2.3:
dbaron@7313 183 Seizures:
dbaron@7313 184 Do not design content in a way that is known to cause seizures</a>
dbaron@7313 185 ([[WCAG20]]).
dbaron@7313 186 </p>
dbaron@7313 187
dino@1469 188 <!-- ======================================================================================================= -->
jackalmage@7183 189 <h3 id="transition-property-property"><a id="the-transition-property-property-">
dbaron@7301 190 The 'transition-property' Property
fantasai@5332 191 </a></h3>
dino@936 192 <p>
dbaron@7301 193 The 'transition-property' property specifies the name of the CSS property to which the transition is applied.
dino@936 194 </p>
dino@936 195 <table class="propdef">
dino@936 196 <tbody>
dino@936 197 <tr>
dino@936 198 <td>
dino@936 199 <em>Name:</em>
dino@936 200 </td>
dino@936 201 <td>
dino@936 202 <dfn id="transition-property">transition-property</dfn>
dino@936 203 </td>
dino@936 204 </tr>
dino@936 205 <tr>
dino@936 206 <td>
dino@936 207 <em>Value:</em>
dino@936 208 </td>
dino@936 209 <td>
dbaron@6739 210 none | <span>&lt;single-transition-property&gt;</span> [ ',' <span>&lt;single-transition-property&gt;</span> ]*
dino@936 211 </td>
dino@936 212 </tr>
dino@936 213 <tr>
dino@936 214 <td>
dino@936 215 <em>Initial:</em>
dino@936 216 </td>
dino@936 217 <td>
dino@936 218 all
dino@936 219 </td>
dino@936 220 </tr>
dino@936 221 <tr>
dino@936 222 <td>
dbaron@7405 223 <em>Applies to:</em>
dino@936 224 </td>
dino@936 225 <td>
dino@1469 226 all elements, :before and :after pseudo elements
dino@936 227 </td>
dino@936 228 </tr>
dino@936 229 <tr>
dino@936 230 <td>
dino@936 231 <em>Inherited:</em>
dino@936 232 </td>
dino@936 233 <td>
dino@936 234 no
dino@936 235 </td>
dino@936 236 </tr>
dino@936 237 <tr>
dino@936 238 <td>
dbaron@6734 239 <em>Animatable:</em>
dbaron@6734 240 </td>
dbaron@6734 241 <td>
dbaron@6734 242 no
dbaron@6734 243 </td>
dbaron@6734 244 </tr>
dbaron@6734 245 <tr>
dbaron@6734 246 <td>
dino@936 247 <em>Percentages:</em>
dino@936 248 </td>
dino@936 249 <td>
dino@936 250 N/A
dino@936 251 </td>
dino@936 252 </tr>
dino@936 253 <tr>
dino@936 254 <td>
dino@936 255 <em>Media:</em>
dino@936 256 </td>
dino@936 257 <td>
dino@936 258 visual
dino@936 259 </td>
dino@936 260 </tr>
dino@936 261 <tr>
dino@936 262 <td>
dino@936 263 <em>Computed value:</em>
dino@936 264 </td>
dino@936 265 <td>
dino@936 266 Same as specified value.
dino@936 267 </td>
dino@936 268 </tr>
dbaron@6734 269 <tr>
dbaron@6734 270 <td>
dbaron@6734 271 <em>Canonical order:</em>
dbaron@6734 272 </td>
dbaron@6734 273 <td>
dbaron@6734 274 <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@6734 275 </td>
dbaron@6734 276 </tr>
dino@936 277 </tbody>
dino@936 278 </table>
dino@936 279
dbaron@6736 280 <div class="prod">
dbaron@6739 281 <dfn id="single-transition-property">&lt;single-transition-property&gt;</dfn> = all | &lt;IDENT&gt;
dbaron@6736 282 </div>
dbaron@6736 283
dino@936 284 <p>
dbaron@7300 285 A value of ''none'' means that no property will transition.
dbaron@4537 286 Otherwise, a list of properties to be transitioned, or the
dbaron@7300 287 keyword ''all'' which indicates that all properties are to be
dbaron@4537 288 transitioned, is given.
dino@936 289 </p>
dino@936 290
dbaron@1543 291 <p>
dbaron@1543 292 If one of the identifiers listed is not a recognized property
dbaron@1543 293 name or is not an animatable property, the implementation must
dbaron@1543 294 still start transitions on the animatable properties in the
dbaron@1543 295 list using the duration, delay, and timing function at their
dbaron@1543 296 respective indices in the lists for 'transition-duration',
dbaron@1543 297 'transition-delay', and 'transition-timing-function'. In other
dbaron@1543 298 words, unrecognized or non-animatable properties must be kept in
dbaron@1543 299 the list to preserve the matching of indices.
dbaron@1543 300 </p>
dbaron@7298 301
dbaron@7298 302 <p>
dbaron@7298 303 The keywords ''none'', ''inherit'', and ''initial'' are not
dbaron@7298 304 permitted as items within a list of more that one identifier;
dbaron@7298 305 any list that uses them is syntactically invalid.
dbaron@7298 306 In other words, the &lt;IDENT&gt; production in
dbaron@7298 307 <span>&lt;single-transition-property&gt;</span> matches any
dbaron@7298 308 identifier other than these three keywords.
dbaron@1543 309 </p>
dbaron@7298 310
dbaron@1543 311 <p>
dbaron@7300 312 For the keyword ''all'', or if one of the identifiers listed is a
dbaron@4537 313 shorthand property, implementations must start transitions for
dbaron@4537 314 any of its longhand sub-properties that are animatable (or, for
dbaron@7300 315 ''all'', all animatable properties), using the duration, delay,
dbaron@1543 316 and timing function at the index corresponding to the shorthand.
dbaron@1543 317 </p>
dbaron@1543 318 <p>
dbaron@1543 319 If a property is specified multiple times in the value of
dbaron@4537 320 'transition-property' (either on its own, via a shorthand that
dbaron@7300 321 contains it, or via the ''all'' value), then the transition that
dbaron@4537 322 starts uses the duration, delay, and timing function at the
dbaron@4537 323 index corresponding to the <em>last</em> item in the value of
dbaron@4543 324 'transition-property' that calls for animating that property.
dbaron@4537 325 </p>
dbaron@4537 326 <p class="note">
dbaron@7300 327 Note: The ''all'' value and 'all' shorthand
dbaron@7300 328 property work in similar ways, so the
dbaron@7300 329 ''all'' value is just like a shorthand that
dbaron@4537 330 covers all properties.
dbaron@1543 331 </p>
dbaron@1543 332
dbaron@1543 333 <!-- ======================================================================================================= -->
jackalmage@7183 334 <h3 id="transition-duration-property"><a id="the-transition-duration-property-">
dbaron@7301 335 The 'transition-duration' Property
fantasai@5332 336 </a></h3>
dino@936 337 <p>
dbaron@7301 338 The 'transition-duration' property defines the length of time that a transition takes.
dino@936 339 </p>
dino@936 340 <table class="propdef">
dino@936 341 <tbody>
dino@936 342 <tr>
dino@936 343 <td>
dino@936 344 <em>Name:</em>
dino@936 345 </td>
dino@936 346 <td>
dino@936 347 <dfn id="transition-duration">transition-duration</dfn>
dino@936 348 </td>
dino@936 349 </tr>
dino@936 350 <tr>
dino@936 351 <td>
dino@936 352 <em>Value:</em>
dino@936 353 </td>
dino@936 354 <td>
dbaron@6739 355 <span>&lt;time&gt;</span> [, <span>&lt;time&gt;</span>]*
dino@936 356 </td>
dino@936 357 </tr>
dino@936 358 <tr>
dino@936 359 <td>
dino@936 360 <em>Initial:</em>
dino@936 361 </td>
dino@936 362 <td>
dino@3189 363 0s
dino@936 364 </td>
dino@936 365 </tr>
dino@936 366 <tr>
dino@936 367 <td>
dbaron@7405 368 <em>Applies to:</em>
dino@936 369 </td>
dino@936 370 <td>
dino@1469 371 all elements, :before and :after pseudo elements
dino@936 372 </td>
dino@936 373 </tr>
dino@936 374 <tr>
dino@936 375 <td>
dino@936 376 <em>Inherited:</em>
dino@936 377 </td>
dino@936 378 <td>
dino@936 379 no
dino@936 380 </td>
dino@936 381 </tr>
dino@936 382 <tr>
dino@936 383 <td>
dbaron@6734 384 <em>Animatable:</em>
dbaron@6734 385 </td>
dbaron@6734 386 <td>
dbaron@6734 387 no
dbaron@6734 388 </td>
dbaron@6734 389 </tr>
dbaron@6734 390 <tr>
dbaron@6734 391 <td>
dino@936 392 <em>Percentages:</em>
dino@936 393 </td>
dino@936 394 <td>
dino@936 395 N/A
dino@936 396 </td>
dino@936 397 </tr>
dino@936 398 <tr>
dino@936 399 <td>
dino@936 400 <em>Media:</em>
dino@936 401 </td>
dino@936 402 <td>
dino@1469 403 interactive
dino@936 404 </td>
dino@936 405 </tr>
dino@936 406 <tr>
dino@936 407 <td>
dino@936 408 <em>Computed value:</em>
dino@936 409 </td>
dino@936 410 <td>
dino@936 411 Same as specified value.
dino@936 412 </td>
dino@936 413 </tr>
dbaron@6734 414 <tr>
dbaron@6734 415 <td>
dbaron@6734 416 <em>Canonical order:</em>
dbaron@6734 417 </td>
dbaron@6734 418 <td>
dbaron@6734 419 <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@6734 420 </td>
dbaron@6734 421 </tr>
dino@936 422 </tbody>
dino@936 423 </table>
dino@936 424 <p>
dbaron@7301 425 This property specifies how long the transition from the old value to the new value should take. By default the value is ''0s'', meaning that the transition is immediate (i.e. there will be no animation). A negative value for 'transition-duration' renders the declaration invalid.
dino@936 426 </p>
dino@936 427
dino@936 428 <!-- =======================================================================================================
dino@936 429 -->
dino@936 430
jackalmage@7183 431 <h3 id="transition-timing-function-property"><a id="transition-timing-function_tag">
dbaron@7301 432 The 'transition-timing-function' Property
fantasai@5332 433 </a></h3>
dino@936 434 <p>
dbaron@7301 435 The 'transition-timing-function' property
dino@936 436 describes how the intermediate values used during a transition will be
dino@936 437 calculated. It allows for a transition to change speed over its
dino@936 438 duration. These effects are commonly called <em>easing</em> functions.
dino@936 439 In either case, a mathematical function that provides a smooth curve is
dino@936 440 used.
dino@936 441 </p>
dino@936 442 <p>
dino@1907 443 Timing functions are either defined as a stepping function or
dino@1907 444 a <a
dino@936 445 href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves">cubic
dbaron@4550 446 B&eacute;zier curve</a>.
dbaron@6223 447 The timing function takes as its input
dbaron@6223 448 the current elapsed percentage of the transition duration
dbaron@6223 449 and outputs the percentage of the way the transition is
dbaron@6223 450 from its start value to its end value.
dbaron@6223 451 How this output is used is defined by
dbaron@6223 452 the <a href="#animatable-types">interpolation rules</a>
dbaron@6223 453 for the value type.
dino@1907 454 </p>
dino@1907 455 <p>
dino@1907 456 A <a href="http://en.wikipedia.org/wiki/Step_function">stepping</a>
dino@1907 457 function is defined by a number that divides the domain of operation
dino@1907 458 into equally sized intervals. Each subsequent interval is a equal step
dino@1907 459 closer to the goal state. The function also specifies whether the
dino@1907 460 change in output percentage happens at the start or end of the
dino@1907 461 interval (in other words, if 0% on the input percentage is the point
dino@1907 462 of initial change).
dino@1907 463 </p>
dino@1907 464 <div class="figure">
dino@1907 465 <img src="step.png" alt="The step timing function splits
dino@1907 466 the function domain into a number of disjoint straight line
dino@1907 467 segments. steps(1, start) is a function whose
dino@1907 468 output value is 1 for all input values. steps(1, end) is a function whose
dino@1907 469 output value is 0 for all input values less than 1, and output
dino@1907 470 is 1 for the input value of 1. steps(3, start) is a function that
dino@1907 471 divides the input domain into three segments, each 1/3 in length,
dino@1907 472 and 1/3 above the previous segment, with the first segment starting
dino@1907 473 at 1/3. steps(3, end) is a function that
dino@1907 474 divides the input domain into three segments, each 1/3 in length,
dino@1907 475 and 1/3 above the previous segment, with the first segment starting
dino@1907 476 at 0.">
dino@1907 477 </div>
dino@1907 478 <p class="caption">
dino@1907 479 Step timing functions
dino@1907 480 </p>
dino@1907 481 <p>
dino@1907 482 A <a
dino@1907 483 href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves">cubic
dbaron@4550 484 B&eacute;zier curve</a> is defined by four control points, P<sub>0</sub>
dino@936 485 through P<sub>3</sub> (see Figure 1). P<sub>0</sub> and P<sub>3</sub>
dbaron@7301 486 are always set to (0,0) and (1,1). The 'transition-timing-function' property is used
dino@936 487 to specify the values for points P<sub>1</sub> and P<sub>2</sub>. These
dino@936 488 can be set to preset values using the keywords listed below, or can be
dbaron@7301 489 set to specific values using the ''cubic-bezier'' function.
dbaron@7301 490 In the ''cubic-bezier'' function, P<sub>1</sub> and
dino@936 491 P<sub>2</sub> are each specified by both an X and Y value.
dino@936 492 </p>
dino@936 493 <div class="figure">
dbaron@4550 494 <img src="TimingFunction.png" alt="The B&eacute;zier timing function is a
dino@1907 495 smooth curve from point P0 = (0,0) to point P3 = (1,1). The
dino@1907 496 length and orientation of the line segment P0-P1 determines
dino@1907 497 the tangent and the curvature of the curve at P0 and the
dino@1907 498 line segment P2-P3 does the same at P3.">
dino@936 499 </div>
dino@936 500 <p class="caption">
dbaron@4550 501 B&eacute;zier Timing Function Control Points
dino@936 502 </p>
dino@936 503 <table class="propdef">
dino@936 504 <tbody>
dino@936 505 <tr>
dino@936 506 <td>
dino@936 507 <em>Name:</em>
dino@936 508 </td>
dino@936 509 <td>
dino@936 510 <dfn id="transition-timing-function">transition-timing-function</dfn>
dino@936 511 </td>
dino@936 512 </tr>
dino@936 513 <tr>
dino@936 514 <td>
dino@936 515 <em>Value:</em>
dino@936 516 </td>
dino@936 517 <td>
dbaron@6739 518 <span>&lt;single-transition-timing-function&gt;</span> [ ',' <span>&lt;single-transition-timing-function&gt;</span> ]*
dino@936 519 </td>
dino@936 520 </tr>
dino@936 521 <tr>
dino@936 522 <td>
dino@936 523 <em>Initial:</em>
dino@936 524 </td>
dino@936 525 <td>
dino@936 526 ease
dino@936 527 </td>
dino@936 528 </tr>
dino@936 529 <tr>
dino@936 530 <td>
dbaron@7405 531 <em>Applies to:</em>
dino@936 532 </td>
dino@936 533 <td>
dino@1469 534 all elements, :before and :after pseudo elements
dino@936 535 </td>
dino@936 536 </tr>
dino@936 537 <tr>
dino@936 538 <td>
dino@936 539 <em>Inherited:</em>
dino@936 540 </td>
dino@936 541 <td>
dino@936 542 no
dino@936 543 </td>
dino@936 544 </tr>
dino@936 545 <tr>
dino@936 546 <td>
dbaron@6734 547 <em>Animatable:</em>
dbaron@6734 548 </td>
dbaron@6734 549 <td>
dbaron@6734 550 no
dbaron@6734 551 </td>
dbaron@6734 552 </tr>
dbaron@6734 553 <tr>
dbaron@6734 554 <td>
dino@936 555 <em>Percentages:</em>
dino@936 556 </td>
dino@936 557 <td>
dino@936 558 N/A
dino@936 559 </td>
dino@936 560 </tr>
dino@936 561 <tr>
dino@936 562 <td>
dino@936 563 <em>Media:</em>
dino@936 564 </td>
dino@936 565 <td>
dino@1469 566 interactive
dino@936 567 </td>
dino@936 568 </tr>
dino@936 569 <tr>
dino@936 570 <td>
dino@936 571 <em>Computed value:</em>
dino@936 572 </td>
dino@936 573 <td>
dino@936 574 Same as specified value.
dino@936 575 </td>
dino@936 576 </tr>
dbaron@6734 577 <tr>
dbaron@6734 578 <td>
dbaron@6734 579 <em>Canonical order:</em>
dbaron@6734 580 </td>
dbaron@6734 581 <td>
dbaron@6734 582 <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@6734 583 </td>
dbaron@6734 584 </tr>
dino@936 585 </tbody>
dino@936 586 </table>
dbaron@6736 587 <div class="prod">
dbaron@6739 588 <dfn id="single-transition-timing-function">&lt;single-transition-timing-function&gt;</dfn> = ease | linear | ease-in | ease-out | ease-in-out | step-start | step-end | steps(&lt;integer&gt;[, [ start | end ] ]?) | cubic-bezier(&lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;)
dbaron@6736 589 </div>
dino@936 590 <p>
dino@936 591 The timing functions have the following definitions.
dino@936 592 </p>
dino@936 593 <dl>
dino@936 594 <dt>
dino@936 595 ease
dino@936 596 </dt>
dino@936 597 <dd>
dino@7174 598 The ease function is equivalent to cubic-bezier(0.25, 0.1, 0.25, 1).
dino@936 599 </dd>
dino@936 600 <dt>
dino@936 601 linear
dino@936 602 </dt>
dino@936 603 <dd>
dino@7174 604 The linear function is equivalent to cubic-bezier(0, 0, 1, 1).
dino@936 605 </dd>
dino@936 606 <dt>
dino@936 607 ease-in
dino@936 608 </dt>
dino@936 609 <dd>
dino@7174 610 The ease-in function is equivalent to cubic-bezier(0.42, 0, 1, 1).
dino@936 611 </dd>
dino@936 612 <dt>
dino@936 613 ease-out
dino@936 614 </dt>
dino@936 615 <dd>
dino@7174 616 The ease-out function is equivalent to cubic-bezier(0, 0, 0.58, 1).
dino@936 617 </dd>
dino@936 618 <dt>
dino@936 619 ease-in-out
dino@936 620 </dt>
dino@936 621 <dd>
dino@7174 622 The ease-in-out function is equivalent to cubic-bezier(0.42, 0, 0.58, 1)
dino@936 623 </dd>
dino@936 624 <dt>
dino@1907 625 step-start
dino@1907 626 </dt>
dino@1907 627 <dd>
dino@1907 628 The step-start function is equivalent to steps(1, start).
dino@1907 629 </dd>
dino@1907 630 <dt>
dino@1907 631 step-end
dino@1907 632 </dt>
dino@1907 633 <dd>
dino@1907 634 The step-end function is equivalent to steps(1, end).
dino@1907 635 </dd>
dino@1907 636 <dt>
dbaron@5759 637 steps(&lt;integer&gt;[, [ start | end ] ]?)
dino@1907 638 </dt>
dino@1907 639 <dd>
dino@1907 640 Specifies a stepping function, described above, taking two
dino@1907 641 parameters. The first parameter specifies the number of intervals
dino@2615 642 in the function. It must be a positive integer (greater than 0).
dino@2615 643 The second parameter, which is optional, is
dbaron@7300 644 either the value ''start'' or ''end'', and specifies the point
dino@1907 645 at which the change of values occur within the interval.
dino@1907 646 If the second parameter is omitted, it is given the value 'end'.
dino@1907 647 </dd>
dino@1907 648 <dt>
dbaron@5759 649 cubic-bezier(&lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;)
dino@936 650 </dt>
dino@936 651 <dd>
dino@936 652 Specifies a <a
dino@936 653 href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve">cubic-bezier
dino@936 654 curve</a>. The four values specify points P<sub>1</sub> and
dino@2615 655 P<sub>2</sub> of the curve as (x1, y1, x2, y2). Both x values must be
dino@2615 656 in the range [0, 1] or the definition is invalid. The y values can
dino@2615 657 exceed this range.
dino@936 658 </dd>
dino@936 659 </dl><!-- ======================================================================================================= -->
jackalmage@7183 660 <h3 id="transition-delay-property"><a id="the-transition-delay-property-">
dbaron@7301 661 The 'transition-delay' Property
fantasai@5332 662 </a></h3>
dino@936 663 <p>
dbaron@7301 664 The 'transition-delay' property defines when the transition will start. It allows a transition to begin execution some some period of time from when it is applied. A 'transition-delay' value of ''0s'' means the transition will execute as soon as the property is changed. Otherwise, the value specifies an offset from the moment the property is changed, and the transition will delay execution by that offset.
dino@936 665 </p>
dino@936 666 <p>
dbaron@7301 667 If the value for 'transition-delay' is a negative time offset then the transition will execute the moment the property is changed, but will appear to have begun execution at the specified offset. That is, the transition will appear to begin part-way through its play cycle. In the case where a transition has implied starting values and a negative 'transition-delay', the starting values are taken from the moment the property is changed.
dino@936 668 </p>
dino@936 669 <table class="propdef">
dino@936 670 <tbody>
dino@936 671 <tr>
dino@936 672 <td>
dino@936 673 <em>Name:</em>
dino@936 674 </td>
dino@936 675 <td>
dino@936 676 <dfn id="transition-delay">transition-delay</dfn>
dino@936 677 </td>
dino@936 678 </tr>
dino@936 679 <tr>
dino@936 680 <td>
dino@936 681 <em>Value:</em>
dino@936 682 </td>
dino@936 683 <td>
dbaron@6739 684 <span>&lt;time&gt;</span> [, <span>&lt;time&gt;</span>]*
dino@936 685 </td>
dino@936 686 </tr>
dino@936 687 <tr>
dino@936 688 <td>
dino@936 689 <em>Initial:</em>
dino@936 690 </td>
dino@936 691 <td>
dino@3189 692 0s
dino@936 693 </td>
dino@936 694 </tr>
dino@936 695 <tr>
dino@936 696 <td>
dbaron@7405 697 <em>Applies to:</em>
dino@936 698 </td>
dino@936 699 <td>
dino@1469 700 all elements, :before and :after pseudo elements
dino@936 701 </td>
dino@936 702 </tr>
dino@936 703 <tr>
dino@936 704 <td>
dino@936 705 <em>Inherited:</em>
dino@936 706 </td>
dino@936 707 <td>
dino@936 708 no
dino@936 709 </td>
dino@936 710 </tr>
dino@936 711 <tr>
dino@936 712 <td>
dbaron@6734 713 <em>Animatable:</em>
dbaron@6734 714 </td>
dbaron@6734 715 <td>
dbaron@6734 716 no
dbaron@6734 717 </td>
dbaron@6734 718 </tr>
dbaron@6734 719 <tr>
dbaron@6734 720 <td>
dino@936 721 <em>Percentages:</em>
dino@936 722 </td>
dino@936 723 <td>
dino@936 724 N/A
dino@936 725 </td>
dino@936 726 </tr>
dino@936 727 <tr>
dino@936 728 <td>
dino@936 729 <em>Media:</em>
dino@936 730 </td>
dino@936 731 <td>
dino@1469 732 interactive
dino@936 733 </td>
dino@936 734 </tr>
dino@936 735 <tr>
dino@936 736 <td>
dino@936 737 <em>Computed value:</em>
dino@936 738 </td>
dino@936 739 <td>
dino@936 740 Same as specified value.
dino@936 741 </td>
dino@936 742 </tr>
dbaron@6734 743 <tr>
dbaron@6734 744 <td>
dbaron@6734 745 <em>Canonical order:</em>
dbaron@6734 746 </td>
dbaron@6734 747 <td>
dbaron@6734 748 <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@6734 749 </td>
dbaron@6734 750 </tr>
dino@936 751 </tbody>
dino@936 752 </table><!-- ======================================================================================================= -->
jackalmage@7183 753 <h3 id="transition-shorthand-property"><a id="the-transition-shorthand-property-">
dbaron@7301 754 The 'transition' Shorthand Property
fantasai@5332 755 </a></h3>
dino@936 756 <p>
dbaron@7301 757 The 'transition' shorthand property combines the four properties described above into a single property.
dino@936 758 </p>
dino@936 759 <table class="propdef">
dino@936 760 <tbody>
dino@936 761 <tr>
dino@936 762 <td>
dino@936 763 <em>Name:</em>
dino@936 764 </td>
dino@936 765 <td>
dino@936 766 <dfn id="transition">transition</dfn>
dino@936 767 </td>
dino@936 768 </tr>
dino@936 769 <tr>
dino@936 770 <td>
dino@936 771 <em>Value:</em>
dino@936 772 </td>
dino@936 773 <td>
dbaron@6739 774 <span>&lt;single-transition&gt;</span> [ ',' <span>&lt;single-transition&gt;</span> ]*
dino@936 775 </td>
dino@936 776 </tr>
dino@936 777 <tr>
dino@936 778 <td>
dino@936 779 <em>Initial:</em>
dino@936 780 </td>
dino@936 781 <td>
dino@936 782 see individual properties
dino@936 783 </td>
dino@936 784 </tr>
dino@936 785 <tr>
dino@936 786 <td>
dbaron@7405 787 <em>Applies to:</em>
dino@936 788 </td>
dino@936 789 <td>
dino@1469 790 all elements, :before and :after pseudo elements
dino@936 791 </td>
dino@936 792 </tr>
dino@936 793 <tr>
dino@936 794 <td>
dino@936 795 <em>Inherited:</em>
dino@936 796 </td>
dino@936 797 <td>
dino@936 798 no
dino@936 799 </td>
dino@936 800 </tr>
dino@936 801 <tr>
dino@936 802 <td>
dbaron@6734 803 <em>Animatable:</em>
dbaron@6734 804 </td>
dbaron@6734 805 <td>
dbaron@6734 806 no
dbaron@6734 807 </td>
dbaron@6734 808 </tr>
dbaron@6734 809 <tr>
dbaron@6734 810 <td>
dino@936 811 <em>Percentages:</em>
dino@936 812 </td>
dino@936 813 <td>
dino@936 814 N/A
dino@936 815 </td>
dino@936 816 </tr>
dino@936 817 <tr>
dino@936 818 <td>
dino@936 819 <em>Media:</em>
dino@936 820 </td>
dino@936 821 <td>
dino@1469 822 interactive
dino@936 823 </td>
dino@936 824 </tr>
dino@936 825 <tr>
dino@936 826 <td>
dino@936 827 <em>Computed value:</em>
dino@936 828 </td>
dino@936 829 <td>
dino@936 830 Same as specified value.
dino@936 831 </td>
dino@936 832 </tr>
dbaron@6734 833 <tr>
dbaron@6734 834 <td>
dbaron@6734 835 <em>Canonical order:</em>
dbaron@6734 836 </td>
dbaron@6734 837 <td>
dbaron@6734 838 <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@6734 839 </td>
dbaron@6734 840 </tr>
dino@936 841 </tbody>
dino@936 842 </table>
dino@1531 843
dbaron@6736 844 <div class="prod">
dbaron@6739 845 <dfn id="single-transition">&lt;single-transition&gt;</dfn> = [ none | <span>&lt;single-transition-property&gt;</span> ] || <span>&lt;time&gt;</span> || <span>&lt;single-transition-timing-function&gt;</span> || <span>&lt;time&gt;</span>
dbaron@6736 846 </div>
dbaron@6736 847
dbaron@6736 848 <p>
dbaron@6736 849 Note that order is important within the items in this property:
dbaron@6736 850 the first value that can be parsed as a time is assigned to the
dbaron@6736 851 transition-duration,
dbaron@6736 852 and the second value that can be parsed as a time is assigned to
dbaron@6736 853 transition-delay.
dbaron@6736 854 </p>
dbaron@6736 855
dbaron@6736 856 <p>
dbaron@6739 857 If there is more than one <span>&lt;single-transition&gt;</span> in the shorthand,
dbaron@6736 858 and any of the transitions has
dbaron@6739 859 ''none'' as the <span>&lt;single-transition-property&gt;</span>,
dbaron@6736 860 then the declaration is invalid.
dbaron@6736 861 </p>
dbaron@6736 862
dbaron@1540 863 <h2 id="starting">
dbaron@1540 864 Starting of transitions
dbaron@1540 865 </h2>
dbaron@1540 866
dbaron@1540 867 <p>
dbaron@2569 868 When the computed value of an animatable property changes,
dbaron@1548 869 implementations must decide what transitions to start based on
dbaron@1548 870 the values of the 'transition-property', 'transition-duration',
dbaron@1548 871 'transition-timing-function', and 'transition-delay' properties
dbaron@2569 872 at the time the animatable property would first have its new
dbaron@2570 873 computed value.
dbaron@2570 874 </p>
dbaron@5243 875 <div class="example" id="manual-reversing-example">
dbaron@2570 876 <p style="display:none">
dbaron@2570 877 Example(s):
dbaron@2570 878 </p>
dbaron@5243 879 <p>This provides a way for authors to specify different values
dbaron@5243 880 of the 'transition-*' properties for the &ldquo;forward&rdquo;
dbaron@5243 881 and &ldquo;reverse&rdquo; transitions (but see <a
dbaron@5243 882 href="#reversing">below</a> for special reversing behavior when
dbaron@5243 883 an <em>incomplete</em> transition is interrupted). Authors can
dbaron@5243 884 specify the value of 'transition-duration',
dbaron@5243 885 'transition-timing-function', or 'transition-delay' in the same
dbaron@5243 886 rule where they specify the value that triggers the transition,
dbaron@5243 887 or can change these properties at the same time as they change
dbaron@5243 888 the property that triggers the transition. Since it's the new
dbaron@5243 889 values of these 'transition-*' properties that affect the
dbaron@5243 890 transition, these values will be used for the transitions
dbaron@5243 891 <em>to</em> the associated transitioning values. For example:
dbaron@5243 892 </p>
dbaron@5243 893 <pre>li {
dbaron@5243 894 transition: background-color linear 1s;
dbaron@5243 895 background: blue;
dbaron@5243 896 }
dbaron@5243 897 li:hover {
dbaron@5243 898 background-color: green;
dbaron@5243 899 transition-duration: 2s; /* applies to the transition *to* the :hover state */
dbaron@5243 900 }</pre>
dbaron@2570 901 <p>
dbaron@2570 902 When a list item with these style rules enters the :hover
dbaron@2570 903 state, the computed 'transition-duration' at the time that
dbaron@7300 904 'background-color' would have its new value (''green'') is ''2s'',
dbaron@2570 905 so the transition from 'blue' to 'green' takes 2 seconds.
dbaron@2570 906 However, when the list item leaves the :hover state, the
dbaron@7300 907 transition from ''green'' to ''blue'' takes 1 second.
dbaron@2570 908 </p>
dbaron@2570 909 </div>
dbaron@5247 910
dbaron@5247 911 <p>
dbaron@5247 912 When the computed value of a property changes, implementations
dbaron@5247 913 must start transitions based on the relevant item (see <a
dbaron@5248 914 href="#transition-property">the definition of
dbaron@5247 915 'transition-property'</a>) in the computed value of
dbaron@5542 916 'transition-property'.
dbaron@5542 917 Corresponding to this item there are
dbaron@5542 918 computed values of 'transition-duration' and 'transition-delay'
dbaron@5542 919 (see <a href="#list-matching">the rules on matching lists</a>).
dbaron@5542 920 Define the <dfn>combined duration</dfn> of the transition
dbaron@7300 921 as the sum of max('transition-duration', ''0s'') and 'transition-delay'.
dbaron@7300 922 When the combined duration is greater than ''0s'',
dbaron@5542 923 then a transition starts based on the values of
dbaron@5542 924 'transition-duration', 'transition-delay',
dbaron@5542 925 and 'transition-timing-function';
dbaron@5542 926 in other cases transitions do not occur.
dbaron@5247 927 </p>
dbaron@5247 928
dbaron@2570 929 <p>
dbaron@2570 930 Since this specification does not define
dbaron@2569 931 when computed values change, and thus what changes to
dbaron@2569 932 computed values are considered simultaneous,
dbaron@1548 933 authors should be aware that changing any of the transition
dbaron@1548 934 properties a small amount of time after making a change that
dbaron@1548 935 might transition can result in behavior that varies between
dbaron@1548 936 implementations, since the changes might be considered
dbaron@1548 937 simultaneous in some implementations but not others.
dbaron@1540 938 </p>
dbaron@1540 939
dbaron@1540 940 <p>
dbaron@1548 941 Once the transition of a property has started, it must continue
dbaron@1548 942 running based on the original timing function, duration, and
dbaron@1548 943 delay, even if the 'transition-timing-function',
dbaron@1548 944 'transition-duration', or 'transition-delay' property changes
dbaron@1548 945 before the transition is complete. However, if the
dbaron@1548 946 'transition-property' property changes such that the transition
dbaron@1548 947 would not have started, the transition must stop (and the
dbaron@1548 948 property must immediately change to its final value).
dbaron@1540 949 </p>
dbaron@1540 950
dbaron@1540 951 <p>
dbaron@1548 952 Implementations must not start a transition when the computed
dbaron@1548 953 value of a property changes as a result of declarative animation
dbaron@1548 954 (as opposed to scripted animation).
dbaron@1540 955 </p>
dbaron@1540 956
dbaron@1540 957 <p>
dbaron@1548 958 Implementations also must not start a transition when the
dbaron@1548 959 computed value changes because it is inherited (directly or
dbaron@1548 960 indirectly) from another element that is transitioning the same
dbaron@1548 961 property.
dbaron@1540 962 </p>
dbaron@1540 963
dino@1531 964 <h2 id="reversing">
dbaron@5243 965 Automatically reversing interrupted transitions
dino@1531 966 </h2>
dino@1531 967 <p>
dino@1531 968 A common type of transition effect is when a running transition is
dino@1531 969 interrupted and the property is reset to its original value. An
dino@1531 970 example is a hover effect on an element, where the pointer enters and
dino@1531 971 exits the element before the effect has completed. If the outgoing and
dino@1531 972 incoming transitions are executed using their specified durations and
dino@1531 973 timing functions, the resulting effect can be distractingly
dino@1531 974 asymmetric. Instead, the expected behavior is that the new transition
dino@1531 975 should be the reverse of what has already executed.
dino@1531 976 </p>
dino@1532 977
dino@1531 978 <p>
dino@1532 979 If a running transition with duration T, executing so far for duration TE,
dino@1532 980 from state A, to state B, is interrupted by
dino@1532 981 a property change that would start a new transition back to state A, and
dino@1532 982 all the transition attributes are the same (duration, delay and timing function),
dino@1532 983 then the new transition must reverse the effect. The new transition must:
dino@1531 984 </p>
dino@1532 985
dino@1532 986 <ol>
dino@1532 987 <li>
dino@1532 988 Use the B and A states as its "from" and "to" states respectively. It
dino@1532 989 does not use the current value as its from state, due to the rules below.
dino@1532 990 </li>
dino@1532 991 <li>
dino@1532 992 Execute with the same duration T, but starting as if the transition had
dino@1532 993 already begun, without any transition delay, at the moment which would
dino@1532 994 cause the new transition to finish in TE from the moment of interruption. In other
dino@1532 995 words, the new transition will execute as if it started T-TE in the past.
dino@1532 996 </li>
dino@1532 997 <li>
dino@1532 998 Use a timing function that is the portion of the curve traversed up
dino@1532 999 to the moment of interruption, followed in the opposite direction (towards
dino@1532 1000 the starting point). This will make the transition appear as if it
dino@1532 1001 is playing backwards.
dino@1532 1002 </li>
dino@1532 1003 <li>
dino@1532 1004 Ignore any transition delay.
dino@1532 1005 </li>
dino@1532 1006 </ol>
dino@1532 1007
dino@1531 1008 <p>
dino@1531 1009 For example, suppose there is a transition with a duration of two
dino@1531 1010 seconds. If this transition is interrupted after 0.5 seconds and the
dino@1531 1011 property value assigned to the original value, then the new transition
dino@1531 1012 effect will be the reverse of the original, as if it had begun
dino@1531 1013 1.5 seconds in the past.
dino@1531 1014 </p>
dino@936 1015
dino@1532 1016 <p>
dino@1532 1017 Note that by using the defined from and to states for the reversing
dino@1532 1018 transition, it is also possible that it may reverse again, if
dino@1532 1019 interrupted; for example, if the transition reversing to state A was
dino@1532 1020 again interrupted by a property change to state B.
dino@1532 1021 </p>
dino@1532 1022
dbaron@2568 1023 <p class="issue">Issue:
dbaron@2568 1024 This introduces the concept of reversing a timing function,
dbaron@2568 1025 which the spec has otherwise resisted doing, and also introduces
dbaron@2568 1026 a discontinuity between transitions that have
dbaron@2568 1027 almost completed (which get automatically reversed and thus have
dbaron@2568 1028 their timing function reversed) and transitions that have fully
dbaron@2568 1029 completed (where the reversal doesn't lead to the timing
dbaron@2568 1030 function being reversed). An alternative proposal that avoids
dbaron@2568 1031 this is to follow the normal timing function algorithm, except
dbaron@2568 1032 multiply the duration (and also shorten any negative delay) by
dbaron@2568 1033 the (output) value of the transition timing function of the
dbaron@2568 1034 incomplete transition at the time it was interrupted, and, to
dbaron@2568 1035 account for multiple reverses in sequence, to divide by the
dbaron@2568 1036 shortening applied to the transition being interrupted. For
dbaron@2568 1037 more details see this thread:
dbaron@2568 1038 <a href="http://lists.w3.org/Archives/Public/www-style/2009Nov/thread.html#msg302">November 2009 part</a>,
dbaron@2568 1039 <a href="http://lists.w3.org/Archives/Public/www-style/2009Dec/thread.html#msg319">December 2009 part</a>,
dbaron@2568 1040 <a href="http://lists.w3.org/Archives/Public/www-style/2010Jan/thread.html#msg136">January 2010 part</a>.
dbaron@2568 1041 </p>
dbaron@2568 1042
jackalmage@7183 1043 <h2 id="transition-events"><a id="transition-events-">
dino@936 1044 Transition Events
fantasai@5332 1045 </a></h2>
dino@936 1046 <p>
dino@936 1047 The completion of a CSS Transition generates a corresponding <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html">DOM Event</a>.
dino@936 1048 An event is fired for each property that undergoes a transition.
dino@936 1049 This allows a content developer to perform actions that synchronize
dino@936 1050 with the completion of a transition.
dino@936 1051 </p>
dino@936 1052 <p>
dino@936 1053 Each event provides the name of the property the transition is
dino@936 1054 associated with as well as the duration of the transition.
dino@936 1055 </p>
dino@936 1056 <dl>
dino@936 1057 <dt>
dbaron@7403 1058 <b>Interface <dfn id="Events-TransitionEvent">TransitionEvent</dfn></b>
dino@936 1059 </dt>
dino@936 1060 <dd>
dino@936 1061 <p>
dino@936 1062 The <code>TransitionEvent</code> interface provides specific contextual information associated with transitions.
dino@936 1063 </p>
dino@936 1064 <dl>
dino@936 1065 <dt>
dino@936 1066 <b>IDL Definition</b>
dino@936 1067 </dt>
dino@936 1068 <dd>
dino@936 1069 <div class='idl-code'>
dino@936 1070 <pre>
dbaron@7423 1071 <span id="TransitionEvent">[Constructor(DOMString <var title="">type</var>, optional <i>TransitionEventInit</i> <var title="">transitionEventInitDict</var>)]
dbaron@7316 1072 interface TransitionEvent</span> : Event {
dbaron@7316 1073 readonly attribute DOMString <a href="#Events-TransitionEvent-propertyName">propertyName</a>;
dbaron@7316 1074 readonly attribute float <a href="#Events-TransitionEvent-elapsedTime">elapsedTime</a>;
dbaron@7316 1075 readonly attribute DOMString <a href="#Events-TransitionEvent-pseudoElement">pseudoElement</a>;
dino@936 1076 };
dbaron@7316 1077
dbaron@7423 1078 dictionary <dfn id="TransitionEventInit">TransitionEventInit</dfn> : <a class="external" href="http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#eventinit">EventInit</a> {
dbaron@7316 1079 DOMString <a href="#Events-TransitionEvent-propertyName">propertyName</a>;
dbaron@7316 1080 float <a href="#Events-TransitionEvent-elapsedTime">elapsedTime</a>;
dbaron@7316 1081 DOMString <a href="#Events-TransitionEvent-pseudoElement">pseudoElement</a>;
dbaron@7316 1082 }
dino@936 1083 </pre>
dino@936 1084 </div>
dino@936 1085 </dd>
dino@936 1086 <dt>
dino@936 1087 <b>Attributes</b>
dino@936 1088 </dt>
dino@936 1089 <dd>
dino@936 1090 <dl>
dino@936 1091 <dt>
dbaron@7403 1092 <code class='attribute-name'><dfn title="TransitionEvent::propertyName" id="Events-TransitionEvent-propertyName">propertyName</dfn></code> of type <code>DOMString</code>, readonly
dino@936 1093 </dt>
dino@936 1094 <dd>
dino@936 1095 The name of the CSS property associated with the transition.
dino@936 1096 </dd>
dino@936 1097 </dl>
dino@936 1098 <dl>
dino@936 1099 <dt>
dbaron@7403 1100 <code class='attribute-name'><dfn title="TransitionEvent::elapsedTime" id="Events-TransitionEvent-elapsedTime">elapsedTime</dfn></code> of type <code>float</code>, readonly
dino@936 1101 </dt>
dino@936 1102 <dd>
simon@4370 1103 The amount of time the transition has been running, in seconds, when this event fired. Note that this value is not affected by the value of <code class="property">transition-delay</code>.
dino@936 1104 </dd>
dino@936 1105 </dl>
dbaron@5259 1106 <dl>
dbaron@5259 1107 <dt>
dbaron@7403 1108 <code class='attribute-name'><dfn title="TransitionEvent::pseudoElement" id="Events-TransitionEvent-pseudoElement">pseudoElement</dfn></code> of type <code>DOMString</code>, readonly
dbaron@5259 1109 </dt>
dbaron@5259 1110 <dd>
dbaron@5259 1111 The name (beginning with two colons) of the CSS
dbaron@5259 1112 pseudo-element on which the transition occured (in
dbaron@5259 1113 which case the target of the event is that
dbaron@5259 1114 pseudo-element's corresponding element), or the empty
dbaron@5259 1115 string if the transition occurred on an element (which
dbaron@5259 1116 means the target of the event is that element).
dbaron@5259 1117 </dd>
dbaron@5259 1118 </dl>
dino@936 1119 </dd>
dino@936 1120 </dl>
dbaron@7316 1121 <p>
dbaron@7423 1122 <code id="TransitionEvent-constructor">TransitionEvent(type, transitionEventInitDict)</code>
dbaron@7316 1123 is an <a class="external" href="http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-event-constructor">event constructor</a>.
dbaron@7316 1124 </p>
dino@936 1125 </dd>
dino@936 1126 </dl>
dino@936 1127 <p>
dino@936 1128 There is one type of transition event available.
dino@936 1129 </p>
dino@936 1130 <dl>
dino@936 1131 <dt>
dbaron@7404 1132 <b><dfn>transitionend</dfn></b>
dino@936 1133 </dt>
dino@936 1134 <dd>
dbaron@7300 1135 The <code>transitionend</code> event occurs at the completion of the transition. In the
dino@1469 1136 case where a transition is removed before completion, such as if the
dino@1469 1137 transition-property is removed, then the event will not fire.
dino@936 1138 <ul>
dino@936 1139 <li>Bubbles: Yes
dino@936 1140 </li>
dino@936 1141 <li>Cancelable: Yes
dino@936 1142 </li>
dbaron@7404 1143 <li>Context Info: propertyName, elapsedTime, pseudoElement
dino@936 1144 </li>
dino@936 1145 </ul>
dino@936 1146 </dd>
dino@936 1147 </dl>
dino@936 1148
jackalmage@7183 1149 <h2 id="animatable-types"><a id="animation-of-property-types-">
dino@936 1150 Animation of property types
fantasai@5332 1151 </a></h2>
dino@936 1152
dino@936 1153 <p>
dbaron@6223 1154 When interpolating between two values,
dbaron@6223 1155 <i>V</i><sub>start</sub> and <i>V</i><sub>end</sub>,
dbaron@6223 1156 interpolation is done using the output <i>p</i> of the timing function,
dbaron@6223 1157 which gives the portion of the value space
dbaron@6223 1158 that the interpolation has crossed.
dbaron@6223 1159 Thus the result of the interpolation is
dbaron@6223 1160 <i>V</i><sub>res</sub> =
dbaron@6223 1161 (1 - <i>p</i>) &sdot; <i>V</i><sub>start</sub> +
dbaron@6223 1162 <i>p</i> &sdot; <i>V</i><sub>end</sub>.
dbaron@6223 1163 </p>
dbaron@6223 1164
dbaron@6226 1165 <p>
dbaron@6226 1166 However, if this value (<i>V</i><sub>res</sub>)
dbaron@6226 1167 is outside the allowed range of values for the property,
dbaron@6226 1168 then it is clamped to that range.
dbaron@6226 1169 This can occur if <i>p</i> is outside of the range 0 to 1,
dbaron@6226 1170 which can occur if a timing function is specified
dbaron@6226 1171 with a <i>y1</i> or <i>y2</i> that is outside the range 0 to 1.
dbaron@6226 1172 </p>
dbaron@6225 1173
dbaron@6223 1174 <p>
dino@936 1175 The following describes how each property type undergoes transition or
dino@936 1176 animation.
dino@936 1177 </p>
dino@936 1178
dino@936 1179 <ul>
dbaron@7317 1180 <li id="animtype-color">
dino@936 1181 <strong>color</strong>: interpolated via red, green, blue and alpha
dino@936 1182 components (treating each as a number, see below).
dbaron@7299 1183 The interpolation is done between premultiplied colors
dbaron@7299 1184 (that is, colors for which the red, green, and blue components
dbaron@7299 1185 specified have been multiplied by the alpha).
dino@936 1186 </li>
dbaron@7317 1187 <li id="animtype-length">
dino@936 1188 <strong>length</strong>: interpolated as real numbers.
dino@936 1189 </li>
dbaron@7317 1190 <li id="animtype-percentage">
dino@936 1191 <strong>percentage</strong>: interpolated as real numbers.
dino@936 1192 </li>
dbaron@7317 1193 <li id="animtype-lpcalc">
dbaron@7302 1194 <strong>length, percentage, or calc</strong>: when both values
dbaron@7302 1195 are lengths, interpolated as lengths; when both values are
dbaron@7302 1196 percentages, interpolated as percentages; otherwise, both
dbaron@7302 1197 values are converted into a ''calc()'' function that is the
dbaron@7302 1198 sum of a length and a percentage (each possibly zero), and
dbaron@7302 1199 these ''calc()'' functions have each half interpolated as real
dbaron@7302 1200 numbers.
dbaron@7302 1201 </li>
dbaron@7317 1202 <li id="animtype-integer">
dino@936 1203 <strong>integer</strong>: interpolated via discrete steps (whole
dino@936 1204 numbers). The interpolation happens in real number space and is
dbaron@7335 1205 converted to an integer by rounding to the nearest integer, with
dbaron@7335 1206 values halfway between a pair of integers rounded towards
dbaron@7335 1207 positive infinity.
dino@936 1208 </li>
dbaron@7317 1209 <li id="animtype-font-weight">
dbaron@5257 1210 <strong>font weight</strong>: interpolated via discrete steps
dbaron@5257 1211 (multiples of 100). The interpolation happens in real number
dbaron@5286 1212 space and is converted to an integer by rounding to the
dbaron@7335 1213 nearest multiple of 100, with values halfway between multiples
dbaron@7335 1214 of 100 rounded towards positive infinity.
dbaron@5257 1215 </li>
dbaron@7317 1216 <li id="animtype-number">
dino@936 1217 <strong>number</strong>: interpolated as real (floating point)
dino@936 1218 numbers.
dino@936 1219 </li>
dbaron@7317 1220 <li id="animtype-rect">
dino@936 1221 <strong>rectangle</strong>: interpolated via the x, y,
dino@936 1222 width and height components (treating each as a number).
dino@936 1223 </li>
dbaron@7317 1224 <li id="animtype-visibility">
dbaron@5258 1225 <strong>visibility</strong>: if one of the values is
dbaron@7300 1226 ''visible'', interpolated as a discrete step where values of the
dbaron@7300 1227 timing function between 0 and 1 map to ''visible'' and other
dbaron@5258 1228 values of the timing function (which occur only at the
dbaron@7300 1229 start/end of the transition or as a result of ''cubic-bezier()''
dbaron@5258 1230 functions with Y values outside of [0, 1]) map to the closer
dbaron@7300 1231 endpoint; if neither value is ''visible'' then not interpolable.
dino@936 1232 </li>
dbaron@7322 1233 <li id="animtype-shadow-list">
dbaron@7350 1234 <strong>shadow list</strong>: Each shadow in the list is
dbaron@7350 1235 interpolated via the
dbaron@7350 1236 color (as <a href="#animtype-color">color</a>) component,
dbaron@7350 1237 and x, y, blur, and (when appropriate) spread
dbaron@7350 1238 (as <a href="#animtype-length">length</a>) components.
dbaron@7350 1239 For each shadow, if one input shadow is ''inset'' and the other
dbaron@7350 1240 is not, then the result for that shadow matches the inputs;
dbaron@7350 1241 otherwise the entire list is not interpolable.
dbaron@7350 1242 If the lists of shadows have different lengths,
dbaron@7350 1243 then the shorter list is padded at the end
dbaron@7350 1244 with shadows whose color is ''transparent'',
dbaron@7350 1245 all lengths are ''0'',
dbaron@7350 1246 and whose ''inset'' (or not) matches the longer list.
dino@936 1247 </li>
dbaron@7317 1248 <li id="animtype-gradient">
dino@936 1249 <strong>gradient</strong>: interpolated via the
dino@936 1250 positions and colors of each stop. They must have the same type
dino@936 1251 (radial or linear) and same number of stops in order to be animated.
dbaron@2964 1252 <span class="note">Note: [[CSS3-IMAGES]] may extend this
dbaron@2964 1253 definition.</span>
dino@936 1254 </li>
dbaron@7317 1255 <li id="animtype-paintserver">
dino@936 1256 <strong>paint server</strong> (SVG): interpolation is only supported
dbaron@5319 1257 between: gradient to gradient and color to color. They then
dino@936 1258 work as above.
dino@936 1259 </li>
dbaron@7322 1260 <li id="animtype-simple-list">
dbaron@7322 1261 <strong>simple list</strong> of other types:
dbaron@7322 1262 If the lists have the same number of items,
dbaron@7322 1263 and each pair of values can be interpolated,
dbaron@7322 1264 each item in the list is interpolated using
dbaron@7322 1265 the rules given for those types.
dbaron@7322 1266 Otherwise the values are not interpolable.
dbaron@7322 1267 </li>
dbaron@7322 1268 <li id="animtype-repeatable-list">
dbaron@7322 1269 <strong>repeatable list</strong> of other types:
dbaron@7322 1270 The result list has a length that is the least common multiple
dbaron@7322 1271 of the lengths of the input lists.
dbaron@7322 1272 Each item in the result is the interpolation of the value
dbaron@7322 1273 from each input list repeated to the length of the result list.
dbaron@7322 1274 If a pair of values cannot be interpolated, then the lists
dbaron@7322 1275 are not interpolable.
dbaron@7323 1276 <span class="note">
dbaron@7323 1277 The repeatable list concept ensures that a list that is
dbaron@7323 1278 conceptually repeated to a certain length (as
dbaron@7323 1279 'background-origin' is repeated to the length of the
dbaron@7323 1280 'background-image' list) or repeated infinitely will
dbaron@7323 1281 smoothly transition between any values, and so that the
dbaron@7323 1282 computed value will properly represent the result (and
dbaron@7323 1283 potentially be inherited correctly).
dbaron@7323 1284 </span>
dino@1469 1285 </li>
dino@936 1286 </ul>
dino@936 1287
dbaron@6224 1288 <p>Future specifications may define additional types that can
dbaron@6224 1289 be animated.</p>
dbaron@6224 1290
dbaron@7320 1291 <p>See the definition of 'transition-property' for how animation
dbaron@7320 1292 of shorthand properties and the ''all'' value is applied to any
dbaron@7320 1293 properties (in the shorthand) that can be animated.</p>
dbaron@7320 1294
jackalmage@7183 1295 <h2 id="animatable-properties"><a id="animatable-properties-">
dino@936 1296 Animatable properties
fantasai@5332 1297 </a></h2>
dino@936 1298
dbaron@4128 1299 <!--
dbaron@4128 1300 As resolved in
dbaron@4128 1301 http://lists.w3.org/Archives/Public/www-style/2011Sep/0497.html
dbaron@4128 1302 -->
dbaron@7341 1303
dbaron@7341 1304 <p>The definition of each CSS property defines
dbaron@7341 1305 when the values of that property can be interpolated
dbaron@7341 1306 by referring to the definitions of property types
dbaron@7341 1307 in the <a href="#animatable-types">previous section</a>.
dbaron@7341 1308 Values are animatable when
dbaron@7341 1309 both the from and the to values of the property have the type described.
dbaron@7341 1310 (When a composite type such as "length, percentage, or calc" is listed,
dbaron@7341 1311 this means that both values must fit into that composite type.)
dbaron@7341 1312 When multiple types are listed in the form "either A or B",
dbaron@7341 1313 both values must be of the same type to be interpolable.</p>
dbaron@7341 1314
dbaron@4128 1315 <p>For properties that exist at the time this specification was
dbaron@4128 1316 developed, this specification defines whether and how they are
dbaron@4128 1317 animated. However, future CSS specifications may define
dbaron@4128 1318 additional properties, additional values for existing properties,
dbaron@4128 1319 or additional animation behavior of existing values. In order to
dbaron@4128 1320 describe new animation behaviors and to have the definition of
dbaron@4128 1321 animation behavior in a more appropriate location, future CSS
dbaron@4128 1322 specifications should include an "Animatable:" line in the summary
dbaron@4128 1323 of the property's definition (in addition to the other lines
dbaron@4128 1324 described in [[CSS21]], <a
dbaron@4128 1325 href="http://www.w3.org/TR/CSS21/about.html#property-defs">section
dbaron@4128 1326 1.4.2</a>). This line should say "no" to indicate that a property
dbaron@4128 1327 cannot be animated or should reference an animation behavior
dbaron@4128 1328 (which may be one of the behaviors in the <a
dbaron@4128 1329 href="#animation-of-property-types-">Animation of property
dbaron@4128 1330 types</a> section above, or may be a new behavior) to define how
dbaron@4128 1331 the property animates. Such definitions override those given in
dbaron@4128 1332 this specification.</p>
dbaron@4128 1333
jackalmage@7183 1334 <h3 id="animatable-css"><a id="properties-from-css-">
dino@936 1335 Properties from CSS
fantasai@5332 1336 </a></h3>
dino@936 1337
dbaron@7341 1338 <p>
dbaron@7341 1339 The following definitions define the animation behavior for
dbaron@7396 1340 properties in CSS Level 2 Revision 1 ([[CSS21]]) and in Level 3 of
dbaron@7341 1341 the CSS Color Module ([[CSS3COLOR]]).
dbaron@7341 1342 </p>
dbaron@6227 1343
simon@4394 1344 <table class="animatable-properties">
dino@936 1345 <tr>
dino@936 1346 <th>Property Name</th>
dino@936 1347 <th>Type</th>
dino@936 1348 </tr>
dino@936 1349 <tr>
dbaron@7341 1350 <td>background-color</td><td>as <a href="#animtype-color">color</a></tr>
dino@936 1351 <tr>
dbaron@7341 1352 <td>background-position</td><td>as <a href="#animtype-repeatable-list">repeatable list</a> of <a href="#animtype-simple-list">simple list</a> of <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1353 </tr>
dino@936 1354 <tr>
dbaron@7341 1355 <td>border-bottom-color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1356 </tr>
dino@936 1357 <tr>
dbaron@7341 1358 <td>border-bottom-width</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1359 </tr>
dino@936 1360 <tr>
dbaron@7341 1361 <td>border-left-color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1362 </tr>
dino@936 1363 <tr>
dbaron@7341 1364 <td>border-left-width</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1365 </tr>
dino@936 1366 <tr>
dbaron@7341 1367 <td>border-right-color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1368 </tr>
dino@936 1369 <tr>
dbaron@7341 1370 <td>border-right-width</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1371 </tr>
dino@936 1372 <tr>
dbaron@7341 1373 <td>border-spacing</td><td>as <a href="#animtype-simple-list">simple list</a> of <a href="#animtype-length">length</a></td>
dino@936 1374 </tr>
dino@936 1375 <tr>
dbaron@7341 1376 <td>border-top-color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1377 </tr>
dino@936 1378 <tr>
dbaron@7341 1379 <td>border-top-width</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1380 </tr>
dino@936 1381 <tr>
dbaron@7341 1382 <td>bottom</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1383 </tr>
dino@936 1384 <tr>
dbaron@7341 1385 <td>clip</td><td>as <a href="#animtype-rect">rectangle</a></td>
simon@1766 1386 </tr>
simon@1766 1387 <tr>
dbaron@7341 1388 <td>color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1389 </tr>
dino@936 1390 <tr>
dbaron@7348 1391 <td>font-size</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1392 </tr>
dino@936 1393 <tr>
dbaron@7341 1394 <td>font-weight</td><td>as <a href="#animtype-font-weight">font weight</a></td>
dino@936 1395 </tr>
dino@936 1396 <tr>
dbaron@7341 1397 <td>height</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1398 </tr>
dino@936 1399 <tr>
dbaron@7341 1400 <td>left</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1401 </tr>
dino@936 1402 <tr>
dbaron@7341 1403 <td>letter-spacing</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1404 </tr>
dino@936 1405 <tr>
dbaron@7348 1406 <td>line-height</td><td>as either <a href="#animtype-number">number</a> or <a href="#animtype-length">length</a></td>
dino@936 1407 </tr>
dino@936 1408 <tr>
dbaron@7341 1409 <td>margin-bottom</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1410 </tr>
dino@936 1411 <tr>
dbaron@7341 1412 <td>margin-left</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1413 </tr>
dino@936 1414 <tr>
dbaron@7341 1415 <td>margin-right</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1416 </tr>
dino@936 1417 <tr>
dbaron@7341 1418 <td>margin-top</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1419 </tr>
dino@936 1420 <tr>
dbaron@7341 1421 <td>max-height</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1422 </tr>
dino@936 1423 <tr>
dbaron@7341 1424 <td>max-width</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1425 </tr>
dino@936 1426 <tr>
dbaron@7341 1427 <td>min-height</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1428 </tr>
dino@936 1429 <tr>
dbaron@7341 1430 <td>min-width</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1431 </tr>
dino@936 1432 <tr>
dbaron@7341 1433 <td>opacity</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1434 </tr>
dino@936 1435 <tr>
dbaron@7341 1436 <td>outline-color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1437 </tr>
dino@936 1438 <tr>
dbaron@7341 1439 <td>outline-width</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1440 </tr>
dino@936 1441 <tr>
dbaron@7341 1442 <td>padding-bottom</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1443 </tr>
dino@936 1444 <tr>
dbaron@7341 1445 <td>padding-left</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1446 </tr>
dino@936 1447 <tr>
dbaron@7341 1448 <td>padding-right</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1449 </tr>
dino@936 1450 <tr>
dbaron@7341 1451 <td>padding-top</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1452 </tr>
dino@936 1453 <tr>
dbaron@7341 1454 <td>right</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1455 </tr>
dino@936 1456 <tr>
dbaron@7341 1457 <td>text-indent</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1458 </tr>
dino@936 1459 <tr>
dbaron@7341 1460 <td>text-shadow</td><td>as <a href="#animtype-shadow-list">shadow list</a></td>
dino@936 1461 </tr>
dino@936 1462 <tr>
dbaron@7341 1463 <td>top</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1464 </tr>
dino@936 1465 <tr>
dbaron@7348 1466 <td>vertical-align</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1467 </tr>
dino@936 1468 <tr>
dbaron@7341 1469 <td>visibility</td><td>as <a href="#animtype-visibility">visibility</a></td>
dino@936 1470 </tr>
dino@936 1471 <tr>
dbaron@7341 1472 <td>width</td><td>as <a href="#animtype-lpcalc">length, percentage, or calc</a></td>
dino@936 1473 </tr>
dino@936 1474 <tr>
dbaron@7348 1475 <td>word-spacing</td><td>as <a href="#animtype-length">length</a></td>
dino@936 1476 </tr>
dino@936 1477 <tr>
dbaron@7341 1478 <td>z-index</td><td>as <a href="#animtype-integer">integer</a></td>
dino@936 1479 </tr>
dino@936 1480 </table>
dino@936 1481
jackalmage@7183 1482 <h3 id="animatable-svg"><a id="properties-from-svg-">
dino@936 1483 Properties from SVG
fantasai@5332 1484 </a></h3>
dino@936 1485
dino@1469 1486 <p>
dino@1469 1487 All properties defined as animatable in the SVG specification, provided
dino@1469 1488 they are one of the property types listed above.
dino@1469 1489 </p>
dino@1469 1490
dino@1469 1491 <!-- <table>
dino@936 1492 <tr>
dino@936 1493 <th>Property Name</th><th>Type</th>
dino@936 1494 </tr>
dino@936 1495 <tr>
dbaron@7341 1496 <td>stop-color</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1497 </tr>
dino@936 1498 <tr>
dbaron@7341 1499 <td>stop-opacity</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1500 </tr>
dino@936 1501 <tr>
dbaron@7341 1502 <td>fill</td><td>as <a href="#animtype-paintserver">paint server</a></td>
dino@936 1503 </tr>
dino@936 1504 <tr>
dbaron@7341 1505 <td>fill-opacity</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1506 </tr>
dino@936 1507 <tr>
dbaron@7341 1508 <td>stroke</td><td>as <a href="#animtype-paintserver">paint server</a></td>
dino@936 1509 </tr>
dino@936 1510 <tr>
dbaron@7341 1511 <td>stroke-dasharray</td><td>as <a href="#animtype-repeatable-list">repeatable list</a> of <a href="#animtype-number">number</a></td>
dino@936 1512 </tr>
dino@936 1513 <tr>
dbaron@7341 1514 <td>stroke-dashoffset</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1515 </tr>
dino@936 1516 <tr>
dbaron@7341 1517 <td>stroke-miterlimit</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1518 </tr>
dino@936 1519 <tr>
dbaron@7341 1520 <td>stroke-opacity</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1521 </tr>
dino@936 1522 <tr>
dbaron@7341 1523 <td>stroke-width</td><td>as <a href="#animtype-number">number</a></td>
dino@936 1524 </tr>
dino@936 1525 <tr>
dbaron@7341 1526 <td>viewport-fill</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1527 </tr>
dino@936 1528 <tr>
dbaron@7341 1529 <td>viewport-fill-opacity</td><td>as <a href="#animtype-color">color</a></td>
dino@936 1530 </tr>
dino@1469 1531 </table> -->
dino@936 1532
dbaron@5312 1533 <h2 id="acknowledgments">Acknowledgments</h2>
dbaron@5312 1534
dbaron@5312 1535 <p>Thanks especially to the feedback from
dbaron@5312 1536 Tab Atkins,
dbaron@6736 1537 Carine Bournez,
dbaron@5316 1538 Aryeh Gregor,
dbaron@5316 1539 Vincent Hardy,
dbaron@5316 1540 Cameron McCormack,
dbaron@5316 1541 Alex Mogilevsky,
dbaron@5312 1542 and all the rest of the
dbaron@5312 1543 <a href="http://lists.w3.org/Archives/Public/www-style/">www-style</a> community.</p>
dino@936 1544
dbaron@5334 1545 <h2 id="references">References</h2>
dino@936 1546
jackalmage@7183 1547 <h3 class="no-num" id="normative-references">Normative references</h3>
dino@936 1548 <!--normative-->
dino@936 1549
jackalmage@7183 1550 <h3 class="no-num" id="other-references">Other references</h3>
dino@936 1551 <!--informative-->
dino@936 1552
dino@936 1553
dino@936 1554
jackalmage@7183 1555 <h2 class="no-num" id="property-index">Property index</h2>
dino@936 1556 <!-- properties -->
dino@936 1557
dino@936 1558
dino@936 1559
dino@936 1560 <h2 class="no-num" id="index">Index</h2>
dino@936 1561 <!--index-->
dino@936 1562
dino@936 1563 </body>
dino@936 1564 </html>
dino@936 1565 <!-- Keep this comment at the end of the file
dino@936 1566 Local variables:
dino@936 1567 mode: sgml
dino@936 1568 sgml-default-doctype-name:"html"
dino@936 1569 sgml-minimize-attributes:t
dino@936 1570 End:
dino@936 1571 -->

mercurial