зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1278455. If the root element is grid or flex, allow it to be an absolute containing block. r=dholbert
If the root element is block or table then the PushAbsoluteContainingBlock call happens in ConstructBlock and ConstructTable respectively.
This commit is contained in:
Родитель
0ae824a629
Коммит
9fb446699f
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html style="transform: translateX(3px); display: grid;">
|
||||||
|
<head>
|
||||||
|
<!--
|
||||||
|
user_pref("layout.event-regions.enabled", true);
|
||||||
|
-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="position: absolute;">Z</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -473,3 +473,4 @@ load 1234622-1.html
|
||||||
load 1235467-1.html
|
load 1235467-1.html
|
||||||
pref(dom.webcomponents.enabled,true) load 1261351.html
|
pref(dom.webcomponents.enabled,true) load 1261351.html
|
||||||
load 1270797-1.html
|
load 1270797-1.html
|
||||||
|
load 1278455-1.html
|
||||||
|
|
|
@ -2496,14 +2496,14 @@ nsCSSFrameConstructor::ConstructDocElementFrame(Element* aDocEle
|
||||||
// Make sure to start any background image loads for the root element now.
|
// Make sure to start any background image loads for the root element now.
|
||||||
styleContext->StartBackgroundImageLoads();
|
styleContext->StartBackgroundImageLoads();
|
||||||
|
|
||||||
nsFrameConstructorSaveState absoluteSaveState;
|
nsFrameConstructorSaveState docElementContainingBlockAbsoluteSaveState;
|
||||||
if (mHasRootAbsPosContainingBlock) {
|
if (mHasRootAbsPosContainingBlock) {
|
||||||
// Push the absolute containing block now so we can absolutely position
|
// Push the absolute containing block now so we can absolutely position
|
||||||
// the root element
|
// the root element
|
||||||
mDocElementContainingBlock->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
|
mDocElementContainingBlock->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
|
||||||
state.PushAbsoluteContainingBlock(mDocElementContainingBlock,
|
state.PushAbsoluteContainingBlock(mDocElementContainingBlock,
|
||||||
mDocElementContainingBlock,
|
mDocElementContainingBlock,
|
||||||
absoluteSaveState);
|
docElementContainingBlockAbsoluteSaveState);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The rules from CSS 2.1, section 9.2.4, have already been applied
|
// The rules from CSS 2.1, section 9.2.4, have already been applied
|
||||||
|
@ -2520,6 +2520,8 @@ nsCSSFrameConstructor::ConstructDocElementFrame(Element* aDocEle
|
||||||
nsIFrame* newFrame;
|
nsIFrame* newFrame;
|
||||||
bool processChildren = false;
|
bool processChildren = false;
|
||||||
|
|
||||||
|
nsFrameConstructorSaveState absoluteSaveState;
|
||||||
|
|
||||||
// Check whether we need to build a XUL box or SVG root frame
|
// Check whether we need to build a XUL box or SVG root frame
|
||||||
#ifdef MOZ_XUL
|
#ifdef MOZ_XUL
|
||||||
if (aDocElement->IsXULElement()) {
|
if (aDocElement->IsXULElement()) {
|
||||||
|
@ -2565,12 +2567,26 @@ nsCSSFrameConstructor::ConstructDocElementFrame(Element* aDocEle
|
||||||
contentFrame);
|
contentFrame);
|
||||||
newFrame = contentFrame;
|
newFrame = contentFrame;
|
||||||
processChildren = true;
|
processChildren = true;
|
||||||
|
|
||||||
|
newFrame->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
|
||||||
|
if (display->IsAbsPosContainingBlock(newFrame)) {
|
||||||
|
state.PushAbsoluteContainingBlock(contentFrame, newFrame,
|
||||||
|
absoluteSaveState);
|
||||||
|
}
|
||||||
|
|
||||||
} else if (display->mDisplay == NS_STYLE_DISPLAY_GRID) {
|
} else if (display->mDisplay == NS_STYLE_DISPLAY_GRID) {
|
||||||
contentFrame = NS_NewGridContainerFrame(mPresShell, styleContext);
|
contentFrame = NS_NewGridContainerFrame(mPresShell, styleContext);
|
||||||
InitAndRestoreFrame(state, aDocElement, mDocElementContainingBlock,
|
InitAndRestoreFrame(state, aDocElement, mDocElementContainingBlock,
|
||||||
contentFrame);
|
contentFrame);
|
||||||
newFrame = contentFrame;
|
newFrame = contentFrame;
|
||||||
processChildren = true;
|
processChildren = true;
|
||||||
|
|
||||||
|
newFrame->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
|
||||||
|
if (display->IsAbsPosContainingBlock(newFrame)) {
|
||||||
|
state.PushAbsoluteContainingBlock(contentFrame, newFrame,
|
||||||
|
absoluteSaveState);
|
||||||
|
}
|
||||||
|
|
||||||
} else if (display->mDisplay == NS_STYLE_DISPLAY_TABLE) {
|
} else if (display->mDisplay == NS_STYLE_DISPLAY_TABLE) {
|
||||||
// We're going to call the right function ourselves, so no need to give a
|
// We're going to call the right function ourselves, so no need to give a
|
||||||
// function to this FrameConstructionData.
|
// function to this FrameConstructionData.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче