要解决浮动带来的各种问题,首先我们得了解浮动的特点和造成的问题,方能对症下药。

一、浮动的特点

在CSS2.1 规范中,对浮动的解释如下:

A float is a box that is shifted to the left or right on the current line.

A floated box is shifted to the left or right until its outer edge touches the containing block edge or the outer edge of another float. If there is a line box, the outer top of the floated box is aligned with the top of the current line box.

If there is not enough horizontal room for the float, it is shifted downward until either it fits or there are no more floats present.

浮动元素脱离文档流,在当前行的左边或是右边对齐,如果当前行没有足够的空间,它将下移一行,直到有足够的空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。

二、浮动造成的问题

(1)父元素的高度无法被撑开

关于这个一点,就不演示了。

(2)浮动元素前同级非浮动元素:

若为:行内元素

当行内元素被撑起的宽度加上浮动元素的宽度,大于父元素的宽度时,浮动元素,就会下移一个line-height,直到计算的值小于父元素的宽度时,非浮动元素会跟随其后,如下:

<div style=" height:500px;background-color:#0f0">       <span  style="background-color:#ff0; line-height:35px;" >浮动元素脱离文档流,向左或是向右浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离,浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离浮动元素脱离文档流,向左或是向右浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离,浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离</span><div  style="width:100px; height:500px;background-color:#f00; float:left; display:-inline-block" ></div>
</div>

若为:块内元素

浮动元素会在块内元素下一行进行浮动。

<div style=" height:500px;background-color:#0f0">       <div  style="line-height:35px;" >浮动元素脱离文档流,向左或是向右浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离,浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离浮动元素脱离文档流,向左或是向右浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离,浮动,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留,浮动元素脱离</div><div  style="width:100px; height:500px;background-color:#f00; float:left;" ></div>
</div>

(3)浮动元素后同级非浮动元素:

无论是行内元素,还是块内元素,都会会紧随浮动元素之后,也就是说同一水平的line boxes都被压缩了,这也是文字环绕图片的原因。但是从黄色边框的div的位置可以看出,其在定位上,并没有受到浮动元素的影响。具体效果如下:

<div style="background-color:#0f0; border:5px solid #000; padding:10px"> 黑色表框为最外层包裹元素<div  style="width:100px; height:500px;border:1px solid #F00; float:left; color:#F00" >红色边框的为左浮动元素</div>    <div  style="line-height:35px; width:800px;border:5px solid #FF0; min-height:200px; color:#FF0" >黄色表框的为这是块内元素</div><span  style="line-height:35px; border:5px solid #F0F; color:#F0F" >黄色表框的为这是行内元素</span>
</div>

(4)浮动元素对浮动元素的影响

同一个方向的浮动元素:当一个浮动元素在浮动过程中碰到同一个方向的浮动元素时,它会紧跟在它们后面,当空间不够时会被挤下。

反方向的浮动元素:互不影响,位于同一条水平线上,当空间不够时会被挤下。如下:

<div style="background-color:#00f;"><div style="border:1px solid #F00; width:200px; height:100px;float:left; margin-bottom:5px;">   浮动box 1</div>
</div><div style="border:1px solid #F00; width:200px; height:100px;float:left; margin-bottom:5px;">   浮动box 2
</div>

三、浮动的解决办法

目前关于浮动问题的解决办法主要由以下两种:

一是利用 clear 属性,包括在浮动元素末尾添加一个带有 clear: both 属性的空 div 来闭合元素,其实利用 :after 伪元素的方法也是在元素末尾添加一个内容为一个点并带有 clear: both 属性的元素实现的。如:

①在浮动的元素后面添加一个能构成block-level boxes元素,设置style="clear:both;";

②给浮动的父元素添加一个:after伪元素。

.clearFloat:after {content:""; /*设置该区域的内容*/ display:block; /*把该区域转为block-level boxes 因为clear对该类型的box有效,伪元素:before和:after添加的内容默认是inline元素*/ clear:both;  /*清除浮动*/visibility: hidden; /*不显示该区域,其实上面设置了content为空,这一行可以省略*/
}
/*bootstratp3.1.0 中 解决浮动问题的*/
.clearfix:before,.clearfix:after{display: table;content: " "
}
.clearfix:after{clear: both;
}

有的时候,为了兼容IE,还得添加一个.clearfix{*zoom:1}。为什么要使用到before呢?这个是防止margin折叠的,关于margin折叠,可以查看css手册8.3.1 Collapsing margins

二是:利用BFC (Block Formatting Contexts, 块级格式化上下文)特性::BFC就是页面上的一个隔离的独立容器,不会与其他Box发生折叠(即使元素浮动),容器里面的子元素不会影响到外面的元素,反之也如此。关于这一点,可以“理解CSS中的BFC块级格式化上下文”。如下:

div style="background-color:#00f; display:table"><div style=" width:200px; height:50px; float:left; border:1px solid #f00; ">  </div>
</div>
<div style="border:1px solid #0Ff ;width:200px;  height:50px; margin-top:15px; float:left;"></div>

