从流式布局到flex布局,css中的各类布局模式为开发提供了诸多便利,这篇文章是对浮动布局相关内容的总结。css
在写前端页面时,经常会遇到多个div须要并排显示的状况,多是购物网站相邻的商品模块,亦或者是电影资讯网站的新闻信息,浮动(float)就是让块级元素并排显示的一种有效的解决方案。前端
可是有趣的是,浮动在创造之初,其设计本意并非实现块级元素并列。它是为了字围效果而诞生的,相似于咱们在基础电脑课学word时必学的文本环绕图片效果。浮动阴差阳错地成为了咱们极为经常使用地布局模式,可谓造化弄人(笑)。app
首先看一个最基本的浮动案列布局
.a{
width: 240px;
height: 240px;
background-image: url("../img/1.jpeg")
}
.b{
width: 240px;
height: 240px;
background-image: url("../img/2.jpeg")
}
复制代码
因为div为块级元素,因此它们垂直一列显示。学习
给a加入float:flex
float:left;
复制代码
看看效果:网站
??小b怎么消失了??ui
咱们把两个div的父元素看做是一个国家,两个div都是这个国家的公民,当为小a设置了浮动以后,就至关与小a出国旅行了,咱们称之为脱离标准文档流(但浮动并未彻底脱离标准文档流),由于小a已经再也不本国疆域以内,因而乎还在国内的小b会前移,顶上去,与小a的位置重叠,因此咱们就看不见小b了。url
为某一元素设置浮动后,它先向上移动,直到贴靠到父元素的边界,若是是左浮动,就再向左移动直到父元素的左边界;若是是向右浮动,就再向右移动直到父元素的右边界,后面的其余元素会排上来。spa
浮动虽然用起来很happy,可是会产生一个很严重的问题————父元素高度塌陷。
父元素高度塌陷会发生在没有设置高度且子元素所有浮动的父元素里。
仍是刚才的小a和小b,咱们给他们两个都设置一下浮动:
.a{
width: 240px;
height: 240px;
background-image: url("../img/1.jpeg")
float:left;
}
.b{
width: 240px;
height: 240px;
background-image: url("../img/2.jpeg");
float:left;
}
复制代码
效果以下:
父元素的高度没有了!!!
高度塌陷的成因很好理解,小a和小b都出国了,父元素中空无一人,因为没有设置高度,其高度默认自适应,因此变为0。高度塌陷会为开发带来诸多不便,有如下办法能够解决此问题:
最后一种方法能够用伪类实现,简单高效又优雅,即提早写好伪类
.clear:after{
content="";
display:block;
clear:both;
height:0;
overflow:hidden;
}
复制代码
须要时随时调用便可。
若是对一个行内元素设置浮动,该行内元素会自动变为块级元素。
引入新的小c
<span class="c">
</span>
复制代码
.c{
width: 480px;
height: 480px;
background-image: url("../img/03.jpeg");
float: left;
}
复制代码
成功变身块级元素!!
一个浮动的块级元素,若其未设置宽度,它的宽度会尽量小,小到正好完美包裹住内容。
前面提到过,浮动并未彻底脱离标准文档流,如同出国旅游但并未改变国籍的公民同样,浮动的元素依然受父元素控制。
父元素宽度改变会对浮动元素产生影响,当减小父元素宽度时,浮动的子元素会往一边“挤”,浮动的子元素宽度不变。
本文对浮动进行了简要的总结,也是本人学习过程的心得,但愿对读者有所帮助。