diff --git a/components/layout/table.rs b/components/layout/table.rs index 1708ceca23a..c9f80f888dd 100644 --- a/components/layout/table.rs +++ b/components/layout/table.rs @@ -229,9 +229,13 @@ impl Flow for TableFlow { } } } + + let fragment_intrinsic_inline_sizes = self.block_flow.fragment.intrinsic_inline_sizes(); self.block_flow.base.intrinsic_inline_sizes.minimum_inline_size = min_inline_size; self.block_flow.base.intrinsic_inline_sizes.preferred_inline_size = geometry::max(min_inline_size, pref_inline_size); + self.block_flow.base.intrinsic_inline_sizes.surround_inline_size = + fragment_intrinsic_inline_sizes.surround_inline_size; } /// Recursively (top-down) determines the actual inline-size of child contexts and fragments. When diff --git a/components/layout/table_wrapper.rs b/components/layout/table_wrapper.rs index 2084ef52bdc..37494955c02 100644 --- a/components/layout/table_wrapper.rs +++ b/components/layout/table_wrapper.rs @@ -228,24 +228,26 @@ impl TableWrapper { let mut input = self.compute_inline_size_constraint_inputs(&mut table_wrapper.block_flow, parent_flow_inline_size, ctx); + let style = table_wrapper.block_flow.fragment.style(); + + // Get inline-start and inline-end paddings, borders for table. + // We get these values from the fragment's style since table_wrapper doesn't have it's own border or padding. + // input.available_inline-size is same as containing_block_inline-size in table_wrapper. + let padding = style.logical_padding(); + let border = style.logical_border_width(); + let padding_and_borders = + specified(padding.inline_start, input.available_inline_size) + + specified(padding.inline_end, input.available_inline_size) + + border.inline_start + + border.inline_end; + let computed_inline_size = match table_wrapper.table_layout { FixedLayout => { let fixed_cells_inline_size = table_wrapper.col_inline_sizes.iter().fold(Au(0), |sum, inline_size| sum.add(inline_size)); let mut computed_inline_size = input.computed_inline_size.specified_or_zero(); - let style = table_wrapper.block_flow.fragment.style(); - // Get inline-start and inline-end paddings, borders for table. - // We get these values from the fragment's style since table_wrapper doesn't have it's own border or padding. - // input.available_inline-size is same as containing_block_inline-size in table_wrapper. - let padding = style.logical_padding(); - let border = style.logical_border_width(); - let padding_and_borders = - specified(padding.inline_start, input.available_inline_size) + - specified(padding.inline_end, input.available_inline_size) + - border.inline_start + - border.inline_end; // Compare border-edge inline-sizes. Because fixed_cells_inline-size indicates content-inline-size, // padding and border values are added to fixed_cells_inline-size. computed_inline_size = geometry::max( @@ -308,7 +310,7 @@ impl TableWrapper { inline_size + extra_inline_size.scale_by(1.0 / cell_len) }).collect(); } - inline_size + inline_size + padding_and_borders } }; input.computed_inline_size = Specified(computed_inline_size); diff --git a/tests/ref/basic.list b/tests/ref/basic.list index 90193fbdf8b..9ce245a914d 100644 --- a/tests/ref/basic.list +++ b/tests/ref/basic.list @@ -132,3 +132,4 @@ flaky_gpu,flaky_linux == acid2_noscroll.html acid2_ref_broken.html == link_style_order.html link_style_order_ref.html == percent_height.html percent_height_ref.html == inline_block_with_margin_a.html inline_block_with_margin_ref.html +== table_padding_a.html table_padding_ref.html diff --git a/tests/ref/table_padding_a.html b/tests/ref/table_padding_a.html new file mode 100644 index 00000000000..a95ac820bff --- /dev/null +++ b/tests/ref/table_padding_a.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + +
X
+ + diff --git a/tests/ref/table_padding_ref.html b/tests/ref/table_padding_ref.html new file mode 100644 index 00000000000..37258ea35a7 --- /dev/null +++ b/tests/ref/table_padding_ref.html @@ -0,0 +1,27 @@ + + + + + + +
+
+ +