-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Percentages in top/left/bottom/right properties are relative to the containing block #23
Comments
Does position: relative contribute to overflow in any way? What about position: sticky, which is quite similar? I'd be wary of handling relative / sticky positioning during painting, I know Chrome handles part of the sticky positioning after layout and it's a pain for them:
In particular, for CSSOM and other layout queries like |
Good point. Do you mean the scrollable overflow region? I assume relpos does contribute to it since even transforms are accounted for in that spec. (Positioning is not mentioned explicitly.) |
We can't really do that for relatively positioned elements IMO, that would change the order of the fragments. |
Could we just add an struct BoxOffsets {
inline_start: LengthOrPercentageOrAuto,
inline_end: LengthOrPercentageOrAuto,
block_start: LengthOrPercentageOrAuto,
block_end: LengthOrPercentageOrAuto,
} |
Could you provide a sample exhibiting this? I couldn't reproduce. |
AFAICT by doing some samples, if the containing block doesn't have an non-auto height, then percentages for relative vertical positioning just resolve to 0. |
Oh, wonderful. It looks like at least Firefox and Chromium have interop and disagree with the spec. For the
… but nothing similar for offset properties. |
Test case: remove the |
Try on quirks mode / no quirks mode for fun / sadness :) |
@emilio Do you mean in general or in this specific case? I couldn’t reproduce a behavior change when adding or removing a doctype in the test case above. |
Not in Gecko, but without the |
In this code:
victor/victor/src/layout/mod.rs
Line 249 in dcdc5f6
The size of a block box is given as a basis to resolve percentages in offset properties if that same box is
position: relative
. Instead, the size of the containing block should be used. However at this point in the code, the block-direction size of the containing block might not be known yet. Therefore the computation ofposition: relative
offsets must be delayed until later, when it is known. Options include:When the "main layout phase" is finished for a containing block, do a another sub-tree traversal to find and adjust
position: relative
descendants that have this containing block. (They are not necessarily direct children in the box tree, for example for inline boxes.)Keep track during the main phase of a list of
position: relative
descendants, like we already do forpostition: absolute
. This has an allocation and memory cost.Only account for
position: relative
offsets during the "painting" phase. (Or eventually in Servo, during display list construction.)The last one seems preferable to me, but requires keeping track of containing blocks in the fragment tree. (The containing block is not necessarily the direct parent fragment, again because of nested inline boxes.)
CC @nox
The text was updated successfully, but these errors were encountered: