Title: [278194] trunk
Revision
278194
Author
commit-qu...@webkit.org
Date
2021-05-28 04:35:54 -0700 (Fri, 28 May 2021)

Log Message

Webkit doesn't calculate padding-top/-bottom in % correctly when parent has padding
https://bugs.webkit.org/show_bug.cgi?id=221202

Patch by Rob Buis <rb...@igalia.com> on 2021-05-28
Reviewed by Manuel Rego Casasnovas.

LayoutTests/imported/w3c:

Add test for this.

* web-platform-tests/css/css-position/position-absolute-padding-percentage-expected.txt: Added.
* web-platform-tests/css/css-position/position-absolute-padding-percentage.html: Added.

Source/WebCore:

Absolute positioned elements should resolve %-ge padding against containing block padding-edge:
https://drafts.csswg.org/css-position-3/#absolute-positioning-containing-block

Test: imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage.html

* rendering/RenderBox.cpp:
(WebCore::RenderBox::containingBlockLogicalWidthForContent const):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (278193 => 278194)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-05-28 08:59:20 UTC (rev 278193)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-05-28 11:35:54 UTC (rev 278194)
@@ -1,3 +1,15 @@
+2021-05-28  Rob Buis  <rb...@igalia.com>
+
+        Webkit doesn't calculate padding-top/-bottom in % correctly when parent has padding
+        https://bugs.webkit.org/show_bug.cgi?id=221202
+
+        Reviewed by Manuel Rego Casasnovas.
+
+        Add test for this.
+
+        * web-platform-tests/css/css-position/position-absolute-padding-percentage-expected.txt: Added.
+        * web-platform-tests/css/css-position/position-absolute-padding-percentage.html: Added.
+
 2021-05-28  Martin Robinson  <mrobin...@webkit.org>
 
         More readily layout when scroll-snap properties change

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage-expected.txt (0 => 278194)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage-expected.txt	2021-05-28 11:35:54 UTC (rev 278194)
@@ -0,0 +1,4 @@
+
+PASS absolute positioned element should resolve padding left+right against container padding-box width
+PASS absolute positioned element should resolve padding top+bottom against container padding-box width
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage.html (0 => 278194)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage.html	2021-05-28 11:35:54 UTC (rev 278194)
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<title>CSS Position Absolute: css-position-3</title>
+<script src=""
+<script src=""
+<link rel="help" href=""
+<link rel="help" href=""
+<meta name="assert" content="abspos resolves padding %-ge sizes correctly.">
+<style>
+#outer-horizontal-padding {
+    position: relative;
+    padding: 10px;
+    width: 30px;
+    height: 80px;
+    background: green;
+}
+#inner-horizontal-padding {
+    position: absolute;
+    left: 50px;
+    height: 100px;
+    top: 0px;
+    padding-left: 50%;
+    padding-right: 50%;
+    background: green;
+}
+#outer-vertical-padding {
+    position: relative;
+    padding: 10px;
+    width: 30px;
+    height: 80px;
+    background: green;
+}
+#inner-vertical-padding {
+    position: absolute;
+    left: 50px;
+    width: 50px;
+    top: 0px;
+    padding-top: 100%;
+    padding-bottom: 100%;
+    background: green;
+}
+</style>
+<div id="outer-horizontal-padding">
+  <div id="inner-horizontal-padding"></div>
+</div>
+<div id="outer-vertical-padding">
+  <div id="inner-vertical-padding"></div>
+</div>
+<script>
+document.body.offsetTop;
+test(() => {
+  let target = document.querySelector("#inner-horizontal-padding");
+  assert_equals(target.offsetWidth, 50);
+}, 'absolute positioned element should resolve padding left+right against container padding-box width' );
+
+test(() => {
+  let target = document.querySelector("#inner-vertical-padding");
+  assert_equals(target.offsetHeight, 100);
+}, 'absolute positioned element should resolve padding top+bottom against container padding-box width' );
+</script>

Modified: trunk/Source/WebCore/ChangeLog (278193 => 278194)


--- trunk/Source/WebCore/ChangeLog	2021-05-28 08:59:20 UTC (rev 278193)
+++ trunk/Source/WebCore/ChangeLog	2021-05-28 11:35:54 UTC (rev 278194)
@@ -1,3 +1,18 @@
+2021-05-28  Rob Buis  <rb...@igalia.com>
+
+        Webkit doesn't calculate padding-top/-bottom in % correctly when parent has padding
+        https://bugs.webkit.org/show_bug.cgi?id=221202
+
+        Reviewed by Manuel Rego Casasnovas.
+
+        Absolute positioned elements should resolve %-ge padding against containing block padding-edge:
+        https://drafts.csswg.org/css-position-3/#absolute-positioning-containing-block
+
+        Test: imported/w3c/web-platform-tests/css/css-position/position-absolute-padding-percentage.html
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::containingBlockLogicalWidthForContent const):
+
 2021-05-28  Martin Robinson  <mrobin...@webkit.org>
 
         More readily layout when scroll-snap properties change

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (278193 => 278194)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2021-05-28 08:59:20 UTC (rev 278193)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2021-05-28 11:35:54 UTC (rev 278194)
@@ -2045,8 +2045,11 @@
     if (hasOverridingContainingBlockContentLogicalWidth())
         return overridingContainingBlockContentLogicalWidth().value_or(0_lu);
 
-    if (RenderBlock* cb = containingBlock())
+    if (RenderBlock* cb = containingBlock()) {
+        if (isOutOfFlowPositioned())
+            return cb->clientLogicalWidth();
         return cb->availableLogicalWidth();
+    }
     return 0_lu;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to