| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>scroll-state(scrollable) against a query container that is not a scroll container</title> |
| <link rel="help" href="https://drafts.csswg.org/css-conditional-5/#scrollable"> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <style> |
| .container { container-type: scroll-state; } |
| |
| /* Generates a RenderInline, not a box. */ |
| #inline-container { display: inline; } |
| /* Generates no principal box at all. */ |
| #contents-container { display: contents; } |
| /* A box, but overflow is visible so it is not a scroll container. */ |
| #block-container { width: 100px; height: 100px; } |
| #scroller { width: 100px; height: 100px; overflow-y: auto; } |
| #filler { height: 1000px; } |
| |
| .target { --none: no; --bottom: no; } |
| @container scroll-state(scrollable: none) { .target { --none: yes; } } |
| @container scroll-state(scrollable: bottom) { .target { --bottom: yes; } } |
| </style> |
| |
| <span class="container" id="inline-container"><span class="target" id="t-inline"></span></span> |
| <div class="container" id="contents-container"><div class="target" id="t-contents"></div></div> |
| <div class="container" id="block-container"><div class="target" id="t-block"></div></div> |
| <div class="container" id="scroller"><div id="filler"><div class="target" id="t-scroller"></div></div></div> |
| |
| <script> |
| function value(id, name) { |
| return getComputedStyle(document.getElementById(id)).getPropertyValue(name).trim(); |
| } |
| |
| function nextRenderingUpdate() { |
| return new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))); |
| } |
| |
| // The scroll state is snapshotted during the rendering update, so let one run first. |
| promise_setup(async () => { await nextRenderingUpdate(); }); |
| |
| promise_test(async () => { |
| assert_equals(value('t-inline', '--none'), 'yes', 'matches none'); |
| assert_equals(value('t-inline', '--bottom'), 'no', 'does not match bottom'); |
| }, 'An inline query container is not scrollable, so only none matches'); |
| |
| promise_test(async () => { |
| assert_equals(value('t-contents', '--none'), 'yes', 'matches none'); |
| assert_equals(value('t-contents', '--bottom'), 'no', 'does not match bottom'); |
| }, 'A display:contents query container is not scrollable, so only none matches'); |
| |
| promise_test(async () => { |
| assert_equals(value('t-block', '--none'), 'yes', 'matches none'); |
| assert_equals(value('t-block', '--bottom'), 'no', 'does not match bottom'); |
| }, 'A box that is not a scroll container matches none'); |
| |
| promise_test(async () => { |
| assert_equals(value('t-scroller', '--none'), 'no', 'does not match none'); |
| assert_equals(value('t-scroller', '--bottom'), 'yes', 'matches bottom'); |
| }, 'A scroll container with scrollable overflow matches the direction, not none'); |
| </script> |