我看到左上角的负边距取元素并向这个方向推。另一方面,负的下边距和右边距在元素上绘制其余内容。
问题
我有一个浮动元素float:right;封装在body标记中。负左边距将向左移动。
负右边距根本不会做任何事情,因为文档在负边距开始的地方结束,并且没有任何东西可以覆盖元素(或覆盖它)?
我说的对吗?

最佳答案

许多人相信关于负利润率的同样误解。你所描述的行为倾向于匹配许多负利润的情况,但它是从一个有缺陷的角度来解释它们的。实际上,负边距在框的任何一侧都有相同的效果,但不是“移动框”或“绘制其他内容”。
例如,aleft-margin: -20px表示“将元素定位为其左边缘与真正的左边缘向内20像素”。Aright-margin: -20px的意思完全相同,但对于右边缘。
在您提供的简单描述中,负左边距确实会使元素本身向左移动,因为它的左边缘与前一个元素的右边缘相邻,但是浏览器假装元素的左边缘实际上是向右移动的,因此元素本身的内容看起来是向左移动的。
如果右边距为负,浏览器会将下一个元素的左边缘与元素的右边缘相邻,但它会假装元素的右边缘向左移动,因此下一个元素本身似乎向左移动。
在这两种情况下,唯一改变的是浏览器对元素边缘位置的概念。
当您有一个右浮动的元素时,浏览器将对其进行定位,使其右边缘与前一个右浮动的元素的左边缘相邻,或者如果没有前一个右浮动的元素,则它将与其位置父元素的右边缘相邻(这是具有非position样式的最近父元素)。在您的示例中,您没有以前的右浮动元素,因此浏览器会定位您的元素,使其右边缘与父元素的右边缘相邻,但它会假装您的元素的右边缘向左移动,因此您的实际内容会向右移动,突出在父元素之外。
Here is a demonstration。带蓝色边框的框有负的左右边距。它里面的黄色框表示浏览器是如何看待它的——它比蓝色边框的框窄,因为负边距告诉浏览器向内移动它的边缘,侵蚀了元素的实际大小。如您所见,其定位框的放置方式与任何元素的放置方式完全相同,在两侧都与其左右同级元素接触。实际内容在两个方向上的扩展量完全相同,因为它的负边距是相同的。感觉到的变化是,元素本身由于其左边距而向左移动,下面的内容由于其右边距而向左移动,但是正如您所看到的,实际上,在两边的效果完全相同。

07-28 05:58