mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 13:58:49 +00:00
Issue #1370 - Follow-up: Give table wrapper boxes a special case during flex base size resolution, so that percent main-sizes can be respected
This is a workaround, based on https://bugzilla.mozilla.org/show_bug.cgi?id=1455976
This commit is contained in:
@@ -4645,6 +4645,13 @@ nsFrame::SetCoordToFlexBasis(bool aIsInlineFlexItem,
|
||||
auto mainAxisCoord = aIsInlineFlexItem ?
|
||||
aInlineStyle :
|
||||
aBlockStyle;
|
||||
// NOTE: If we're a table-wrapper frame, we skip this clause and just stick
|
||||
// with 'main-size:auto' behavior (which -- unlike 'content'
|
||||
// i.e. 'max-content' -- will give us the ability to honor percent sizes on
|
||||
// our table-box child when resolving the flex base size). The flexbox spec
|
||||
// doesn't call for this special case, but webcompat & regression-avoidance
|
||||
// seems to require it, for the time being... Tables sure are special.
|
||||
bool isTableWrapperFrame = GetType() == nsGkAtoms::tableWrapperFrame;
|
||||
// We have a used flex-basis of 'content' if flex-basis explicitly has that
|
||||
// value, OR if flex-basis is 'auto' (deferring to the main-size property)
|
||||
// and the main-size property is also 'auto'.
|
||||
@@ -4665,7 +4672,7 @@ nsFrame::SetCoordToFlexBasis(bool aIsInlineFlexItem,
|
||||
// which substep we fall into) by using the 'auto' keyword for our
|
||||
// main-axis coordinate here. (This makes sense, because the spec is
|
||||
// effectively trying to produce the 'auto' sizing behavior).
|
||||
if (aIntrinsic) {
|
||||
if (aIntrinsic || MOZ_LIKELY(isTableWrapperFrame)) {
|
||||
static const nsStyleCoord autoStyleCoord(eStyleUnit_Auto);
|
||||
*mainAxisCoord = &autoStyleCoord;
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Reftest Reference</title>
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-base-size">
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
width: 100px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
/* Two types of flex items: */
|
||||
.table {
|
||||
border: 2px solid teal;
|
||||
}
|
||||
.block {
|
||||
border: 2px solid brown;
|
||||
}
|
||||
|
||||
/* Each flex item gets one of these as its contents,
|
||||
to have a nonzero content size: */
|
||||
ib {
|
||||
display: inline-block;
|
||||
background: blue;
|
||||
border: 1px solid gray;
|
||||
width: 15px;
|
||||
height: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- auto size: -->
|
||||
<div class="container">
|
||||
<div class="table"><ib></ib></div>
|
||||
<div class="block"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- px size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="width: 30px"><ib></ib></div>
|
||||
<div class="block" style="width: 30px"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- % size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="width: 30%"><ib></ib></div>
|
||||
<div class="block" style="width: 30%"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- calc() size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="width: calc(10px + 20%)"><ib></ib></div>
|
||||
<div class="block" style="width: calc(10px + 20%)"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,73 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>
|
||||
CSS Test: Testing that implicit "flex-basis: content" on table wrapper box
|
||||
doesn't prevent explicit table size from influencing flex base size.
|
||||
</title>
|
||||
<!-- XXXdholbert NOTE: This probably eventually should move to our
|
||||
upstreamed reftest directory. But for now, this is just asserting
|
||||
backwards-compatible/interoperable (but not necessary spec-compliant)
|
||||
behavior, per https://github.com/w3c/csswg-drafts/issues/2604 -->
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-base-size">
|
||||
<link rel="match" href="flexbox-table-flex-items-2.html">
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
width: 100px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
/* Two types of flex items: */
|
||||
.table {
|
||||
display: table;
|
||||
border: 2px solid teal;
|
||||
}
|
||||
.block {
|
||||
border: 2px solid brown;
|
||||
}
|
||||
|
||||
/* Each flex item gets one of these as its contents,
|
||||
to have a nonzero content size: */
|
||||
ib {
|
||||
display: inline-block;
|
||||
background: blue;
|
||||
border: 1px solid gray;
|
||||
width: 15px;
|
||||
height: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- auto size: -->
|
||||
<div class="container">
|
||||
<div class="table"><ib></ib></div>
|
||||
<div class="block"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- px size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="width: 30px"><ib></ib></div>
|
||||
<div class="block" style="width: 30px"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- % size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="width: 30%"><ib></ib></div>
|
||||
<div class="block" style="width: 30%"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- calc() size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="width: calc(10px + 20%)"><ib></ib></div>
|
||||
<div class="block" style="width: calc(10px + 20%)"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Reftest Reference</title>
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-base-size">
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100px;
|
||||
float: left;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
/* Two types of flex items: */
|
||||
.table {
|
||||
border: 2px solid teal;
|
||||
}
|
||||
.block {
|
||||
border: 2px solid brown;
|
||||
}
|
||||
|
||||
/* Each flex item gets one of these as its contents,
|
||||
to have a nonzero content size: */
|
||||
ib {
|
||||
display: inline-block;
|
||||
background: blue;
|
||||
border: 1px solid gray;
|
||||
width: 15px;
|
||||
height: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- auto size: -->
|
||||
<div class="container">
|
||||
<div class="table"><ib></ib></div>
|
||||
<div class="block"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- px size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="height: 30px"><ib></ib></div>
|
||||
<div class="block" style="height: 30px"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- % size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="height: 30%"><ib></ib></div>
|
||||
<div class="block" style="height: 30%"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- calc() size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="height: calc(10px + 20%)"><ib></ib></div>
|
||||
<div class="block" style="height: calc(10px + 20%)"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>
|
||||
CSS Test: Testing that implicit "flex-basis: content" on table wrapper box
|
||||
doesn't prevent explicit table size from influencing flex base size.
|
||||
</title>
|
||||
<!-- XXXdholbert NOTE: This probably eventually should move to our
|
||||
upstreamed reftest directory. But for now, this is just asserting
|
||||
backwards-compatible/interoperable (but not necessary spec-compliant)
|
||||
behavior, per https://github.com/w3c/csswg-drafts/issues/2604 -->
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-base-size">
|
||||
<link rel="match" href="flexbox-table-flex-items-3.html">
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100px;
|
||||
float: left;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
/* Two types of flex items: */
|
||||
.table {
|
||||
display: table;
|
||||
border: 2px solid teal;
|
||||
}
|
||||
.block {
|
||||
border: 2px solid brown;
|
||||
}
|
||||
|
||||
/* Each flex item gets one of these as its contents,
|
||||
to have a nonzero content size: */
|
||||
ib {
|
||||
display: inline-block;
|
||||
background: blue;
|
||||
border: 1px solid gray;
|
||||
width: 15px;
|
||||
height: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- auto size: -->
|
||||
<div class="container">
|
||||
<div class="table"><ib></ib></div>
|
||||
<div class="block"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- px size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="height: 30px"><ib></ib></div>
|
||||
<div class="block" style="height: 30px"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- % size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="height: 30%"><ib></ib></div>
|
||||
<div class="block" style="height: 30%"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
<!-- calc() size: -->
|
||||
<div class="container">
|
||||
<div class="table" style="height: calc(10px + 20%)"><ib></ib></div>
|
||||
<div class="block" style="height: calc(10px + 20%)"><ib></ib></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -116,3 +116,5 @@ fuzzy-if(gtkWidget,1,31) == flexbox-widget-flex-items-4.html flexbox-widget-flex
|
||||
|
||||
# Tests for table flex items
|
||||
== flexbox-table-flex-items-1-ref.html flexbox-table-flex-items-1-ref.html
|
||||
== flexbox-table-flex-items-2.html flexbox-table-flex-items-2-ref.html
|
||||
== flexbox-table-flex-items-3.html flexbox-table-flex-items-3-ref.html
|
||||
|
||||
Reference in New Issue
Block a user