我一直在尝试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文件。考虑到相关文件夹的庞大规模和复杂程度,我想在深入研究其未经深入的深度之前先问这里。
答案 0 :(得分:3)
无需空间。根据{{3}},
- 虽然CSS syntax不是current input token,但请将其附加到声明的值<EOF-token>。
- 如果声明值中的最后两个非consume the next input token是<whitespace-token>,其值为&#34;!&#34;接下来是 <delim-token>的值为<ident-token> 匹配&#34; important&#34;,将它们从声明的值中删除 将声明的重要标志设置为true。
醇>