commit e338585458bfdf4a7530fd75a5363fe6cd7c423d parent 275da674fe527ff459c0475864e6d24e91e9a541 Author: David Shin <dshin@mozilla.com> Date: Sun, 7 Dec 2025 19:05:43 +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,11 +867,13 @@ 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 (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 if (kidStart >= imcbStart && kidEnd <= imcbEnd) { // IMCB already covered, ensure that we aren't escaping the limit rect. if (kidStart < overflowLimitRectStart) { offset += overflowLimitRectStart - kidStart; 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