/ CSS

HTML 和 Body 在 CSS 中的区别

在 CSS 中,<html><body> 的区别往往被忽略,全局样式或者定义在 <html> 上,或者定义在 <body> 上。实际上,两者是有区别的,不论是 CSS 老鸟还是新手,都应该了解。

HTML 和 Body 如何关联

<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Metadata and such -->
  </head>

  <body>
    <!-- Where the content begins -->
  <body>
</html>

根据标准定义<html> 是文档的根元素,<head><body><html> 唯一的两个子元素。按照规范<head> 才是和 <body> 相对照、需要加以区别的元素。

因此,<html><body> 是父子关系。在 HTML 文档中,:root 选择符对应 <html> 元素。

:root {
}

html {
}

需要注意的是,:root 选择符(伪类)的优先级大于 html 选择符(0, 0, 1, 0) vs (0, 0, 0, 1)

哪些全局样式应该应用在 HTML

使用 rem

html {
  font-size: 62.5%;
}

body {
  font-size: 1.4rem; /* =14px */
}

h1 {
  font-size: 2.4rem; /* =24px */
}

古怪的 background-color

CSS 中有一些古怪的行为,将 background-color 应用到 <body> 以后,即便 <body> 里的元素没有占满视口,背景颜色也会蔓延到整个视口

html 设置 background-color 可以解决这个问题。

height: 100%

如果 <body> 及其子元素的高度需要设置为窗口高度时,<html> 元素上也需要添加:

html,
body {
  height: 100%;
}

哪些全局样式应该应用在 Body

早期的规范中<body> 有以下行内属性:

  • background
  • bgcolor
  • marginbottom
  • marginleft
  • marginright
  • margintop
  • text

这些行内属性对应的 CSS 样式应该应用在 <body>

Inline Attribute CSS Property
background background
bgcolor background
background-color
marginbottom margin-bottom
marginleft margin-left
marginright margin-right
margintop margin-top
text font

总结

本文列举了一些 <html><body> 在 CSS 中的区别,在 JavaScript 中同样存在区别,例如 html 对应 document.documentElementbody 对应 document.body

了解二者的区别可以帮助我们更有效的编写 CSS。欢迎补充。

参考链接

via CSS-Tricks - HTML vs Body in CSS