关于层DIV自适应高度的问题总汇

我们先来看一个最普通的父层自适应子层高度的例子(通常来讲,布局时父层都是不设置高度的)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.f{ width:200px; border:1px solid #000; padding: 25px; margin: 50px auto;}
.z{ width:200px; height:200px; background:#000}
</style>
</head>
<body>
<div class="f">
    <div class="z"></div>
</div>
</body>
</html>

运行结果是这样的如下图所示

可以看到,父层没有定义高度,其高度是根据子层DIV的高度适应,子层多高,父层就会相应的变化高度.

但是有些情况,我们的子层元素根据需要必须得给它一个浮动(float)的属性,来看代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.f{ width:200px; border:1px solid #000; padding: 25px; margin: 50px auto;}
.z{ width:200px; height:200px; background:#000; float: left}
</style>
</head>
<body>
<div class="f">
    <div class="z"></div>
</div>
</body>
</html>

现在,子层div增添了float:left这个属性,我们再来看看效果

.

可以看到,父层DIV的高度不随子层变化了,这样显然就不是我们需要的效果,当然,也可以在父层增加一个高度的属性来直接定义,但是这种方法是有很大弊端的,这里就不累述了,相信大家在平常的设计中也深受其害.

现在我们用立体思维想象一下,之所以会造成这种情况,是因为子层漂浮起来,而父层还在下面,实际上两个DIV已经不在一个平面上了,所以子层就无法撑开父层的高度了,因此,我们可以理解为,两个不再一个平面上的层,父层自适应属性是无效的.

那么我们先来试试将父层也浮动起来

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.f{ width:200px; border:1px solid #000; padding: 25px; margin: 50px auto; float: left}
.z{ width:200px; height:200px; background:#000; float: left}
</style>
</head>
<body>
<div class="f">
    <div class="z"></div>
</div>
</body>
</html>

如下图所示,高度问题解决了,但是布局问题又来了,层的居中没了

当然,我们可以用各种定位的方法来解决浮动层的居中问题,方法可行,但是略显麻烦,有一个简单快捷的方法很容易被新手忽略,就是clear属性,我们来看下边一段代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.f{ width:200px; border:1px solid #000; padding: 25px; margin: 50px auto;}
.z{ width:200px; height:200px; background:#000; float: left}
.cl{ clear: both}
</style>
</head>
<body>
<div class="f">
    <div class="z"></div>
    <div class="cl"></div>
</div>
</body>
</html>

在最后增加了一个DIV,属性仅有一个,就是清除浮动,效果如下:

这样,既不影响布局,又能达到效果,也不用繁琐的绝对或者相对定位了.

所以我们可以得出这样的结论:若要让父层的自适应高度起作用,就要让父层与其内的所有子层处在一个平面上,也就是要么都是浮动层,要么都不是浮动层



时间: 2024-08-03 03:00:23

关于层DIV自适应高度的问题总汇的相关文章

DIV相关的操作总结: DIV居中,DIV自适应高度

http://www.cnblogs.com/scy251147/p/3391228.html 父DIV自动匹配子DIV高度的方法 DIV居中或者居底的方法 DIV最小高度及自适应方法: 需要给DIV块一个最小高度,但是当DIV内部内容超过最小高度的时候,需要DIV能够随着高度的增加而增加.这个时候,我们就可以利用_height和min-height属性来解决.

DIV自适应高度

方法一: <style>html{ height:100%; margin:0}body{ height:100%; margin:0} #header{ height:80px; background:#fff}#main{ height:100%; background:#333}#nav{ height:50px; background:#000000; color:#FFFFFF; text-align:center; line-height:50px}</style> &

解决子级用css float浮动 而父级div没高度不能自适应高度

解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 如何解决父div对象自适应高度,方法有三种,接下来DIVCSS5逐一介绍. 1.首先我们先看HTML源代码: <!DOCTYPE html> <html> <head> <meta cha

关于HTML前端设置自适应高度的DIV问题

如果要设置DIV自适应高度,我们可以采用height:auto;这个属性:不过这个属性IE6又不支持了.是不是很头痛?其实解决这个问题不难,而且方法也不少,这里推荐一种:(假设我们需要控制的这个DIV最小高度是100px,超过时就让里面的信息自动撑开): .div{ height:auto!important; height:100px; min-height:100px; } 注释:因为!important在IE7和Firefox都可以读到,而且权重高于后面的height:100px:所以当在

div有最小高度且自适应高度

DIV最小高度且自适应高度 在IE6中,如果子容器的高度超过父容器的时候,父容器会被子容器撑开,所以我们可以直接设置一个height的高度值即可.但是在IE7和firefox就不行了,它不会自动撑开. 如果要设置DIV自适应高度,我们可以采用height:auto;这个属性:不过这个属性IE6又不支持了.是不是很头痛?其实解决这个问题不难,而且方法也不少,这里推荐一种:(假设我们需要控制的这个DIV最小高度是100px,超过时就让里面的信息自动撑开): 1 2 3 4 5 .div{     h

DIV默认高度且自适应高度

转: 本文和大家重点讨论一下如何控制DIV最小高度又DIV自适高度问题,如果我们需要设置一个div高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是DIV自适应高度.当里面的信息很少时候,我们就设置它一个最小的固定高度. 如何控制DIV最小高度又DIV自适高度 我们在用div布局的时候经常会遇到这样的一种情况:我们需要设置一个DIV高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是DIV自适应高度.当里面的信息很少时候,我们就设置它一个最小的固定高度. 我们知道,在IE6

完美实现控制DIV最小高度和DIV自适高度

本文和大家重点讨论一下如何控制DIV最小高度又DIV自适高度问题,如果我们需要设置一个div高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是DIV自适应高度.当里面的信息很少时候,我们就设置它一个最小的固定高度. 如何控制DIV最小高度又DIV自适高度 我们在用div布局的时候经常会遇到这样的一种情况:我们需要设置一个DIV高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是DIV自适应高度.当里面的信息很少时候,我们就设置它一个最小的固定高度. 我们知道,在IE6中,如

div实现自适应高度的textarea,实现angular双向绑定

相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就错了. textarea不是不可以的,然后我是这样错的.(就是监听scroll 如果出现了,就增加1rows 的高度)然而这样真的很挫 textarea.bind('change','keydown'){ if(scrollTop > 0 ) { textarea.rows += 1 } } 正确的

CSS: 解决Div float后,父Div无法高度自适应的问题

在用CSS+DIV的布局中,经常会发现,当一个DIV float之后,如果他的高度超过了其父DIV的高度时,其父DIV的高度并不会相应的进行调整.要解决这个问题(也叫做闭合(清除)浮动),我们有四种办法: 1. 额外标签法 这种方法就是向父容器的末尾再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器.这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)标签.我个人比较喜欢这种方法,因为它简单.实用.浏览器兼容性好,而且这种方法也是W3C推荐的方法 <div