原文地址:Understanding the HTML versus BODY Element in CSS
原文作者:gavin kistner
本文永久链接:https://segmentfault.com/a/1190000044865003
译者:Fw恶龙
校对者:Fw恶龙
概括
html
和body
元素在父/子关系中是不同的块级实体html
元素的高度和宽度由浏览器窗口控制html
元素overflow
属性默认为auto
,在需要时会显示滚动条body
元素position
属性默认为static
,这意味着它的子元素的定位是相对于html
元素的- 在几乎所有现代浏览器中,页面边缘的内置偏移量都是通过
body
元素的margin
属性来实现的,而不是html
元素的padding
属性
介绍
许多 Web 开发人员不理解将样式应用于body
元素与html
元素之间的区别。大多数时候,他们只会将样式应用于body
元素;当这还不够时,他们会在html
和 body
上应用各种样式,直到页面表现看起来正确为止。
这种困惑是可以理解的。最初,两者的处理方式类似,将bgcolor等属性(现在已弃用)应用于body
标记,从而影响整个页面。
本文试图帮助 Web 开发人员充分理解这两个元素在现代 Web 浏览器中的使用方式。
块中的内容
首先,让我们看看块级元素在包含内容时的行为:
从上面我们可以看到,没有特定高度的块级元素会自动增长以适应其内容。当应用高度时会发生什么?这取决于CSS overflow
属性的值
与接下来讨论相关的是 overflow:auto
。看看它是如何让你在任何块级项目上显示滚动条的吧?
HTML页面的滚动条是从哪里来的?
在HTML页面上,当有足够的内容时,页面的一侧便会出现滚动条。这个滚动条是从哪里来的?魔法吗?UI小部件之间的邪恶幽会?也许吧。或者它可能只是一个隐式CSS规则导致的结果
html { overflow: auto }
“但是html元素没有高度!”
你困惑地喊道!
“如果它是一个没有特定高度的块级元素,它如何生成滚动条?”
html
元素有点特殊。它的高度和宽度由它所在的窗口/框架决定。当你增加窗口宽度时,html
元素的固定宽度也随之增加;当窗口变高时,html
元素的高度也随之增加。
图片会更直观一些,让我们看看html
元素在设置了overflow: visible
时会是什么样子:
希望这个图例对你有所帮助,而不是让你更加困惑。我们可以看到当主体内容body
溢出容器时,html
元素(红色)是如何移动到窗口边缘的。当内容太高时,html
元素负责显示“页面”的滚动条。
总结
这对你来说意味着什么?有几件事:
- 如果您是一个喜欢固定宽度且居中显示页面的设计师,则可以通过在
body
标签上设置width
,再将其居中margin: 0 auto
显示(栗子) 因为
body
元素默认情况下position: static
,所以如果给子元素设置height:100%
导致其高度为html
元素高度的 100%,而不是body
元素的高度。因此,如果您希望某些东西与主体一样高,请使用body { position: relative }
- 希望它可以帮助您准确理解
margin
、padding
和border
应用于html
和body
元素时将如何渲染
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。