diff --git a/src/lib.rs b/src/lib.rs index 5d16b5b2..f4177194 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2350,6 +2350,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}", + ); + property_range_test( &[ "border-image-outset", @@ -29891,6 +29957,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 84f5d333..c656721a 100644 --- a/src/properties/border_image.rs +++ b/src/properties/border_image.rs @@ -293,12 +293,21 @@ impl<'i> BorderImage<'i> { repeat: &BorderImageRepeat, dest: &mut PrinterT, ) -> Result<(), PrinterError> { - 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(NonNegative(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 { + dest.write_str("none")?; + return Ok(()); + } + + if has_source { + source.to_css(dest)?; + } if has_slice || has_width || has_outset { dest.write_str(" ")?; slice.to_css(dest)?; @@ -315,7 +324,7 @@ impl<'i> BorderImage<'i> { } } - if *repeat != BorderImageRepeat::default() { + if has_repeat { dest.write_str(" ")?; repeat.to_css(dest)?; }