html – 保证金规则如何应用于不在DOM流中的元素?

前端之家收集整理的这篇文章主要介绍了html – 保证金规则如何应用于不在DOM流中的元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我问了这个问题: google chrome issue with fixed position and margin-top最终让我意识到top和margin-top不是一回事.我不知道这些年来我是多么想念.

无论如何,让我想到margin-top和top之间的区别是什么,这就是我发现这个问题的方法CSS: Top vs Margin-top.

我已经知道margin-top做了什么.但我从来没有推断出这个想法“嗯,这个元素不在DOM流程中,所以究竟是什么才能让它远离?”

从我问的问题中我知道,当应用于具有固定位置的元素时,margin-top会以非常意外的方式运行.至少在Chrome中这可能导致一些疯狂的规则(如margin-top:-273%;).

所以我的问题是:浏览器如何将边距规则应用于不在DOM流中的元素(即位置值为固定或绝对的元素.那么它们的应用和渲染方式如何导致规则,如上所述,实际上在视口内渲染元素?

解决方法

top属性只是确定从包含元素的顶部开始渲染框模型的距离.在position:fixed的情况下,那就是窗口本身.在position:absolute的情况下,它是具有非静态位置的下一个父元素.

另一方面,保证金是盒子模型本身的一部分.在框顶部添加边距会增加框上方的空白区域.

考虑以下位置图层:固定框:

top:10px
            margin-top:10px
------------border-top:1px------------
           padding-top:10px
  content

所有边距,边框和填充都是框模型的一部分.整个元素或“片段”在定位时只是一个大方块.因此,如果盒子顶部有10px的边距,并且从顶部开始放置元素10px,它将在窗口顶部和可见框开始之间具有20px的边距.

我也做了一个very simple example in jsFiddle.

如果你喜欢图形,那么举个例子,红色框有一个位置:fixed:

正如您在第一部分中看到的那样,只有固定在元素上的设置位置实际上并未将其移动到任何位置.它只是将其从文档流中删除.

在section部分中,添加margin-top:10px使元素向下移动10px,因为该框现在顶部有10px的边距.然而,它实际上并没有移动到任何地方.盒子刚刚变高,因为盒子模型已经改变了.

在第三部分中,使用top:10px实际上将框移动到窗口容器顶部10px.它具有与第一部分完全相同的盒子模型.

第四节就像它上面的第二部分,除了负边距使它向上移动十个像素.盒子模型仍然更高,盒子仍然没有移动.

在元素上设置绝对位置时,如果未设置任何其他位置属性,则元素根本不会移动.因此,如果没有顶部,右侧,底部或左侧属性集,则元素将保持在它作为流的一部分呈现时所处的位置,它现在刚刚从流中移除.因此,添加正面或负面的边距会使其看起来从该位置向上或向下移动.实际上,你只是在改变元素的盒子模型.

您还必须意识到,在顶部和底部边距(甚至填充)上使用百分比与高度无关.它实际上使用宽度来计算出有多少边距.说边缘顶部:10%将使该值为可用宽度的10%,而不是可用高度,并且使其为负值将仅取消该值.我之所以提到这一点,是因为它与您在使用margin-top百分比时所链接的第一个问题相关.

我希望这涵盖了你所寻找的东西.我无法分辨你究竟是什么感到困惑,所以我尽可能地解释了.

原文链接:https://www.f2er.com/html/226856.html

猜你在找的HTML相关文章