зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1576355 - Don't try to optimize position style changes for rel.pos. grid items. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D43387 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
2826398670
Коммит
9adf43a616
|
@ -722,6 +722,11 @@ static bool RecomputePosition(nsIFrame* aFrame) {
|
|||
|
||||
// For relative positioning, we can simply update the frame rect
|
||||
if (display->IsRelativelyPositionedStyle()) {
|
||||
if (aFrame->IsGridItem()) {
|
||||
// A grid item's CB is its grid area, not the parent frame content area
|
||||
// as is assumed below.
|
||||
return false;
|
||||
}
|
||||
// Move the frame
|
||||
if (display->mPosition == NS_STYLE_POSITION_STICKY) {
|
||||
// Update sticky positioning for an entire element at once, starting with
|
||||
|
|
|
@ -3944,6 +3944,10 @@ class nsIFrame : public nsQueryFrame {
|
|||
* Is this a flex item? (i.e. a non-abs-pos child of a flex container)
|
||||
*/
|
||||
inline bool IsFlexItem() const;
|
||||
/**
|
||||
* Is this a grid item? (i.e. a non-abs-pos child of a grid container)
|
||||
*/
|
||||
inline bool IsGridItem() const;
|
||||
/**
|
||||
* Is this a flex or grid item? (i.e. a non-abs-pos child of a flex/grid
|
||||
* container)
|
||||
|
|
|
@ -19,6 +19,11 @@ bool nsIFrame::IsFlexItem() const {
|
|||
!(GetStateBits() & NS_FRAME_OUT_OF_FLOW);
|
||||
}
|
||||
|
||||
bool nsIFrame::IsGridItem() const {
|
||||
return GetParent() && GetParent()->IsGridContainerFrame() &&
|
||||
!(GetStateBits() & NS_FRAME_OUT_OF_FLOW);
|
||||
}
|
||||
|
||||
bool nsIFrame::IsFlexOrGridContainer() const {
|
||||
return IsFlexContainerFrame() || IsGridContainerFrame();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset="utf-8">
|
||||
<title>Reference: Rel.pos. grid item with style change.</title>
|
||||
<link rel="author" title="James0x57" href="mailto:James0x57@gmail.com">
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<style>
|
||||
.grid {
|
||||
margin: 40px;
|
||||
display: grid;
|
||||
grid: auto / repeat(3,100px);
|
||||
grid-gap: 20px;
|
||||
}
|
||||
span, even {
|
||||
position: relative;
|
||||
min-height: 20px;
|
||||
background: grey;
|
||||
left: 0px;
|
||||
}
|
||||
.offset even {
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<div class="grid offset">
|
||||
<span></span><span></span><span></span>
|
||||
<even></even><even></even><even></even>
|
||||
<span></span><span></span><span></span>
|
||||
</div>
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Grid Layout Test: Rel.pos. grid item with style change.</title>
|
||||
<link rel="author" title="James0x57" href="mailto:James0x57@gmail.com">
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<link rel="help" href="http://www.w3.org/TR/css-grid-1/#grid-items" title="Grid Items">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1576355">
|
||||
<link rel="match" href="grid-item-rel-pos-001-ref.html">
|
||||
<meta name="assert" content="Checks that the rel.pos. grid items are positioned correctly after a 'left' style change.">
|
||||
<style>
|
||||
.grid {
|
||||
margin: 40px;
|
||||
display: grid;
|
||||
grid: auto / repeat(3,100px);
|
||||
grid-gap: 20px;
|
||||
}
|
||||
span, even {
|
||||
position: relative;
|
||||
min-height: 20px;
|
||||
background: grey;
|
||||
left: 0px;
|
||||
}
|
||||
.offset even {
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<div class="grid offset">
|
||||
<span></span><span></span><span></span>
|
||||
<even></even><even></even><even></even>
|
||||
<span></span><span></span><span></span>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.body.offsetHeight;
|
||||
let grid = document.querySelector('.grid');
|
||||
grid.classList.remove('offset')
|
||||
document.body.offsetHeight;
|
||||
grid.classList.add('offset')
|
||||
</script>
|
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset="utf-8">
|
||||
<title>Reference: Rel.pos. centered grid item with style change.</title>
|
||||
<link rel="author" title="James0x57" href="mailto:James0x57@gmail.com">
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<style>
|
||||
.grid {
|
||||
margin: 40px;
|
||||
display: grid;
|
||||
grid: auto / repeat(3,100px);
|
||||
grid-gap: 20px;
|
||||
}
|
||||
span, even {
|
||||
position: relative;
|
||||
min-height: 20px;
|
||||
background: grey;
|
||||
left: 0px;
|
||||
width: 30px;
|
||||
justify-self: center;
|
||||
}
|
||||
.offset even {
|
||||
left: 20%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="grid offset">
|
||||
<span></span><span></span><span></span>
|
||||
<even></even><even></even><even></even>
|
||||
<span></span><span></span><span></span>
|
||||
</div>
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE HTML>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Grid Layout Test: Rel.pos. centered grid item with style change.</title>
|
||||
<link rel="author" title="James0x57" href="mailto:James0x57@gmail.com">
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<link rel="help" href="http://www.w3.org/TR/css-grid-1/#grid-items" title="Grid Items">
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1576355">
|
||||
<link rel="match" href="grid-item-rel-pos-002-ref.html">
|
||||
<meta name="assert" content="Checks that the rel.pos. grid items are positioned correctly after a 'left' style change.">
|
||||
<style>
|
||||
.grid {
|
||||
margin: 40px;
|
||||
display: grid;
|
||||
grid: auto / repeat(3,100px);
|
||||
grid-gap: 20px;
|
||||
}
|
||||
span, even {
|
||||
position: relative;
|
||||
min-height: 20px;
|
||||
background: grey;
|
||||
left: 0px;
|
||||
width: 30px;
|
||||
justify-self: center;
|
||||
}
|
||||
.offset even {
|
||||
left: 20%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="grid offset">
|
||||
<span></span><span></span><span></span>
|
||||
<even></even><even></even><even></even>
|
||||
<span></span><span></span><span></span>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.body.offsetHeight;
|
||||
let grid = document.querySelector('.grid');
|
||||
grid.classList.remove('offset')
|
||||
document.body.offsetHeight;
|
||||
grid.classList.add('offset')
|
||||
</script>
|
Загрузка…
Ссылка в новой задаче