对“Firefox 中“0s”转换的单位”问题的回答者指出,省略时间单位值是无效的。我的第一个但不是主要的问题是:
这是真的?省略时间值单位肯定无效吗?
据我在W3C 规范中所见,关于长度值,它说
但是,对于零长度,单位标识符是可选的 (...)。
对于其他类型的值不是这样,但同时它也没有说它是无效的。《time-CSS|MDN》很明确的说是 无效的。
所以,只是为了确定:任何人都可以通过其他参考来确认它是无效的吗?
主要问题:哪些压缩器/压缩器不会省略时间单位值?
事实上,即使它是有效的,Firefox确实会忽略如下声明a { transition: all .5s 0 }
因此,使用不省略该单元的压缩器/压缩器对我来说似乎很重要。首先,Firefox 将需要它,其次,如果它无效并且它们相应地更改其引擎,那么将来所有浏览器都可能需要它。
注意:我正在 ASP.net 中进行开发,并希望将Bundle Transformer用于System.Web.Optimization
命名空间。我需要一个可以在那里使用的压缩机。使用接口的内置实现IMinifier
或至少一个可用的库,这样我就可以编写自己的接口实现。
我将使用至少具有 API 的压缩器/压缩器来支持答案,以便以编程方式使用它。我将接受带有良好压缩的压缩器/压缩器的答案,该压缩器可在本地与 Bundle Transformer 一起使用(这意味着不需要 http 请求)。
话虽如此:请随意提及任何不省略零时间值单位的缩小器,因为我认为这对每个人来说都会很有趣,而不仅仅是 .net 开发人员。
现在我测试了以下工具:
-
只是一个示例 c# 代码,所以 .net 家伙知道我在说什么:
public static void RegisterBundles(BundleCollection bundles) { IBundleTransform yuiTrans = new CssTransformer(new YuiCssMinifier()); var cssBundle = new Bundle("~/content/css/default", yuiTrans) .IncludeDirectory("~/content/css", "*.css"); }
YUI 在不省略时间单位值的情况下缩小 CSS。
2014 年 12 月 9 日更新:可悲的是,这不再是真的了。感谢对此问题发表评论的Torin Finnemann 。您可以使用这款Online YUI Compressor 自行测试。
所以如果有一个像这样的声明
a { transition: all 0.5s 0s; }
YUI Compressor 将其缩小为
a{transition:all .5s 0s}
为什么不直接使用它?好吧,目前我是,但是 YUI 的压缩级别不是很好(例如
color: black
变成color:black
而不是color:#000
)。CSS Minifier 比较给出了一个概述。这就是为什么我正在寻找可能的替代品。 默认压缩器
System.Web.Optimization
我不确定,但如果这篇博文是正确的,
System.Web.Optimization
它有自己的压缩器实现。在我的测试中产生不同输出的绝对不是Microsoft Ajax 。但是,它将上述示例缩小为a{transition:all .5s 0}
如您所见,它省略了单位,因此不是替代品。
-
省略单位。
KryzhanovskyCssMinifier
基于 Sergey Kryzhanovsky 的 CSSO这是我测试的最后一个缩小器,所以我还没有太多的经验,但它看起来比其他的更有希望。它足够聪明,可以缩小到以下内容(添加空格以提高可读性):
a{ -moz-transition:all .5s 0s;-o-transition:all .5s 0; -webkit-transition:all .5s 0 ; transition:all .5s 0}
如您所见,它省略了除供应商前缀版本之外的单位
-moz-transition
。因此,目前这可以为 Mozilla 浏览器完成工作。我认为Firefox 接受自 14.0 版以来的非供应商前缀版本transition
,但仍能识别前缀版本。由于 Firefox 由于缺少单位而忽略了默认语句,因此它使用前缀语句。好吧,正如我所说,这是最有前途的缩小器,但它不是一个坚如磐石的解决方案,因为 Mozilla 有朝一日可能会在 Firefox 中取消对供应商前缀语句的支持。或者,正如我在本文开头所述,如果省略该单元无效,则其他浏览器可以更新其引擎。
结论:问题仍然存在。如果你知道没有省略零时间值单位的压缩器/压缩器,请分享。