isolate/scope Angular [Elements] 小部件的所有 SCSS 样式的最简单方法是什么?
What's the easiest way to isolate/scope all SCSS styles for an Angular [Elements] widget?
我有一个 Angular 7 元素小部件,稍后我将其嵌入到更大的应用程序中。当我单独测试小部件时,所有样式都正常工作,因为它正在访问每个组件的样式和 assets/styles/global.scss
中的全局样式。当我将小部件嵌入目标最终应用程序时,我遇到了很多样式冲突,并且应用程序和小部件的样式都被破坏了。
我试图将所有样式组件和全局样式简单地包装在我的小部件中,将它们包装在 class .ba
中,即 book-appointment
的简写,例如
我用 .ba
:
包装我的约会向导 scss 组件
.ba {
.appointment-wizard-title {
font-size: 20px;
}
...
}
我用 .ba
:
包裹我的全局 scss
.ba {
h1,
h2 {
font-size: 38px;
font-weight: 100;
}
body {
background: transparent;
}
.input-group {
position: relative;
display: table;
border-collapse: separate;
}
...
}
然后我用 ba
class:
将我的小部件包装成 div
<div class="ba">
<app-root></app-root>
</div>
当我使用 ng serve
单独测试小部件时,这部分有效,但丢失了很多样式细节。我无法指定所有样式只应用于 div
classed ba
下存在的元素和 classes ... 我该怎么做?
<div class="ba">
<app-root></app-root>
</div>
似乎包装了整个应用程序。如果你有一个小部件组件,你可以。
备选方案 1。仅对该组件使用本地样式。它只会存在于组件中。例如:
@Component({
selector: 'my-component',
template: 'my-component.html',
styles: ['my-component.scss']
})
备选方案 2。使用更靠近小部件的 class 'ba'。通过在您的小部件组件中使用主机绑定装饰器。保持你的风格全球化
@HostBinding('class.ba') someField: boolean = true;
注意。即使 Alt1 看起来很诱人,您也需要留意其他 sass 文件的大量导入。您最终可能会在 dist
中复制 CSS 文件
我有一个 Angular 7 元素小部件,稍后我将其嵌入到更大的应用程序中。当我单独测试小部件时,所有样式都正常工作,因为它正在访问每个组件的样式和 assets/styles/global.scss
中的全局样式。当我将小部件嵌入目标最终应用程序时,我遇到了很多样式冲突,并且应用程序和小部件的样式都被破坏了。
我试图将所有样式组件和全局样式简单地包装在我的小部件中,将它们包装在 class .ba
中,即 book-appointment
的简写,例如
我用 .ba
:
.ba {
.appointment-wizard-title {
font-size: 20px;
}
...
}
我用 .ba
:
.ba {
h1,
h2 {
font-size: 38px;
font-weight: 100;
}
body {
background: transparent;
}
.input-group {
position: relative;
display: table;
border-collapse: separate;
}
...
}
然后我用 ba
class:
<div class="ba">
<app-root></app-root>
</div>
当我使用 ng serve
单独测试小部件时,这部分有效,但丢失了很多样式细节。我无法指定所有样式只应用于 div
classed ba
下存在的元素和 classes ... 我该怎么做?
<div class="ba">
<app-root></app-root>
</div>
似乎包装了整个应用程序。如果你有一个小部件组件,你可以。
备选方案 1。仅对该组件使用本地样式。它只会存在于组件中。例如:
@Component({
selector: 'my-component',
template: 'my-component.html',
styles: ['my-component.scss']
})
备选方案 2。使用更靠近小部件的 class 'ba'。通过在您的小部件组件中使用主机绑定装饰器。保持你的风格全球化
@HostBinding('class.ba') someField: boolean = true;
注意。即使 Alt1 看起来很诱人,您也需要留意其他 sass 文件的大量导入。您最终可能会在 dist
中复制 CSS 文件