YUI压缩器与CSS内容?

5

我有一个包含以下代码的样式表:

.author-name:before {
 content:"by: ";
}

当我使用YUI压缩器运行此代码时,得到的结果如下:
.author-name:before{content:"by:"}

这是一个问题,因为它会清除原本想要保留的空格。我曾尝试使用YUI压缩程序中的特殊注释来解决,类似于这样:

.author-name:before {
  /*!YUI-Compressor */content: "by: ";
}

...可能会有所帮助,但似乎并没有。此外,注释本身也被清除了。根据我所看到的,以 /*! 开头的 JavaScript 注释会被保留,但实际上并没有发生。

除了在构建过程中进行后处理以取消最小化之外,是否有其他方法可以解决这个问题?我们目前正在使用版本为2.3.5的YUI压缩程序,并且使用标志--charset utf8 -v -o运行。

因此,我的问题简而言之是,是否有一种方法可以让YUI Compressor尊重content:值中的空格,或者在不想最小化的块前后添加CSS注释?

3个回答

4
作为一种解决方法,尝试使用Unicode实体代替空格字符本身:
.author-name:before {content: "by:\00A0"; }

\00A0 特指不间断空格。


这是一个可以的解决方法。我仍然希望有一个YUI压缩修复程序。在支持CSS内容的浏览器中,\00A0语法得到了多少支持? - artlung
1
在所有主要浏览器中完美支持,包括IE8+。我遇到的唯一不一致之处是使用复合字面量,例如"foo" "bar",在IE中存在问题,但这里不是这种情况。 - Marat Tanalin

2
我试过使用版本2.3.4和2.4.6的CSS,两者都保留了字符串内部的空格。所以这可能是一个非常特定的错误(在bug追踪器中找不到任何信息),或者其他问题出现了。你确定它是ASCII空格字符和常规的撇号(而不是Windows智能撇号或其他东西)吗?
当我在相同的CSS上运行测试时,将ASCII引号替换为Unicode字符201C(左双引号),则空格被删除。原因很简单:解析器不将其识别为字符串,因此会剥离空格。
无论如何,您可以尝试从这里http://yuilibrary.com/download/yuicompressor/下载最新版本。如果您当前的版本是使用某个软件包管理器安装的,请从“build”文件夹的存档中提取.jar文件。

谢谢您的查看。它的表现方式如此之奇怪。我正在使用转义的CSS字符串来解决它,这似乎满足了我的需求,但当我们重新考虑这个项目的工具时,我会尝试更当前版本的YUI压缩器。 - artlung
哦,是的,我非常确定在CSS中使用的是标准空格和引号字符,而不是Windows字符。并且只有空格被剥离。 - artlung
添加了另一个测试以澄清引号和空格被剥离的情况的注释。 - Willem Joosten

1
你可以为内容添加一个边距:
.author-name:before {
    content: "by:";
    margin: 0 .35em 0 0;
}

1
.3em或者.35em通常更接近于空格字符的宽度。 - Marat Tanalin
好的观点。使用预期的CSS属性来进行间距调整总是比使用空格更好。 - apparat
这是一个可以的解决方法。我仍然希望能够修复YUI压缩程序。 - artlung
@MaratTanalin:我想就前导零进行辩论。我认为我的方法更易读。 - erenon
@erenon 在语法上,前导零是可以接受的(就像在零值中添加单位,如“0px”),但通常是多余的,因此在实际的Web开发中避免使用它已成为良好的惯例。如果您非常希望,可以自由地将其编辑回来。 - Marat Tanalin
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接