scope/isolate CSS 是否有任何 Chrome 特定的技术?
Are there any Chrome-specific techniques to scope/isolate CSS?
我正在编写一个 Chrome 扩展,将 HTML 注入到显示的页面中。我希望注入的 HTML 有自己的风格,不受可能出现在主机页面中的 CSS 的影响。
我试过使用传统的 CSS,但仍然受到主机页面样式损坏的困扰。
看完 I/O 15 的 Polymer 演示后,我想知道是否有任何新的、Chrome 特定的技术可以用来实现这个目标?
您要研究的是 shadow-dom
。这将使您能够创建一个 widget/component(这将是您注入的 html)。这意味着 widget/component 的 DOM 树被封装并且页面的外部样式不会影响它。 html5rocks covering this. You may also want to look into WebComponents 上有一篇很好的文章。请记住,此功能仅在最新版本的浏览器中可用。
我目前在工作场所使用的两个东西是:
我在工作中使用 react,因此 react-css-modules,但 css-modules 应该适用于您的情况。它不是 Chrome 特定的,但我们在构建的每个组件的上下文中使用它们。基本上,就像文档状态一样,row
的 class 会变成类似 table__row___2w27N
的东西。构建名称的细分是 CSS 的文件名,而不是 class 名称后跟 5 个字符的 base64 哈希。希望对您有所帮助。
一个潜在的缺点是需要 Webpack。
这是我们的组件文件夹结构的示例:
- component
- Component.jsx/js
- component.css/scss/sass
- component.test.js
我正在编写一个 Chrome 扩展,将 HTML 注入到显示的页面中。我希望注入的 HTML 有自己的风格,不受可能出现在主机页面中的 CSS 的影响。
我试过使用传统的 CSS,但仍然受到主机页面样式损坏的困扰。
看完 I/O 15 的 Polymer 演示后,我想知道是否有任何新的、Chrome 特定的技术可以用来实现这个目标?
您要研究的是 shadow-dom
。这将使您能够创建一个 widget/component(这将是您注入的 html)。这意味着 widget/component 的 DOM 树被封装并且页面的外部样式不会影响它。 html5rocks covering this. You may also want to look into WebComponents 上有一篇很好的文章。请记住,此功能仅在最新版本的浏览器中可用。
我目前在工作场所使用的两个东西是:
我在工作中使用 react,因此 react-css-modules,但 css-modules 应该适用于您的情况。它不是 Chrome 特定的,但我们在构建的每个组件的上下文中使用它们。基本上,就像文档状态一样,row
的 class 会变成类似 table__row___2w27N
的东西。构建名称的细分是 CSS 的文件名,而不是 class 名称后跟 5 个字符的 base64 哈希。希望对您有所帮助。
一个潜在的缺点是需要 Webpack。
这是我们的组件文件夹结构的示例:
- component
- Component.jsx/js
- component.css/scss/sass
- component.test.js