导航
style 标签放在 body 后,会导致当加载到此样式时,页面将停止之前的渲染。此样式表被解析后,将重新渲染页面,也就出现了短暂的花屏现象。
body 后,要把样式放在 head 中。以下是一个示例,说明在<body>后定义样式的效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test Document</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a paragraph.</p>
<!-- Styles defined after body content -->
<style>
body {
background-color: lightblue;
}
h1 {
color: navy;
}
p {
color: green;
}
</style>
</body>
</html>
在这个示例中,浏览器会按以下顺序处理:
<body>部分内容:
<h1>和<p>标签的内容,但此时它们没有应用在<style>中定义的样式。<style>标签:
<h1>标签文本颜色会变为海军蓝,<p>标签文本颜色会变为绿色。浏览器将 CSS 生成 CSSOM,再将 DOM 和 CSSOM 整合成 RenderTree ,然后针对 RenderTree 即可进行渲染了。大家可以想一下,有 DOM 结构、有样式,此时就能满足渲染的条件了。另外,这里也可以解释一个问题 —— 为何要将 CSS 放在 HTML 头部?—— 这样会让浏览器尽早拿到 CSS 尽早生成 CSSOM,然后在解析 HTML 之后可一次性生成最终的 RenderTree,渲染一次即可。如果 CSS 放在 HTML 底部,会出现渲染卡顿的情况,影响性能和体验。
放在 head 中的好处:
<script> 就停止渲染,执行 JS 代码。因为浏览器渲染和 JS 执行共用一个线程,而且这里必须是单线程操作,多线程会产生渲染 DOM 冲突。待<script>内容执行完之后,浏览器继续渲染。