Answers:
这可能是Emogrifier模块的错误。
将其放在以下require-dev
部分中composer.json
:
"pelago/emogrifier": "1.0.0 as 0.1.1"
或者更喜欢开发版本:
"pelago/emogrifier": "dev-master as 0.1.1"
有一个通知:似乎在处理静态内容部署时也会发生此问题。
更新:
我们应该看看:
供应商/ magento /主题前端空白/web/css/email.less
@import 'source/lib/_lib.less'; // Global lib
@import 'source/lib/variables/_email.less'; // Global email variables
@import 'source/_theme.less'; // Global variables override
@import 'source/_variables.less'; // Local theme variables
@import 'source/_email-variables.less'; // Theme variables for emails
Magento电子邮件将导入更少的文件。因此,如果我们向这些文件添加了一些不受支持的选择器,则可能会导致此问题。
供应商/ magento /主题-前端-空白/ web / css /源/_email-base.less
Unsupported selectors (examples in parenthesis):
* first-child (div:first-child)
* last-child (div:last-child)
* nth-child (div:nth-child(3n+1))
* universal (*)
* pseudo (a:hover, a:active, a:focus, span:before, span:after, etc)
例如,在我们的自定义主题中,我们添加了一些不受支持的选择器:
app / design / frontend / VendorTheme / default / web / css / source / _theme.less
...
#customer-service-menu li.item:nth-child(2) {position: absolute;}
...
将会再次发生此问题。
解:
我们应该创建一个新文件夹,其中包含我们的电子邮件样式的标准文件。而且,这些文件仅用于电子邮件。
app / design / frontend / VendorTheme / default / web / css / email.less
@import 'source/lib/email/stand/_lib.less'; // Global lib
@import 'source/lib/email/stand/variables/_email.less'; // Global email variables
我最近刚遇到类似问题。希望这些更改对您有所帮助。
找到了Magento 2的解决方案
创建了文件
/web/css/email.less
和
/web/css/email-inline.less
在我的自定义主题中,并添加了来自
/vendor/magento/theme-frontend-blank/web/css/email.less
和
/vendor/magento/theme-frontend-blank/web/css/email-inline.css
请注意以下
但每行都带有“ @import'source / _theme.less”;”行 注释掉(或删除)
现在我得到了解决方案
/var/www/html/vendor/pelago/emogrifier/Classes/Emogrifier.php
595行,查找并替换下面的函数
private function splitCssAndMediaQuery($css)
{
$media = '';
$css = preg_replace_callback(
'#@media\\s+(?:only\\s)?(?:[\\s{\\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU',
function ($matches) use (&$media) {
$media .= $matches[0];
},
$css
);
// filter the CSS
$search = array(
// get rid of css comment code
'/\\/\\*.*\\*\\//sU',
// strip out any import directives
'/^\\s*@import\\s[^;]+;/misU',
// strip remains media enclosures
'/^\\s*@media\\s[^{]+{(.*)}\\s*}\\s/misU',
);
$replace = array(
'',
'',
'',
);
更换
private function splitCssAndMediaQuery($css)
{
$media = '';
$css = preg_replace_callback(
'#@media\\s+(?:only\\s)?(?:[\\s{\\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU',
function ($matches) use (&$media) {
$media .= $matches[0];
},
$css
);
// filter the CSS
$search = array(
// get rid of css comment code
'/\\/\\*.*\\*\\//sU',
// strip out any import directives
'/^\\s*@import\\s[^;]+;/misU',
// strip remains media enclosures
'/^\\s*@media\\s[^{]+{(.*)}\\s*}\\s/misU',
'/^\\s*@-?[A-Za-z-]+\\s[^{]+{(.*)}\\s*}\\s/misU',
);
$replace = array(
'',
'',
'',
'',
);