美文网首页工作生活css
2019-07-04 浮动和绝对定位相遇(出现兼容性问题)

2019-07-04 浮动和绝对定位相遇(出现兼容性问题)

作者: 李华峰0722 | 来源:发表于2019-07-04 22:29 被阅读0次

    浮动和绝对定位相遇 (参照《CSS世界》P190)

    看下面这个例子:

    <div class="nav">导航1</div>
    <img src="new.png" class="follow">
    <div class="nav">导航2</div>
    
    .nav {
      width: 100px;
      line-height: 40px;
      background-color: #333;
      color: #fff;
      text-align: center;
      float: left;
    }
    .follow {
      position: absolute;
    }
    
    

      结果

    1. 在 IE 和Chrome 浏览器下,夹在中间的<img>在中间显示(见图6-58 上),
    2. 但是Firefox浏览器却是在最后显示(见图6-58 下)。


      浮动和无依赖绝对定位表现不一致.png

      此处的浏览器不一致的行为表现应该属于“未定义行为”,没有谁对谁错,只是各自按照自己的渲染规则表现而已。
      那为何IE 和Chrome 浏览器却在中间显示呢?
      作者认为是这样的:浏览器对于DOM元素的样式渲染是从前往后、由外及内的,因此渲染顺序是先“导航1”,再“图片”,最后是“导航2”。当渲染到“图片”的时候,由于“导航1”左浮动,因此内联的图片跟在后面显示,此时由于设置了position:absolute,因此当前位置定位并不占据任何空间,再渲染“导航2”的时候,中间的“图片”基本上跟不存在没什么区别,因此也就和“导航1”紧密相连了,最终形成了“图片”在中间显示的样式表现。
      Firefox浏览器下的定位位置或许比较好理解,因为和没有设置position:absolute 表现一致,符合我们对上面规则的理解。
      对于上述场景,如果希望各个浏览器的表现都是一样的,<img>外层嵌套一层标签并浮动即可,注意,是外层标签浮动。由于浮动和绝对定位水火不容,本身设置浮动是没有任何效果的。
    如下所示。

    <div class="nav">导航1</div>
    <div style="float:left">
       <img src="new.png" class="follow">
    </div> 
    <div class="nav">导航2</div>
    

    相关文章

      网友评论

        本文标题:2019-07-04 浮动和绝对定位相遇(出现兼容性问题)

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