这里已经提出了很多要点,但是尽管有很多关于浏览器如何完成边距渲染的信息,但是为什么尚未完全回答:
“为什么margin-top:-8px与margin-bottom:8px不同?”
我们还可以问的是:
为什么正面的底边利润不会“颠簸”前面的元素,而正面的底边利润却“颠簸”后面的元素?
因此,我们看到的是,边距的呈现方式有所不同,具体取决于边距应用于边的方式 -顶部(和左侧)边距与底部(和右侧)边距不同。
当(简单地)查看浏览器如何应用样式时,情况将变得更加清晰:元素在视口中自上而下渲染,从左上角开始(暂时保持垂直渲染,请记住,水平的一视同仁)。
考虑以下html:
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
类似于它们在代码中的位置,这三个方框在浏览器中显示为“自上而下”(保持简单,在此我们将不考虑order
css3“ flex-box”模块的属性)。因此,每当将样式应用于框3时,就已经确定了先前元素的位置(对于框1和2),并且不应为了渲染速度而对其进行任何更改。
现在,假设框3的上边距为-10像素。浏览器不会向上移动所有前面的元素以收集一些空间,而是将框3向上推,因此将其呈现在上方(或下方),具体取决于z-index )任何前面的元素。即使性能不是问题,将所有元素上移也可能意味着将它们移出视口,因此必须更改当前滚动位置以使所有内容再次可见。
方框3的底边距也是如此(负数和正数):除了影响已经评估的元素外,仅确定即将出现的元素的新“起点”。因此,设置正的底部边距将使以下元素下降;负面的将推动他们。
onset
和来改进它offset
。的确如此,所以很多人在表示(肯定)时总是使用offset
(否定)这个词。如果您更新答案,此消息将自毁。干杯!onset