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

浮动和绝对定位相遇 (参照《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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,178评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,847评论 1 45
  • CSS 是什么 css(Cascading Style Sheets),层叠样式表,选择器{属性:值;属性:值}h...
    崔敏嫣阅读 1,578评论 0 5
  • 能使用数据,但不会使用太大空间 能够使用for循环,能够取里面的数据,但是不是生成序列的结果,而是方式,空间小。 ...
    爱抽烟的臭屁虫阅读 646评论 0 0
  • 山有木兮木有枝,心悦君兮君不知。 我们都向往两厢情愿的爱情,可在现实中我们大多数人却义无反顾的成了一厢情愿的可怜虫...
    幽谷兰芯阅读 364评论 0 0

友情链接更多精彩内容