Bug 958714 Remove special case for flex & grid items' percent block-axis margin/padding resolution, to align with other browsers

This commit is contained in:
janekptacijarabaci 2018-07-20 09:09:36 +02:00 • committed by Roy Tam
commit a99820e3ab
8 changed files with 30 additions and 51 deletions

View file

@ -2142,14 +2142,11 @@ OffsetPercentBasis(const nsIFrame* aFrame,
WritingMode aWM, WritingMode aWM,
const LogicalSize& aContainingBlockSize) const LogicalSize& aContainingBlockSize)
{ {
// XXX The next patch in this series will get rid of this function and have
// the upstream/downstream code just work with the one nscoord value that
// we'll be dealing with now (which is aContainingBlockSize.ISize(aWM)).
LogicalSize offsetPercentBasis = aContainingBlockSize; LogicalSize offsetPercentBasis = aContainingBlockSize;
if (MOZ_LIKELY(!aFrame->GetParent() || offsetPercentBasis.BSize(aWM) = offsetPercentBasis.ISize(aWM);
!aFrame->GetParent()->IsFlexOrGridContainer())) {
offsetPercentBasis.BSize(aWM) = offsetPercentBasis.ISize(aWM);
} else if (offsetPercentBasis.BSize(aWM) == NS_AUTOHEIGHT) {
offsetPercentBasis.BSize(aWM) = 0;
}
return offsetPercentBasis; return offsetPercentBasis;
} }

View file

@ -67,18 +67,18 @@ b40 {
width: 42px; width: 42px;
/* This margin-left is 20% of 98px-wide grid area */ /* This margin-left is 20% of 98px-wide grid area */
margin-left: 19.6px; margin-left: 19.6px;
/* This padding-bottom is 10% of 47.5px tall grid area */ /* This padding-bottom is 10% of 98px wide grid area */
/* This padding-left is 30% of 98px wide grid area */ /* This padding-left is 30% of 98px wide grid area */
padding: 1px 3px 4.75px 29.4px; padding: 1px 3px 9.8px 29.4px;
} }
.v.r { .v.r {
height: 42px; height: 42px;
width: 42px; width: 42px;
/* This margin-left is 20% of 54px-wide grid area */ /* This margin-left is 20% of 54px-wide grid area */
margin-left: 10.8px; margin-left: 10.8px;
/* This padding-bottom is 10% of 102.5px tall grid area */ /* This padding-bottom is 10% of 54px wide grid area */
/* This padding-left is 30% of 54px wide grid area */ /* This padding-left is 30% of 54px wide grid area */
padding: 1px 3px 10.25px 16.2px; padding: 1px 3px 5.4px 16.2px;
} }
.r { position:relative; } .r { position:relative; }

View file

@ -30,8 +30,8 @@ body,html { color:black; background:white; font-size:16px; padding:0; margin:0;
} }
.p { padding:2px 3px; } .p { padding:2px 3px; }
.m { margin:2px 3px; } .m { margin:2px 3px; }
.c1.p,.c2.p { padding:5px 9px; } .c1.p,.c2.p { padding:6px 9px; }
.c1.m,.c2.m { margin:5px 9px; } .c1.m,.c2.m { margin:6px 9px; }
.b { border:solid black; } .b { border:solid black; }
#t1 { width:50px; height: 20px; } #t1 { width:50px; height: 20px; }

View file

@ -48,8 +48,8 @@ body,html { color:black; background:white; font-size:16px; padding:0; margin:0;
box-sizing: border-box; box-sizing: border-box;
} }
.p { padding:10% 6%; } .p { padding:4% 6%; }
.m { margin:10% 6%; } .m { margin:4% 6%; }
.b { border:solid black; } .b { border:solid black; }
</style> </style>

View file

