我的理解是一旦一个元素被绝对定位(即使位置值为负),它就会完全脱离正常的内容流。但是为什么还是让页面溢出呢?当你运行下面的代码片段时,水平滚动条出现了,我认为它不应该在那里。
.relative {
position: relative;
background: pink;
}
.absolute {
position: absolute;
top: 0;
right: -100px;
width: 200px;
height: 100px;
background: rgba(0,0,0,.5);
}
<div class="relative">
Placeholder <div class="absolute"></div>
</div>
原文由 Stickers 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想我知道这个问题从何而来。当人们希望一个元素在屏幕外没有水平滚动条时,你一定会对在屏幕左侧使用(负)绝对定位的人感到困惑。这是滑块、菜单和模式的常用技术。
问题是负左对齐不会显示正文溢出,而负右对齐会。不太合逻辑……我知道。
为了说明这一点,我在左侧创建了一支带有绝对元素的笔:
left: -100px;
http://codepen.io/anon/pen/vGRxdJ 和一支在右侧带有绝对元素的笔:right: -100px;
http://codepen.io/anon/pen/jqzBZd 。我希望这能消除你的困惑。
至于为什么会这样:我一直理解屏幕的左上角是 x:0, y:0:坐标系的原点,仅由正值组成(在 RTL 情况下水平镜像)。此坐标系中的负值是“画布外”的,因此不需要滚动条,而“画布上”元素则需要。换句话说:画布上的元素将放大您的页面并使您的视图自动滚动(除非另有指示),而画布外的元素则不会。