保护元素免受非特异性影响 CSS

Protecting Elements From Unspecific CSS

我们目前必须编写一些要嵌入到各种页面上的小部件。据我所知,我有两种可能的选择来保护这些小部件免受松散 CSS 规则的影响(例如,一般的 p { background-color: red })。它们是:

  1. 使用重置样式表确保小部件元素的所有 CSS 属性都设置为已知默认值。使用像 Less 这样的 CSS 预处理器,这可以很简单:

    html body #myWidgetID {
      .resetCSSMixin();
    }
    
  2. 将元素嵌入到 iframe 中,就像 HTML5 Rocks 上的建议一样。

选项 1 是我已知的实体。它不漂亮,但它会工作。选项 2 我不太确定。大量的 iframe 会减慢页面速度吗?现在,我们的许多网站都将在旧硬件和缓慢的互联网速度下访问。我们还需要支持旧的 IE 8 - 是否存在浏览器兼容性问题?我们当然不能使用较新的 iframe 属性。

任何人都可以提出我不应该选择选项 2 的任何理由吗?这听起来是个更好的选择,但我想在打电话之前获得更多指导。

如果您关心 CSS 属性,您可以使用样式表中更具体的规则或 [=16] =] 属性。无论哪种方式,它都会覆盖松散的选择器。

如果您不关心 CSS 属性,则重置它没有意义,您可能应该允许它成为主题。

iframes 是一个非常古老的功能,所以 IE8 支持不是问题。主要区别在于 iframe 将单独的文档加载到框架中。这将产生几个影响:

  • 小部件在单独的请求中加载。它将需要自己的 HTML 页面,因此您将有一个额外的 HTTP 请求,以及需要传输的更多数据。
  • 不过,初始页面加载甚至可能更快,因为可以在加载小部件之前显示页面。
  • iframe 是一个边界。 iframe 中的页面不能修改 iframe 之外的元素。这可能是优势(第 3 方 banners/widgets 由于安全风险不能访问)或劣势(如果您希望自己的小部件能够访问父级)。
  • 因为它是一个单独的页面,所以它有自己的一组 CSS 并且不受父页面的任何影响(除了 width/height)。这可能是优势也可能是劣势。您可以完全控制小部件的外观,但很难让小部件的 users/implementors 有任何可能进行一些额外的样式设置。