并排显示的2个或多个DIV实现自适应相同高度的简单实例
最近看到一个需求命题,要求让并排显示的2个未设置高度的DIV实现自适应相同的高度,本文简单的介绍一下实现方式,然后阿萌顺便附带写一个让多个并排DIV实现相同的功能的简单实例。
本文有3个问题部分,请大家不要看漏喽~~~~
原理很简单,简单提下就是做个判断,让高度最高的赋值给其余所有DIV高度。
先来看看实现2个DIV自适应相同高度的简单代码:
<script type="text/javascript"> function getHeight(id1,id2){ var Ldiv=document.getElementById(id1); var Rdiv=document.getElementById(id2); if (Ldiv.offsetHeight>=Rdiv.offsetHeight){ Rdiv.style.height=Ldiv.offsetHeight + "px"; } else{ Ldiv.style.height=Rdiv.offsetHeight + "px"; } } window.onload = function() { getHeight("div1","div2"); } </script>
看吧,多么简单的代码,不过还要考虑多个DIV的情况,这样就不能仅仅用上面那么简短的代码了,咋们来看看多个DIV自适应是怎样的实现方式。
<script type="text/javascript"> function $id(id){ //ID对象获取 return document.getElementById(id); } function getMoreHeight(){ var divArray=new Array("div1","div2","div3","div4"); //定义需要自适应DIV的ID var max; for(i=0;i<divArray.length-1;i++){ if($id(divArray[i]).offsetHeight>=$id(divArray[i+1]).offsetHeight){ max=$id(divArray[i]).offsetHeight; }else{ max=$id(divArray[i+1]).offsetHeight; } } for(i=0;i<divArray.length;i++){ $id(divArray[i]).style.height=max; } } window.onload = function(){ getMoreHeight(); } </script>
主要利用数组存储多个ID,然后利用for循环,多次对比,得出max高度,然后循环赋值给每一个DIV的高度。
毕竟一排的DIV再多也不会多到哪去,这里也就不考虑算法的效率问题了,怎么短怎么搞。
不过上面的代码都没有考虑到有padding值的情况,就是当div的padding值不同的时候,会引起高度不一的情况。2个DIV的话直接自定义高度就好了,下面多个DIV的代码就要修改修改:
<script type="text/javascript"> function $id(id){ //ID对象获取 return document.getElementById(id); } function getMoreHeight(){ var divA=new Array("h1","h2","h3"); //定义需要自适应DIV的ID var max; for(i=0;i<divA.length-1;i++){ if($id(divA[i]).offsetHeight>=$id(divA[i+1]).offsetHeight){ max=$id(divA[i]).offsetHeight; }else{ max=$id(divA[i+1]).offsetHeight; } } for(i=0;i<divA.length;i++){ $id(divA[i]).style.height=max-parseInt(styleOf($id(divA[i]), "paddingBottom"))-parseInt(styleOf($id(divA[i]), "paddingTop"))+'px'; } } function styleOf(obj, attr){ //样式对象获取(兼容) return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, false)[attr]; } window.onload = function(){ getMoreHeight(); } </script>
考虑到padding的情况,那么就在获取offsetHeight高度的情况下,减去padding值就好啦。这里因为是高度问题,只要在设置高度的时候用max最大总高度减去padding-top和padding-bottom的值就好了。
另外获取style样式考虑到兼容性,特用一个函数来判断解决,这问题拖了我还几天(PS:忙),其实也可以用max高度减去style.height的高度,可以间接得到2个内边距的数值,但是个人来说还是喜欢直接获取。
代码就到这,如果发现有问题的地方或者还有需要拓展的问题,欢迎来留言~~thanks