Stylus Studio XML Editor

Table of contents

Appendices

5.3 Computing the Values of Corresponding Properties

Computing the Values of Corresponding Properties

Where there are corresponding properties, such as "padding-left" and "padding-start", a computed value is determined for all the corresponding properties. How the computed values are determined for a given formatting object is dependent on which of the corresponding properties are specified on the object. See description below.

The correspondence mapping from absolute to relative property is as follows:

If the "writing-mode" specifies a block-progression-direction of "top-to-bottom": "top" maps to "before", and "bottom" maps to "after".

If the "writing-mode" specifies a block-progression-direction of "bottom-to-top": "top" maps to "after", and "bottom" maps to "before".

If the "writing-mode" specifies a block-progression-direction of "left-to-right": "left" maps to "before", and "right" maps to "after".

If the "writing-mode" specifies a block-progression-direction of "right-to-left": "left" maps to "after", and "right" maps to "before".

If the "writing-mode" specifies an inline-progression-direction of "left-to-right": "left" maps to "start", and "right" maps to "end".

If the "writing-mode" specifies an inline-progression-direction of "right-to-left": "left" maps to "end", and "right" maps to "start".

If the "writing-mode" specifies an inline-progression-direction of "top-to-bottom": "top" maps to "start", and "bottom" maps to "end".

If the "writing-mode" specifies an inline-progression-direction of "bottom-to-top": "top" maps to "end", and "bottom" maps to "start".

If the "writing-mode" specifies an inline-progression-direction of "left-to-right" for odd-numbered lines, and "right-to-left" for even-numbered lines: "left" maps to "start", and "right" maps to "end".

NOTE: 

"reference-orientation" is a rotation and does not influence the correspondence mapping.

Border and Padding Properties[top]

Border and Padding Properties

The simplest class of corresponding properties are those for which there are only two variants in the correspondence, an absolute property and a relative property, and the property names differ only in the choice of absolute or relative designation; for example, "border-left-color" and "border-start-color".

For this class, the computed values of the corresponding properties are determined as follows. If the corresponding absolute variant of the property is specified on the formatting object, its computed value is used to set the computed value of the corresponding relative property. If the corresponding absolute property is not explicitly specified, then the computed value of the absolute property is set to the computed value of the corresponding relative property. If the corresponding relative property is specified on the formatting object and the absolute property only specified by the expansion of a shorthand, then the computed value of the absolute property is set to the computed value of the corresponding relative property.

Note that if both the absolute and the relative properties are not explicitly specified, then the rules for determining the specified value will use either inheritance if that is defined for the property or the initial value. The initial value must be the same for all possible corresponding properties. If both an absolute and a corresponding relative property are explicitly specified, then the above rule gives precedence to the absolute property, and the specified value of the corresponding relative property is ignored in determining the computed value of the corresponding properties.

The (corresponding) properties that use the above rule to determine their computed value are:

  • border-after-color

  • border-before-color

  • border-end-color

  • border-start-color

  • border-after-style

  • border-before-style

  • border-end-style

  • border-start-style

  • border-after-width

  • border-before-width

  • border-end-width

  • border-start-width

  • padding-after

  • padding-before

  • padding-end

  • padding-start

Margin, Space, and Indent Properties[top]

Margin, Space, and Indent Properties

The "space-before", and "space-after" properties (block-level formatting objects), "space-start", and "space-end" properties (inline-level formatting objects) are handled in the same way as the properties immediately above, but the corresponding absolute properties are in the set: "margin-top", "margin-bottom", "margin-left", and "margin-right". The .conditionality component of any space-before or space-after determined from a margin property is set to "retain".

NOTE: 

The treatment of the .conditionality component is for CSS2 compatibility.

NOTE: 

The computed value of a CSS2 margin in the block-progression-dimension specified as "auto" is 0pt. Any space-before or space-after determined from a margin value of "auto" is set to 0pt.

There are two more properties, "end-indent" and "start-indent" (block-level formatting objects) which correspond to the various absolute "margin" properties. For these properties, the correspondence is more complex and involves the corresponding "border-X-width" and "padding-X" properties, where X is one of "left", "right", "top" or "bottom". The computed values of these corresponding properties are determined as follows:

If the corresponding absolute "margin" property is specified on the formatting object and the formatting object generates a reference area the computed value of the margin is used to calculate the computed value of the corresponding "Y-indent" property, where Y is either "start" or "end". The formulae for "start-indent" and "end-indent" are":

start-indent = margin-corresponding + padding-corresponding + border-corresponding-width

end-indent = margin-corresponding + padding-corresponding + border-corresponding-width