浮动的父元素,通过设置display等于table(当然“理解CSS中的BFC块级格式化上下文”里,还有其他很多方式哦),拥有了BFC,就能解决浮动塌方问题,同时也解决了浮动元素对浮动元素的影响。由于创建BFC方式来解决浮动带来的问题,往往会改变父元素的某些特性,在实际开发中,采用的不是很多。

下一篇文章,将会聊聊以下问题:

①清除浮动为什么设置display为table而不是block

②总结margin折叠问题。

理解浮动以及解决浮动带来的问题相关推荐

  1. 进一步理解CSS浮动与清除浮动

    本文主要探讨两个问题: 为什么CSS设置浮动会引起父元素塌陷 为什么设置clear:both能清除浮动,并撑开父元素. 起因 CSS的浮动,算是我在写网页时用的最多的属性之一.但要说我对浮动的了解程度 ...

  2. 浅谈对BFC的认识,以及用bfc解决浮动问题

    我们在前端的学习过程中常常会遇到BFC,用BFC来解决一些margin塌陷.margin合并清理浮动流的问题 那么问题来了,我们所说的BFC到底是个什么东西呢: 什么是BFC BFC(Block Fo ...

  3. html css 中浮动影响与浮动问题的解决

    html css 中浮动影响与浮动问题的解决 浮动 浮动就是使元素脱离文档流且块级元素在同一行显示(文档流:元素在页面中所占的位置) 浮动特性:脱离文档流,原先位置不保留,飘在文档流的上方. 给元素设 ...

  4. html布局自然流加浮动,CSS浮动的使用和解决浮动的五种方法

    浮动 网页布局的核心,就是用CSS来摆放盒子位置.如何把盒子摆放到合适的位置? CSS的摆放盒子的方式有3种:普通流(标准流)盒子模型.浮动和定位. 浮动的框可以向左或向右移动,直到它的外边缘碰到包含 ...

  5. html清除两端浮动,HTML中如何实现浮动与清除浮动

    HTML中如何实现浮动与清除浮动 发布时间:2020-07-13 16:15:25 来源:亿速云 阅读:82 作者:Leah 这期内容当中小编将会给大家带来有关HTML中如何实现浮动与清除浮动,文章内 ...

  6. CSS的浮动以及清楚浮动的方法

    1.CSS中的浮动 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列. 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 浮动的元素会脱离 ...

  7. CSS浮动和清除浮动

    1 浮动简介 CSS浮动是指浮动元素会脱离"文档流"并向左或向右浮动,允许文本和内联元素环绕它,直到碰到父元素或者另一个浮动元素. 需要注意的是,在CSS定位中absolute绝对 ...

  8. 详细解读css中的浮动以及清除浮动的方法

    对于前端初学者来说,css浮动部分的知识是一块比较难以理解的部分,下面我将把我学习过程中的心得分享给大家. 导读:   1.css块级元素讲解 2.css中浮动是如何产生的 3.出现浮动后,如何清除浮 ...

  9. css浮动,清除浮动,溢出属性,定位,设置透明度

    浮动>>>float 在css中,任何元素都可以浮动. 浮动元素会生成一个块级框,而不论它本身是什么元素. 关于浮动的两个特点: 浮动的框可以像做或向右移动,直到它的外边缘碰到包含框 ...

最新文章

  1. Oracle Linux Server release 6.3 下安装JDK
  2. 用Java实现HTTP断点续传功能(ZT)
  3. oracle服务器错误,oracle 11g数据库维护中错误总结
  4. 三国志战略版鸿蒙梦魇,三国志战略版:双控在手天下我有,洞察震慑枪已成吴国梦魇!...
  5. Luogu-P4768 (Kruskal重构树+最短路)
  6. Azure 命令行工具大混战,都是什么,该选哪个?
  7. html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性
  8. 【Python】mmSegmentation语义分割框架教程(自定义数据集、训练设定、数据增强)
  9. lvs,haproxy实现负载均衡
  10. svn服务器会用到哪些端口_“模切压痕”会用到哪些材料?
  11. java字符串替换的问题
  12. 类HTML语法显示格式化文本
  13. php求1000以内的素数 10个一行,1000以内的素数_php求1000以内质数
  14. 粒子群算法及其改进算法
  15. 鸿蒙系统怎么关闭地理位置通知,让隐私无忧,查看和去除照片地理位置信息的App小集合...
  16. python模拟鼠标中轴滚动
  17. 黑客帝国主要人物解读
  18. 华为云-计算云服务介绍
  19. NVIDIA,怎么查看显卡
  20. oeasy教您玩转linux010203显示logo

热门文章

  1. 老司机 iOS 周报 #27 | 2018-07-16
  2. element-ui中tree连动
  3. 微信小程序NFC读写工具
  4. Office 2010 集成SP包简明教程
  5. 反计算机病毒技术论文,反计算机病毒技术的教学设计-计算机病毒论文-计算机论文(9页)-原创力文档...
  6. ISO/IEC国际标准组织收入的国产密码算法汇总
  7. 如何清除“远程桌面连接”的历史记录?
  8. lookat(SketchUp相望插件)v1.0官方版
  9. 线性代数基础和英文表述【02】:矩阵的表述和初等行变换【第4-9】Matrix Notation Row Operations REF,RREF
  10. 掌握未来趋势的产品经理成长之路