diff --git a/float-pigment-forest/tests/custom/css_margin.rs b/float-pigment-forest/tests/custom/css_margin.rs index fc854d7..f94d3e7 100644 --- a/float-pigment-forest/tests/custom/css_margin.rs +++ b/float-pigment-forest/tests/custom/css_margin.rs @@ -81,6 +81,19 @@ fn margin_collapse_1() { ) } +#[test] +fn margin_collapse_empty_inline_nodes() { + assert_xml!( + r#" +
+
+
+
+
+ "# + ) +} + #[test] fn margin_collapse_negative() { assert_xml!( diff --git a/float-pigment-layout/src/algo/flow.rs b/float-pigment-layout/src/algo/flow.rs index 8d73c89..d86e061 100644 --- a/float-pigment-layout/src/algo/flow.rs +++ b/float-pigment-layout/src/algo/flow.rs @@ -674,17 +674,19 @@ impl Flow for LayoutUnit { request.kind == ComputeRequestKind::Position, ); - if let Some((prev_collapsed_margin, prev_collapsed_through)) = - prev_sibling_collapsed_margin - { - if !prev_collapsed_through { - total_main_size += prev_collapsed_margin.solve(); + if block_size.main_size(axis_info.dir) > T::Length::zero() { + if let Some((prev_collapsed_margin, prev_collapsed_through)) = + prev_sibling_collapsed_margin + { + if !prev_collapsed_through { + total_main_size += prev_collapsed_margin.solve(); + } } + prev_sibling_collapsed_margin.replace((CollapsedMargin::zero(), false)); } let main_offset = padding_border .main_axis_start(axis_info.dir, axis_info.main_dir_rev) + total_main_size; - prev_sibling_collapsed_margin.replace((CollapsedMargin::zero(), false)); total_main_size += block_size.main_size(axis_info.dir); max_cross_size = max_cross_size.max(block_size.cross_size(axis_info.dir)); diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..e2df5b6 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "1.81.0" +components = [ "rustfmt", "clippy" ] +profile = "minimal"