| <!DOCTYPE html> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <title>When a block inside a flexbox adds scrollbars due to overflow, the parent flexbox should re-flex based on the child size including scrollbars.</title> |
| <style> |
| .vflex { |
| display: flex; |
| flex-direction: column; |
| max-width: 200px; |
| margin: 10px 0 10px 0; |
| } |
| .hflex { |
| display: flex; |
| flex-direction: row; |
| max-height: 200px; |
| margin: 10px 0 10px 0; |
| } |
| .hbox { |
| overflow-x: auto; |
| white-space: nowrap; |
| } |
| .vbox { |
| overflow-y: auto; |
| max-height: 200px; |
| } |
| .intrinsic-height-box { |
| min-height: min-content; |
| overflow: auto; |
| flex-basis: 0; |
| } |
| .rect { |
| min-height: 100px; |
| min-width: 100px; |
| background-color: green; |
| display: inline-block; |
| } |
| </style> |
| |
| <div class="vflex"> |
| <div class="hbox"> |
| <div class="rect"></div> |
| <div class="rect"></div> |
| </div> |
| </div> |
| |
| <div class="vflex"> |
| <div class="intrinsic-height-box"> |
| <div class="rect" style="min-width: 300px"></div> |
| </div> |
| </div> |
| |
| <div class="hflex"> |
| <div class="vbox"> |
| <div class="rect" style="min-height: 300px;"></div> |
| </div> |
| </div> |
| |
| <div style="display: flex; width: 100px; height: 100px;"> |
| <div id="inner" style="flex: none; height: 100px; overflow: auto;"> |
| <div style="width: 100px; height: 150px; background-color: green;"></div> |
| </div> |
| </div> |
| |
| <!-- This div is only for measuring scrollbar size --> |
| <div id="measure" style="height: 100px; width: 100px; display: inline-box; overflow: auto;"> |
| <div style="min-height: 300px;"></div> |
| </div> |
| |
| <script> |
| var hbox = document.querySelector('.hbox'); |
| test(function() { |
| assert_equals(hbox.parentNode.clientHeight, hbox.parentNode.scrollHeight); |
| assert_equals(hbox.clientHeight, hbox.scrollHeight); |
| }, 'hbox dimensions'); |
| |
| var intrinsicHeightBox = document.querySelector('.intrinsic-height-box'); |
| test(function() { |
| assert_equals(intrinsicHeightBox.clientHeight, intrinsicHeightBox.scrollHeight); |
| }, 'intrinsicHeightBox dimensions'); |
| |
| var measure = document.getElementById('measure'); |
| var scrollbarSize = measure.offsetWidth - measure.clientWidth; |
| test(function() { |
| assert_not_equals(scrollbarSize, 0); |
| }, 'scrollbarSize should not be zero'); |
| |
| var inner = document.getElementById('inner'); |
| test(function() { |
| assert_equals(inner.clientWidth, 100); |
| assert_equals(inner.offsetWidth, 100 + scrollbarSize); |
| }, 'inner dimensions'); |
| |
| var vbox = document.querySelector('.vbox'); |
| test(function() { |
| assert_equals(vbox.clientWidth, 100); |
| assert_equals(vbox.offsetWidth, 100 + scrollbarSize); |
| }, 'vbox dimensions'); |
| </script> |