我有一个<div>
宽度设置为100%
. 当我添加position:fixed
它时,宽度会变16px
大。
我注意到在身体8px
上,四面都有边距,所以我猜这position:fixed
是在某种程度上忽略了包含它的身体标签的边距。
我查看了MDN 参考,但找不到任何可以解释发生了什么的东西。
导致这种行为的原因发生了什么position:fixed
变化?<div>
示例:http: //jsfiddle.net/UpeXV/
我有一个<div>
宽度设置为100%
. 当我添加position:fixed
它时,宽度会变16px
大。
我注意到在身体8px
上,四面都有边距,所以我猜这position:fixed
是在某种程度上忽略了包含它的身体标签的边距。
我查看了MDN 参考,但找不到任何可以解释发生了什么的东西。
导致这种行为的原因发生了什么position:fixed
变化?<div>
示例:http: //jsfiddle.net/UpeXV/
body
自动具有8px
边距。因此,当您将width
元素的 设置为 时100%
,它就变成了主体的宽度,8px
两边都减少了。
但是当你给 element 时position:fixed
,它不再是相对于 body 而是相对于 viewport 设置的,它没有边距。所以width
现在是视口的宽度,是 2 *8px
宽 -16px
你观察到的。
这是有关该主题的 W3 文档:
带有 position:absolute 的元素的位置和尺寸是相对于其包含块的,而带有 position:fixed 的元素的位置和尺寸总是相对于初始包含块。这通常是视口:浏览器窗口或纸张的页面框。
这是固定元素的默认行为,因为固定元素不会在上下文中将其自身定位到其最近定位的父级,而是视口,因此在窗口中固定。正如您自己指出的那样,多出 16px 的宽度来自于一个事实,即主体的默认边距为 8px。
如果您需要固定元素为 100% 宽度,并且您仍然想要空间,您可以考虑使用box-sizing: border-box
. 然后使用填充而不是边距来创建空间。这将允许固定元素跨越页面的宽度而不会越过。边距、边框和内边距总是添加到元素的尺寸中,除非您使用border-box
模型,在这种情况下,宽度将包括内边距和边框。