html - 如何将自定义 css 应用于元素内的阴影 DOM?

标签 html angular iframe ionic4 shadow-dom

我用 IONIC 4 创建了一个新项目。一切都很好并且可以正常工作。但是当我尝试将 CSS 应用于 #shadow-root 中的元素时。

下面是我的HTML代码

<ion-item class="itm-pad" no-padding>
<p>Rajkumar</p>
<ion-buttons slot="start">
  <ion-button>
    <ion-icon slot="icon-only" name="funnel"></ion-icon>
  </ion-button>
</ion-buttons>
<ion-buttons slot="end">
  <ion-button>
    <ion-icon slot="icon-only" name="search"></ion-icon>
  </ion-button>
</ion-buttons>
</ion-item>

此声明请引用以下屏幕截图。在这里,我可以像往常一样将 CSS 应用于 ion-buttons 和 p 标签。但不能将 CSS 应用于 item-native 和 item-native 内部的 item-inner。 enter image description here

我已经搜索过这个问题,但都说了为什么要实现它以及它有多重要。但是没有人解释将 CSS 应用于这些元素的确切过程。请检查并告诉我解决方案。

最佳答案

这就是 shadowDOM 的力量和痛苦。

ShadoDOM 的创建是为了允许 HTML 和 CSS 的沙箱。

这意味着如果您要将一些 HTML 放在 shadowDOM 中,那么您还需要将 CSS 放在同一个 shadowDOM 中。如果您计划拥有多层 shadowDOM,那么您需要在每一层中放置所需的 CSS。

<my-el>
  #shadowRoot
  // Styles must go here
  <inner-el>
    #shadowRoot
    // styles must also go here
    <ion-button>
      <ion-icon slot="icon-only" name="search"></ion-icon>
    </ion-button>
  </inner-el>
  <ion-button>
    <ion-icon slot="icon-only" name="search"></ion-icon>
  </ion-button>
</my-el>

在上面的示例中,由于 shadowDOM 是一个沙箱,因此我们需要将自定义放置在 <ion-button> 中。在每个 shadowRoot/shadowDOM 中。

最简单的方法是使用 <link> 标签。创建一个 CSS 文件,仅定义您想要的 <ion-button> 方式。查看然后添加 <link href="pathToCss" rel="stylesheet">进入每个 shadowDom。

虽然我们可能希望有一种更简单的方法,但在规范发生变化之前,这是让您的内部元素正确设置样式的最简单方法。

关于html - 如何将自定义 css 应用于元素内的阴影 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907742/

相关文章:

html - 两列形式,每列中有动态行数

angular - 如何使用 msbuild 从 dotnetcore web-api 项目中触发 "ng build",但将 Angular 项目保存在单独的文件夹中?

javascript - Angular Material Autocomplete - 如何允许用户添加不在建议列表中的项目?

linux - Angular-CLI 在构建时卡住

javascript - 在 iframe 之外显示弹出框?

javascript - 当我执行 loc.innerHTML = xhr.responseText 时,为什么浏览器会自动将我的responseText 用双引号引起来?

javascript - 如何在浏览器中通过 POST 请求加载外国图片?

javascript - 如何将正确的 url 传递到 iframe 页面?

javascript - 在所有浏览器中传递来自 iFrame 的消息

jQuery - 选项上的选定属性未显示在 FireBug 中