commit 6eb2a1b52bbbbdb43cc7ee8b64854f3e8a18b485 parent 67791fd91e9488c070eb9320a7e2ce049150c8f5 Author: David Shin <dshin@mozilla.com> Date: Mon, 8 Dec 2025 16:58:10 +0000 Bug 2004040: Properly nudge overflowing abspos elements into IMCB. r=layout-anchor-positioning-reviewers,layout-reviewers,emilio Differential Revision: https://phabricator.services.mozilla.com/D275139 Diffstat:
3 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/layout/generic/AbsoluteContainingBlock.cpp b/layout/generic/AbsoluteContainingBlock.cpp @@ -867,17 +867,19 @@ static nscoord OffsetToAlignedStaticPos( // 1. We fit inside the IMCB, no action needed. } else if (kidSize <= overflowLimitRectEnd - overflowLimitRectStart) { // 2. We overflowed IMCB, try to cover IMCB completely, if it's not. - if (kidEnd < imcbEnd) { - offset += imcbEnd - kidEnd; - } else if (kidStart > imcbStart) { - offset -= kidStart - imcbStart; - } else { + if (kidStart <= imcbStart && kidEnd >= imcbEnd) { // IMCB already covered, ensure that we aren't escaping the limit rect. if (kidStart < overflowLimitRectStart) { offset += overflowLimitRectStart - kidStart; } else if (kidEnd > overflowLimitRectEnd) { offset -= kidEnd - overflowLimitRectEnd; } + } else if (kidEnd < imcbEnd && kidStart < imcbStart) { + // Space to end, overflowing on start - nudge to end. + offset += std::min(imcbStart - kidStart, imcbEnd - kidEnd); + } else if (kidStart > imcbStart && kidEnd > imcbEnd) { + // Space to start, overflowing on end - nudge to start. + offset -= std::min(kidEnd - imcbEnd, kidStart - imcbStart); } } else { // 3. We'll overflow the limit rect. Start align the subject int overflow diff --git a/testing/web-platform/meta/css/css-anchor-position/anchor-center-overflow-001.html.ini b/testing/web-platform/meta/css/css-anchor-position/anchor-center-overflow-001.html.ini @@ -1,2 +0,0 @@ -[anchor-center-overflow-001.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-anchor-position/anchor-center-overflow-004.html.ini b/testing/web-platform/meta/css/css-anchor-position/anchor-center-overflow-004.html.ini @@ -1,2 +0,0 @@ -[anchor-center-overflow-004.html] - expected: FAIL