【发布时间】:2021-12-04 17:15:17
【问题描述】:
我编写了一个谷歌浏览器扩展程序,它会弹出一个带有自动完成字段的对话框,它有自己的风格,但是在某些网站上我的 CSS 完全被破坏了,看起来不太好。
我知道使用 iFrame 隔离样式,但在 Google Chrome 扩展程序中,无法以这种方式隔离我的 HTML 和 CSS。另一种方法是将我所有的东西包装到一个单独的 div 中,并使用它自己的 id 和该 id 的相对样式,我这样做了,但它似乎不适用于某些具有“硬”标签样式重载或“!重要的”指令在 CSS 代码中。
所以,我想知道有没有什么方法可以真正以方便的方式隔离我的样式,或者重载每个小的 CSS 属性来修复每个站点的一个或另一个样式问题是我的坏事?
顺便说一句:我将清单设置为在“document_end”加载所有内容,但我发现它并没有应用于样式表,而样式表每次都在 DOM 准备好时加载。
【问题讨论】:
-
你试过these methods吗?两者的结合应该足够了。确保您的选择器足够具体。
-
谢谢罗伯!是的,我试过这个,但它似乎不适用于每个站点。我知道即使我看到“计算样式”(在 GC DevTools 中)显示的所有页面都是我在 CSS 中设置的,例如“list-style: none !important;”,它仍然会继续向我显示带有“光盘”标记的列表。而且,是的 - 我的样式在清单中设置,就像在你的建议中一样,它是在创建 DOM 后通过嵌入到头部动态加载的。也许还有其他方法可以隔离 Google Chrome 扩展中的样式?我的意思是清单中的一些秘密“禁用继承:开启”选项或类似的东西?
-
我最后的建议怎么样?增加选择器的specifity。如果您控制要设置样式的元素,则添加
style="prop:val!important"将具有最高优先级 - 例如参见 jsfiddle.net/rytkL。 -
在此处查看我对类似问题的回答:stackoverflow.com/questions/10608924/…。有几种方法,但我详细介绍的一种可能是最简单和最可靠的...... :)
标签: css google-chrome-extension isolation