[last-baseline] Clamp first/last baselines to border-box...
... if in a scroll container.
See: https://github.com/w3c/csswg-drafts/issues/7660
Effectively if we are in a scroll container (overflow:hidden or
overflow:scroll) clamp the baselines to the border-box edges.
Bug: 885175
Change-Id: I9c53e736fa156c5239384a5d11154a27643a6ac8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3925659
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: David Grogan <dgrogan@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1054237}
diff --git a/css/css-flexbox/alignment/flex-align-baseline-overflow-001.html b/css/css-flexbox/alignment/flex-align-baseline-overflow-001.html
new file mode 100644
index 0000000..382112e
--- /dev/null
+++ b/css/css-flexbox/alignment/flex-align-baseline-overflow-001.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7660">
+<style>
+.target {
+ display: flex;
+ position: relative;
+ line-height: 0;
+ font-size: 20px;
+ inline-size: 300px;
+ margin-block: 10px;
+ padding: 10px;
+ border: solid 3px;
+}
+
+.inner {
+ overflow: hidden;
+ inline-size: 100px;
+ block-size: 80px;
+ margin: 10px;
+ border: solid 5px;
+ padding: 10px;
+ font-size: 30px;
+}
+
+span {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ outline: solid cyan 3px;
+ outline-offset: -3px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.target > *')">
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-y="45"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-y="55"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-y="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="30">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-y="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="50">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-y="110"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-y="90"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
diff --git a/css/css-flexbox/alignment/flex-align-baseline-overflow-002.html b/css/css-flexbox/alignment/flex-align-baseline-overflow-002.html
new file mode 100644
index 0000000..d136159
--- /dev/null
+++ b/css/css-flexbox/alignment/flex-align-baseline-overflow-002.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7660">
+<style>
+.target {
+ display: flex;
+ position: relative;
+ line-height: 0;
+ font-size: 20px;
+ inline-size: 300px;
+ margin-block: 10px;
+ padding: 10px;
+ border: solid 3px;
+ writing-mode: vertical-rl;
+}
+
+.inner {
+ overflow: hidden;
+ inline-size: 100px;
+ block-size: 80px;
+ margin: 10px;
+ border: solid 5px;
+ padding: 10px;
+ font-size: 30px;
+}
+
+span {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ outline: solid cyan 3px;
+ outline-offset: -3px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.target > *')">
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="70"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="60"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="100"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="120"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="40">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
diff --git a/css/css-flexbox/alignment/flex-align-baseline-overflow-003.html b/css/css-flexbox/alignment/flex-align-baseline-overflow-003.html
new file mode 100644
index 0000000..37d9ea2
--- /dev/null
+++ b/css/css-flexbox/alignment/flex-align-baseline-overflow-003.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7660">
+<style>
+.target {
+ display: flex;
+ position: relative;
+ line-height: 0;
+ font-size: 20px;
+ inline-size: 300px;
+ margin-block: 10px;
+ padding: 10px;
+ border: solid 3px;
+ writing-mode: vertical-lr;
+}
+
+.inner {
+ overflow: hidden;
+ inline-size: 100px;
+ block-size: 80px;
+ margin: 10px;
+ border: solid 5px;
+ padding: 10px;
+ font-size: 30px;
+}
+
+span {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ outline: solid cyan 3px;
+ outline-offset: -3px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.target > *')">
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="40"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="50"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="40">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="120"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="100"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
diff --git a/css/css-grid/alignment/grid-align-baseline-overflow-001.html b/css/css-grid/alignment/grid-align-baseline-overflow-001.html
new file mode 100644
index 0000000..66f9eb1
--- /dev/null
+++ b/css/css-grid/alignment/grid-align-baseline-overflow-001.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7660">
+<style>
+.target {
+ display: grid;
+ grid-auto-flow: column;
+ position: relative;
+ line-height: 0;
+ font-size: 20px;
+ inline-size: 300px;
+ margin-block: 10px;
+ padding: 10px;
+ border: solid 3px;
+}
+
+.inner {
+ overflow: hidden;
+ inline-size: 100px;
+ block-size: 80px;
+ margin: 10px;
+ border: solid 5px;
+ padding: 10px;
+ font-size: 30px;
+}
+
+span {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ outline: solid cyan 3px;
+ outline-offset: -3px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.target > *')">
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-y="45"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-y="55"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-y="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="30">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-y="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="50">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-y="110"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-y="90"><span></span><br><span></span></div>
+ <div class="inner" data-offset-y="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
diff --git a/css/css-grid/alignment/grid-align-baseline-overflow-002.html b/css/css-grid/alignment/grid-align-baseline-overflow-002.html
new file mode 100644
index 0000000..b74dbf7
--- /dev/null
+++ b/css/css-grid/alignment/grid-align-baseline-overflow-002.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7660">
+<style>
+.target {
+ display: grid;
+ grid-auto-flow: column;
+ position: relative;
+ line-height: 0;
+ font-size: 20px;
+ inline-size: 300px;
+ margin-block: 10px;
+ padding: 10px;
+ border: solid 3px;
+ writing-mode: vertical-rl;
+}
+
+.inner {
+ overflow: hidden;
+ inline-size: 100px;
+ block-size: 80px;
+ margin: 10px;
+ border: solid 5px;
+ padding: 10px;
+ font-size: 30px;
+}
+
+span {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ outline: solid cyan 3px;
+ outline-offset: -3px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.target > *')">
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="70"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="60"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="100"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="120"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="40">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
diff --git a/css/css-grid/alignment/grid-align-baseline-overflow-003.html b/css/css-grid/alignment/grid-align-baseline-overflow-003.html
new file mode 100644
index 0000000..569dd1a
--- /dev/null
+++ b/css/css-grid/alignment/grid-align-baseline-overflow-003.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7660">
+<style>
+.target {
+ display: grid;
+ grid-auto-flow: column;
+ position: relative;
+ line-height: 0;
+ font-size: 20px;
+ inline-size: 300px;
+ margin-block: 10px;
+ padding: 10px;
+ border: solid 3px;
+ writing-mode: vertical-lr;
+}
+
+.inner {
+ overflow: hidden;
+ inline-size: 100px;
+ block-size: 80px;
+ margin: 10px;
+ border: solid 5px;
+ padding: 10px;
+ font-size: 30px;
+}
+
+span {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ outline: solid cyan 3px;
+ outline-offset: -3px;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.target > *')">
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="40"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="50"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div>
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="10"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="40">
+ <div style="margin-block-start: -200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: first baseline;">
+ <div data-offset-x="120"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>
+
+<div class="target" style="align-items: last baseline;">
+ <div data-offset-x="100"><span></span><br><span></span></div>
+ <div class="inner" data-offset-x="20">
+ <div style="margin-block-start: 200px;">
+ <span></span><br><span></span>
+ </div>
+ </div>
+</div>