【问题标题】:Which CSS Minifiers/Compressors don't omit the unit of time values? [closed]哪些 CSS 缩小器/压缩器不会省略时间单位值? [关闭]
【发布时间】:2013-04-21 06:44:54
【问题描述】:

问题“Units on “0s” Transition in Firefox”的分析者指出,省略时间单位值是无效的。我的第一个但不是主要的问题是:

这是真的吗?在时间值中省略单位肯定无效吗?

据我在W3C specification 中看到的,关于它所说的长度值

但是,对于零长度,单位标识符是可选的 (...)。

对于其他类型的值不是这样,但同时它也确实说它是无效。 “time - CSS | MDN”非常清楚地表明它 无效

所以,为了确定:任何人都可以通过其他参考来确认它无效吗?

主要问题:哪些压缩器/压缩器不会省略时间单位值?

事实上,即使它是有效的,Firefox 确实会忽略像 a { transition: all .5s 0 } 这样的声明

因此,使用省略单位的压缩器/压缩器对我来说似乎很重要。首先,Firefox 需要它,其次,如果它无效并且它们相应地更改它们的引擎,那么将来所有浏览器都可能需要它。


注意:我正在 ASP.net 中进行开发,并希望将 Bundle Transformer 用于 System.Web.Optimization 命名空间。我需要一个可以在那里使用的压缩机。可以使用IMinifier 接口的内置实现,或者至少有一个可用的库,这样我就可以编写自己的接口实现。

我会用至少有一个 API 的压缩器/压缩器来支持答案,以便以编程方式使用它。我会接受带有良好压缩的压缩器/压缩器的答案,该压缩器可在本地与 Bundle Transformer 一起使用(这意味着不需要 http 请求)。


话虽如此:请随意提及任何不省略零时间值单位的缩小器,因为我认为这对每个人来说都会很有趣,而不仅仅是.net 开发人员。

目前我测试了以下工具:

  • YUI Compressor

    只是一个示例 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 Finnemanncommented 在这个问题上。你可以用这个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 Comparison 给出了一个概述。这就是为什么我正在寻找可能的替代方案。

  • System.Web.Optimization的默认压缩器

    我不确定,但如果this blog post 是正确的,System.Web.Optimization 有它自己的压缩器实现。绝对不是Microsoft Ajax 在我的测试中产生不同的输出。但是,它将上面的示例缩小为

    a{transition:all .5s 0}
    

    如您所见,它省略了单位,因此不是替代品。

  • Microsoft Ajax

    省略单位。

  • KryzhanovskyCssMinifier based on Sergey Kryzhanovsky's 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 接受 transition 自 14.0 版以来的非供应商前缀版本我认为,但仍然识别前缀版本。由于 Firefox 由于缺少单元而忽略了默认语句,因此它使用了前缀。

    好吧,正如我所说,这是最有前途的缩小器,但它不是一个坚如磐石的解决方案,因为 Mozilla 有朝一日可能会在 Firefox 中取消对供应商前缀语句的支持。或者,正如我在本文开头所述,如果省略单元 is 无效,其他浏览器可以更新其引擎。

结论:问题仍然存在。如果你知道没有省略零时间值单位的压缩器/压缩器,请分享。

【问题讨论】:

  • 据我所知,当前版本的 YUI-compressor 实际上确实删除了该单元。它可以通过指定两个十进制数字来规避:.00s。 github.com/yui/yuicompressor/issues/99
  • @TorinFinnemann:感谢您的评论。更新了我的问题。

标签: c# asp.net css minify


【解决方案1】:

Clean-CSS 允许您指定是否要从零值中去除单位:https://github.com/jakubpawlowicz/clean-css#user-content-how-to-set-compatibility-mode

--compatibility *,-zeroUnits

【讨论】:

    【解决方案2】:

    虽然不缩小颜色,但以下两个在线缩小器保留了零时间值的单位。

    http://cssminifier.com/

    http://www.freeformatter.com/css-minifier.html

    【讨论】:

    • +1 用于 cssminifier,因为它带有 API。如果您发现更多信息,请及时通知我们。
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2010-09-20
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多