@ -46,8 +46,8 @@ body,html { color:black; background:white; font-size:16px; padding:0; margin:0;
.p { padding:2px 3px; } .p { padding:2px 3px; }
.m { margin:2px 3px; } .m { margin:2px 3px; }
.c1.p,.c2.p { padding:5px 9px; } .c1.p,.c2.p { padding:6px 9px; }
.c1.m,.c2.m { margin:5px 9px; } .c1.m,.c2.m { margin:6px 9px; }
.b { border:solid black; } .b { border:solid black; }
</style> </style>

View file

@ -45,7 +45,7 @@ skip-if(Android) fuzzy-if(winWidget,1,32) == grid-placement-auto-implicit-001.ht
== vrl-grid-placement-auto-row-sparse-001.html vrl-grid-placement-auto-row-sparse-001-ref.html == vrl-grid-placement-auto-row-sparse-001.html vrl-grid-placement-auto-row-sparse-001-ref.html
== grid-relpos-items-001.html grid-relpos-items-001-ref.html == grid-relpos-items-001.html grid-relpos-items-001-ref.html
== grid-item-sizing-percent-001.html grid-item-sizing-percent-001-ref.html == grid-item-sizing-percent-001.html grid-item-sizing-percent-001-ref.html
== grid-item-sizing-percent-002.html grid-item-sizing-percent-002-ref.html fails == grid-item-sizing-percent-002.html grid-item-sizing-percent-002-ref.html # bug 1434397
== grid-item-sizing-percent-003.html grid-item-sizing-percent-003-ref.html == grid-item-sizing-percent-003.html grid-item-sizing-percent-003-ref.html
== grid-item-sizing-percent-004.html grid-item-sizing-percent-004-ref.html == grid-item-sizing-percent-004.html grid-item-sizing-percent-004-ref.html
== grid-item-sizing-px-001.html grid-item-sizing-percent-001-ref.html == grid-item-sizing-px-001.html grid-item-sizing-percent-001-ref.html

View file

@ -4,8 +4,7 @@
http://creativecommons.org/publicdomain/zero/1.0/ http://creativecommons.org/publicdomain/zero/1.0/
--> -->
<!-- Reference case - identical to the testcase, but with with the flex items' <!-- Reference case - identical to the testcase, but with with the flex items'
vertical margin and padding values set to 0 by default, and then set to margin and padding values set to explicit pixel values.
specific pixel values for the items that have a 50px percent-basis.
--> -->
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
@ -21,27 +20,10 @@
} }
div.height50 { height: 50px; } div.height50 { height: 50px; }
.marginA { margin: 0 8% 0 4%; } .marginA { margin: 20px 16px 12px 8px; }
.marginB { margin: 0 10% 0 14%; } .marginB { margin: 16px 20px 24px 28px; }
.paddingA { padding: 0 6% 0 2%; } .paddingA { padding: 16px 12px 8px 4px; }
.paddingB { padding: 0 8% 0 12%; } .paddingB { padding: 12px 16px 20px 24px; }
div.height50 > .marginA {
margin-top: 5px;
margin-bottom: 3px;
}
div.height50 > .marginB {
margin-top: 4px;
margin-bottom: 6px;
}
div.height50 > .paddingA {
padding-top: 4px;
padding-bottom: 2px;
}
div.height50 > .paddingB {
padding-top: 3px;
padding-bottom: 5px;
}
div.child1 { div.child1 {
flex: none; flex: none;

View file

@ -3,19 +3,17 @@
Any copyright is dedicated to the Public Domain. Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ http://creativecommons.org/publicdomain/zero/1.0/
--> -->
<!-- Testcase with percent-valued padding and/or margin on flex items. The spec <!-- Testcase with percent-valued padding and/or margin on flex items.
says that percentage values on padding/margin-top and -bottom should be The spec allows these to be resolved against the flex container's
resolved against the flex container's height (not its width, as would inline size (regardless of which axis the percent padding/margin is in).
be the case in a block).
--> -->
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<title>CSS Test: Testing percent-valued padding and margin on flex items</title> <title>CSS Test: Testing percent-valued padding and margin on flex items</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"/> <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"/>
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#layout-algorithm"/> <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#item-margins"/>
<link rel="match" href="flexbox-mbp-horiz-004-ref.xhtml"/> <link rel="match" href="flexbox-mbp-horiz-004-ref.xhtml"/>
<style> <style>
div { border: 0; }
div.flexbox { div.flexbox {
width: 200px; width: 200px;
display: flex; display: flex;
@ -52,8 +50,9 @@
</style> </style>
</head> </head>
<body> <body>
<!-- Flex container is auto-height - vertical margin and padding should <!-- Flex container is auto-height - this shouldn't impact percent
resolve to 0, since they don't have anything to resolve % against. --> margin/padding resolution, since they resolve against container's
inline-size, i.e. its width in this case. -->
<div class="flexbox" <div class="flexbox"
><div class="child1 paddingA"><div class="filler"/></div ><div class="child1 paddingA"><div class="filler"/></div
><div class="child2 paddingB"><div class="filler"/></div ><div class="child2 paddingB"><div class="filler"/></div
@ -61,8 +60,9 @@
><div class="child2 marginB"></div ><div class="child2 marginB"></div
></div> ></div>
<!-- Flex container has height: 50px - vertical margin and padding should <!-- Flex container has height: 50px - again, this shouldn't impact percent
resolve % values against that. --> margin/padding resolution, since they resolve against container's
inline-size, i.e. its width in this case. -->
<div class="flexbox height50" <div class="flexbox height50"
><div class="child1 paddingA"><div class="filler"/></div ><div class="child1 paddingA"><div class="filler"/></div
><div class="child2 paddingB"><div class="filler"/></div ><div class="child2 paddingB"><div class="filler"/></div