在使用var()
语法定义CSS变量并加上!important
标志后,当使用ng build --prod
命令构建Angular项目时,遇到了问题。具体来说,在我的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示例,演示了这个问题(即开发版本),而这里是通过生产构建和部署后的效果。
问题是,有人能解释一下这是为什么吗?
我可以通过多种方式解决这个问题,例如重新组织样式和删除
!important
,甚至像这样编写border样式:border: var(--primary) 1px solid !important
(奇怪的是,这也能正常工作),但我想知道这是为什么,这可能只是一个bug还是背后存在着普遍的原因?
border
简写属性来重现此问题(因此border-color: var(--primary)!important
可以正常工作),所以这对我来说越来越像一个 bug... - miselking