浮动原理及清除浮动

浮动原理:浮动的框可以左右移动,直到它的外边缘遇到包含框或者另一个浮动框的边缘。浮动框不属于文档中普通流(文档流),即脱离了文档流,当一个元素浮动以后,不会影响到块级框布局只会影响内联框(通常是文本)的排列,文档中的普通流就会表现的和浮动框不存在一样,当浮动框的高度超出包含框时,就会出现包含框不会自动伸高来闭合浮动元素(”高度坍塌”现象)。就是漂浮在普通流上,就像浮云一样,但是只能左右浮动。正是因为浮动的这种特性,导致本属于普通流中的元素浮动以后,包含框内部由于不存在其他其他普通元素了,就表现为高度为0(高度塌陷)。在实际中,这并不是我们想看到的,所以我们需要闭合浮动元素,使其包含框表现出正常高度。

方法1:在父级元素上定义高度
比如:

<style>
   .div1{background: #000080;border:1px solid red;height: 200px}
   .div2{background: #800080;border:1px solid red;height: 100px;margin-top: 10px}
   .left{float:left;width: 20%;height: 200px;background: #DDD}
   .right{float:right;width: 30%;height: 80px;background: #DDD}
</style>
<body>
<div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
</div>
<div class="div2">
    div2
</div>

父级div手动定义height,就解决了父级div无法获取到高度的问题
优点:代码少,简单,容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级的div不一样时,会产生问题

方法2:在结尾处加空div标签 clear:both

<style>
   .div1{background: #000080;border:1px solid red;}
    .div2{background: #800080;border:1px solid red;height: 100px;margin-top: 10px}
    .left{float:left;width: 20%;height: 200px;background: #DDD}
    .right{float:right;width: 30%;height: 80px;background: #DDD}
    .clearfloat{clear: both}
</style>
<body>
<div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="clearfloat"></div>
</div>
<div class="div2">
    div2
</div>

原理:添加一个空的div,利用CSS提高clear:both;清除浮动,让父级div能自动获取到高度
优点:代码少,简单,浏览器支持好,不容易出现怪问题
缺点:如果页面浮动布局多,就要增加很多空div

方法3:父级div定义 伪类:after和zoom

<style>
   .div1{background: #000080;border:1px solid red;}
   .div2{background: #800080;border:1px solid red;height: 100px;margin-top: 10px}
   .left{float:left;width: 20%;height: 200px;background: #DDD}
   .right{float:right;width: 30%;height: 80px;background: #DDD}
   .clearfloat:after{display: block;clear:both;content: "";height: 0}
   .clearfloat{zoom:1}
</style>
<body>
<div class="div1 clearfloat">
    <div class="left">Left</div>
    <div class="right clearfloat">Right</div>
</div>
<div class="div2">
    div2
</div>

原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE专有属性)可解决ie6,ie7浮动问题
优点:浏览器支持好,不容易出现怪问题
缺点:代码多,很多初学者不太懂原理,要两句代码结合才能使主流浏览器都支持

方法4:父级div定义overflow:hidden

<style>
   .div1{background: #000080;border:1px solid red;overflow: hidden;width: 98%}
   .div2{background: #800080;border:1px solid red;height: 100px;margin-top: 10px}
   .left{float:left;width: 20%;height: 200px;background: #DDD}
   .right{float:right;width: 30%;height: 80px;background: #DDD}

</style>
<body>
<div class="div1 clearfloat">
    <div class="left">Left</div>
    <div class="right clearfloat">Right</div>
</div>
<div class="div2">
    div2
</div>

原理:必须要定义width或zoom:1;同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度。
优点:简单,代码少,浏览器支持好
缺点:不能和position结合使用,因为超出的部分会被隐藏

方法5:父级div定义overflow:auto

<style>
   .div1{background: #000080;border:1px solid red;overflow: auto;width:98%}
   .div2{background: #800080;border:1px solid red;height: 100px;margin-top: 10px}
   .left{float:left;width: 20%;height: 200px;background: #DDD}
   .right{float:right;width: 30%;height: 80px;background: #DDD}

</style>
<body>
<div class="div1 clearfloat">
    <div class="left">Left</div>
    <div class="right clearfloat">Right</div>
</div>
<div class="div2">
    div2
</div>

原理:必须定义width或zoom为1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
优点:代码少,简单,浏览器支持好
缺点:内部宽度超过父级div时,会出现滚动条

方法6:父级元素div也一起浮动

<style>
   .div1{background: #000080;border:1px solid red;width:98%;margin-bottom: 10px;float:left}
   .div2{background: #800080;border:1px solid red;height: 100px;margin-top: 10px;clear:both}
   .left{float:left;width: 20%;height: 200px;background: #DDD}
   .right{float:right;width: 30%;height: 80px;background: #DDD}

</style>
<body>
<div class="div1 clearfloat">
    <div class="left">Left</div>
    <div class="right clearfloat">Right</div>
</div>
<div class="div2">
    div2
</div>

原理:浮动父级容器
缺点:下一个元素会收到这个浮动元素的影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值