Css 在`之前是一个空格!重要`在某些情况下很重要,如果是,什么时候?为什么?

Css 在`之前是一个空格!重要`在某些情况下很重要,如果是,什么时候?为什么?,css,Css,我一直在试验一个PHP SCSS编译器,特别是它的压缩格式化程序 这将输出类似的内容(请注意闭合的大括号前额外的空格和分号) 所以我想实现这个小小的修改,从生成的代码中去掉一些位 我知道这没什么意义,因为我最多能省下百分之几的钱;我正在去除低熵信息,这意味着一旦我压缩它,节省的钱会更小;而修改则必须保留。但这似乎很容易,也很无害,我。。。有点像是为了休息 后处理函数在父格式化程序上为虚拟函数,如上所示: 4232 protected function postprocess($text)

我一直在试验一个PHP SCSS编译器,特别是它的压缩格式化程序

这将输出类似的内容(请注意闭合的大括号前额外的空格和分号)

所以我想实现这个小小的修改,从生成的代码中去掉一些位

我知道这没什么意义,因为我最多能省下百分之几的钱;我正在去除低熵信息,这意味着一旦我压缩它,节省的钱会更小;而修改则必须保留。但这似乎很容易,也很无害,我。。。有点像是为了休息

后处理函数在父格式化程序上为虚拟函数,如上所示:

4232    protected function postprocess($text) {
4233        return $text;
4234    }
…在
scss\u formatter\u 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层次结构上测试了它,有些元素会崩溃

我有一种感觉,它涉及到
!重要的
条款。我做了一个不太广泛的研究,在YUI压缩机现场发现,一方面他们得出结论

@tml@namanyayg您能否提供一些示例,说明如何剥离空间 在'之前!“重要信息”导致样式损坏

我们收到了类似的请求 但是如果没有测试用例,它是 无法验证您是否犯了错误或是否存在严重错误 空间必须存在的特定情况

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

另一方面,OP有一些问题,它们似乎与
之前的空格有关!重要信息


现在,如果这是一个CSS标准问题,我想修正我对scssphp的看法;如果这是一个SCS的问题,我当然希望我的SCS文件得到修复。考虑到所讨论的文件夹的大小和复杂性,我想在深入研究其未挖掘的深度之前先在这里提问。

不需要任何空间。根据,

  • 虽然不是,但将其附加到声明的值和
  • 如果声明值中的最后两个非-s为a,值“!”后跟 其值为 匹配“重要”,将其从声明的值中删除,然后 将声明的重要标志设置为true

  • IIRC这是一个IE问题,但我找不到我发布的关于它的答案,因为搜索在处理诸如“!important”之类的术语方面很糟糕。如果您在其他浏览器上进行测试,那么它不应该是一个问题-属性值的结尾和!在标准CSS中始终是可选的。对于它的价值,验证器说省略
    之前的空格是有效的!重要信息
    。官方的Ruby Sass编译器总是留下一个空间,即使在压缩模式下也是如此。请记住,IE历来在解析有效CSS方面表现不佳(有人记得你什么时候可以通过删除选择器中的空格来隐藏IE5或IE6的样式吗?例如,
    .foo+.bar
    ),所以Sass选择这样做可能是有原因的。虽然这是真的,它并没有真正回答这个问题:当省略空白时,是否有浏览器会阻塞?每次省略空白时,浏览器是否都会阻塞?因为在高流量的网站中,缩小css(没有空格的css)是一种主流,我们可以自信地说,css中对空格的唯一需求是为了可读性。做一些验证,检查你是否使用了正确的编码。我已经把它移到了生产代码中,今天它又坏了。我确认这是一个IE问题,但它在Microsoft Edge上不存在(至少今天不存在)。在IE上,它去禁用吃空间的正则表达式,回来重新启用它,但够疯狂的是,它在一些CSS上工作。只有大型CSSE才会出现!
    +++ 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}