floatしたボックスの高さをそろえる
参考:http://scuderia-web.com/tips/xhtml_css/equal_box_heights.php
floatしたコンテンツに対してメニューの高さをそろえるなどの場合。
<div id="wrap" class="cl"> <div id="main"><p>コンテンツテキスト</p></div> <div id="menu">メニュー</div> </div>
というソースで
html, body { margin: 0px; padding: 0px; height: 100%; } #wrap { overflow: hidden; height: auto; width: 700px; } #main { float: left; width: 500px; background-color: #E8E8E8; margin: 0px; padding: 0px; } #menu { float: left; width: 200px; background-color: #CCCCCC; margin: 0px 0px -1000px 0px; padding: 0px 0px 1000px 0px; } .cl { display: inline-block; } .cl:after { content: ""; display: block; clear: both; }
とするとうまくいく。
11.03.10追記
ただし上記のやり方だと、背景画像を下にそろえたときの背景画像や、ボックスのborder-bottomが表示されない。
これは、実際に「在る」コンテンツの高さと見える高さとが一致しないから。
上記の場合、boxの高さは1000pxであり、背景画像やborder-bottomは上から1000pxの位置にあることになる。
そのため、背景画像を下に置く・border-bottomが必要な場合は、JavaScriptで制御する。
→参考:http://blog.webcreativepark.net/2007/07/26-010338.html
必要なファイルはheightLine.js。
new function(){ function heightLine(){ this.className="heightLine"; this.parentClassName="heightLineParent" reg = new RegExp(this.className+"-([a-zA-Z0-9-_]+)", "i"); objCN =new Array(); var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all; for(var i = 0; i < objAll.length; i++) { var eltClass = objAll[i].className.split(/\s+/); for(var j = 0; j < eltClass.length; j++) { if(eltClass[j] == this.className) { if(!objCN["main CN"]) objCN["main CN"] = new Array(); objCN["main CN"].push(objAll[i]); break; }else if(eltClass[j] == this.parentClassName){ if(!objCN["parent CN"]) objCN["parent CN"] = new Array(); objCN["parent CN"].push(objAll[i]); break; }else if(eltClass[j].match(reg)){ var OCN = eltClass[j].match(reg) if(!objCN[OCN]) objCN[OCN]=new Array(); objCN[OCN].push(objAll[i]); break; } } } //check font size var e = document.createElement("div"); var s = document.createTextNode("S"); e.appendChild(s); e.style.visibility="hidden" e.style.position="absolute" e.style.top="0" document.body.appendChild(e); var defHeight = e.offsetHeight; changeBoxSize = function(){ for(var key in objCN){ if (objCN.hasOwnProperty(key)) { //parent type if(key == "parent CN"){ for(var i=0 ; i<objCN[key].length ; i++){ var max_height=0; var CCN = objCN[key][i].childNodes; for(var j=0 ; j<CCN.length ; j++){ if(CCN[j] && CCN[j].nodeType == 1){ CCN[j].style.height="auto"; max_height = max_height>CCN[j].offsetHeight?max_height:CCN[j].offsetHeight; } } for(var j=0 ; j<CCN.length ; j++){ if(CCN[j].style){ var stylea = CCN[j].currentStyle || document.defaultView.getComputedStyle(CCN[j], ''); var newheight = max_height; if(stylea.paddingTop)newheight -= stylea.paddingTop.replace("px",""); if(stylea.paddingBottom)newheight -= stylea.paddingBottom.replace("px",""); if(stylea.borderTopWidth && stylea.borderTopWidth != "medium")newheight-= stylea.borderTopWidth.replace("px",""); if(stylea.borderBottomWidth && stylea.borderBottomWidth != "medium")newheight-= stylea.borderBottomWidth.replace("px",""); CCN[j].style.height =newheight+"px"; } } } }else{ var max_height=0; for(var i=0 ; i<objCN[key].length ; i++){ objCN[key][i].style.height="auto"; max_height = max_height>objCN[key][i].offsetHeight?max_height:objCN[key][i].offsetHeight; } for(var i=0 ; i<objCN[key].length ; i++){ if(objCN[key][i].style){ var stylea = objCN[key][i].currentStyle || document.defaultView.getComputedStyle(objCN[key][i], ''); var newheight = max_height; if(stylea.paddingTop)newheight-= stylea.paddingTop.replace("px",""); if(stylea.paddingBottom)newheight-= stylea.paddingBottom.replace("px",""); if(stylea.borderTopWidth && stylea.borderTopWidth != "medium")newheight-= stylea.borderTopWidth.replace("px","") if(stylea.borderBottomWidth && stylea.borderBottomWidth != "medium")newheight-= stylea.borderBottomWidth.replace("px",""); objCN[key][i].style.height =newheight+"px"; } } } } } } checkBoxSize = function(){ if(defHeight != e.offsetHeight){ changeBoxSize(); defHeight= e.offsetHeight; } } changeBoxSize(); setInterval(checkBoxSize,1000) window.onresize=changeBoxSize; } function addEvent(elm,listener,fn){ try{ elm.addEventListener(listener,fn,false); }catch(e){ elm.attachEvent("on"+listener,fn); } } addEvent(window,"load",heightLine); }
使い方は、高さをそろえたい要素のclassにheightLineを指定するだけ。