Open Bug 1673145 Opened 4 years ago Updated 2 years ago

[css-multicol] Containing block of column spanners

Categories

(Core :: Layout: Columns, defect)

defect

Tracking

()

People

(Reporter: mozilla-apprentice, Unassigned)

References

(Blocks 1 open bug)

Details

A resolution was made for csswg-drafts/#5612.

[css-multicol] Containing block of column spanners

  • RESOLVED: CB chain goes straight from spanner to the multicol container

Discussion.

Hmm, would implementing this resolution violate any frame tree invariants?
Would forcing all our -moz-column-span-wrapper frames be non-CBs give the desired behavior?

Flags: needinfo?(aethanyc)

Hmm, would implementing this resolution violate any frame tree invariants?

What kind of frame tree invariant are you referring to? We should either make sure the invariant are obeyed, or add proper documentation if column-span needs to make some exceptions.

Would forcing all our -moz-column-span-wrapper frames be non-CBs give the desired behavior?

Unfortunately, no. -moz-column-span-wrapper frames is built after all child frame are generated via calling CreateColumnSpanSiblings() as a post-processing. The absolute positioning containing block is already buggy (bug 1491727). The float element's frame is not correctly reparented at all, which triggers nsBlockFrame::CheckFloats: Explicit float list is out of sync with float cache error, and may be the root cause behind bug 1671527. For example:

<!DOCTYPE html>
<div style="columns:2">
  <div style="column-span:all"></div>
  <div style="float:left"></div>
</div>

The initial frame tree has float element parented to the block before the column-span, where its placeholder is parented to the block's continuation after the column-span.

Currently, frame constructor uses PushAbsoluteContainingBlock and PushFloatContainingBlock to open a new scope and store the saved state as a local variable (onto the system stack). When the saved state goes out of scope, the out-of-flow frames get parented to the containing block. Thus, out-of-flow frames may get the wrong parent if they have column-span siblings.

To implement the desired behavior, we might want to implement a real stack in frame constructor to store absolute containing block scopes. When we constructor column-span frame's children, we can adjust the scope of the absolute containing block to skip those in between the spanner and the multicol container.

Flags: needinfo?(aethanyc) → needinfo?(mats)
See Also: → 1681194

Clear a needinfo that is pending on an inactive user.

Inactive users most likely will not respond; if the missing information is essential and cannot be collected another way, the bug maybe should be closed as INCOMPLETE.

For more information, please visit auto_nag documentation.

Flags: needinfo?(MatsPalmgren_bugz)
You need to log in before you can comment on or make changes to this bug.