| <!DOCTYPE html> |
| <link href="resources/grid.css" rel="stylesheet"> |
| <style> |
| .grid { |
| grid-auto-rows: 25px; |
| grid-auto-columns: 25px; |
| margin-bottom: 10px; |
| } |
| |
| .fixedWidth { |
| width: 50px; |
| grid-auto-flow: row; |
| grid-template-columns: repeat(auto-fill, 25px); |
| } |
| |
| .fixedHeight { |
| width: 100px; |
| height: 50px; |
| grid-auto-flow: column; |
| grid-template-rows: repeat(auto-fill, 25px); |
| } |
| |
| #i1, #i21 { |
| grid-row: auto; |
| grid-column: 1; |
| background-color: orange; |
| } |
| |
| #i2, #i22 { |
| grid-row: 1; |
| grid-column: auto; |
| background-color: green; |
| } |
| |
| #i3, #i23 { |
| grid-row: auto; |
| grid-column: auto; |
| background-color: blue; |
| } |
| </style> |
| <!-- Explicitly not using layout-th because it does not allow multiple checkLayout(). --> |
| <script src="../../resources/check-layout.js"></script> |
| <script> |
| function setGridTemplate(id, gridTemplateRows, gridTemplateColumns) |
| { |
| var gridElement = document.getElementById(id); |
| gridElement.style.gridTemplateRows = gridTemplateRows; |
| gridElement.style.gridTemplateColumns = gridTemplateColumns; |
| } |
| |
| function setGridSize(id, width, height) |
| { |
| var gridElement = document.getElementById(id); |
| gridElement.style.width = width; |
| gridElement.style.height = height; |
| } |
| |
| function testGridTemplates(firstGridItemData, secondGridItemData, thirdGridItemData) |
| { |
| var i1 = document.getElementById(firstGridItemData.id); |
| i1.setAttribute("data-expected-width", firstGridItemData.width); |
| i1.setAttribute("data-expected-height", firstGridItemData.height); |
| i1.setAttribute("data-offset-x", firstGridItemData.x); |
| i1.setAttribute("data-offset-y", firstGridItemData.y); |
| |
| var i2 = document.getElementById(secondGridItemData.id); |
| i2.setAttribute("data-expected-width", secondGridItemData.width); |
| i2.setAttribute("data-expected-height", secondGridItemData.height); |
| i2.setAttribute("data-offset-x", secondGridItemData.x); |
| i2.setAttribute("data-offset-y", secondGridItemData.y); |
| |
| var i3 = document.getElementById(thirdGridItemData.id); |
| i3.setAttribute("data-expected-width", thirdGridItemData.width); |
| i3.setAttribute("data-expected-height", thirdGridItemData.height); |
| i3.setAttribute("data-offset-x", thirdGridItemData.x); |
| i3.setAttribute("data-offset-y", thirdGridItemData.y); |
| |
| checkLayout(".grid"); |
| } |
| |
| function testChangingGridDefinitions() |
| { |
| // Test changing the number of auto-repeat tracks. |
| setGridTemplate('grid1', 'none', 'repeat(auto-fill, 25px)'); |
| testGridTemplates({ 'id': 'i1', 'width': '25', 'height': '25', 'x': '0', 'y': '25' }, { 'id': 'i2', 'width': '25', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i3', 'width': '25', 'height': '25', 'x': '25', 'y': '25' }); |
| setGridTemplate('grid2', 'repeat(auto-fill, 25px)', 'none'); |
| testGridTemplates({ 'id': 'i21', 'width': '25', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i22', 'width': '25', 'height': '25', 'x': '25', 'y': '0' }, { 'id': 'i23', 'width': '25', 'height': '25', 'x': '25', 'y': '25' }); |
| |
| setGridTemplate('grid1', 'none', 'none'); |
| testGridTemplates({ 'id': 'i1', 'width': '25', 'height': '25', 'x': '0', 'y': '25' }, { 'id': 'i2', 'width': '25', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i3', 'width': '25', 'height': '25', 'x': '0', 'y': '50' }); |
| setGridTemplate('grid2', 'none', 'none'); |
| testGridTemplates({ 'id': 'i21', 'width': '25', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i22', 'width': '25', 'height': '25', 'x': '25', 'y': '0' }, { 'id': 'i23', 'width': '25', 'height': '25', 'x': '50', 'y': '0' }); |
| |
| setGridTemplate('grid1', 'none', '5px repeat(auto-fill, 20px)'); |
| testGridTemplates({ 'id': 'i1', 'width': '5', 'height': '25', 'x': '0', 'y': '25' }, { 'id': 'i2', 'width': '5', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i3', 'width': '20', 'height': '25', 'x': '5', 'y': '25' }); |
| setGridTemplate('grid2', 'repeat(auto-fill, 20px) 3px', 'none'); |
| testGridTemplates({ 'id': 'i21', 'width': '25', 'height': '20', 'x': '0', 'y': '0' }, { 'id': 'i22', 'width': '25', 'height': '20', 'x': '25', 'y': '0' }, { 'id': 'i23', 'width': '25', 'height': '20', 'x': '25', 'y': '20' }); |
| |
| setGridTemplate('grid1', 'none', '5px repeat(auto-fill, 22px)'); |
| testGridTemplates({ 'id': 'i1', 'width': '5', 'height': '25', 'x': '0', 'y': '25' }, { 'id': 'i2', 'width': '5', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i3', 'width': '22', 'height': '25', 'x': '5', 'y': '25' }); |
| setGridTemplate('grid2', 'repeat(auto-fill, 18px) 3px', 'none'); |
| testGridTemplates({ 'id': 'i21', 'width': '25', 'height': '18', 'x': '0', 'y': '0' }, { 'id': 'i22', 'width': '25', 'height': '18', 'x': '25', 'y': '0' }, { 'id': 'i23', 'width': '25', 'height': '18', 'x': '25', 'y': '18' }); |
| |
| setGridTemplate('grid1', 'none', 'repeat(auto-fill, 45px)'); |
| testGridTemplates({ 'id': 'i1', 'width': '45', 'height': '25', 'x': '0', 'y': '25' }, { 'id': 'i2', 'width': '45', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i3', 'width': '45', 'height': '25', 'x': '0', 'y': '50' }); |
| setGridTemplate('grid2', 'repeat(auto-fill, 45px)', 'none'); |
| testGridTemplates({ 'id': 'i21', 'width': '25', 'height': '45', 'x': '0', 'y': '0' }, { 'id': 'i22', 'width': '25', 'height': '45', 'x': '25', 'y': '0' }, { 'id': 'i23', 'width': '25', 'height': '45', 'x': '50', 'y': '0' }); |
| |
| // Test changing the size of the grid. |
| setGridSize('grid1', '100px', 'auto'); |
| testGridTemplates({ 'id': 'i1', 'width': '45', 'height': '25', 'x': '0', 'y': '25' }, { 'id': 'i2', 'width': '45', 'height': '25', 'x': '0', 'y': '0' }, { 'id': 'i3', 'width': '45', 'height': '25', 'x': '45', 'y': '25' }); |
| setGridSize('grid2', '100px', '100px'); |
| testGridTemplates({ 'id': 'i21', 'width': '25', 'height': '45', 'x': '0', 'y': '0' }, { 'id': 'i22', 'width': '25', 'height': '45', 'x': '25', 'y': '0' }, { 'id': 'i23', 'width': '25', 'height': '45', 'x': '25', 'y': '45' }); |
| } |
| |
| window.addEventListener("load", testChangingGridDefinitions, false); |
| </script> |
| |
| <div>This test checks that grid-template-{rows|columns} with auto-repeat tracks recomputes the positions of automatically placed grid items.</div> |
| <div id="log"></div> |
| |
| <div style="position: relative"> |
| <div id="grid1" class="grid fixedWidth"> |
| <div id="i1"></div> |
| <div id="i2"></div> |
| <div id="i3"></div> |
| </div> |
| </div> |
| |
| <div style="position: relative"> |
| <div id="grid2" class="grid fixedHeight"> |
| <div id="i21"></div> |
| <div id="i22"></div> |
| <div id="i23"></div> |
| </div> |
| </div> |