本文和大家重点讨论一下解决DIV高度自适应的方法,这里主要从四个方面来向大家介绍,相信通过本文学习你对DIV高度自适应问题会有更加深刻的认识。

DIV高度自适应

关于DIV高度的自适应,一直是个让人头疼的问题,整理了一下以前总结的方法,仅表示我也玩过。

htmlcode:

  1. <div id="container">
  2. <dividdivid="leftSide">这边的高度自适应右侧的高度</div>
  3. <dividdivid="rightSide">
  4. <scripttypescripttype="text/javascript">
  5. for(i=0;i<10;i++){
  6. document.write(i+'<br>');
  7. }
  8. </script>
  9. </div>
  10. </div>

可用的方法大概有以下四种:

1,用absolute设置一个足够高的高度,在父级元素中清除溢出的部分,具体的csscode如下:

  1. #container{font-size:14px;width:300px;overflow:hidden;
  2. border:3pxsolidblue;margin:10pxauto0;
  3. color:#fff;position:relative;}
  4. #leftSide{width:100px;float:left;height:200000px;
  5. left:0;top:0;position:absolute;background:gray;}
  6. #rightSide{width:190px;float:right;
  7. text-align:center;background:purple;}

其实这种方法并没有真正的实现左右两个div等高,只是用了障眼法,利用container的overflow:hidden清除了左侧多余的部 分,以达到视觉上左右等高的目的,虽然有“白猫黑猫,逮着老鼠就是好猫”的说法,但是笔者并不着重推荐这种方法,因为给父级元素添加relative,会 带来很多不必要的麻烦,况且只能是设置absolute的一侧自适应另一侧的高度,并不能让两侧中任一侧去自由去适应另一侧!

2,负外补丁和正内补丁{margin-bottom:-(num)px;padding-bottom:(num)px;}相结合

  1. #container{font-size:14px;width:300px;overflow:hidden;
  2. border:3pxsolidblue;margin:10pxauto0;color:#fff;}
  3. #leftSide{width:100px;float:left;background:gray;
  4. padding-bottom:9999px;margin-bottom:-9999px;}
  5. #rightSide{width:190px;float:right;text-align:center;
  6. background:purple;padding-bottom:9999px;
  7. margin-bottom:-9999px;}

3,利用javascript脚本实现动态设置高度

  1. <scripttypescripttype="text/javascript">
  2. varleft=document.getElementById('leftSide');
  3. varright=document.getElementById('rightSide');
  4. if(left.offsetHeight>=right.offsetHeight){
  5. right.style.height=left.offsetHeight+'px';
  6. }else{
  7. left.style.height=right.offsetHeight+'px';
  8. }
  9. </script>

事实上,这种办法真正意义上实现了两侧等高,并且能让两侧中任一侧去自由去适应另一侧,但是其缺点就在于,只有当DOM加载完成后,才有会这样等高的效果,如果网速够快,这个漏洞可以忽略不计。

4,在父级元素中填充背景

