4 https://bugzilla.mozilla.org/show_bug.cgi?id=696253
8 <title>Test align/justify-items/self/content computed values
</title>
9 <script src=
"/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css"/>
12 <body style=
"position:relative">
13 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=696253">Mozilla Bug
696253</a>
15 #flexContainer, #flexContainerGrid { display: flex; position:relative; }
16 #gridContainer, #gridContainerFlex { display: grid; position:relative; }
17 #display b, #absChild { position:absolute; }
20 <div id=
"myDiv"></div>
21 <div id=
"flexContainer"><a></a><b></b></div>
22 <div id=
"gridContainer"><a></a><b></b></div>
23 <div id=
"flexContainerGrid"><a style=
"diplay:grid"></a><b style=
"diplay:grid"></b></div>
24 <div id=
"gridContainerFlex"><a style=
"diplay:flex"></a><b style=
"diplay:flex"></b></div>
26 <div id=
"absChild"></div>
28 <script type=
"application/javascript">
31 * Utility function for getting computed style of
"align-self":
33 function getComputedAlignSelf(elem) {
34 return window.getComputedStyle(elem).alignSelf;
36 function getComputedAlignItems(elem) {
37 return window.getComputedStyle(elem).alignItems;
39 function getComputedAlignContent(elem) {
40 return window.getComputedStyle(elem).alignContent;
42 function getComputedJustifySelf(elem) {
43 return window.getComputedStyle(elem).justifySelf;
45 function getComputedJustifyItems(elem) {
46 return window.getComputedStyle(elem).justifyItems;
48 function getComputedJustifyContent(elem) {
49 return window.getComputedStyle(elem).justifyContent;
53 * Test behavior of 'align-self:auto' (Bug
696253 and Bug
1304012)
54 * ===============================================
56 * In a previous revision of the CSS Alignment spec, align-self:auto
57 * was required to actually *compute* to the parent's align-items value --
58 * but now, the spec says it simply computes to itself, and it should
59 * only get converted into the parent's align-items value when it's used
60 * in layout. This test verifies that we do indeed have it compute to
61 * itself, regardless of the parent's align-items value.
65 * Tests for a block node with a parent node:
67 function testGeneralNode(elem) {
68 // Test initial computed style
69 // (Initial value should be 'auto', which should compute to itself)
70 is(getComputedAlignSelf(elem),
"auto", elem.tagName +
": " +
71 "initial computed value of 'align-self' should be 'auto'");
73 // Test value after setting align-self explicitly to
"auto"
74 elem.style.alignSelf =
"auto";
75 is(getComputedAlignSelf(elem),
"auto", elem.tagName +
": " +
76 "computed value of 'align-self: auto' should be 'auto'");
77 elem.style.alignSelf =
""; // clean up
79 // Test value after setting align-self explicitly to
"inherit"
80 elem.style.alignSelf =
"inherit";
81 if (elem.parentNode && elem.parentNode.style) {
82 is(getComputedAlignSelf(elem), getComputedAlignSelf(elem.parentNode),
83 elem.tagName +
": computed value of 'align-self: inherit' " +
84 "should match the value on the parent");
86 is(getComputedAlignSelf(elem),
"auto", elem.tagName +
": " +
87 "computed value of 'align-self: inherit' should be 'auto', " +
88 "when there is no parent");
90 elem.style.alignSelf =
""; // clean up
94 * Tests that depend on us having a parent node:
96 function testNodeThatHasParent(elem) {
97 // Sanity-check that we actually do have a styleable parent:
98 ok(elem.parentNode && elem.parentNode.style, elem.tagName +
": " +
99 "bug in test -- expecting caller to pass us a node with a parent");
101 // Test initial computed style when
"align-items" has been set on our parent.
102 // (elem's initial
"align-self" value should be
"auto", which should compute
103 // to its parent's
"align-items" value, which in this case is
"center".)
104 elem.parentNode.style.alignItems =
"center";
105 is(getComputedAlignSelf(elem),
"auto", elem.tagName +
": " +
106 "initial computed value of 'align-self' should be 'auto', even " +
107 "after changing parent's 'align-items' value");
109 // ...and now test computed style after setting
"align-self" explicitly to
110 //
"auto" (with parent
"align-items" still at
"center")
111 elem.style.alignSelf =
"auto";
112 is(getComputedAlignSelf(elem),
"auto", elem.tagName +
": " +
113 "computed value of 'align-self: auto' should remain 'auto', after " +
114 "being explicitly set");
116 elem.style.alignSelf =
""; // clean up
117 elem.parentNode.style.alignItems =
""; // clean up
119 // Finally: test computed style after setting
"align-self" to
"inherit"
120 // and leaving parent at its initial value which should be
"auto".
121 elem.style.alignSelf =
"inherit";
122 is(getComputedAlignSelf(elem),
"auto", elem.tagName +
": " +
123 "computed value of 'align-self: inherit' should take parent's " +
124 "computed 'align-self' value (which should be 'auto', " +
125 "if we haven't explicitly set any other style");
126 elem.style.alignSelf =
""; // clean up
133 // Test the root node
134 // ==================
135 // (It's special because it has no parent ComputedStyle.)
137 var rootNode = document.documentElement;
139 // Sanity-check that we actually have the root node, as far as CSS is concerned.
140 // (Note: rootNode.parentNode is a HTMLDocument object -- not an element that
141 // we inherit style from.)
142 ok(!rootNode.parentNode.style,
143 "expecting root node to have no node to inherit style from");
145 testGeneralNode(rootNode);
147 // Test the body node
148 // ==================
149 // (It's special because it has no grandparent ComputedStyle.)
151 var body = document.getElementsByTagName(
"body")[
0];
152 is(body.parentNode, document.documentElement,
153 "expecting body element's parent to be the root node");
155 testGeneralNode(body);
156 testNodeThatHasParent(body);
159 // align-items/self tests:
162 var element = document.body;
163 var child = document.getElementById(
"display");
164 var absChild = document.getElementById(
"absChild");
165 is(getComputedAlignItems(element), 'normal',
"default align-items value for block container");
166 is(getComputedAlignSelf(child), 'auto',
"default align-self value for block child");
167 is(getComputedAlignSelf(absChild), 'auto',
"default align-self value for block container abs.pos. child");
168 element.style.alignItems =
"end";
169 is(getComputedAlignSelf(child), 'auto',
"align-self:auto value persists for block child");
170 is(getComputedAlignSelf(absChild), 'auto',
"align-self:auto value persists for block container abs.pos. child");
171 element.style.alignItems =
"left";
172 is(getComputedAlignItems(element), 'end',
"align-items:left is an invalid declaration");
173 is(getComputedAlignSelf(child), 'auto',
"align-self:auto persists for block child");
174 is(getComputedAlignSelf(absChild), 'auto',
"align-self:auto value persists for block container abs.pos. child");
175 element.style.alignItems =
"right";
176 is(getComputedAlignItems(element), 'end',
"align-items:right is an invalid declaration");
177 is(getComputedAlignSelf(child), 'auto',
"align-self:auto value persists for block child");
178 is(getComputedAlignSelf(absChild), 'auto',
"align-self:auto value persists for block container abs.pos. child");
181 function testFlexAlignItemsSelf(elem) {
182 var item = elem.firstChild;
183 var abs = elem.children[
1];
184 is(getComputedAlignItems(elem), 'normal',
"default align-items value for flex container");
185 is(getComputedAlignSelf(item), 'auto',
"default align-self value for flex item");
186 is(getComputedAlignSelf(abs), 'auto',
"default align-self value for flex container abs.pos. child");
187 elem.style.alignItems =
"flex-end";
188 is(getComputedAlignSelf(item), 'auto',
"align-self:auto value persists for flex container child");
189 is(getComputedAlignSelf(abs), 'auto',
"align-self:auto value persists for flex container abs.pos. child");
190 elem.style.alignItems =
"left";
191 is(getComputedAlignItems(elem), 'flex-end',
"align-items:left is an invalid declaration");
192 elem.style.alignItems =
"";
194 testFlexAlignItemsSelf(document.getElementById(
"flexContainer"));
195 testFlexAlignItemsSelf(document.getElementById(
"flexContainerGrid"));
198 function testGridAlignItemsSelf(elem) {
199 var item = elem.firstChild;
200 var abs = elem.children[
1];
201 is(getComputedAlignItems(elem), 'normal',
"default align-items value for grid container");
202 is(getComputedAlignSelf(item), 'auto',
"default align-self value for grid item");
203 is(getComputedAlignSelf(abs), 'auto',
"default align-self value for grid container abs.pos. child");
204 elem.style.alignItems =
"end";
205 is(getComputedAlignSelf(item), 'auto',
"align-self:auto value persists for grid container child");
206 is(getComputedAlignSelf(abs), 'auto',
"align-self:auto value persists for grid container abs.pos. child");
208 elem.style.alignItems =
"left";
209 is(getComputedAlignItems(elem), 'end',
"align-items:left is an invalid declaration");
210 is(getComputedAlignSelf(item), 'auto',
"align-self:auto value persists for grid container child");
211 is(getComputedAlignSelf(abs), 'auto',
"align-self:auto value persists for grid container abs.pos. child");
212 elem.style.alignItems =
"right";
213 is(getComputedAlignItems(elem), 'end',
"align-items:right is an invalid declaration");
214 is(getComputedAlignSelf(item), 'auto',
"align-self:auto value persists for grid container child");
215 is(getComputedAlignSelf(abs), 'auto',
"align-self:auto value persists for grid container abs.pos. child");
217 item.style.alignSelf =
"";
218 abs.style.alignSelf =
"";
219 elem.style.alignItems =
"";
220 item.style.alignSelf =
"";
222 testGridAlignItemsSelf(document.getElementById(
"gridContainer"));
223 testGridAlignItemsSelf(document.getElementById(
"gridContainerFlex"));
226 // justify-items/self tests:
229 element = document.body;
230 child = document.getElementById(
"display");
231 absChild = document.getElementById(
"absChild");
232 is(getComputedJustifyItems(element), 'normal',
"default justify-items value for block container");
233 is(getComputedJustifySelf(child), 'auto',
"default justify-self value for block container child");
234 is(getComputedJustifySelf(absChild), 'auto',
"default justify-self value for block container abs.pos. child");
235 element.style.justifyItems =
"end";
236 is(getComputedJustifySelf(child), 'auto',
"justify-self:auto value persists for block child");
237 is(getComputedJustifySelf(absChild), 'auto',
"justify-self:auto value persists for block container abs.pos. child");
238 element.style.justifyItems =
"left";
239 is(getComputedJustifyItems(element), 'left',
"justify-items:left computes to itself on a block");
240 is(getComputedJustifySelf(child), 'auto',
"justify-self:auto value persists for block child");
241 is(getComputedJustifySelf(absChild), 'auto',
"justify-self:auto value persists for block container abs.pos. child");
242 element.style.justifyItems =
"right";
243 is(getComputedJustifySelf(child), 'auto',
"justify-self:auto value persists for block child");
244 is(getComputedJustifySelf(absChild), 'auto',
"justify-self:auto value persists for block container abs.pos. child");
245 element.style.justifyItems =
"safe right";
246 is(getComputedJustifySelf(child), 'auto',
"justify-self:auto value persists for block child");
247 element.style.justifyItems =
"";
248 child.style.justifySelf =
"left";
249 is(getComputedJustifySelf(child), 'left',
"justify-self:left computes to left on block child");
250 child.style.justifySelf =
"right";
251 is(getComputedJustifySelf(child), 'right',
"justify-self:right computes to right on block child");
252 child.style.justifySelf =
"";
253 absChild.style.justifySelf =
"right";
254 is(getComputedJustifySelf(absChild), 'right',
"justify-self:right computes to right on block container abs.pos. child");
257 function testFlexJustifyItemsSelf(elem) {
258 var item = elem.firstChild;
259 var abs = elem.children[
1];
260 is(getComputedJustifyItems(elem), 'normal',
"default justify-items value for flex container");
261 is(getComputedJustifySelf(item), 'auto',
"default justify-self value for flex item");
262 is(getComputedJustifySelf(abs), 'auto',
"default justify-self value for flex container abs.pos. child");
263 elem.style.justifyItems =
"flex-end";
264 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for flex container child");
265 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for flex container abs.pos. child");
266 elem.style.justifyItems =
"left";
267 is(getComputedJustifyItems(elem), 'left',
"justify-items:left computes to itself for flex container");
268 elem.style.justifyItems =
"safe right";
269 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for flex container child");
270 // XXX TODO: add left/right tests (bug
1221565)
271 elem.style.justifyItems =
"";
273 testFlexJustifyItemsSelf(document.getElementById(
"flexContainer"));
274 testFlexJustifyItemsSelf(document.getElementById(
"flexContainerGrid"));
277 function testGridJustifyItemsSelf(elem) {
278 var item = elem.firstChild;
279 var abs = elem.children[
1];
280 is(getComputedJustifyItems(elem), 'normal',
"default justify-items value for grid container");
281 is(getComputedJustifySelf(item), 'auto',
"default justify-self value for grid item");
282 is(getComputedJustifySelf(abs), 'auto',
"default justify-self value for grid container abs.pos. child");
283 elem.style.justifyItems =
"end";
284 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
285 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for grid container abs.pos. child");
286 elem.style.justifyItems =
"left";
287 is(getComputedJustifyItems(elem), 'left',
"justify-items:left computes to itself for grid container");
288 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
289 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for grid container abs.pos. child");
290 elem.style.justifyItems =
"legacy left";
291 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
292 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for grid container abs.pos. child");
293 elem.style.justifyItems =
"right";
294 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
295 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for grid container abs.pos. child");
296 elem.style.justifyItems =
"safe right";
297 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
298 elem.style.justifyItems =
"legacy right";
299 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
300 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for grid container abs.pos. child");
301 elem.style.justifyItems =
"legacy center";
302 item.style.justifyItems =
"inherit";
303 abs.style.justifyItems =
"inherit";
304 is(getComputedJustifySelf(item), 'auto',
"justify-self:auto value persists for grid container child");
305 is(getComputedJustifySelf(abs), 'auto',
"justify-self:auto value persists for grid container abs.pos. child");
306 is(getComputedJustifyItems(elem), 'legacy center',
"justify-items computes to itself grid container");
307 is(getComputedJustifyItems(item), 'legacy center',
"justify-items inherits including legacy keyword to grid item");
308 is(getComputedJustifyItems(abs), 'legacy center',
"justify-items inherits including legacy keyword to grid container abs.pos. child");
309 elem.style.justifyItems =
"";
310 item.style.justifySelf =
"left";
311 is(getComputedJustifySelf(item), 'left',
"justify-self:left computes to left on grid item");
312 item.style.justifySelf =
"right";
313 is(getComputedJustifySelf(item), 'right',
"justify-self:right computes to right on grid item");
314 item.style.justifySelf =
"safe right";
315 is(getComputedJustifySelf(item), 'safe right',
"justify-self:'safe right' computes to 'safe right' on grid item");
316 item.style.justifySelf =
"";
317 abs.style.justifySelf =
"right";
318 is(getComputedJustifySelf(abs), 'right',
"justify-self:right computes to right on grid container abs.pos. child");
319 abs.style.justifySelf =
"";
320 elem.style.justifyItems =
"";
321 item.style.justifySelf =
"";
323 testGridJustifyItemsSelf(document.getElementById(
"gridContainer"));
324 testGridJustifyItemsSelf(document.getElementById(
"gridContainerFlex"));
327 // align-content tests:
330 element = document.body;
331 child = document.getElementById(
"display");
332 absChild = document.getElementById(
"absChild");
333 is(getComputedAlignContent(element), 'normal',
"default align-content value for block container");
334 is(getComputedAlignContent(child), 'normal',
"default align-content value for block child");
335 is(getComputedAlignContent(absChild), 'normal',
"default align-content value for block container abs.pos. child");
336 element.style.alignContent =
"end";
337 is(getComputedAlignContent(child), 'normal',
"default align-content isn't affected by parent align-content value for in-flow child");
338 is(getComputedAlignContent(absChild), 'normal',
"default align-content isn't affected by parent align-content value for block container abs.pos. child");
339 element.style.alignContent =
"left";
340 is(getComputedAlignContent(element), 'end',
"align-content:left isn't a valid declaration");
341 is(getComputedAlignContent(absChild), 'normal',
"default align-content isn't affected by parent align-content value for block container abs.pos. child");
342 element.style.alignContent =
"right";
343 is(getComputedAlignContent(element), 'end',
"align-content:right isn't a valid declaration");
344 is(getComputedAlignContent(absChild), 'normal',
"default align-content isn't affected by parent align-content value for block container abs.pos. child");
345 element.style.alignContent =
"";
348 function testFlexAlignContent(elem) {
349 var item = elem.firstChild;
350 var abs = elem.children[
1];
351 is(getComputedAlignContent(elem), 'normal',
"default align-content value for flex container");
352 is(getComputedAlignContent(item), 'normal',
"default align-content value for flex item");
353 is(getComputedAlignContent(abs), 'normal',
"default align-content value for flex container abs.pos. child");
354 elem.style.alignContent =
"safe end";
355 is(getComputedAlignContent(elem), 'safe end',
"align-content:'safe end' computes to itself for flex container");
356 is(getComputedAlignContent(item), 'normal',
"default align-content isn't affected by parent align-content value for flex item");
357 is(getComputedAlignContent(abs), 'normal',
"default align-content isn't affected by parent align-content value for flex container abs.pos. child");
358 elem.style.alignContent =
"";
360 testFlexAlignContent(document.getElementById(
"flexContainer"));
361 testFlexAlignContent(document.getElementById(
"flexContainerGrid"));
364 function testGridAlignContent(elem) {
365 var item = elem.firstChild;
366 var abs = elem.children[
1];
367 is(getComputedAlignContent(elem), 'normal',
"default align-content value for grid container");
368 is(getComputedAlignContent(item), 'normal',
"default align-content value for grid item");
369 is(getComputedAlignContent(abs), 'normal',
"default align-content value for grid container abs.pos. child");
370 elem.style.alignContent =
"safe end";
371 is(getComputedAlignContent(elem), 'safe end',
"align-content:'safe end' computes to itself on grid container");
372 is(getComputedAlignContent(item), 'normal',
"default align-content isn't affected by parent align-content value for grid item");
373 is(getComputedAlignContent(abs), 'normal',
"default align-content isn't affected by parent align-content value for grid container abs.pos. child");
374 elem.style.alignContent =
"safe end";
375 item.style.alignContent =
"inherit";
376 abs.style.alignContent =
"inherit";
377 is(getComputedAlignContent(elem), 'safe end',
"align-content:'safe end' computes to 'align-content:safe end' on grid container");
378 is(getComputedAlignContent(item), 'safe end',
"align-content:'safe end' inherits as 'align-content:safe end' to grid item");
379 is(getComputedAlignContent(abs), 'safe end',
"align-content:'safe end' inherits as 'align-content:safe end' to grid container abs.pos. child");
380 item.style.alignContent =
"";
381 abs.style.alignContent =
"";
382 elem.style.alignContent =
"";
383 item.style.alignContent =
"";
385 testGridAlignContent(document.getElementById(
"gridContainer"));
386 testGridAlignContent(document.getElementById(
"gridContainerFlex"));
390 // justify-content tests:
393 element = document.body;
394 child = document.getElementById(
"display");
395 absChild = document.getElementById(
"absChild");
396 is(getComputedJustifyContent(element), 'normal',
"default justify-content value for block container");
397 is(getComputedJustifyContent(child), 'normal',
"default justify-content value for block child");
398 is(getComputedJustifyContent(absChild), 'normal',
"default justify-content value for block container abs.pos. child");
399 element.style.justifyContent =
"end";
400 is(getComputedJustifyContent(child), 'normal',
"default justify-content isn't affected by parent justify-content value for in-flow child");
401 is(getComputedJustifyContent(absChild), 'normal',
"default justify-content isn't affected by parent justify-content value for block container abs.pos. child");
402 element.style.justifyContent =
"left";
403 is(getComputedJustifyContent(element), 'left',
"justify-content:left computes to left on block child");
404 is(getComputedJustifyContent(absChild), 'normal',
"default justify-content isn't affected by parent justify-content value for block container abs.pos. child");
405 element.style.justifyContent =
"right";
406 is(getComputedJustifyContent(element), 'right',
"justify-content:right computes to right on block child");
407 is(getComputedJustifyContent(absChild), 'normal',
"default justify-content isn't affected by parent justify-content value for block container abs.pos. child");
408 element.style.justifyContent =
"safe right";
409 is(getComputedJustifyContent(element), 'safe right',
"justify-content:'safe right' computes to 'justify-content:safe right'");
410 element.style.justifyContent =
"";
411 child.style.justifyContent =
"left";
412 is(getComputedJustifyContent(child), 'left',
"justify-content:left computes to left on block child");
413 child.style.justifyContent =
"right";
414 is(getComputedJustifyContent(child), 'right',
"justify-content:right computes to right on block child");
415 child.style.justifyContent =
"safe left";
416 is(getComputedJustifyContent(child), 'safe left',
"justify-content:safe left computes to 'safe left' on block child");
417 child.style.justifyContent =
"";
418 absChild.style.justifyContent =
"right";
419 is(getComputedJustifyContent(absChild), 'right',
"justify-content:right computes to right on block container abs.pos. child");
420 absChild.style.justifyContent =
"";
423 function testFlexJustifyContent(elem) {
424 var item = elem.firstChild;
425 var abs = elem.children[
1];
426 is(getComputedJustifyContent(elem), 'normal',
"default justify-content value for flex container");
427 is(getComputedJustifyContent(item), 'normal',
"default justify-content value for flex item");
428 is(getComputedJustifyContent(abs), 'normal',
"default justify-content value for flex container abs.pos. child");
429 elem.style.justifyContent =
"safe end";
430 is(getComputedJustifyContent(elem), 'safe end',
"justify-content:'safe end' computes to itself for flex container");
431 is(getComputedJustifyContent(item), 'normal',
"default justify-content isn't affected by parent justify-content value for flex item");
432 is(getComputedJustifyContent(abs), 'normal',
"default justify-content isn't affected by parent justify-content value for flex container abs.pos. child");
433 // XXX TODO: add left/right tests (bug
1221565)
434 elem.style.justifyContent =
"";
436 testFlexJustifyContent(document.getElementById(
"flexContainer"));
437 testFlexJustifyContent(document.getElementById(
"flexContainerGrid"));
440 function testGridJustifyContent(elem) {
441 var item = elem.firstChild;
442 var abs = elem.children[
1];
443 is(getComputedJustifyContent(elem), 'normal',
"default justify-content value for grid container");
444 is(getComputedJustifyContent(item), 'normal',
"default justify-content value for grid item");
445 is(getComputedJustifyContent(abs), 'normal',
"default justify-content value for grid container abs.pos. child");
446 elem.style.justifyContent =
"safe end";
447 is(getComputedJustifyContent(elem), 'safe end',
"justify-content:'safe end' computes to itself on grid container");
448 is(getComputedJustifyContent(item), 'normal',
"default justify-content isn't affected by parent justify-content value for grid item");
449 is(getComputedJustifyContent(abs), 'normal',
"default justify-content isn't affected by parent justify-content value for grid container abs.pos. child");
450 elem.style.justifyContent =
"left";
451 is(getComputedJustifyContent(elem), 'left',
"justify-content:left computes to left on grid container");
452 is(getComputedJustifyContent(abs), 'normal',
"default justify-content isn't affected by parent justify-content value for grid container abs.pos. child");
453 elem.style.justifyContent =
"right";
454 is(getComputedJustifyContent(elem), 'right',
"justify-content:right computes to right on grid container");
455 is(getComputedJustifyContent(abs), 'normal',
"default justify-content isn't affected by parent justify-content value for grid container abs.pos. child");
456 elem.style.justifyContent =
"safe right";
457 item.style.justifyContent =
"inherit";
458 abs.style.justifyContent =
"inherit";
459 is(getComputedJustifyContent(elem), 'safe right',
"justify-content:'safe right' computes to 'justify-content:safe right' on grid container");
460 is(getComputedJustifyContent(item), 'safe right',
"justify-content:'safe right' inherits as 'justify-content:safe right' to grid item");
461 is(getComputedJustifyContent(abs), 'safe right',
"justify-content:'safe right' inherits as 'justify-content:safe right' to grid container abs.pos. child");
462 item.style.justifyContent =
"left";
463 is(getComputedJustifyContent(item), 'left',
"justify-content:left computes to left on grid item");
464 item.style.justifyContent =
"right";
465 is(getComputedJustifyContent(item), 'right',
"justify-content:right computes to right on grid item");
466 item.style.justifyContent =
"safe right";
467 is(getComputedJustifyContent(item), 'safe right',
"justify-content:'safe right' computes to 'safe right' on grid item");
468 item.style.justifyContent =
"";
469 abs.style.justifyContent =
"right";
470 is(getComputedJustifyContent(abs), 'right',
"justify-content:right computes to right on grid container abs.pos. child");
471 abs.style.justifyContent =
"";
472 elem.style.justifyContent =
"";
473 item.style.justifyContent =
"";
475 testGridJustifyContent(document.getElementById(
"gridContainer"));
476 testGridJustifyContent(document.getElementById(
"gridContainerFlex"));