From 6ecd954e8ba0388baa7f1792091e7af3e03ad11b Mon Sep 17 00:00:00 2001 From: Cong-Cong Pan Date: Tue, 8 Sep 2026 16:33:56 +0800 Subject: [PATCH 1/2] fix: preserve default border image shorthand values --- src/lib.rs | 82 ++++++++++++++++++++++++++++++++++ src/properties/border_image.rs | 16 +++++-- 2 files changed, 94 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 6416b7bae..d731c6516 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2175,6 +2175,72 @@ mod tests { #[test] pub fn test_border_image() { + minify_test( + r#" + .foo { + border-image: none; + } + "#, + ".foo{border-image:none}", + ); + + test( + r#" + .foo { + border-image: none; + } + "#, + indoc! {r#" + .foo { + border-image: none; + } + "#}, + ); + + minify_test( + r#" + .foo { + border-image: none 100% / 1 / 0 stretch; + } + "#, + ".foo{border-image:none}", + ); + + minify_test( + r#" + .foo { + border-image-source: none; + border-image-slice: 100%; + border-image-width: 1; + border-image-outset: 0; + border-image-repeat: stretch; + } + "#, + ".foo{border-image:none}", + ); + + minify_test( + r#" + .foo { + -webkit-border-image: none; + border-image: none !important; + } + "#, + ".foo{-webkit-border-image:none;border-image:none!important}", + ); + + minify_test( + r#" + .foo { + border-image: url(border.png) 1; + } + .foo.active { + border-image: none; + } + "#, + ".foo{border-image:url(border.png) 1}.foo.active{border-image:none}", + ); + test( r#" .foo { @@ -27675,6 +27741,22 @@ mod tests { ".foo{mask:url(masks.svg#star) 0/16px repeat-y,url(masks.svg#circle) 100%/16px repeat-y}", ); + minify_test( + r#" + .foo { + mask-border: none; + } + "#, + ".foo{mask-border:none}", + ); + minify_test( + r#" + .foo { + -webkit-mask-box-image: none; + } + "#, + ".foo{-webkit-mask-box-image:none}", + ); minify_test( ".foo { mask-border: url('border-mask.png') 25; }", ".foo{mask-border:url(border-mask.png) 25}", diff --git a/src/properties/border_image.rs b/src/properties/border_image.rs index 300d458e0..dabc63a7c 100644 --- a/src/properties/border_image.rs +++ b/src/properties/border_image.rs @@ -302,12 +302,20 @@ impl<'i> BorderImage<'i> { where W: std::fmt::Write, { - if *source != Image::default() { - source.to_css(dest)?; - } + let has_source = *source != Image::default(); let has_slice = *slice != BorderImageSlice::default(); let has_width = *width != Rect::all(BorderImageSideWidth::default()); let has_outset = *outset != Rect::all(LengthOrNumber::Number(0.0)); + let has_repeat = *repeat != BorderImageRepeat::default(); + + // A shorthand with only initial components must still have a value. + if !has_source && !has_slice && !has_width && !has_outset && !has_repeat { + return dest.write_str("none"); + } + + if has_source { + source.to_css(dest)?; + } if has_slice || has_width || has_outset { dest.write_str(" ")?; slice.to_css(dest)?; @@ -324,7 +332,7 @@ impl<'i> BorderImage<'i> { } } - if *repeat != BorderImageRepeat::default() { + if has_repeat { dest.write_str(" ")?; repeat.to_css(dest)?; } From d17881041dc1fdca2683488e9bb12e9eaa33a970 Mon Sep 17 00:00:00 2001 From: AsyncIter Date: Thu, 22 Oct 2026 11:14:17 +0800 Subject: [PATCH 2/2] fix: convert default border image formatting errors --- src/properties/border_image.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/properties/border_image.rs b/src/properties/border_image.rs index fbcb85e2c..c656721ab 100644 --- a/src/properties/border_image.rs +++ b/src/properties/border_image.rs @@ -301,7 +301,8 @@ impl<'i> BorderImage<'i> { // A shorthand with only initial components must still have a value. if !has_source && !has_slice && !has_width && !has_outset && !has_repeat { - return dest.write_str("none"); + dest.write_str("none")?; + return Ok(()); } if has_source {