美文网首页
css乱象:fixed元素被margin牵着鼻子走?

css乱象:fixed元素被margin牵着鼻子走?

作者: BiiHug | 来源:发表于2018-08-25 22:19 被阅读0次

本以为position:fixed元素脱离了文档流完全不会被底部文档流影响,但在做网页练手的时候发现完全不是这样。举个例子,网页底部有一个#test1 的空元素,设置它的margin-top: 30px。在网页顶部设置一个默认position:fixed元素。具体代码如下:

<style type='text/css'>
  #test2 {
    margin-top: 30px;
  }
  #test1 {
    position: fixed;
    width: 500px;
    height: 300px;
    background-color: blue;
  }
  </style>
  </head>
  <body>
    <div id="test2">
    </div>
    <div id="test1">
    </div>
  </body>

最后效果显示为:


1_1.png

显然,位于网页顶部的#test2受到了#test1margin-top的影响。
可以很明显地发现问题的最大原因是在于没有对position:fixed元素的offset properties(偏移特性):top, bottom, left and right进行设置。
但为什么最后显示效果会是这样呢?在SO上找到了详细的解答

  • test1的父元素是body,而body通常会有一个默认的margin:8px的设定。由于CSS的垂直margin塌陷原则( margin collapsing)(这里是top margin of a box and top margin of its first in-flow child),body#test1margin-top'塌陷'为统一的margin-top:90px
  • 同时,虽然通过设置#test2position:fixed,我们已经将#test2从文档流中脱离了出来,并且它的 containing block 已经不再是body,而是viewport
  • 但由于我们并没有设置#test2offset properties(偏移特性),所以#test2自动使用了CSS offset properties的默认值autoauto会将元素放置在其在正常文档流中本应有的位置

所以我们会得到如上图所示的效果。

相关文章

  • css乱象:fixed元素被margin牵着鼻子走?

    本以为position:fixed元素脱离了文档流完全不会被底部文档流影响,但在做网页练手的时候发现完全不是这样。...

  • CSS踩坑

    CSS 踩坑 父级元素transform属性会使子元素的fixed定位失效。 具体参考

  • CSS - margin 属性对元素宽度的影响

    一个没有宽度的元素,若其 CSS 样式中有 margin 属性,则其宽度 = 父级元素的宽度 - margin值大...

  • css设置元素水平垂直都居中显示

    css设置元素水平垂直都居中显示 知道元素大小的情况 css3中不确定元素大小的情况 margin:auto实现绝...

  • CSS:CSS的优化

    提升css渲染性能 谨慎使用expensive属性比如nth-child伪元素,position: fixed, ...

  • css常见问题

    1. CSS 中 inline 元素可以设置 padding 和 margin 吗? 行内元素设置width,he...

  • 盒模型

    1.盒模型包括哪些属性 盒模型是css中元素大小的呈现方式,每一个元素都有盒模型。 margin属性,margin...

  • 内联元素

    众所周知,css中可以将元素分成块级元素和行内元素。 对于块级元素可以通过margin、padding、borde...

  • 负margin技术原理与运用 | CSS

    在CSS中,margin的值可以是正数,也可以是负数。当margin为负数的时候,对普通文档流元素和对浮动元素的影...

  • 扒一扒 margin:auto

    margin 是什么? CSS 的box model中一个重要属性就是margin,是元素距离容器的距离,看图复习...

网友评论

      本文标题:css乱象:fixed元素被margin牵着鼻子走?

      本文链接:https://www.haomeiwen.com/subject/gaxwiftx.html