Closed Bug 1987500 Opened 9 months ago Closed 5 months ago

Cannot vertically position abspos frames in a fragmented abspos container's second column (And beyond)

Categories

(Core :: Layout: Columns, defect)

defect

Tracking

()

RESOLVED DUPLICATE of bug 1994346

People

(Reporter: dshin, Unassigned)

References

(Depends on 1 open bug)

Details

Attachments

(2 files)

STR: Run attached test case
Expected: Purple square in the middle of each column
Actual: Purple square in the second column is stuck at the top, purple squares in 3rd and 4th column are missing.

Ah, It's not that 3rd and 4th columns' squares are missing; they're all overlapping the 2nd one.

Attached file column-rule bug

If column-rule: 1px solid is used, I see the column rule only going between the first and the second column, overflowing the multicol frame.
It seems the length of the column-rule corresponds to the value of top.

Corresponding frame dump:

ColumnSetWrapper(div)(0)@7124c23d5c68 parent=7124c23d5a88 (x=0, y=0, w=24300, h=6120) ink-overflow=(x=0, y=0, w=24300, h=19560) scr-overflow=(x=0, y=0, w=24300, h=19560) [content=7124bef03d30][cs=7124c23f3f08] <
  line@7124c23d5df0 count=1 state=block,clean,prevmarginclean,not-impacted,not-wrapped,no-break,clear-before:none,clear-after:none (x=60, y=60, w=6000, h=19500) ink-overflow=(x=60, y=60, w=12060, h=19500) scr-overflow=(x=60, y=60, w=12060, h=19500) <
    ColumnSet(div)(0)@7124c23d5d38 parent=7124c23d5c68 (x=60, y=60, w=6000, h=19500) ink-overflow=(x=0, y=0, w=12060, h=19500) scr-overflow=(x=0, y=0, w=12060, h=19500) [content=7124bef03d30][cs=7124c23f4108][:-moz-column-set] <
      Block(div)(0)@7124c23d5ba0 parent=7124c23d5d38 next=7124c23d6a38 next-in-flow=7124c23d6a38 (x=0, y=0, w=6000, h=0) ink-overflow=(x=0, y=0, w=6000, h=4500) scr-overflow=(x=0, y=0, w=6000, h=4500) [content=7124bef03d30][cs=7124c23f3808][:-moz-column-content] <
        line@7124c23d6658 count=1 state=block,clean,prevmarginclean,not-impacted,not-wrapped,no-break,clear-before:none,clear-after:none (x=0, y=0, w=6000, h=0) ink-overflow=(x=0, y=0, w=6000, h=4500) scr-overflow=(x=0, y=0, w=6000, h=4500) <
          Block(div)(1)@7124c23d5e40 parent=7124c23d5ba0 next-in-flow=7124c23d6960 (x=0, y=0, w=6000, h=0) ink-overflow=(x=0, y=0, w=6000, h=4500) scr-overflow=(x=0, y=0, w=6000, h=4500) normal-position=(0,0) [content=7124bef03dc0][cs=7124c23f3408] <
            line@7124c23d6608 count=7 state=inline,clean,prevmarginclean,not-impacted,not-wrapped,no-break,clear-before:none,clear-after:none (x=0, y=0, w=0, h=0) <
              Placeholder(div)(1)@7124c23d5fd0 parent=7124c23d5e40 next=7124c23d6050 (x=0, y=0, w=0, h=0) [content=7124bef04040][cs=7124c23f3308][:-moz-oof-placeholder] outOfFlowFrame=Block(div)(1)@7124c23d5f08
              Text(2)"\n    "@7124c23d6050 parent=7124c23d5e40 next=7124c23d61b8 (x=0, y=0, w=0, h=0) [content=7124bef0b980][cs=7124c23f4e08][:-moz-text] [run=7124ea1e3f70][0,5,T] 
              Placeholder(div)(3)@7124c23d61b8 parent=7124c23d5e40 next=7124c23d6238 (x=0, y=0, w=0, h=0) [content=7124bef040d0][cs=7124c23f3308][:-moz-oof-placeholder] outOfFlowFrame=Block(div)(3)@7124c23d60f0
              Text(4)"\n    "@7124c23d6238 parent=7124c23d5e40 next=7124c23d63a0 (x=0, y=0, w=0, h=0) [content=7124bef0ba00][cs=7124c23f4e08][:-moz-text] [run=7124c5746680][0,5,T] 
              Placeholder(div)(5)@7124c23d63a0 parent=7124c23d5e40 next=7124c23d6420 (x=0, y=0, w=0, h=0) [content=7124bef04160][cs=7124c23f3308][:-moz-oof-placeholder] outOfFlowFrame=Block(div)(5)@7124c23d62d8
              Text(6)"\n    "@7124c23d6420 parent=7124c23d5e40 next=7124c23d6588 (x=0, y=0, w=0, h=0) [content=7124bef0ba80][cs=7124c23f4e08][:-moz-text] [run=7124c5746400][0,5,T] 
              Placeholder(div)(7)@7124c23d6588 parent=7124c23d5e40 (x=0, y=0, w=0, h=0) [content=7124bef041f0][cs=7124c23f3308][:-moz-oof-placeholder] outOfFlowFrame=Block(div)(7)@7124c23d64c0
            >
            AbsoluteList@7124c2359fa0 <
              Block(div)(1)@7124c23d5f08 parent=7124c23d5e40 next=7124c23d60f0 (x=1500, y=1500, w=3000, h=3000) [content=7124bef04040][cs=7124c23f4908] <
              >
              Block(div)(3)@7124c23d60f0 parent=7124c23d5e40 next=7124c23d62d8 next-in-flow=7124c23d66f8 (x=1500, y=7500, w=3000, h=0) [content=7124bef040d0][cs=7124c23f3608] <
              >
              Block(div)(5)@7124c23d62d8 parent=7124c23d5e40 next=7124c23d64c0 next-in-flow=7124c23d67d0 (x=1500, y=13500, w=3000, h=0) [content=7124bef04160][cs=7124c23f4a08] <
              >
              Block(div)(7)@7124c23d64c0 parent=7124c23d5e40 next-in-flow=7124c23d6898 (x=1500, y=19500, w=3000, h=0) [content=7124bef041f0][cs=7124c23f4b08] <
              >
            >
          >
        >
      >
      Block(div)(0)@7124c23d6a38 parent=7124c23d5d38 prev-in-flow=7124c23d5ba0 (x=6060, y=0, w=6000, h=0) ink-overflow=(x=0, y=0, w=6000, h=3000) scr-overflow=(x=0, y=0, w=6000, h=3000) [content=7124bef03d30][cs=7124c23f3808][:-moz-column-content] <
        OverflowContainersList@7124c23d6b00 <
          Block(div)(1)@7124c23d6960 parent=7124c23d6a38 prev-in-flow=7124c23d5e40 (x=0, y=0, w=6000, h=0) ink-overflow=(x=0, y=0, w=6000, h=3000) scr-overflow=(x=0, y=0, w=6000, h=3000) [content=7124bef03dc0][cs=7124c23f3408] <
            OverflowContainersList@7124c23d6a28 <
              Block(div)(3)@7124c23d66f8 parent=7124c23d6960 next=7124c23d67d0 prev-in-flow=7124c23d60f0 (x=1500, y=0, w=3000, h=3000) [content=7124bef040d0][cs=7124c23f3608] <
              >
              Block(div)(5)@7124c23d67d0 parent=7124c23d6960 next=7124c23d6898 prev-in-flow=7124c23d62d8 (x=1500, y=0, w=3000, h=3000) [content=7124bef04160][cs=7124c23f4a08] <
              >
              Block(div)(7)@7124c23d6898 parent=7124c23d6960 prev-in-flow=7124c23d64c0 (x=1500, y=0, w=3000, h=3000) [content=7124bef041f0][cs=7124c23f4b08] <
              >
            >
          >
        >
      >
    >
  >
>
See Also: → 1987930
Blocks: 1987931

Overflow is added as a hack, it seems, here, for printing.

Eventually, this causes the overflowed frame to be reflow outside of nsAbsoluteContainingBlock, in nsContainerFrame::ReflowOverflowContainerChildren.

Fixing this would require having continuation handling specific to nsAbsoluteContainingBlock, as the comment referencing the hack says.

See Also: → 154892

(In reply to David Shin[:dshin] from comment #1)

Ah, It's not that 3rd and 4th columns' squares are missing; they're all overlapping the 2nd one.

That sounds like it might be the same as bug 546559, then. (The 2nd column here -- where elements 2,3,4 get superimposed at the top -- is analogous to the 2nd page in bug 546559.)

Marking as a dependency for now.

Depends on: 546559

I'm planning to look into this bug.

Flags: needinfo?(aethanyc)
No longer depends on: 1994083

This is fixed by bug 1994346 with layout.abspos.fragmentainer-aware-positioning.enabled=true. Both testcases in comment 0 and comment 2 look as expected.

David, I'm going to close this, but let me know if I miss anything.

Status: NEW → RESOLVED
Closed: 5 months ago
Duplicate of bug: 1994346
Flags: needinfo?(aethanyc)
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: