grid-gutters-and-tracks-001.html (11870B)
1 <!DOCTYPE html> 2 <title>CSS Grid: grid gutters and tracks.</title> 3 <link rel="author" title="Sergio Villar" href="mailto:svillar@igalia.com"/> 4 <link rel="help" href="https://drafts.csswg.org/css-grid-1/#gutters"/> 5 <meta name="assert" content="Check that gutters contribute to the size of the grid containers and spanning items, and do not alter grid items positioning, margin computation and track sizing."/> 6 <link rel="stylesheet" href="/css/support/grid.css"/> 7 <link rel="stylesheet" href="/css/support/width-keyword-classes.css"/> 8 <link rel="stylesheet" href="/fonts/ahem.css" type="text/css"/> 9 <style> 10 body { margin: 0px; } 11 12 .grid { padding: 3px 7px 5px 1px; border: solid yellow 1px; } 13 14 .normalGap { grid-gap: normal; } 15 16 .gridGap { grid-gap: 16px; } 17 18 .gridRowColumnGaps { 19 grid-row-gap: 12px; 20 grid-column-gap: 23px; 21 } 22 23 .gridMultipleCols { grid-template-columns: 30px minmax(10px, 50px) 80px; } 24 .gridMultipleRows { grid-template-rows: 90px 70px min-content; } 25 .gridAutoAuto { grid-template: auto auto / auto auto; } 26 .gridMultipleFixed { grid-template: [first] 37px [foo] 57px [bar] 77px [last] / [first] 15px [foo] 25px [bar] 35px [last]; } 27 .gridFixed100 { grid-template: repeat(2, 100px) / repeat(2, 100px); } 28 .gridWithPercent { grid-template-columns: 10px 20% repeat(2, 30px); } 29 .gridWithDoublePercent { grid-template-columns: 60% 40%; } 30 .gridWithRowPercent { grid-template: 10px 20% 30px / 20px; } 31 .gridWithRowDoublePercent { grid-template: 60% 40% / 20px; } 32 33 .width220 { width: 220px; } 34 .height100 { height: 100px; } 35 .gridAutoRows20 { grid-auto-rows: 20px; } 36 37 .thirdRowThirdColumn { grid-area: 3 / 3; } 38 .firstRowThirdColumn { grid-area: 1 / 3; } 39 40 div.grid > div { font: 10px/1 Ahem; } 41 42 .gridItemMargins { 43 margin: 20px 30px 40px 50px; 44 width: 20px; 45 height: 40px; 46 } 47 48 </style> 49 50 <script src="/resources/testharness.js"></script> 51 <script src="/resources/testharnessreport.js"></script> 52 <script src="/resources/check-layout-th.js"></script> 53 <script type="text/javascript"> 54 setup({ explicit_done: true }); 55 </script> 56 57 <body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> 58 59 <!-- Check that gutters contribute to the size of the grid containers. --> 60 61 <div style="position: relative;"> 62 <div class="grid normalGap gridMultipleCols fit-content" data-expected-width="170" data-expected-height="10"></div> 63 <div class="grid normalGap gridMultipleRows" style="width: 400px" data-expected-width="410" data-expected-height="170"></div> 64 </div> 65 66 <div style="position: relative"> 67 <div class="grid gridRowColumnGaps fit-content" data-expected-width="103" data-expected-height="62"> 68 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="20" data-expected-height="10">XX</div> 69 <div class="secondRowSecondColumn" data-offset-x="45" data-offset-y="26" data-expected-width="50" data-expected-height="30">XX<br>X<br>XX XX</div> 70 </div> 71 </div> 72 73 <div style="position: relative"> 74 <div class="grid gridMultipleCols gridRowColumnGaps fit-content" data-expected-width="216" data-expected-height="94"> 75 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="30" data-expected-height="10">XX</div> 76 <div class="secondRowSecondColumn" data-offset-x="55" data-offset-y="26" data-expected-width="50" data-expected-height="20">XX<br>XX XX</div> 77 <div class="thirdRowThirdColumn" data-offset-x="128" data-offset-y="58" data-expected-width="80" data-expected-height="30">XXXX XX<br>X<br>XX XX</div> 78 </div> 79 </div> 80 81 <div style="position: relative"> 82 <div class="grid gridMultipleRows gridRowColumnGaps fit-content" data-expected-width="196" data-expected-height="224"> 83 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="20" data-expected-height="90">XX</div> 84 <div class="secondRowSecondColumn" data-offset-x="45" data-offset-y="106" data-expected-width="50" data-expected-height="70">XX<br>XX XX</div> 85 <div class="thirdRowThirdColumn" data-offset-x="118" data-offset-y="188" data-expected-width="70" data-expected-height="30">XXXX XX<br>X<br>XX XX</div> 86 </div> 87 </div> 88 89 <!-- Check that gutters do not alter grid items positioning. --> 90 <div style="position: relative"> 91 <div class="grid gridMultipleFixed gridRowColumnGaps"> 92 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="15" data-expected-height="37">X X X</div> 93 <div class="secondRowSecondColumn" data-offset-x="40" data-offset-y="53" data-expected-width="25" data-expected-height="57">X X</div> 94 <div class="thirdRowThirdColumn" data-offset-x="88" data-offset-y="122" data-expected-width="35" data-expected-height="77">XXX XX X XX XX</div> 95 </div> 96 </div> 97 98 <div style="position: relative"> 99 <div class="grid gridMultipleFixed gridRowColumnGaps"> 100 <div style="grid-row: 2; grid-column: -2 / -1;" data-offset-x="88" data-offset-y="53" data-expected-width="35" data-expected-height="57">X X X</div> 101 <div style="grid-row: 1 / bar; grid-column: bar" data-offset-x="88" data-offset-y="4" data-expected-width="35" data-expected-height="106">X XX X XX XX XX X</div> 102 <div style="grid-row: -2; grid-column-end: foo" data-offset-x="2" data-offset-y="122" data-expected-width="15" data-expected-height="77">X X</div> 103 </div> 104 </div> 105 106 <!-- Check that gutters do not alter track sizing. --> 107 <div style="position: relative"> 108 <div class="grid gridRowColumnGaps fit-content" data-expected-width="166" data-expected-height="94"> 109 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="20" data-expected-height="10">XX</div> 110 <div class="secondRowSecondColumn" data-offset-x="45" data-offset-y="26" data-expected-width="30" data-expected-height="20">X X<br>X X</div> 111 <div class="thirdRowThirdColumn" data-offset-x="98" data-offset-y="58" data-expected-width="60" data-expected-height="30">XXX XX<br>X<br>XX XX</div> 112 </div> 113 </div> 114 115 <div style="position: relative"> 116 <div class="grid gridRowColumnGaps gridMultipleCols gridMultipleRows fit-content" data-expected-width="216" data-expected-height="224"> 117 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="30" data-expected-height="90">XX</div> 118 <div class="secondRowSecondColumn" data-offset-x="55" data-offset-y="106" data-expected-width="50" data-expected-height="70">X X<br>X X</div> 119 <div class="thirdRowThirdColumn" data-offset-x="128" data-offset-y="188" data-expected-width="80" data-expected-height="30">XXX XX<br>X<br>XX XX</div> 120 </div> 121 </div> 122 123 <div style="position: relative"> 124 <div class="grid gridWithPercent width220 gridRowColumnGaps gridAutoRows20" data-expected-width="230" data-expected-height="94"> 125 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="10" data-expected-height="20"></div> 126 <div class="secondRowSecondColumn" data-offset-x="35" data-offset-y="36" data-expected-width="44" data-expected-height="20"></div> 127 <div class="thirdRowThirdColumn" data-offset-x="102" data-offset-y="68" data-expected-width="30" data-expected-height="20"></div> 128 </div> 129 </div> 130 131 <div style="position: relative"> 132 <div class="grid gridWithRowPercent gridRowColumnGaps width220 height100" data-expected-width="230" data-expected-height="110"> 133 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="20" data-expected-height="10"></div> 134 <div class="secondRowFirstColumn" data-offset-x="2" data-offset-y="26" data-expected-width="20" data-expected-height="20"></div> 135 <div class="thirdRowAutoColumn" data-offset-x="2" data-offset-y="58" data-expected-width="20" data-expected-height="30"></div> 136 </div> 137 </div> 138 139 <!-- Check that gutters contribute to the size of spanning items. --> 140 <div style="position: relative"> 141 <div class="grid gridGap gridAutoAuto constrainedContainer"> 142 <div class="secondRowBothColumn" data-offset-x="2" data-offset-y="30" data-expected-width="50" data-expected-height="10">XXXXX</div> 143 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="17" data-expected-height="10">X</div> 144 <div class="firstRowSecondColumn" data-offset-x="35" data-offset-y="4" data-expected-width="17" data-expected-height="10">X</div> 145 </div> 146 </div> 147 148 <div style="position: relative"> 149 <div class="grid gridMultipleFixed gridRowColumnGaps"> 150 <div style="grid-row: 2; grid-column: 1 / -1;" data-offset-x="2" data-offset-y="53" data-expected-width="121" data-expected-height="57">XXXX X XXXX</div> 151 <div style="grid-row: first / last; grid-column-start: 2" data-offset-x="40" data-offset-y="4" data-expected-width="25" data-expected-height="195">X XX X XX X</div> 152 <div style="grid-row: 1 / 3; grid-column: first / bar" data-offset-x="2" data-offset-y="4" data-expected-width="63" data-expected-height="106">XXX XX<br>XX<br>XXXXX</div> 153 </div> 154 </div> 155 156 <div style="position: relative"> 157 <div class="grid gridWithDoublePercent width220 gridRowColumnGaps gridAutoRows20" data-expected-width="230" data-expected-height="62"> 158 <div class="firstRowFirstColumn sizedToGridArea" data-offset-x="2" data-offset-y="4" data-expected-width="132" data-expected-height="20"></div> 159 <div class="secondRowSecondColumn sizedToGridArea" data-offset-x="157" data-offset-y="36" data-expected-width="88" data-expected-height="20"></div> 160 <div class="secondRowBothColumn sizedToGridArea" data-offset-x="2" data-offset-y="36" data-expected-width="243" data-expected-height="20"></div> 161 </div> 162 </div> 163 164 <div style="position: relative"> 165 <div class="grid gridWithRowDoublePercent gridRowColumnGaps width220 height100" data-expected-width="230" data-expected-height="110"> 166 <div class="firstRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="20" data-expected-height="60"></div> 167 <div class="secondRowFirstColumn" data-offset-x="2" data-offset-y="76" data-expected-width="20" data-expected-height="40"></div> 168 <div class="bothRowFirstColumn" data-offset-x="2" data-offset-y="4" data-expected-width="20" data-expected-height="112"></div> 169 </div> 170 </div> 171 172 <!-- Check that gutters do not interfere with margins computation. --> 173 <div style="position: relative"> 174 <div class="grid gridFixed100 gridGap"> 175 <div class="gridItemMargins firstRowFirstColumn" data-offset-x="52" data-offset-y="24" data-expected-width="20" data-expected-height="40"></div> 176 <div class="gridItemMargins firstRowSecondColumn" data-offset-x="168" data-offset-y="24" data-expected-width="20" data-expected-height="40"></div> 177 <div class="gridItemMargins secondRowFirstColumn" data-offset-x="52" data-offset-y="140" data-expected-width="20" data-expected-height="40"></div> 178 <div class="gridItemMargins secondRowSecondColumn" data-offset-x="168" data-offset-y="140" data-expected-width="20" data-expected-height="40"></div> 179 </div> 180 </div> 181 182 <div style="position: relative"> 183 <div class="grid gridFixed100 verticalRL directionRTL gridGap"> 184 <div class="gridItemMargins firstRowFirstColumn" data-offset-x="168" data-offset-y="140" data-expected-width="20" data-expected-height="40"></div> 185 <div class="gridItemMargins firstRowSecondColumn" data-offset-x="168" data-offset-y="24" data-expected-width="20" data-expected-height="40"></div> 186 <div class="gridItemMargins secondRowFirstColumn" data-offset-x="52" data-offset-y="140" data-expected-width="20" data-expected-height="40"></div> 187 <div class="gridItemMargins secondRowSecondColumn" data-offset-x="52" data-offset-y="24" data-expected-width="20" data-expected-height="40"></div> 188 </div> 189 </div> 190 191 </body>