我试着做一个css选择器,根据html是否在iframe中来分配不同的属性。
html:not(:root) body { background: black !important; }
我希望这可以应用background: black;到一个iframe中的body,但是它没有,为什么?有css选项吗?我总是可以用javascript检查html是否是根目录。不需要IE8支持。
background: black;
y1aodyip1#
CSS只在同一个文档中起作用,iframe本身就是一个完整的文档,因此应用于包含iframe的页面的CSS规则不能应用于包含iframe的页面。这意味着就HTML和CSS而言,html总是:root(因此永远不可能是:not(:root))。除非您能够将此CSS从包含页面传输到iframe中的页面(例如使用脚本),否则我不相信有一种方法可以只使用CSS。
html
:root
:not(:root)
xqnpmsa82#
也许可以使用JavaScript在iframe中进行样式化。
document.querySelector('iframe').contentDocument.body.querySelector('#some-element').style.background-color = 'red';
**重要提示:**确保iframe在同一个域中,否则您无法访问其内部。这将是跨站点脚本。
使用JavaScript文档访问iframe内的元素,请参阅此处:Javascript - Get element from within an iFrame
tzdcorbm3#
张贴我的评论作为更好的显示答案,你应该:
因此,如果所有代码都在iframe中,请执行以下操作:
if (window.parent !== window) { document.documentElement.classList.add('inside-iframe'); }
html.inside-iframe { bkacground-color: black; }
如果你想让detection-JS-code在父框架内,那么可以:
document.querySelectorAll('iframe') .forEach(i => i.contentDocument.documentElement.classList.add('inside-iframe'));
假设在执行此JS时加载了iframe(否则contentDocument/documentElement将不存在)。在这种情况下,您可以依赖于iframe的load事件(但无论如何,将“is-in-iframe”检测放在iframe本身中似乎更好,因为相应的CSS也在iframe内部)
load
wvt8vs2t4#
let iframe = document.querySelector('iframe[name="marco"]'); let ele = iframe.contentWindow.document.querySelector("#someElement")
piok6c0g5#
html:not(root) body { background: black !important; }
工程
5条答案
按热度按时间y1aodyip1#
CSS只在同一个文档中起作用,iframe本身就是一个完整的文档,因此应用于包含iframe的页面的CSS规则不能应用于包含iframe的页面。
这意味着就HTML和CSS而言,
html
总是:root
(因此永远不可能是:not(:root)
)。除非您能够将此CSS从包含页面传输到iframe中的页面(例如使用脚本),否则我不相信有一种方法可以只使用CSS。
xqnpmsa82#
也许可以使用JavaScript在iframe中进行样式化。
**重要提示:**确保iframe在同一个域中,否则您无法访问其内部。这将是跨站点脚本。
使用JavaScript文档访问iframe内的元素,请参阅此处:Javascript - Get element from within an iFrame
tzdcorbm3#
张贴我的评论作为更好的显示答案,你应该:
因此,如果所有代码都在iframe中,请执行以下操作:
如果你想让detection-JS-code在父框架内,那么可以:
假设在执行此JS时加载了iframe(否则contentDocument/documentElement将不存在)。在这种情况下,您可以依赖于iframe的
load
事件(但无论如何,将“is-in-iframe”检测放在iframe本身中似乎更好,因为相应的CSS也在iframe内部)wvt8vs2t4#
piok6c0g5#
工程