float属性指定一个元素应沿其容器的左侧或右侧放置,容许文本和内联元素环绕它。css
注:当一个元素浮动以后,从普通文档流中脱离,而后向左或者向右平移,一直平移直到碰到了所处的容器的边框,或者碰到另一个浮动的元素。html
浮动元素的浮动位置不能超过包含块的内边界前端
介绍其实很简单,怎样用好它就须要实践了。segmentfault
show me code !!!布局
下面经过一步步的实验,来学习并了解floatpost
样式就不贴了学习
<div>
<div class="box box1">1</div>
<div class="box box2 ">2</div>
<div class="box box3 ">3</div>
</div>
复制代码
效果:正常的文档流 spa
.float-right {
float: right;
}
复制代码
<div>
<div class="box box1">1</div>
<div class="box box2 float-right">2</div>
<div class="box box3 ">3</div>
</div>
复制代码
效果:为box2添加 float: right;
后,能够看到box2跑到右边去了,box3紧跟在box1下面。 翻译
疑问:box2和box3为何不在一条水平线上?(为什浮动后有间隙?) 缘由:边界重叠;块级元素的上外边距和下外边距有时会合并(或折叠)为一个外边距,其大小取其中的最大者,这种行为称为外边距折叠(margin collapsing),有时也翻译为外边距合并。浮动元素和绝对定位元素的外边距不会折叠。详情3d
<div>
<div class="box box1">1</div>
<div class="box box2 float-right">2</div>
<div class="box box3 float-right">3</div>
</div>
复制代码
效果:先是box2向右浮动,而后box3紧跟着box2向右浮动。
<div>
<div class="box box1">1</div>
<div class="box box2 float-right">2</div>
<div class="box box3 float-right">3</div>
<div class="box box2 float-right">2</div>
<div class="box box3 float-right">3</div>
</div>
复制代码
效果:当下个浮动元素发现空间不够时会换行
<div>
<div class="box box1">1</div>
<div class="box box2 float-right">2</div>
<div class="box box3 float-left">3</div>
</div>
复制代码
效果1:空间足够时,分别位于屏幕两侧
浮动的元素不会“干”在一块儿,『手动滑稽』
咱们知道,一个块级元素若是没有设置height
,其height
是由子元素撑开的。对子元素使用了浮动以后,子元素会脱离标准文档流,也就是说,父级元素中没有内容能够撑开其高度,这样父级元素的height就会被忽略,这就是所谓的高度塌陷。要解决这样的问题,咱们就是要使用清除浮动——clear
。
clear属性 指定一个元素是否能够在它以前的浮动元素旁边,或者必须向下移动(清除浮动) 到这些浮动元素的下面。
例:上面提到仅box2浮动时,box3会紧跟在box1下方,可能被box2盖住。以下图:
解决办法: 为box3添加clear
属性
.float-clear-right {
clear: right;
}
复制代码
<div>
<div class="box box1">1</div>
<div class="box box2 float-right">2</div>
<div class="box box3 float-clear-right">3</div>
</div>
复制代码
效果:box3添加清除右浮动后,不受右浮动的影响,回到原来的位置了
经过float
实现一个文字环绕效果,很简单
例:
.float-left {
float: left;
}
复制代码
<div>
<img class="float-left" src="../image/image1.png" style="height: 100px; width: 100px;">
<p >
Java是世界上最好的语言。Java是世界上最好的语言。
Java是世界上最好的语言。Java是世界上最好的语言。
Java是世界上最好的语言。Java是世界上最好的语言。
Java是世界上最好的语言。Java是世界上最好的语言。</p>
</div>
复制代码
效果:
很简单,看效果挺好的。 然而,看似简单的背后,每每“暗藏杀机”
为了方便看效果,为元素添加背景色
<p>
中的文字内容不少的时候,很健康。若是文字内容少点?
你觉得的结果是这样:
这就搞笑了,浮动的元素<img>
超出了父元素<div>
,飘在上面了。 若是在后面加一个div
会怎么样?
<div class="box">box</div>
复制代码
效果: 后续的布局顶上来了,且box中的文本还被挤过来了。
跟上面同样,也是高度塌陷问题 因此,清除浮动后,就能解决这个问题
解决办法1:清除浮动 效果 :
这个问题是解决了,刚缓口气,又发现了另外一个问题:margin-top
不生效。(准确来讲是小于必定数值不生效)
例 :为box添加margin-top
{ margin-top: 20px }
复制代码
效果 :没有任何效果,margin-top:20px
没有生效
这种状况下margin-top
失效的缘由
解决办法2:BFC BFC 全称block formatting context,中文为"块级格式化上下文"。BFC元素是不可能发生margin重叠的,另外,BFC元素也能够用来清除浮动的影响。 因此:BFC不只能够处理浮动的影响,还能处理margin重叠的问题
BFC的触发条件有不少,其中之一:overflow的值为auto、scroll或者hidden
应用:为外层<div>
添加overflow:hidden
<div style="overflow: hidden">
<img ...>
<p ...></p>
</div>
复制代码
效果:外层div
的高度也有了,box的margin-top
也生效了
只要知足下面任意一个条件就会触发BFC: ● html根元素; ● float的值不为none; ● overflow的值为auto、scroll或者hidden; ● display的值为table-cell、table-caption和inline-block中的任何一个; ● position的值不为relative和static;
【前端Talkking】CSS系列——CSS深刻理解之float浮动
developer.mozilla.org/zh-CN/docs/…
相关阅读
有错误之处,感谢指出,接收批评