« 最大ダメージテスト | メイン | 東方文花帖 »
2005年07月01日
複数のBoxの高さを同期する [DOM]
要約
指定されたID群の中で、最大の高さを持つ要素に他の要素の高さを合わせます
用途・目的
テーブルを使用せずに floatプロパティや display プロパティ等によって擬似的な段組を実現する際、現在のCSSの実装ではそれらの高さを合わせるのが難しくなっています。
高さを固定長にすれば合わせることができますが、それではデザインサイズを固定しなければならなくなり、汎用性が高くありません。
ページのロード時に自動的に合わせるようにすれば、table 要素のような高さの等しいボックスを並べることができます。
スクリプト概要
- 指定されたIDリストの中で、高さが最大のものを選出
- 指定されたIDリスト全ての高さを、最大のものに合わせる
DOM未対応時の挙動
高さが合わないので、下がまちまちの長さになります。それぞれに背景が設定されている場合は、やや目立ちます。
コード
//----------------------------------------------------------
// ボックス要素の高さを同期
// 引数:同期するボックスの ID のリスト
//----------------------------------------------------------
function syncBoxHeight(){
if(document.getElementById && document.documentElement.offsetHeight){
var maxWidth = 0;
// 高さの最大値を取得
for(var i=0; i<syncBoxHeight.arguments.length; i++){
var objNode = document.getElementById(syncBoxHeight.arguments[i]);
if(objNode && objNode.offsetHeight > maxWidth){
maxWidth = objNode.offsetHeight;
}
}
// 高さを同期
for(var i=0; i<syncBoxHeight.arguments.length; i++){
var objNode = document.getElementById(syncBoxHeight.arguments[i]);
if(objNode){ objNode.style.height = maxWidth; }
}
return 1;
}
return 0;
}
サンプル
今見ているページの左側メニューと日記領域は、この関数によって高さを同期しています。JavaScriptをoffにすると、高さが合わなくなるはずです。
導入方法
上記のファイルを拡張子を .js に変更してアップロード。その後、適用したいHTMLのヘッダ部分に以下のタグを記述してください。
<script type="text/javascript" src="syncboxheight.js" ></script>
コメント
とても素晴らしい着眼点でさっそく試用させていただきました。
こちらで使った限りでは、mozilla、gecko系では機能しないようですが、やはりそうなのでしょうか?
投稿者 オジアド : 2006年07月20日 13:00
こんにちは、すごいですね!使わせていただきます!
IE6で、'return'ステートメントが関数の外側にあります。
というエラーが出てしまったのですが、どうすればこのエラーを回避できますか?
投稿者 やこ : 2009年03月24日 14:44