Skip to content

[css-position] should take writing-mode into account #3098

@Loirooriol

Description

@Loirooriol

CSS Position seems to assume an horizontal writing mode everywhere, where direction affects left or right sides. But in fact direction affects the inline-start and inline-end sides, which may be vertical!

Some examples,

  • In https://drafts.csswg.org/css-position-3/#def-cb,

    In the case that the ancestor is inline-level, the containing block depends on the direction property of the ancestor:

    1. If the direction is ltr, the top and left of the containing block are the top and left content edges of the first box generated by the ancestor, and the bottom and right are the bottom and right content edges of the last box of the ancestor.
    2. If the direction is rtl, the top and right are the top and right edges of the first box generated by the ancestor, and the bottom and left are the bottom and left content edges of the last box of the ancestor.

    should be

    The block-start and inline-start of the containing block are the block-start and inline-start content edges of the first box generated by the ancestor, and the block-end and inline-end are the block-end and inline-end content edges of the last box of the ancestor.

  • In https://drafts.csswg.org/css-position-3/#rel-pos,

    If neither left nor right is auto, the position is over-constrained, and one of them has to be ignored. If the direction property of the containing block is ltr, the value of left wins and right becomes -left. If direction of the containing block is rtl, right wins and left is ignored.
    If neither top and bottom is auto, bottom is ignored (i.e., the used value of bottom will be minus the value of top).

    should be

    If neither inset-inline-start nor inset-inline-end is auto, the position is over-constrained, inset-inline-start wins and inset-inline-end is ignored (i.e., the used value of inset-inline-end will be minus the value of inset-inline-start).
    If neither inset-block-start nor inset-block-end is auto, the position is over-constrained, inset-block-start wins and inset-block-end is ignored (i.e., the used value of inset-block-end will be minus the value of inset-block-start).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions