forked from mirrors/gecko-dev
Per the spec, if multiple track sizes are given, the pattern is repeated as necessary to find the size of the implicit tracks: 1. The first implicit grid track after the explicit grid receives the first specified size, and so on forwards. 2. The last implicit grid track before the explicit grid receives the last specified size, and so on backwards. We use a positive index of the auto track sizes for (1) and a negative index for (2), so we can apply the correct specified implicit size. Differential Revision: https://phabricator.services.mozilla.com/D52265 --HG-- extra : moz-landing-system : lando
130 lines
4.3 KiB
HTML
130 lines
4.3 KiB
HTML
<!DOCTYPE html>
|
|
<html class="reftest-wait">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>CSS Grid Layout Test: Support for 'grid-auto-columns' and
|
|
'grid-auto-rows' properties with implicit tracks after and before the
|
|
explicit grid</title>
|
|
<link rel="help" href="https://drafts.csswg.org/css-grid/#auto-tracks">
|
|
<link rel="match" href="../reference/grid-support-grid-auto-columns-rows-003-ref.html">
|
|
<style>
|
|
#wrapper {
|
|
display: grid;
|
|
grid-template-columns: 50px 50px 50px 50px;
|
|
}
|
|
|
|
/* Implicit and explicit grid track sizes */
|
|
.grid {
|
|
display: grid;
|
|
grid-auto-rows: 2px 3px;
|
|
grid-auto-columns: 2px 3px;
|
|
}
|
|
#one .grid { grid-template: 5px / 5px; }
|
|
#two .grid { grid-template: 5px 5px / 5px 5px; }
|
|
#three .grid { grid-template: 5px 5px 5px / 5px 5px 5px; }
|
|
|
|
/* Grid item positions. */
|
|
.item-left1 { grid-area: auto / auto / 1 / 1; }
|
|
.item-explicit { grid-area: 1 / 1 / -1 / -1; }
|
|
.item-right1 { grid-area: -1 / -1; }
|
|
|
|
#zero .item-left3 { grid-area: auto / auto / -3 / -3; }
|
|
#zero .item-left2 { grid-area: auto / auto / -2 / -2; }
|
|
#zero .item-right2 { grid-area: 2 / 2; }
|
|
#zero .item-right3 { grid-area: 3 / 3; }
|
|
#one .item-left3 { grid-area: auto / auto / -4 / -4; }
|
|
#one .item-left2 { grid-area: auto / auto / -3 / -3; }
|
|
#one .item-right2 { grid-area: 3 / 3; }
|
|
#one .item-right3 { grid-area: 4 / 4; }
|
|
#two .item-left3 { grid-area: auto / auto / -5 / -5; }
|
|
#two .item-left2 { grid-area: auto / auto / -4 / -4; }
|
|
#two .item-right2 { grid-area: 4 / 4; }
|
|
#two .item-right3 { grid-area: 5 / 5; }
|
|
#three .item-left3 { grid-area: auto / auto / -6 / -6; }
|
|
#three .item-left2 { grid-area: auto / auto / -5 / -5; }
|
|
#three .item-right2 { grid-area: 5 / 5; }
|
|
#three .item-right3 { grid-area: 6 / 6; }
|
|
|
|
/* Colors */
|
|
.item-left3 { background: #ff0; }
|
|
.item-left2 { background: #ff0; }
|
|
.item-left1 { background: #ff0; }
|
|
.item-explicit { background: #f0f; }
|
|
.item-right1 { background: #0ff; }
|
|
.item-right2 { background: #0ff; }
|
|
.item-right3 { background: #0ff; }
|
|
</style>
|
|
<script>
|
|
function createDivWithClass(className, parent) {
|
|
let element = document.createElement('div');
|
|
element.className = className || '';
|
|
if (!parent) {
|
|
parent = document.body;
|
|
}
|
|
parent.appendChild(element);
|
|
return element;
|
|
}
|
|
|
|
function generate(parentId) {
|
|
let parent = document.getElementById(parentId);
|
|
|
|
for (let leftNum = 0; leftNum <= 3; ++leftNum) {
|
|
for (let rightNum = 0; rightNum <= 3; ++rightNum) {
|
|
let grid = leftNum + rightNum > 0
|
|
? createDivWithClass("grid", parent)
|
|
: null;
|
|
|
|
for (let i = 1; i <= leftNum; ++i) {
|
|
createDivWithClass("item-left" + i, grid);
|
|
}
|
|
|
|
if (leftNum + rightNum > 0) {
|
|
createDivWithClass("item-explicit", grid);
|
|
}
|
|
|
|
for (let i = 1; i <= rightNum; ++i) {
|
|
createDivWithClass("item-right" + i, grid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function run() {
|
|
// This is equal to something like this:
|
|
// <div class="grid">
|
|
// <div class="item-left3"></div>
|
|
// <div class="item-left2"></div>
|
|
// <div class="item-left1"></div>
|
|
// <div class="item-explicit"></div>
|
|
// <div class="item-right1"></div>
|
|
// <div class="item-right2"></div>
|
|
// <div class="item-right3"></div>
|
|
// </div>
|
|
// Generate the grid examples with 0~3 left items and 0~3 right items.
|
|
// The item-explicit is placed inside the 0x0 ~ 3x3 explicit tracks.
|
|
generate("zero");
|
|
generate("one");
|
|
generate("two");
|
|
generate("three");
|
|
|
|
document.documentElement.offsetHeight;
|
|
document.documentElement.classList.remove('reftest-wait');
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="run()">
|
|
<div id="wrapper">
|
|
<!-- Zero explicit track -->
|
|
<div id="zero"></div>
|
|
|
|
<!-- One explicit track -->
|
|
<div id="one"></div>
|
|
|
|
<!-- Two explicit tracks -->
|
|
<div id="two"></div>
|
|
|
|
<!-- Three explicit tracks -->
|
|
<div id="three"></div>
|
|
</div>
|
|
</body>
|
|
</html>
|