====== Computed Values Patterns ====== Computed Value (the concept in the propdef table) is a UA-internal representation of a property mainly meant for supporting animations. It’s necessary for animatable properties to produce interpolable computed values. Inferred values (such as with various variants, or single-value border-radius-* values) will likely need to be added to the computed value to produce an interpolable result. Even if a property is not animatable, it’s probably useful to design the computed value such that it could support interpolation. Serialization (such as the result from getComputedStyle) is a valid CSS string representation that might only have a tenuous connection to the computed value representation. Its main characteristic is that it must ‘round-trip’ with parsing. Inferred values can be omitted here. If a grammar allows ordering options, the serialized value should prefer an order (usually what’s presented in the grammar). Here are some examples using background-position: Declared value: right 10px Computed value: (100% - 10px), (50% + 0px) getComputedValue result: right 10px Declared value: bottom 50px top 10% Computed value: (10% + 0px), (100% - 50px) getComputedValue result: 10% bottom 50px Declared value: center center Computed value: (50% + 0px), (50% + 0px) getComputedValue result: center This page lists a number of design patterns that have been identified for computed values. If you're a spec editor, you should check the "computed value:" definition of the properties in your spec with this document. - computed values should depend only on the specified or computed values of properties on the element or its parent - computed values must never depend on layout - shorthand properties do not have computed values. For them, simply specify: * Computed value: see individual properties - url() resolvability cannot affect the computed value, since the concept of computed value shouldn't require accessing the network. - which format a url() resource is (e.g. whether the browser supports it) also cannot affect the computed value - URIs in computed values are absolute. E.g. * Computed value: as specified, except with any relative URLs converted to absolute - properties that just accept keyword or IDREF values, should just specify: * Computed value: as specified - (disputed) computed values should never depend on containing block hierarchy (though note that they already do in CSS21, eg 'height' for percentage values (http://lists.w3.org/Archives/Public/www-style/2011Sep/0008.html)