浏览代码

LibWeb: Support fit-content width for block-level boxes

Andreas Kling 2 年之前
父节点
当前提交
1bb4e5c428

+ 10 - 0
Tests/LibWeb/Layout/expected/block-and-inline/block-with-fit-content-width.txt

@@ -0,0 +1,10 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+  BlockContainer <html> at (1,1) content-size 798x37.46875 [BFC] children: not-inline
+    BlockContainer <body> at (10,10) content-size 780x19.46875 children: not-inline
+      BlockContainer <div.box> at (11,11) content-size 138.28125x17.46875 children: inline
+        line 0 width: 138.28125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
+          frag 0 from TextNode start: 0, length: 18, rect: [11,11 138.28125x17.46875]
+            "Well hello friends"
+        TextNode <#text>
+      BlockContainer <(anonymous)> at (10,29.46875) content-size 780x0 children: inline
+        TextNode <#text>

+ 8 - 0
Tests/LibWeb/Layout/input/block-and-inline/block-with-fit-content-width.html

@@ -0,0 +1,8 @@
+<!doctype html><style>
+* { border: 1px solid black; }
+.box {
+    background: pink;
+    display: block;
+    width: fit-content;
+}
+</style><div class="box">Well hello friends</div>

+ 3 - 0
Userland/Libraries/LibWeb/Layout/FormattingContext.cpp

@@ -1347,6 +1347,9 @@ CSS::Length FormattingContext::calculate_inner_width(Layout::Box const& box, Ava
     if (width.is_auto()) {
         return width.resolved(box, width_of_containing_block_as_length_for_resolve);
     }
+    if (width.is_fit_content()) {
+        return CSS::Length::make_px(calculate_fit_content_width(box, AvailableSpace { available_width, AvailableSize::make_indefinite() }));
+    }
 
     auto& computed_values = box.computed_values();
     if (computed_values.box_sizing() == CSS::BoxSizing::BorderBox) {