зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1498873 - Simplify a check. r=bzbarsky
And make will-change: position properly create an abspos cb while at it, since the check was missing the `mWillChangeBitfield & ABSPOS_CB` bit. Differential Revision: https://phabricator.services.mozilla.com/D8743 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
9ac840bc86
Коммит
a780cefe07
|
@ -3832,7 +3832,6 @@ nsCSSFrameConstructor::ConstructFrameFromItemInternal(FrameConstructionItem& aIt
|
|||
|
||||
// If we need to create a block formatting context to wrap our
|
||||
// kids, do it now.
|
||||
const nsStyleDisplay* maybeAbsoluteContainingBlockDisplay = display;
|
||||
nsIFrame* maybeAbsoluteContainingBlockStyleFrame = primaryFrame;
|
||||
nsIFrame* maybeAbsoluteContainingBlock = newFrame;
|
||||
nsIFrame* possiblyLeafFrame = newFrame;
|
||||
|
@ -3882,7 +3881,6 @@ nsCSSFrameConstructor::ConstructFrameFromItemInternal(FrameConstructionItem& aIt
|
|||
// absolute container.
|
||||
auto outerDisplay = outerSC->StyleDisplay();
|
||||
if (outerDisplay->IsAbsPosContainingBlock(outerFrame)) {
|
||||
maybeAbsoluteContainingBlockDisplay = outerDisplay;
|
||||
maybeAbsoluteContainingBlock = outerFrame;
|
||||
maybeAbsoluteContainingBlockStyleFrame = outerFrame;
|
||||
innerFrame->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
|
||||
|
@ -3918,15 +3916,7 @@ nsCSSFrameConstructor::ConstructFrameFromItemInternal(FrameConstructionItem& aIt
|
|||
aState.PushAbsoluteContainingBlock(nullptr, nullptr, absoluteSaveState);
|
||||
} else if (!(bits & FCDATA_SKIP_ABSPOS_PUSH)) {
|
||||
maybeAbsoluteContainingBlock->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
|
||||
// This check is identical to nsStyleDisplay::IsAbsPosContainingBlock
|
||||
// except without the assertion that the style display and frame match.
|
||||
// When constructing scroll frames we intentionally use the style
|
||||
// display for the outer, but make the inner the containing block.
|
||||
if ((maybeAbsoluteContainingBlockDisplay->IsAbsolutelyPositionedStyle() ||
|
||||
maybeAbsoluteContainingBlockDisplay->IsRelativelyPositionedStyle() ||
|
||||
maybeAbsoluteContainingBlockDisplay->IsFixedPosContainingBlock(
|
||||
maybeAbsoluteContainingBlockStyleFrame)) &&
|
||||
!nsSVGUtils::IsInSVGTextSubtree(maybeAbsoluteContainingBlockStyleFrame)) {
|
||||
if (maybeAbsoluteContainingBlockStyleFrame->IsAbsPosContainingBlock()) {
|
||||
auto* cf = static_cast<nsContainerFrame*>(maybeAbsoluteContainingBlock);
|
||||
aState.PushAbsoluteContainingBlock(cf, maybeAbsoluteContainingBlockStyleFrame, absoluteSaveState);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test Reference</title>
|
||||
<style>
|
||||
.container {
|
||||
border: 1px solid green;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
margin-top: 100px;
|
||||
display: flex;
|
||||
position: relative;
|
||||
}
|
||||
.abspos {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: orange;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<div class="abspos"></div>
|
||||
</div>
|
|
@ -0,0 +1,30 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test: will-change: position turns an element in an abspos containing block.</title>
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1498873">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
|
||||
<link rel="match" href="will-change-abspos-cb-001-ref.html">
|
||||
<style>
|
||||
.container {
|
||||
border: 1px solid green;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
margin-top: 100px;
|
||||
display: flex;
|
||||
will-change: position;
|
||||
}
|
||||
.abspos {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: orange;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<div class="abspos"></div>
|
||||
</div>
|
Загрузка…
Ссылка в новой задаче