grid-gutters-and-alignment.html (24915B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>CSS Grid Layout test:gutters with align and justify properties</title> 4 <link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com"> 5 <link rel="help" href="https://drafts.csswg.org/css-align-3/#gaps"> 6 <link rel="help" href="https://drafts.csswg.org/css-align-3/#column-row-gap"> 7 <meta name="assert" content="This test checks that gutters do not interfere with align and justify computation, with or without borders, paddings, margins and negative space."> 8 <meta name="flags" content="ahem"> 9 <link rel="stylesheet" href="/css/support/grid.css"> 10 <link rel="stylesheet" href="/css/support/alignment.css"> 11 <link rel="stylesheet" href="/css/support/width-keyword-classes.css"> 12 <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> 13 14 <style> 15 .grid100And200 { 16 grid-template-columns: 100px 100px; 17 grid-template-rows: 200px 200px; 18 position: relative; /* For the <p> comments */ 19 } 20 21 .grid50And100 { 22 grid: 100px 100px / 50px 50px; 23 width: 200px; 24 height: 300px; 25 position: relative; /* For the <p> comments */ 26 } 27 28 .gridAuto20And40 { 29 grid-auto-columns: 20px; 30 grid-auto-rows: 40px; 31 width: 400px; 32 height: 300px; 33 position: relative; /* For the <p> comments */ 34 } 35 36 .gridWithPaddingBorder { 37 grid-template-columns: 100px 200px; 38 grid-template-rows: 200px 200px; 39 padding: 10px 15px 20px 30px; 40 border-width: 5px 10px 15px 20px; 41 border-style: dotted; 42 border-color: blue; 43 position: relative; /* For the <p> comments */ 44 } 45 46 .gridWithAutoColumns { 47 grid-auto-columns: 20px; 48 border: 2px solid black; 49 width: 10px; 50 margin-left: 200px; 51 position: relative; 52 } 53 54 .gridWithAutoRows { 55 grid-auto-rows: 40px; 56 border: 2px solid black; 57 height: 50px; 58 width: 20px; 59 position: relative; 60 } 61 62 .stretchedGrid { grid-auto-columns: auto; } 63 64 .gridRowColumnGaps { 65 grid-row-gap: 15px; 66 grid-column-gap: 20px; 67 } 68 69 div.grid > div { font: 10px/1 Ahem; } 70 71 .cell { 72 width: 20px; 73 height: 40px; 74 } 75 76 div.gridWithPaddingBorder > div.cell { 77 margin: 4px 8px 12px 16px; 78 } 79 80 .container { 81 position: relative; 82 margin-bottom: 10px; 83 } 84 85 </style> 86 87 <script src="/resources/testharness.js"></script> 88 <script src="/resources/testharnessreport.js"></script> 89 <script src="/resources/check-layout-th.js"></script> 90 <script type="text/javascript"> 91 setup({ explicit_done: true }); 92 </script> 93 94 <body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> 95 96 <!-- Check that gutters do not interfere with self alignment computation. --> 97 <div class="container"> 98 <div class="grid grid100And200 fit-content alignItemsCenter gridRowColumnGaps" data-expected-width="220" data-expected-height="415"> 99 <div class="cell alignSelfAuto firstRowFirstColumn" data-offset-x="0" data-offset-y="80" data-expected-width="20" data-expected-height="40"></div> 100 <div class="cell firstRowSecondColumn" data-offset-x="120" data-offset-y="80" data-expected-width="20" data-expected-height="40"></div> 101 <div class="cell alignSelfSelfStart secondRowFirstColumn" data-offset-x="0" data-offset-y="215" data-expected-width="20" data-expected-height="40"></div> 102 <div class="cell alignSelfSelfEnd secondRowSecondColumn" data-offset-x="120" data-offset-y="375" data-expected-width="20" data-expected-height="40"></div> 103 </div> 104 </div> 105 106 <div class="container"> 107 <div class="grid grid100And200 fit-content verticalLR gridRowColumnGaps" data-expected-width="415" data-expected-height="220"> 108 <div class="alignSelfStretch firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="200" data-expected-height="100"> 109 </div> 110 <div class="cell alignSelfStart firstRowSecondColumn verticalRL" data-offset-x="0" data-offset-y="120" data-expected-width="20" data-expected-height="40"> 111 <div class="item"></div> 112 </div> 113 <div class="cell alignSelfEnd firstRowSecondColumn verticalRL" data-offset-x="180" data-offset-y="120" data-expected-width="20" data-expected-height="40"> 114 <div class="item"></div> 115 </div> 116 <div class="cell alignSelfCenter secondRowFirstColumn verticalRL" data-offset-x="305" data-offset-y="0" data-expected-width="20" data-expected-height="40"> 117 <div class="item"></div> 118 </div> 119 </div> 120 </div> 121 122 <div class="container"> 123 <div class="grid grid100And200 fit-content directionRTL gridRowColumnGaps" data-expected-width="220" data-expected-height="415"> 124 <div class="alignSelfStretch firstRowFirstColumn" data-offset-x="120" data-offset-y="0" data-expected-width="100" data-expected-height="200"></div> 125 <div class="cell alignSelfStart firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 126 <div class="cell alignSelfEnd firstRowSecondColumn" data-offset-x="80" data-offset-y="160" data-expected-width="20" data-expected-height="40"></div> 127 <div class="cell alignSelfCenter secondRowFirstColumn" data-offset-x="200" data-offset-y="295" data-expected-width="20" data-expected-height="40"></div> 128 </div> 129 </div> 130 131 <!-- Check that gutters do not interfere with align-content computation. --> 132 <div class="container"> 133 <p>direction: LTR | align-content: 'center'</p> 134 <div class="grid grid50And100 alignContentCenter gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 135 <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="43" data-expected-width="20" data-expected-height="40"></div> 136 <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="43" data-expected-width="50" data-expected-height="100"></div> 137 <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="158" data-expected-width="50" data-expected-height="100"></div> 138 <div class="cell secondRowSecondColumn" data-offset-x="70" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> 139 </div> 140 </div> 141 142 <div class="container"> 143 <p>direction: LTR | align-content: 'right'</p> 144 <div class="grid grid50And100 alignContentRight gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 145 <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 146 <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 147 <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 148 <div class="cell secondRowSecondColumn" data-offset-x="70" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 149 </div> 150 </div> 151 152 <div class="container"> 153 <p>direction: RTL | align-content: 'right'</p> 154 <div class="grid grid50And100 directionRTL alignContentRight gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 155 <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 156 <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 157 <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 158 <div class="cell secondRowSecondColumn" data-offset-x="110" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 159 </div> 160 </div> 161 162 <div class="container"> 163 <p>direction: RTL | align-content: 'start'</p> 164 <div class="grid grid50And100 directionRTL alignContentStart gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 165 <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 166 <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 167 <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 168 <div class="cell secondRowSecondColumn" data-offset-x="110" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 169 </div> 170 </div> 171 172 <!-- Check that gutters do not interfere with justify-content computation. --> 173 <div class="container"> 174 <p>direction: LTR | justify-content: 'center'</p> 175 <div class="grid grid50And100 justifyContentCenter gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 176 <div class="cell firstRowFirstColumn" data-offset-x="40" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 177 <div class="firstRowSecondColumn" data-offset-x="110" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 178 <div class="secondRowFirstColumn" data-offset-x="40" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 179 <div class="cell secondRowSecondColumn" data-offset-x="110" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 180 </div> 181 </div> 182 183 <div class="container"> 184 <p>direction: LTR | justify-content: 'end'</p> 185 <div class="grid grid50And100 justifyContentEnd gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 186 <div class="cell firstRowFirstColumn" data-offset-x="80" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 187 <div class="firstRowSecondColumn" data-offset-x="150" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 188 <div class="secondRowFirstColumn" data-offset-x="80" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 189 <div class="cell secondRowSecondColumn" data-offset-x="150" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 190 </div> 191 </div> 192 193 <div class="container"> 194 <p>direction: RTL | justify-content: 'end'</p> 195 <div class="grid grid50And100 directionRTL justifyContentRight gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 196 <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 197 <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 198 <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 199 <div class="cell secondRowSecondColumn" data-offset-x="110" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 200 </div> 201 </div> 202 203 <div class="container"> 204 <p>direction: RTL | justify-content: 'start'</p> 205 <div class="grid grid50And100 directionRTL justifyContentStart gridRowColumnGaps" data-expected-width="200" data-expected-height="300"> 206 <div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 207 <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> 208 <div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="115" data-expected-width="50" data-expected-height="100"></div> 209 <div class="cell secondRowSecondColumn" data-offset-x="110" data-offset-y="115" data-expected-width="20" data-expected-height="40"></div> 210 </div> 211 </div> 212 213 <!-- Check that gutters do not interfere with vertical justify-content computation. --> 214 215 <div class="container"> 216 <p>direction: RTL | justify-content: 'stretch'</p> 217 <div class="grid gridAuto20And40 stretchedGrid justifyContentStretch verticalLR directionRTL gridRowColumnGaps" data-expected-width="400" data-expected-height="300"> 218 <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="240" data-expected-width="40" data-expected-height="60"></div> 219 <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="160" data-expected-width="40" data-expected-height="60"></div> 220 <div class="firstRowThirdColumn" data-offset-x="0" data-offset-y="80" data-expected-width="40" data-expected-height="60"></div> 221 <div class="firstRowFourthColumn" data-offset-x="0" data-offset-y="0" data-expected-width="40" data-expected-height="60"></div> 222 <div class="secondRowFirstColumn" data-offset-x="55" data-offset-y="240" data-expected-width="40" data-expected-height="60"></div> 223 <div class="secondRowSecondColumn" data-offset-x="55" data-offset-y="160" data-expected-width="40" data-expected-height="60"></div> 224 <div class="secondRowThirdColumn" data-offset-x="55" data-offset-y="80" data-expected-width="40" data-expected-height="60"></div> 225 <div class="secondRowFourthColumn" data-offset-x="55" data-offset-y="0" data-expected-width="40" data-expected-height="60"></div> 226 </div> 227 </div> 228 229 <div class="container"> 230 <p>direction: LTR | justify-content: 'space-evenly'</p> 231 <div class="grid gridAuto20And40 justifyContentSpaceEvenly verticalLR directionRTL gridRowColumnGaps" data-expected-width="400" data-expected-height="300"> 232 <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="230" data-expected-width="40" data-expected-height="20"></div> 233 <div class="firstRowSecondColumn" data-offset-x="0" data-offset-y="140" data-expected-width="40" data-expected-height="20"></div> 234 <div class="firstRowThirdColumn" data-offset-x="0" data-offset-y="50" data-expected-width="40" data-expected-height="20"></div> 235 <div class="secondRowFirstColumn" data-offset-x="55" data-offset-y="230" data-expected-width="40" data-expected-height="20"></div> 236 <div class="secondRowSecondColumn" data-offset-x="55" data-offset-y="140" data-expected-width="40" data-expected-height="20"></div> 237 <div class="secondRowThirdColumn" data-offset-x="55" data-offset-y="50" data-expected-width="40" data-expected-height="20"></div> 238 </div> 239 </div> 240 241 <div class="container"> 242 <p>direction: LTR | justify-content: 'space-between'</p> 243 <div class="grid gridAuto20And40 justifyContentSpaceBetween verticalRL directionRTL gridRowColumnGaps" data-expected-width="400" data-expected-height="300"> 244 <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> 245 <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="187" data-expected-width="40" data-expected-height="20"></div> 246 <div class="firstRowThirdColumn" data-offset-x="360" data-offset-y="93" data-expected-width="40" data-expected-height="20"></div> 247 <div class="firstRowFourthColumn" data-offset-x="360" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> 248 <div class="secondRowFirstColumn" data-offset-x="305" data-offset-y="280" data-expected-width="40" data-expected-height="20"></div> 249 <div class="secondRowSecondColumn" data-offset-x="305" data-offset-y="187" data-expected-width="40" data-expected-height="20"></div> 250 <div class="secondRowThirdColumn" data-offset-x="305" data-offset-y="93" data-expected-width="40" data-expected-height="20"></div> 251 <div class="secondRowFourthColumn" data-offset-x="305" data-offset-y="0" data-expected-width="40" data-expected-height="20"></div> 252 </div> 253 </div> 254 255 <div class="container"> 256 <p>direction: LTR | justify-content: 'space-around'</p> 257 <div class="grid gridAuto20And40 justifyContentSpaceAround verticalRL directionRTL gridRowColumnGaps" data-expected-width="400" data-expected-height="300"> 258 <div class="firstRowFirstColumn" data-offset-x="360" data-offset-y="220" data-expected-width="40" data-expected-height="20"></div> 259 <div class="firstRowSecondColumn" data-offset-x="360" data-offset-y="60" data-expected-width="40" data-expected-height="20"></div> 260 <div class="secondRowFirstColumn" data-offset-x="305" data-offset-y="220" data-expected-width="40" data-expected-height="20"></div> 261 <div class="secondRowSecondColumn" data-offset-x="305" data-offset-y="60" data-expected-width="40" data-expected-height="20"></div> 262 </div> 263 </div> 264 265 <!-- Check that gutters do not interfere with align&justify computation when having border, padding and margins. --> 266 <div class="container"> 267 <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> 268 direction: LTR (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> 269 <div class="grid gridWithPaddingBorder fit-content directionLTR itemsSelfStart gridRowColumnGaps" data-expected-width="395" data-expected-height="465"> 270 <div class="directionLTR cell firstRowFirstColumn" data-offset-x="46" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> 271 <div class="directionLTR selfStretch firstRowSecondColumn" data-offset-x="150" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> 272 <div class="directionLTR selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="225" data-expected-width="100" data-expected-height="200"></div> 273 <div class="directionLTR cell secondRowSecondColumn" data-offset-x="166" data-offset-y="229" data-expected-width="20" data-expected-height="40"></div> 274 </div> 275 </div> 276 277 <div class="container"> 278 <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> 279 direction: LTR (ortho) | align-items: 'self-end' | justify-items: 'self-end'</p> 280 <div class="grid gridWithPaddingBorder fit-content directionLTR itemsSelfEnd gridRowColumnGaps" data-expected-width="395" data-expected-height="465"> 281 <div class="directionRTL cell firstRowFirstColumn" data-offset-x="46" data-offset-y="158" data-expected-width="20" data-expected-height="40"></div> 282 <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="150" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> 283 <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="30" data-offset-y="225" data-expected-width="100" data-expected-height="200"></div> 284 <div class="directionRTL cell secondRowSecondColumn" data-offset-x="166" data-offset-y="373" data-expected-width="20" data-expected-height="40"></div> 285 </div> 286 </div> 287 288 <div class="container"> 289 <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> 290 direction: RTL | align-items: 'right' | justify-items: 'right'</p> 291 <div class="grid gridWithPaddingBorder fit-content directionRTL itemsRight gridRowColumnGaps" data-expected-width="395" data-expected-height="465"> 292 <div class="cell firstRowFirstColumn" data-offset-x="322" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> 293 <div class="selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> 294 <div class="selfStretch secondRowFirstColumn" data-offset-x="250" data-offset-y="225" data-expected-width="100" data-expected-height="200"></div> 295 <div class="cell secondRowSecondColumn" data-offset-x="202" data-offset-y="229" data-expected-width="20" data-expected-height="40"></div> 296 </div> 297 </div> 298 299 <div class="container"> 300 <p>border: 5px 10px 15px 20px | padding: 10px 15px 20px 30px | margin: 4px 8px 12px 16px<br> 301 direction: RTL (parall) | align-items: 'self-start' | justify-items: 'self-start'</p> 302 <div class="grid gridWithPaddingBorder fit-content directionRTL itemsSelfStart gridRowColumnGaps" data-expected-width="395" data-expected-height="465"> 303 <div class="directionRTL cell firstRowFirstColumn" data-offset-x="322" data-offset-y="14" data-expected-width="20" data-expected-height="40"></div> 304 <div class="directionRTL selfStretch firstRowSecondColumn" data-offset-x="30" data-offset-y="10" data-expected-width="200" data-expected-height="200"></div> 305 <div class="directionRTL selfStretch secondRowFirstColumn" data-offset-x="250" data-offset-y="225" data-expected-width="100" data-expected-height="200"></div> 306 <div class="directionRTL cell secondRowSecondColumn" data-offset-x="202" data-offset-y="229" data-expected-width="20" data-expected-height="40"></div> 307 </div> 308 </div> 309 310 <!-- Check behavior with negative free space --> 311 <div class="container"> 312 <p>Negative free space. justify-content: start</p> 313 <div class="grid gridWithAutoColumns justifyContentStart gridRowColumnGaps" data-expected-width="14" data-expected-height="44"> 314 <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 315 <div class="cell firstRowSecondColumn" data-offset-x="40" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 316 <div class="cell firstRowThirdColumn" data-offset-x="80" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 317 </div> 318 </div> 319 320 <div class="container"> 321 <p>Negative free space. justify-content: center</p> 322 <div class="grid gridWithAutoColumns justifyContentCenter gridRowColumnGaps" data-expected-width="14" data-expected-height="44"> 323 <div class="cell firstRowFirstColumn" data-offset-x="-45" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 324 <div class="cell firstRowSecondColumn" data-offset-x="-5" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 325 <div class="cell firstRowThirdColumn" data-offset-x="35" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 326 </div> 327 </div> 328 329 <div class="container"> 330 <p>Negative free space. justify-content: end</p> 331 <div class="grid gridWithAutoColumns justifyContentEnd gridRowColumnGaps" data-expected-width="14" data-expected-height="44"> 332 <div class="cell firstRowFirstColumn" data-offset-x="-90" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 333 <div class="cell firstRowSecondColumn" data-offset-x="-50" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 334 <div class="cell firstRowThirdColumn" data-offset-x="-10" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 335 </div> 336 </div> 337 338 <!-- NOTE: for the following 3 test cases we use margins just for enhancing the visual output (otherwise grids would overlap) --> 339 <div class="container" style="margin-bottom: 125px;"> 340 <p>Negative free space. align-content: start</p> 341 <div class="grid gridWithAutoRows alignContentStart gridRowColumnGaps" data-expected-width="24" data-expected-height="54"> 342 <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div> 343 <div class="cell secondRowFirstColumn" data-offset-x="0" data-offset-y="55" data-expected-width="20" data-expected-height="40"></div> 344 <div class="cell thirdRowFirstColumn" data-offset-x="0" data-offset-y="110" data-expected-width="20" data-expected-height="40"></div> 345 </div> 346 </div> 347 348 <div class="container" style="margin-bottom: 75px;"> 349 <p>Negative free space. align-content: center</p> 350 <div class="grid gridWithAutoRows alignContentCenter gridRowColumnGaps" style="margin-top: 75px" data-expected-width="24" data-expected-height="54"> 351 <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="-50" data-expected-width="20" data-expected-height="40"></div> 352 <div class="cell secondRowFirstColumn" data-offset-x="0" data-offset-y="5" data-expected-width="20" data-expected-height="40"></div> 353 <div class="cell thirdRowFirstColumn" data-offset-x="0" data-offset-y="60" data-expected-width="20" data-expected-height="40"></div> 354 </div> 355 </div> 356 357 <div class="container" style="margin-bottom: 25px;"> 358 <p>Negative free space. align-content: end</p> 359 <div class="grid gridWithAutoRows alignContentEnd gridRowColumnGaps" style="margin-top: 125px" data-expected-width="24" data-expected-height="54"> 360 <div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="-100" data-expected-width="20" data-expected-height="40"></div> 361 <div class="cell secondRowFirstColumn" data-offset-x="0" data-offset-y="-45" data-expected-width="20" data-expected-height="40"></div> 362 <div class="cell thirdRowFirstColumn" data-offset-x="0" data-offset-y="10" data-expected-width="20" data-expected-height="40"></div> 363 </div> 364 </div> 365 366 </body>