清除浮动,浮动元素的高度自适应问题

一、问题

当有时不浮动的父元素装载着浮动的子元素时,这个时候父元素的高度不会跟着的子元素的内容高度而自适应高度变大。比如截图的第一行图,上面一条黑色的粗线,就是父div的边框(为了看效果,我设置了父div的border:5px。左右两边是各浮动一个div)。

于是乎,我想解决这个父元素高度不会跟随着子元素的内容而变化的问题。谷歌了一下,找到答案

二、解决方法

参考来源:http://www.ruanyifeng.com/blog/2009/04/float_clearing.html

里面提到了四种方法,分别对应下面这张图的第2、3、4、5行的图。并且这是在IE6、7浏览器下的截图,说明能很好的兼容在IE低版本浏览器。

法一:添加空元素

直接在浮动的子元素下添加一个非浮动的空元素。原因是父元素肯定会考虑非浮动元素的位置,非浮动的空元素又是放在浮动元素的下面,所以父元素的高度就被撑开了。

1、 不好的地方就是添加了冗余代码,违背语义化的标准,特别是现在提倡语义化,article、footer、header都使用具有语义化的标签来写。

2、但是,这是一种我喜欢的方法,直接添加非浮动的子元素,简单。另外一种我比较喜欢的方法就是使用clear:both,好吧,原谅我这么土,喜欢用这个方法,因为我觉得够easy,又能做到兼容。

<!-- 法1 下方添加空元素 -->
<p>添加空元素</p>
<div style="border:5px solid #000;">
    <div style="float:left;width:45%;height:100px;background:#ccc"></div>
    <div style="float:right;width:45%;height:100px;background:#000"></div>
    <div style="clear:both"></div></div>

法二:父元素设置为浮动

父元素带着子元素一起浮动,duang~

<!-- 法2 父元素也设置为浮动元素 -->
<p>父元素设置为浮动</p>
<div style="border:5px solid #000;float:left;width:100%;">
    <div style="float:left;width:45%;height:100px;background:#ccc"></div>
    <div style="float:right;width:45%;height:100px;background:#000"></div>
</div>

法三:浮动元素的自动清除

设置父元素的一个css样式。overflow:hidden

<!-- 法3 浮动元素的自动clearing  -->
<p>浮动元素的自动clearing</p>
<div style="border:5px solid #000;width:100%;overflow:hidden">
    <div style="float:left;width:45%;height:100px;background:#ccc"></div>
    <div style="float:right;width:45%;height:100px;background:#000"></div>
</div>

法四:通过css添加子元素

<!-- 法4 通过css添加子元素 -->
<p>通过css添加子元素</p>
<div style="border:5px solid #000;width:100%;" class="clearfix">
    <div style="float:left;width:45%;height:100px;background:#ccc"></div>
    <div style="float:right;width:45%;height:100px;background:#000"></div>
</div>
/* css样式 */
.clearfix:after {
        content: "\0020";
        display: block;
        height: 0;
        clear: both;
    }
.clearfix {
      zoom: 1;                // 触发IE的hasLayout属性,该属性IE独有
    }

如果为了满足语义化、不添加冗余代码,就使用方法四。

关于浮动元素的clearing问题,就解决了

时间: 2024-08-28 21:36:14

清除浮动,浮动元素的高度自适应问题的相关文章

子元素浮动后、父元素的高度自适应

一.普通情况下,即没有任何浮动样式等的情况下 设置父元素的高度为aotu 或100% 或者不设置,那么父元素会根据子元素的高度而自动调整自身高度. 栗子 <!--html代码--> <div id="wrap"> <img src="./1.png" alt="logo"/> <div id="content"></div> </div> CSS样式 #w

【前端】浮动后父容器高度自适应

float:left; overflow:hidden; 当一个容器内元素都浮动后,它将高度将不会随着内部元素高度的添加而添加,所以造成内容元素的显示超出了容器. 在我们没有为容器设置高度的时候,容器的高度是自适应的.然而,当容器中的元素都浮动以后,脱离了文档流.容器的高度因为自适应的原因就为0了. 为了方便大家观察,我为父容器设置了边框.内间距.原本上面四张图片是在上面的容器中的.将图片设置左浮动以后,容器的高度就为0了. Q1:这会为我们带来什么影响? A1:浏览器在解析下一个容器的时候,默

浮动后父容器高度自适应

当一个容器内元素都浮动后,它将高度将不会随着内部元素高度的增加而增加,所以造成内容元素的显示超出了容器.为了便于查看效果,把刚才实例中的#layout增加一个边框和内边距: #layout { width:400px; border:2px solid #ccc; padding:2px;} 文章出处:标准之路(http://www.aa25.cn) 看到没,它没有被内容元素给撑高,要解决这个问题,需要使用以下样式 overflow:auto; zoom:1; overflow:auto;是让高

元素的高度自适应

网页布局中有时候有的高度需要根据内容调整,所以不能固定,今天就来说说,最小高度自适应 属性:min-height 最小高度,但IE6不识别该属性,height在IE6中类似min-height属性: 以下是解决BUG问题方法: hack1:min-height:value; _height:value;(IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",而firefox两个都不能认识

float浮动和清除float浮动

1.Float的介绍 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄(塌陷的产生). 注:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止. 浮动模型的基本知识:浮动模型也是一种可视化格式模型,浮动的框可以左右移动(根据float属性值而定)

div高度自适应

第一种: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><meta http-equiv="Content-Type"

overflow解决float浮动后高度自适应问题

也许你在做网页的时候发现,发一个区块内的元素被应用了float之后,那么整个box的高度对就不以被浮动对象的高度为标准了.如图中的城市导航内的城市列表中采用了float之后,那个外框的高度并不是内容元素的高度: 怎么解决这个问题呢?经发现可以采用overflow来解决!方法是在父元素加上如下代码即可 overflow:auto; zoom:1; overflow:auto;是让高度自适应, zoom:1;是为了兼容IE6,也可以用height:1%;的方式来解决. 1 1 <!DOCTYPE h

&lt;转载&gt;如何解决子级用float浮动父级div高度不能自适应的问题

转载:http://www.kwstu.com/ArticleView/divcss_2013101582430202 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 如何解决父div对象自适应高度,方法有三种,接下来DIVCSS5逐一介绍. 1.首先我们先看HTML

子元素浮动 父元素不能自动调节高度的问题

我们知道,子元素浮动或者相对定位,元素都会脱离文档流.而父元素如果没有设置固定高度,在计算高度时,就不会计算浮动子元素所占的高度.但是,有时候我们需要父元素计算其所有子元素的的高度(包括浮动元素)来调整自己的宽高,以便调节自身的背景 border等,此时,只需要给父元素添加css属性: overflow:auto; zoom : 1; 父元素就会自动计算包括浮动子元素内所有子元素的高度来调整自己的高度.