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>
内容执行完之后,浏览器继续渲染。