<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <link href="resources/grid.css" rel="stylesheet"> <style> .gridAutoFixedFixed { grid-auto-rows: 30px; grid-auto-columns: 50px; } .gridAutoMinMax { grid-auto-rows: minmax(10%, 15px); grid-auto-columns: minmax(30%, 100px); } .gridAutoMinMaxContent { grid-auto-rows: min-content; grid-auto-columns: max-content; } .gridAutoFixedFixedWithFixedFixed { grid-auto-rows: 30px; grid-auto-columns: 40px; grid-template-rows: 15px; grid-template-columns: 20px; } .gridAutoAutoInMinMax { grid-auto-rows: minmax(auto, 8vh); grid-auto-columns: minmax(10vw, auto); } </style> <script src="../../resources/js-test.js"></script> <script src="resources/grid-definitions-parsing-utils.js"></script> </head> <body> <div class="grid gridAutoFixedFixed" id="gridAutoFixedFixed"></div> <div class="grid gridAutoMinMax" id="gridAutoMinMax"></div> <div class="grid gridAutoMinMaxContent" id="gridAutoMinMaxContent"></div> <div class="grid gridAutoAutoInMinMax" id="gridAutoAutoInMinMax"></div> <div class="grid gridAutoFixedFixed" id="gridAutoFixedFixedWithChildren"> <div class="sizedToGridArea firstRowFirstColumn"></div> </div> <div class="grid gridAutoFixedFixedWithFixedFixed" id="gridAutoFixedFixedWithFixedFixedWithChildren"> <div class="sizedToGridArea thirdRowAutoColumn"></div> <div class="sizedToGridArea autoRowThirdColumn"></div> </div> <script> description('Test that setting and getting grid-auto-columns and grid-auto-rows works as expected'); debug("Test getting grid-auto-columns and grid-auto-rows set through CSS"); testGridAutoDefinitionsValues(document.getElementById("gridAutoFixedFixed"), "30px", "50px"); testGridAutoDefinitionsValues(document.getElementById("gridAutoMinMax"), "minmax(10%, 15px)", "minmax(30%, 100px)"); testGridAutoDefinitionsValues(document.getElementById("gridAutoMinMaxContent"), "min-content", "max-content"); testGridAutoDefinitionsValues(document.getElementById("gridAutoAutoInMinMax"), "minmax(auto, 48px)", "minmax(80px, auto)"); debug(""); debug("Test that getting grid-template-columns and grid-template-rows set through CSS lists every track listed whether implicitly or explicitly created"); testGridAutoDefinitionsValues(document.getElementById("gridAutoFixedFixedWithChildren"), "30px", "50px"); testGridDefinitionsValues(document.getElementById("gridAutoFixedFixedWithChildren"), "50px", "30px"); testGridAutoDefinitionsValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "30px", "40px"); testGridDefinitionsValues(document.getElementById("gridAutoFixedFixedWithFixedFixedWithChildren"), "20px 40px 40px", "15px 30px 30px"); debug(""); debug("Test that grid-template-* definitions are not affected by grid-auto-* definitions"); testGridDefinitionsValues(document.getElementById("gridAutoFixedFixed"), "none", "none"); testGridDefinitionsValues(document.getElementById("gridAutoMinMax"), "none", "none"); testGridDefinitionsValues(document.getElementById("gridAutoMinMaxContent"), "none", "none"); debug(""); debug("Test the initial value"); var element = document.createElement("div"); document.body.appendChild(element); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'"); debug(""); debug("Test getting and setting grid-auto-columns and grid-auto-rows through JS"); element.style.font = "10px Ahem"; element.style.gridAutoColumns = "18em"; element.style.gridAutoRows = "66em"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'180px'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'660px'"); element = document.createElement("div"); document.body.appendChild(element); element.style.gridAutoColumns = "minmax(min-content, 8vh)"; element.style.gridAutoRows = "minmax(10vw, min-content)"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'minmax(min-content, 48px)'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'minmax(80px, min-content)'"); element = document.createElement("div"); document.body.appendChild(element); element.style.gridAutoColumns = "minmax(min-content, max-content)"; element.style.gridAutoRows = "minmax(max-content, min-content)"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'minmax(min-content, max-content)'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'minmax(max-content, min-content)'"); debug(""); debug("Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS"); element = document.createElement("div"); document.body.appendChild(element); // No comma. element.style.gridAutoColumns = "minmax(10px 20px)"; // Only 1 argument provided. element.style.gridAutoRows = "minmax(10px)"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'"); element = document.createElement("div"); document.body.appendChild(element); // Nested minmax. element.style.gridAutoColumns = "minmax(minmax(10px, 20px), 20px)"; // Only 2 arguments are allowed. element.style.gridAutoRows = "minmax(10px, 20px, 30px)"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'"); element = document.createElement("div"); document.body.appendChild(element); // No breadth value. element.style.gridAutoColumns = "minmax()"; // No comma. element.style.gridAutoRows = "minmax(30px 30% 30em)"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'"); element = document.createElement("div"); document.body.appendChild(element); // None is not allowed for grid-auto-{rows|columns}. element.style.gridAutoColumns = "none"; element.style.gridAutoRows = "none"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'"); function testInherit() { var parentElement = document.createElement("div"); document.body.appendChild(parentElement); parentElement.style.gridAutoColumns = "50px"; parentElement.style.gridAutoRows = "101%"; element = document.createElement("div"); parentElement.appendChild(element); element.style.gridAutoColumns = "inherit"; element.style.gridAutoRows = "inherit"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'50px'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'101%'"); document.body.removeChild(parentElement); } debug(""); debug("Test setting grid-auto-columns and grid-auto-rows to 'inherit' through JS"); testInherit(); function testInitial() { element = document.createElement("div"); document.body.appendChild(element); element.style.gridAutoColumns = "150%"; element.style.gridAutoRows = "1fr"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'150%'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'1fr'"); element.style.gridAutoColumns = "initial"; element.style.gridAutoRows = "initial"; shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'"); shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'"); document.body.removeChild(element); } debug(""); debug("Test setting grid-auto-columns and grid-auto-rows to 'initial' through JS"); testInitial(); </script> </body> </html>