| <!DOCTYPE html> |
| <link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge"> |
| <link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| @font-face { |
| font-family: test-font; |
| src: url(support/cap-x-height.ttf); |
| } |
| .spacer { |
| background: lightgray; |
| block-size: 100px; |
| } |
| #target { |
| font-family: test-font; |
| font-size: 100px; |
| line-height: 2; |
| text-box-trim: both; |
| text-box-edge: ex alphabetic; |
| } |
| </style> |
| <div id="container"> |
| <div class="spacer"></div> |
| <div id="target">A</div> |
| <div class="spacer"></div> |
| </div> |
| <script> |
| function run_tests(test_names) { |
| const container = document.getElementById('container'); |
| const container_bounds = container.getBoundingClientRect(); |
| const target = document.getElementById('target'); |
| const target_bounds = target.getBoundingClientRect(); |
| |
| // Test `getBoundingClientRect()` returns the trimmed box size. |
| test(() => { |
| assert_equals(target_bounds.top - container_bounds.top, 100); |
| }, "getBoundingClientRect.top"); |
| test(() => { |
| assert_equals(target_bounds.height, 20); |
| }, "getBoundingClientRect.height"); |
| |
| // Test `elementFromPoint()` hits `target` even if the point is above/below |
| // the client rect, because the inner line box overflows the box. |
| test(() => { |
| const result = document.elementFromPoint(10, 90 + container_bounds.top); |
| assert_equals(result, target); |
| }, "elementFromPoint: 10px above the client rect"); |
| test(() => { |
| const result = document.elementFromPoint(10, 130 + container_bounds.top); |
| assert_equals(result, target); |
| }, "elementFromPoint: 10px below the client rect"); |
| } |
| |
| setup({explicit_done: true}); |
| document.fonts.ready.then(() => { |
| run_tests(); |
| done(); |
| }); |
| </script> |