| <!DOCTYPE html> |
| <div id="outerStrict" style="contain:strict;"> |
| <div id="multicol" style="columns:1; writing-mode:vertical-lr;"> |
| <div id="multicolChild"></div> |
| <div id="notMarkedForLayout"> |
| <div id="innerStrict" style="contain:strict;"> |
| <table> |
| <thead id="thead"></thead> |
| <tbody> |
| <tr></tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
| </div> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| test(() => { |
| document.body.offsetTop; |
| // Will mark everything from #thead up to #innerStrict for layout |
| document.getElementById("thead").style.display = "none"; |
| // Will mark everything from #multicolChild to #outerStrict for layout |
| document.getElementById("multicolChild").style.display = "none"; |
| |
| // At this point #notMarkedForLayout will remain not marked for layout, |
| // while both its parent and its child will be marked for |
| // layout. #innerStrict and #outerStrict can be laid out as separate |
| // subtrees in the next layout phase. #multicol establishes an |
| // orthogonal writing mode root. Writing mode roots need to be laid out |
| // before their ancestors (in order to get min/max intrinsic inline |
| // sizes correct). It is now important that the three objects |
| // (#innerStrict, #multicol, #outerStrict) be laid out in depth-first |
| // order, so that we don't skip over subtrees that need layout. |
| }, "no crash or assertion failure"); |
| </script> |