数据URI和CSS文件合并问题


9

Magento CSS文件合并将主机名假装成我的data-uris,因为Mage_Core_Model_Design_PackagebeforeMergeCss)中的RegEx 无法正常工作。它应该在主机名之前添加相对的图像路径,但不能在数据URI之前。

$cssUrl = '/url\\(\\s*(?!data:)([^\\)\\s]+)\\s*\\)?/';
$contents = preg_replace_callback($cssUrl, array($this, '_cssMergerUrlCallback'), $contents);

CSS代码:

background: #fafafa url("data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==") no-repeat;

合并后的结果:

background: #fafafa url("http://shop12.dev/skin/frontend/shop/default/styles/data:image/svg+xml;base64")PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==") no-repeat;

如何避免这种情况?我找不到如何纠正所用RegEx的合奏的方法。(对我来说,使用GIF并不是真正的解决方案)

Answers:


13

在iphone.css中,magento也使用数据URI,但不带引号,请尝试执行相同操作

background: #fafafa url(data:image/svg+xml;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iM3B4IiB2aWV3Qm94PSIwIDAgNiAzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2IDMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIHBvaW50cz0iNS45OTIsMCAyLjk5MiwzIC0wLjAwOCwwICIvPjwvc3ZnPg==) no-repeat;

在你的情况下

/url\\(\\s*(?!data:)([^\\)\\s]+)\\s*\\)?/

你应该使用

/url\\(\\s*(?![\"\']?data:)([^)]+)\\)/

对不起,我知道。问题是CSS代码是基础框架的一部分,该基础框架通过Bower链接到我的项目。我当然可以编辑代码,但是从事该项目的所有同事都会做同样的事情。每次更新。什么是所有类型(带单引号,双引号和不带引号)的正确RegEx?
迈克尔

答案已更新。
oleksii.svarychevskyi 2014年

如果我的回答对您有帮助,请将其标记为已接受。
oleksii.svarychevskyi 2014年

此答案使其他CSS资产无法编译。@jblandry的另一个答案是我们最终使用该内容修复了所有内容。
FactoryAidan '19


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.