如何在CSS中的#document中选择元素?

J-J*_*J-J 4 html css css-selectors

我正在尝试<body>在CSS 中设置外部标记的背景图像:

<html>
 <body>
  ...
   #document
    <html>
     <body>
     </body>
    </html>
  ...
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,我甚至无法选择其中一个<body>标签而不影响另一个标签.他们没有身份证,当我尝试通过儿童选择器选择#document使事情变得复杂时(我甚至不知道它是什么).如果我尝试类似的东西body html body {...},这些#document行为就像一个我无法通过的障碍,所以它不会选择内部身体标签.

有关如何选择其中一个身体标签的任何想法?

Bol*_*ock 12

给定的列表似乎是DOM检查器视图.在这种情况下,#document不引用id为"document"的任意元素 - 它指的是托管在<iframe>(参见Node.nodeName)中的文档.您可以在Firefox和Chrome的DOM检查员中看到这一点; 实际上,您甚至可以通过指向浏览器data:text/html,<iframe>,打开检查器并展开<iframe>节点来立即尝试.IE也显示嵌套树,但没有#document标记.

如果您看到背景图像从主文档流失到iframe,则表示iframe中的文档没有自己的背景.

选择器无法穿透多个/嵌套文档树; 它们已本地化为上下文文档.这意味着您无法在<iframe>包含该文档的文档中托管文档中的元素<iframe>.如果需要将样式应用于文档中的元素<iframe>,则需要在该内部文档中直接应用CSS,并且选择器的编写就好像您只使用该文档一样.


在某个不太可能的事件中,给定的列表是实际的源标记而不是DOM检查器视图,并且#document实际上是id为"document"的任意元素,那么您的内部<html><body>元素已被注销,作为HTML DOM可能一次只包含一个<html>和一个<body>元素; 这些将是你的外在的,而不是内在的.在这种情况下,您可以尝试选择#document并应用背景,但不保证它将正常工作.

  • @Tom Chamberlain:你可以证明这一点. (2认同)