将 bootstrap 模板与普通 Web 组件一起使用

Using bootstrap template with vanilla web components

我有一个传统的 ASP.NET MVC 网站,它使用 Metronic Bootstrap 模板。

现在,我正在考虑使用原始 Web 组件方法重写此网站。

所以我做了一个小测试,写了一个没有阴影的web组件dom,看来我的组件只是很好地使用了Metronic风格,所以它从我包含它的父页面继承了它。

但是,当我启用阴影 DOM 时,CSS 传播停止,现在我的 Web 组件不再使用 Metronic 风格。

此时我有点不确定如何处理这种情况:我可以简单地不使用 shadow DOM,但是,我没有使用 Web 组件的全部强度和封装。

那么,当您有一个大型 Bootstrap 模板并要与 Web 组件结合使用时,您将如何处理这种情况?这值得么?有针对这种情况的指导方针吗?

如果您需要在基于 ShadowDOM 的 Web 组件中使用大型 CSS 框架,那么您需要在每个组件中包含 CSS,或者至少 CSS 的一部分该组件需要。

ShadowDOM 旨在防止外部 CSS 影响内部 ShadowDOM。所以,如果你想在 ShadowDOM 中使用特定的 CSS,那么你必须把它放在那里。

最简单的做法是在 ShadowDOM 中包含 <link> 标签。您在组件外部使用的相同 <link> 标记。

class MyElement extends HTMLElement {
  constructor() {
    super();
    let shadow = this.attachShadow({mode: 'open'});
    shadow.innerHTML = `
    <link href="my.css" rel="stylesheet">
    <h2 class="my-header">My Component</h2>
    <button class="my-button">Pay me</button>`;
  }
}

customElements.define('my-element', MyElement);
<link href="my.css" rel="stylesheet">
<div class="my-thing">Stuff</div>
<button class="my-button">Click me</button>
<hr/>
<my-element></my-element>

因为我没有文件 my.css 你不会看到更改。

这将允许您在页面和组件中包含 CSS。