css-transitions/Overview.src.html

Thu, 05 Sep 2013 17:43:19 -0700

author
Rebecca Hauck <rhauck@adobe.com>
date
Thu, 05 Sep 2013 17:43:19 -0700
changeset 9048
7730c3fca2a1
parent 8380
ae77d6a3ead3
child 9050
1cb2b4e9ea3b
permissions
-rw-r--r--

added test annotations & test suite links

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

mercurial