<html>
元素是任何网页上级别最高的元素。其他所有元素都包含在其中。如果您正在制作一个流体宽度网站,但希望限制其可以扩展的最大宽度(这是一个好主意),您可以通过简单地将最大宽度应用于 html 元素来做到这一点。
html {
max-width: 1200px;
}
除非明确强制,否则没有任何内容会自然地比该宽度更宽。您甚至可以保持内容居中。
html {
max-width: 1200px;
margin: 0 auto;
}
但是背景呢?如果宽度更大,它现在会在边缘被截断吗?不会。html 元素在这方面是独一无二的,无论您将其缩小到什么程度,背景都会填充整个页面。
html {
max-width: 1200px;
margin: 0 auto;
background: #eee; /* Fills the page */
}
还有一件稍微奇怪的事情……尽管 HTML 元素尊重其新大小并且是最顶层的元素,但绝对定位的元素仍然相对于浏览器窗口而不是 html 元素进行定位,除非您将 position 属性设置为 relative。
html {
max-width: 1200px;
margin: 0 auto;
background: #eee; /* Fills the page */
position: relative; /* Fix for absolute positioning */
}
适用于所有常规浏览器以及 IE 8+。IE6 和 IE 7 只是将 html 元素保留为全宽,这并不是世界末日。
非常感谢 Kit MacAllister 就此问题撰写文章。
固定位置元素是否也相对于浏览器定位?
不幸的是,webkit 在从百分比舍入像素值方面存在重大错误,将其用于布局非常危险。
我通常在 body 上设置 max-width。这样,如果需要,我可以为视口和页面本身设置单独的背景。这并不总是需要考虑的,但你永远不知道。就浏览器兼容性而言,我更习惯在 body 上设置宽度而不是在 html 元素上设置宽度,但我不知道是否有任何错误支持这种担忧。 :)
我也是这样
虽然我赞赏将标记减少到绝对最少的语义标签数量的愿望,但也许最后一句应该改为
IE6 和 IE 7 只是将 html 元素保留为全宽,因此您可能改为使用一个包装 div,这并不是世界末日。
或者您可以使用元素,无需添加另一个 div。
但需要注意的是,如果您在具有 RTL 样式的网站上使用它,即使使用正确的 lang 和 dir 属性,它在 IE6 和 IE 7 中也不会正常工作,在这种情况下,您必须使用一个包装 div。我之前没有尝试过,所以不知道它是否可以与 RTL 正确配合使用。
Kent,你说得对。这篇文章中的一些细节是错误的。
当背景在根元素上时,它始终会被传播到画布(涉及背景附件行为的一些奇怪情况除外)。如果 HTML 没有显式设置背景,则画布也会绘制 BODY 的背景。具有非定位祖先的绝对定位元素相对于 ICB 定位,而不是相对于窗口/视口。如果它们锚定到视口,则它们将是固定的。
这些可能是 CSS 中最容易被误解的概念。
根据 CSS2.1,初始包含块实际上是视口:“对于连续媒体,它具有视口的大小,并锚定在画布原点;它是分页媒体的页面区域。”
ICB?冰镇啤酒?意大利奶酪面包?哦……初始包含块。;) 我每天都没听到这个首字母缩略词。 :)
谢谢 Josiah!
该死的首字母缩略词……
值得一提的是,除了 max-width 之外,还有 min-width 参数。IE6 和 IE 7 将两者都视为 width 属性。
IE 修复
我在网上找到了这个。它显示了用于模拟较旧 IE 的 min 和 max 宽度 的 javascript 修复程序
— http://javascript.about.com/library/blwidth.htm
很棒的技巧,Chris!
我不知道 html 和背景的特殊行为!非常好;)
我刚刚开始在元素上执行此操作,并添加了 min -width。在元素上执行此操作与在元素上执行此操作相比,有什么主要优势?
哎呀,那应该是……目前在 BODY 元素上使用此功能。使用 HTML 元素与 BODY 元素相比,有什么主要优势?
同样的问题。不使用 body 上的原因是什么?
但是,如果我想让页眉或页脚背景拉伸到屏幕的宽度(但每个背景都有一个包含元素为其提供最小宽度),这会将其截断吗?或者这比在这些元素中使用包含 div 更好的解决方案?
嗯,我认为使用本文中说明的最大宽度属性的 .wrapper 类将是完美的解决方案。然后可以将其添加到网站的页眉/页脚部分,同时允许其父元素具有拉伸的背景。
我建议,如果您要使用它,请在 body 标签或 body 标签内的附加包装器上使用它。我看不到在 html 标签上使用的任何优势。
我认为永远不应该设置 html 元素的样式或考虑它。
甚至 body 也是如此。
从包装器开始更灵活!
同意你的观点,Tof。
这是一种语义讨论(设置 HTML、Body 或都不设置)
不错,但对我来说,#wrapper 也是最简单的解决方案。
w3c 的 CSS2 规范中规定,绝对/相对定位的元素将相对于其下一个父元素定位,该父元素的位置为绝对或相对。因此,这不是“奇怪的”行为,而实际上是正确的(指定的)行为。
;)
再投一票给设置包装器样式。