If the corresponding absolute "margin" property is specified on the formatting object and the formatting object does not generate a reference area, the computed value of the margin and the computed values of the corresponding "border-X-width" and "padding-X" properties are used to calculate the computed value of the corresponding "Y-indent" property. The formulae for "start-indent" and "end-indent" are:

start-indent = inherited_value_of(start-indent) + margin-corresponding + padding-corresponding + border-corresponding-width

end-indent = inherited_value_of(end-indent) + margin-corresponding + padding-corresponding + border-corresponding-width

If the corresponding absolute margin property is not explicitly specified, or if the corresponding relative property is specified on the formatting object and the absolute property only specified by the expansion of a shorthand, the corresponding absolute margin property is calculated according to the following formulae:

margin-corresponding = start-indent - inherited_value_of(start-indent) - padding-corresponding - border-corresponding-width

margin-corresponding = end-indent - inherited_value_of(end-indent) - padding-corresponding - border-corresponding-width

NOTE: 

If the "start-indent" or "end-indent" properties are not specified their inherited value is used in these formulae.

Height, and Width Properties[top]

Height, and Width Properties

Based on the writing-mode in effect for the formatting object, either the "height", "min-height", and "max-height" properties, or the "width", "min-width", and "max-width" properties are converted to the corresponding block-progression-dimension, or inline-progression-dimension.

The "height" properties are absolute and indicate the dimension from "top" to "bottom"; the width properties the dimension from "left" to "right".

If the "writing-mode" specifies a block-progression-direction of "top-to-bottom" or "bottom-to-top" the conversion is as follows:

  • If any of "height", "min-height", or "max-height" is specified:

    • If "height" is specified then first set:

      block-progression-dimension.minimum=<height>

      block-progression-dimension.optimum=<height>

      block-progression-dimension.maximum=<height>

    • If "height" is not specified, then first set:

      block-progression-dimension.minimum=auto

      block-progression-dimension.optimum=auto

      block-progression-dimension.maximum=auto

    • Then, if "min-height" is specified, reset:

      block-progression-dimension.minimum=<min-height>

    • Then, if "max-height" is specified, reset:

      block-progression-dimension.maximum=<max-height>

    • However, if "max-height" is specified as "none", reset:

      block-progression-dimension.maximum=auto

  • If any of "width", "min-width", or "min-width" is specified:

    • If "width" is specified then first set:

      inline-progression-dimension.minimum=<width>

      inline-progression-dimension.optimum=<width>

      inline-progression-dimension.maximum=<width>

    • If "width" is not specified, then first set:

      inline-progression-dimension.minimum=auto

      inline-progression-dimension.optimum=auto

      inline-progression-dimension.maximum=auto

    • Then, if "min-width" is specified, reset:

      inline-progression-dimension.minimum=<min-width>

    • Then, if "max-width" is specified, reset:

      inline-progression-dimension.maximum=<max-width>

    • However, if "max-width" is specified as "none", reset:

      inline-progression-dimension.maximum=auto

If the "writing-mode" specifies a block-progression-direction of "left-to-right" or "right-to-left" the conversion is as follows:

  • If any of "height", "min-height", or "max-height" is specified:

    • If "height" is specified then first set:

      inline-progression-dimension.minimum=<height>

      inline-progression-dimension.optimum=<height>

      inline-progression-dimension.maximum=<height>

    • If "height" is not specified, then first set:

      inline-progression-dimension.minimum=auto

      inline-progression-dimension.optimum=auto

      inline-progression-dimension.maximum=auto

    • Then, if "min-height" is specified, reset:

      inline-progression-dimension.minimum=<min-height>

    • Then, if "max-height" is specified, reset:

      inline-progression-dimension.maximum=<max-height>

    • However, if "max-height" is specified as "none", reset:

      inline-progression-dimension.maximum=auto

  • If any of "width", "min-width", or "min-width" is specified:

    • If "width" is specified then first set:

      block-progression-dimension.minimum=<width>

      block-progression-dimension.optimum=<width>

      block-progression-dimension.maximum=<width>

    • If "width" is not specified, then first set:

      block-progression-dimension.minimum=auto

      block-progression-dimension.optimum=auto

      block-progression-dimension.maximum=auto

    • Then, if "min-width" is specified, reset:

      block-progression-dimension.minimum=<min-width>

    • Then, if "max-width" is specified, reset:

      block-progression-dimension.maximum=<max-width>

    • However, if "max-width" is specified as "none", reset:

      block-progression-dimension.maximum=auto

Overconstrained Geometry[top]

Overconstrained Geometry

The sum of the start-indent, end-indent, and inline-progression-dimension of the content-rectangle of an area should be equal to the inline-progression-dimension of the content-rectangle of the closest ancestor reference-area. In the case where a specification would lead to them being different the end-indent (and thus the corresponding margin) is adjusted such that the equality is true.