CSS code如下:

  1. #container{font-size:14px;width:300px;overflow:hidden;
  2. border:3pxsolidblue;
  3. margin:10pxauto0;color:#fff;
  4. background:url(http://www.men-ideal.com/images/unit1030.jpg)repeat-y;}
  5. #leftSide{width:100px;float:left;}
  6. #rightSide{width:190px;float:right;text-align:center}

目前,这种方法是最流行的,同样也是一种“欺骗性”的解决办法,不过除了多使用一张图片之外,都可以堪称完美,这也是笔者极力推荐的!

最后:

display:table- cell属性指让标签元素以表格单元格的形式呈现,类似于td标签。目前IE8+以及其他现代浏览器都是支持此属性的,但是IE6/7只能对你说 sorry了,这一事实也是大大制约了display:table-cell属性在实际项目中的应用。

我们都知道,单元格有一些比较 特别的属性,例如元素的垂直居中对齐,关联伸缩等,所以display:table-cell还是有不少潜在的使用价值的,虽说IE6/7不支持此属性, 但是幸运的是,IE6/7一些乱糟糟的属性与渲染,我们可以其他方法实现同样或是类似的效果。 
与其他一些display属性类 似,table-cell同样会被其他一些CSS属性破坏,例如float, position:absolute,所以,在使用display:table-cell与float:left或是position:absolute 属性尽量不用同用。设置了display:table-cell的元素对宽度高度敏感,对margin值无反应,响应padding属性,基本上就是活脱 脱的一个td标签元素了。

四种方法解决DIV高度自适应问题的更多相关文章

  1. 让一个图片在div中居中(四种方法)

    第一种方法: <div class="title"> <div class="flag"></div> <div cl ...

  2. DIV高度自适应及注意问题(转)

    本文和大家重点讨论一下DIV高度自适应及注意问题,主要包括父div高度随子div的高度改变而改变和子div高度随父亲div高度改变而改变两种情况. DIV高度自适应及注意问题 积累了一些经验,总结出一 ...

  3. 实现三个div,固定左右两边的div宽为200,中间的div宽度自适应的四种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. css+div制作圆角矩形的四种方法

    圆角矩形一向是设计师最倾心的一种设计,因为他们可以让整个网页生动起来,不那么死板,所以,作为一个优秀的网页设计师,学会一种或多种编辑圆角矩形的方法是必不可少的,而且圆角矩形应用范围极广,一个网页内的所 ...

  5. div垂直水平居中的四种方法总结

    5.利用弹性布局 与 margin: <style> .container{ height: 600px; width: 600px; border:1px solid black; di ...

  6. java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...

  7. 真正解决iframe高度自适应问题

    1.前言 解决iframe高度自适应问题有两种方法1.pym2.手动设置iframe的高度 本文主要是总结第二种实现方式,因为第一种pym.js插件我没用懂 如果使用iframe时,遇到以下的需求: ...

  8. [Web 前端] 018 css 清除浮动的四种方法

    清除浮动的四种方法 加 clear: ...(见例1) 父级上增加属性 overflow:hidden(见例2.1) 在最后一个子元素的后面加一个空的 div,给它一个样式属性 clear: both ...

  9. div高度自适应(总结:min-height:100px; height:auto;的用法)

    对于div高度自适应问题,我总是用一句话:height:auto来解决. 但是很多时候我们需要的是当div内部有内容时,高度会随着内容的增加和增加,当div中没有内容时,div能够保持一个固定的高度. ...

随机推荐

  1. Struts1的实现原理

    一 开文背景 -- 废话讲一段~ 本文借助动力节点-王勇老师的视频教程中的引例来了解struts1的实现原理,虽然现在已经很少使用struts1了,但是了解了其原理之后,对了解其他mvc框架还是有较大 ...

  2. oracle中if/else

    oracle中if/else功能的实现的3种写法   1.标准sql规范 一.单个IF 1. if a=... then ......... end if; 2. if a=... then .... ...

  3. 基于visual Studio2013解决C语言竞赛题之0501挑选素数

        题目

  4. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

  5. C++中的智能指针(auto_ptr)

    实际上auto_ptr 仅仅是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势.使用它不必每次都手动调用delete去释放内存.当然有利也有弊,也不是全然完美的. 本 ...

  6. Android大放送干:书籍、过程、工具等各种全

    完全干燥分享,本文收集Android制定必要的书籍.过程.具.新闻和杂志各种资源.它们能让你在Android开发之旅的各个阶段都受益. 入门 <Learning Android(中文版)> ...

  7. 关于std::string

    主要注意的一个问题是:std::string 实际是类似一个 vector<char>的结构. 它里面是可以存放 ascii为0 的字符不算结尾 (否则 unicode方式的编码存放就有问 ...

  8. 将一个int转成二进制c

    /* 由于是2位 十进制整数,所以转化后可以存 一个int 型中: reverse函数 提供了这种转化 如果需要转化的数字比较大int存不下,则需要数组来存 */ #include<stdio. ...

  9. OAuth2.0认证过程

    本文以腾讯微博为例,详细介绍OAuth2.0的认证过程. 在使用腾讯微博平台提供的API前,您需要做以下两步工作: 成为开发者,并申请appkey和appsecret 授权获取accesstoken ...

  10. MinGW开发工具的安装

    MinGW是Minimalist GNU for Windows的缩写,是把linux下的GNU开发工具包移植到windows的项目之一.和Cygwin不一样的是,MinGW不提供linux的posi ...