CSS 用 !important 标志定义的变量在 angular 生产模式中消失
CSS variable defined with !important flag disappears in angular production mode
我遇到 CSS 变量(使用 var()
语法定义)的问题,当 Angular 项目在生产模式下构建时 !important
标志消失(使用 ng build --prod
).具体来说,在我的 scss
文件中,我有这样的内容:
.all-borders {
border: 3px solid var(--primary) !important;
// in "development" build this is correctly compiled to: "border:1px solid var(--primary)!important"
// in "production" build this is incorrectly compiled to: "border:1px solid!important"
}
.window {
height: 100px;
width: 100px;
background-color: cadetblue;
}
并且在 html
文件中我定义了一个简单的 div
元素,如下所示:
<div class="all-borders window"></div>
当我 运行 ng serve
(所以在 dev
模式下构建)时,我可以看到边框已正确编译并应用于我的 div
元素。但是,当我在 prod
模式下构建时,我的边框变成黑色,我可以在检查器中看到样式已编译为 border: 1px solid!important
(注意 var(...)
消失了)。
这是 stackblitz example demonstrating this issue (that is development version) and here 在为 生产 构建和部署时的样子。
问题是,谁能给我解释一下为什么会这样?
我可以通过多种方式解决这个问题,例如重新组织样式并删除 !important
,或者甚至像这样 border: var(--primary) 1px solid !important
编写 border 样式(很奇怪够了,这很好用),但我想知道为什么会这样,这可能只是一个错误,还是背后有一个普遍的原因?
我在 Angular 回购 here 上创建了一个问题,这似乎是一个错误,将在 Angular v9.
中修复
据我所知,问题似乎出在 CSS optimizer they used, so they switched to a different one 中,而且问题似乎已解决(在 v9 中)。最坏的情况是,这可能会引入一些重大更改,在这种情况下,此修复程序可能无法在 v9 中实现,但没有迹象表明这会发生(目前)。
我遇到 CSS 变量(使用 var()
语法定义)的问题,当 Angular 项目在生产模式下构建时 !important
标志消失(使用 ng build --prod
).具体来说,在我的 scss
文件中,我有这样的内容:
.all-borders {
border: 3px solid var(--primary) !important;
// in "development" build this is correctly compiled to: "border:1px solid var(--primary)!important"
// in "production" build this is incorrectly compiled to: "border:1px solid!important"
}
.window {
height: 100px;
width: 100px;
background-color: cadetblue;
}
并且在 html
文件中我定义了一个简单的 div
元素,如下所示:
<div class="all-borders window"></div>
当我 运行 ng serve
(所以在 dev
模式下构建)时,我可以看到边框已正确编译并应用于我的 div
元素。但是,当我在 prod
模式下构建时,我的边框变成黑色,我可以在检查器中看到样式已编译为 border: 1px solid!important
(注意 var(...)
消失了)。
这是 stackblitz example demonstrating this issue (that is development version) and here 在为 生产 构建和部署时的样子。
问题是,谁能给我解释一下为什么会这样?
我可以通过多种方式解决这个问题,例如重新组织样式并删除 !important
,或者甚至像这样 border: var(--primary) 1px solid !important
编写 border 样式(很奇怪够了,这很好用),但我想知道为什么会这样,这可能只是一个错误,还是背后有一个普遍的原因?
我在 Angular 回购 here 上创建了一个问题,这似乎是一个错误,将在 Angular v9.
中修复据我所知,问题似乎出在 CSS optimizer they used, so they switched to a different one 中,而且问题似乎已解决(在 v9 中)。最坏的情况是,这可能会引入一些重大更改,在这种情况下,此修复程序可能无法在 v9 中实现,但没有迹象表明这会发生(目前)。