HTML head标签内的h1内容为何会在浏览器页面显示?
head标签内放置h1仍在页面显示的原因说明
首先明确HTML标准对<head>标签的定义:
<head>属于文档元数据容器,内部仅允许放置<title>、<meta>、<link>、<style>、<script>、<base>这类描述文档属性、加载外部资源的非内容标签,规范层面严格禁止在<head>内放置<h1>、<p>、<div>这类属于页面可见内容流的标签。- 你之前看到的“head部分内容不会在浏览器中显示”的描述,针对的是符合规范放置在head内的合法内容,这个规则本身没有问题。
你遇到的显示异常,是浏览器的容错解析机制导致的:
浏览器解析HTML时不会因为语法不规范直接中断渲染,而是会按照内置的容错规则自动修正不合法的结构。
当解析器在<head>内部扫描到本应属于<body>的内容类标签(比如你写的<h1>),会自动判定<head>标签已经被隐式关闭,同时隐式创建<body>起始标签,把错放的<h1>移动到body区域参与渲染。也就是说你写在head里的h1最终渲染时根本不在DOM的head结构里,自然会显示在页面上。
你可以打开浏览器开发者工具的Elements面板查看最终解析后的DOM结构,就能看到浏览器自动调整了标签位置,这也是为什么你的页面会显示两个Hello World!标题——两个h1最终都被解析到了body区域。
你的测试代码存在的问题就是把内容标签错放到了不允许的位置,修正方式很简单:所有需要展示给用户看的页面内容,全部写在<body>标签内部即可,不要在<head>里放任何可见内容元素。
<!DOCTYPE html> <html> <head> <title>First Lesson</title> <!-- head内只放元数据、资源引用类内容,不放可见内容 --> </head> <body> <h1>Hello World!</h1> </body> </html>
内容的提问来源于stack exchange,提问作者Bharghav Venkaptappa
相关产品推荐
相关产品推荐

