在某些情况下,“!important”之前的空间是重要的,如果是的话,何时?为什么?

时间:2015-06-30 15:48:09

标签: css

我一直在尝试PHP scssphp,PHP SCSS编译器,特别是压缩格式化程序。

这会输出类似的东西(注意额外的空格和闭合的大括号前的分号)

.navbar{margin-bottom  :0px !important;margin-top    :4px;}

因此我想到实现这个小修改来从结果代码中删除一些内容。

我知道这没什么意义,因为我最多可以节省一些百分比;我正在删除低熵信息,这意味着一旦我gz压缩它,节省的费用就会更少;然后必须保持修改。但它似乎很容易,而且足够无害,而且......我有点为lulz做过。

4225    public function format($block) {
4226        ob_start();
4227        this->block($block);
4228        $out = ob_get_clean();
4229---     return $out;                        // OLD
4229+++     return $this->postprocess($out);    // NEW
4230    }

后处理函数在父格式化程序上是虚拟的,上面是:

4232    protected function postprocess($text) {
4233        return $text;
4234    }

...在scss_formatter_compressed中我执行了一些替换:

+++ from line 4343:

protected function postprocess($text) {
    $xlat = array(
        '#\\s+(:\\d)#'          => '\\1',
        '#;}#'                  => '}',
        '#\\s+(!important)#'    => '\\1', 
    );
    return preg_replace(
        array_keys($xlat),
        array_values($xlat),
        $text);
} 

现在输出是:

.navbar{margin-bottom:0px!important;margin-top:2px}

...对于简单的SCSS,它可以工作。我在一个庞大而复杂的SCSS层次结构上测试了它,并且一些元素破坏了。

我有感觉它涉及!important子句。我做了一个不太广泛的研究,并在YUI压缩机站点上找到this,一方面他们得出结论

  

@tml @namanyayg你能否提供剥离空间的任何例子   在'!important'导致破碎的样式之前?

     

我们收到了类似的请求   https://github.com/GoalSmashers/clean-css但没有测试用例   无法验证您是否犯了错误或者是否存在错误   空间必须在那里的具体情况。

     

根据我们的测试可以摆脱它。更有甚者   代码已经在生产中使用了几年,现在没有任何代码   问题

另一方面,OP 一些问题,他们似乎!important之前的空格相关。

现在,如果它是CSS标准问题,我想修复我对scssphp的看法;如果这是一个SCSS的问题,我当然希望修复我的SCSS文件。考虑到相关文件夹的庞大规模和复杂程度,我想在深入研究其未经深入的深度之前先问这里。

1 个答案:

答案 0 :(得分:3)

无需空间。根据{{​​3}},

  
      
  1. 虽然CSS syntax不是current input token,但请将其附加到声明的值<EOF-token>
  2.   
  3. 如果声明值中的最后两个非consume the next input token<whitespace-token>,其值为&#34;!&#34;接下来是   <delim-token>的值为<ident-token>   匹配&#34; important&#34;,将它们从声明的值中删除   将声明的重要标志设置为true。
  4.