如何在文档中嵌入作用域html(css)

时间:2018-12-31 13:06:48

标签: html css

我需要能够将从远程api获取的HTML片段(嵌套元素和CSS)嵌入到我的文档中,以使它们的CSS不会影响我的整个文档。

我需要获取(随机)gmail邮件HTML,并将其嵌入到我的网站中。事实是,大多数消息都有其CSS标记来设置消息html的样式。问题是这些CSS中有一些与我自己的文档CSS混为一谈。我该如何在CSS中嵌入html代码段,使其具有自己的作用域而不与外部内容交互?

<html>
<body>
<h1>Your gmail messages</h1>
<div id="gmail-message">
  <!-- Here to be injected automatically. Changing classes, etc is not possible -->
  <h1>This a gmail message</h1>
  <style type="text/css">
  h1 {
  color: red;
  }
  </style>
</div>
</body>
</html>

gmail-message div外部的h1标签也会受到影响,因此为红色。
我该怎么办才能解决这个问题?

5 个答案:

答案 0 :(得分:0)

一种解决方案是使用iframe。

另一种解决方案是提取所有CSS和html,然后向gmail-messag内的每个html标签添加一个属性(例如:范围)。 然后修改CSS并添加属性选择器。

示例:

<html>
<body>
<h1>Your gmail messages</h1>
<div id="gmail-message">
  <!-- Here to be injected automatically. Changing classes, etc is not possible -->
  <h1 scoped>This a gmail message</h1>
  <style type="text/css">
  h1[scoped] {
  color: red;
  }
  </style>
</div>
</body>
</html>

但是适当地使用ifram是更简单的解决方案。

答案 1 :(得分:0)

最简单的方法是使用iframe / object / embed标签(在Firefox上测试)。 如果您可以使用Javascript和HTML5,则还可以使用阴影DOM或使用插槽标签(也可以在shadowRoot中)创建自定义元素。

答案 2 :(得分:0)

您可能想使用The Shadow DOM

  

Web组件的一个重要方面是封装-可以   将标记的结构,样式和行为隐藏起来并分开   与页面上的其他代码进行匹配,以使不同部分不会发生冲突,并且   代码可以保持整洁。 Shadow DOM API是关键部分   为此,提供了一种将隐藏的单独DOM附加到   元素。

但是,请注意,这是一项新技术,并且像往常一样,Microsoft浏览器无法对其进行处理。

答案 3 :(得分:0)

我找到了解决方法。

首先,在某处插入一个空的iframe广告代码。

<iframe id="iframeTag" src="about:blank"></iframe>

第二,通过以下方式将html代码段加载到该iframe中:

var doc = document.getElementById('iframeTag').contentWindow.document;
doc.open();
doc.write(<html_snippet>);
doc.close();

这样,<html_snippet>的CSS不会与外部文档的CSS混在一起。

答案 4 :(得分:0)

使用 srcdoc 上的 iframe 属性来确定 HTML 和 CSS 的范围。

<iframe srcdoc="<p>Hello world!</p>"></iframe>

所有主流浏览器都支持:https://caniuse.com/iframe-srcdoc