浮动
# 两个 bug
在了解 float 之前我们先来看看两个 bug
# margin塌陷
什么是margin塌陷
垂直方向的
margin父子元素是结合在一起的,取最大的一个值。就是父级元素包裹了一个子元素,你给父级元素加了一个margin-top值,给子元素也加了一个margin-top值,但是你会发现:当子元素的margin-top值小于父元素的margin-top值时,子元素的margin-top值不起作用;当子元素的margin-top值大于父元素的margin-top值时,只有子元素的margin-top值起作用,父元素随子元素一起移动如何解决margin塌陷
触发父元素为
bfc元素(block format context 块级上下文),使父元素不再遵循原来默认的布局格式如何触发bfc
以下四种方式均可触发
bfcposition: absolute;float: left;display: inline-block;overflow: hidden;overflow: hidden;对清除浮动也起到一定的作用,因为它们触发了bfc
# margin合并
什么是margin合并
两个兄弟级别的元素垂直方向上的
margin会合并,就是上边的元素你设置一个margin-bottom值,下边元素的也设定一个margin-top值时,浏览器只会让其中一个值起作用(谁大听谁的,一样大的话只让一个值起作用)弥补方法(不能用)
创建一个父级元素
div,包裹兄弟级别的一个元素。或者创建两个父级元素div,把两个兄弟级别的元素分别包裹起来,然后给父级元素触发bfc。但是在前端开发的过程中,由于HTML是框架,不能随便改变,否则会对css和JavaScript有影响,所以我们允许这个bug存在,选择不解决,但是我们可以通过计算来弥补(如增大一个元素的margin值)
# 探究float属性
# 来源
它的出现最初就是为了解决如何实现文字环绕图片问题的,但是随着前端开发人员的不断开发摸索于是就有了一些其它的功能
# 特点
- 浮动元素会产生浮动流,而产生了浮动流的元素,块级元素是看不到它们的
- 产生了
bfc的元素和文本类属性(inline或inline-block)的元素以及文本都能看到浮动元素 - 不同于完全的分层(position)
# 如何解决因浮动带来的高度坍塌问题
清除浮动
父元素::after{ content: ''; display: block; clear: both; }本质还是在浮动元素后面添加一个块级元素再给它一个
clear: both;属性clear属性只有块级元素能用,它是专门为了清除浮动而出现的,而伪元素默认为行级元素,所以你需要显示的将其设置为块级元素
触发父级元素为
bfc元素使其能够看到浮动元素所以我们经常会写
overflow: hidden;其实就是触发父级元素为bfc元素,让其能够看到浮动元素从而解决高度坍塌问题父元素{ overflow: hidden; /*position: absolute;*/ /*float: left;*/ /*display: inline-block;*/ }