Home » Program » div タグを使ったカラムの高さを揃えるスクリプト (Tag: )

Drive Network のホームページ では、CSS のみで何とか対応しましたが、まだ意図する 100% の動作ではありません。(そもそも入れ子が複雑)

とあるサービス向けにまた同様の動作を実現させたく、色々探しました。CSS3 の display: box; はあまりいい感じがしない (webkit や mozilla 向けと結局すべて個別設定が必要な点が美しくない) ので、行きついたところが jQuery のプラグインでの処理でした。

jquery.flatheights.js を始め、複数のプラグインを試しましたが、

  • padding を無視しているのか、余計な余白がついて高さが揃う
  • プラグイン側のお仕着せのクラス名や ID のセレクタが必要なタイプは汎用性に欠けるので却下

した結果、一番まともな動作で軽量だった heightLine.js を参考にしつつカスタマイズしました。

function ChangeHeight(tag, id) {
    var obj0 = document.getElementsByTagName ? document.getElementsByTagName(tag) : document.all.tags(tag);
    var obj  = [];

    for (var i = 0; i < obj0.length; i++) {
        if (obj0[i].id == id) {
            obj.push(obj0[i]);
            break;
        }
    }

    ChangeBox = function() {
        for (var i = 0; i < obj.length; i++) {
            var max = 0;
            var cn  = obj[i].childNodes;

            for (var h = 0; h < cn.length; h++) {
                if (cn[h] && cn[h].nodeType == 1) {
                    cn[h].style.height = 'auto';
                    max = (max > cn[h].offsetHeight) ? max : cn[h].offsetHeight;
                }
            }

            for (var h = 0; h < cn.length; h++) {
                if (cn[h].style) {
                    var style  = cn[h].currentStyle || document.defaultView.getComputedStyle(cn[h], '');
                    var height = max;

                    if (style.paddingTop) {
                        height -= style.paddingTop.replace('px', '');
                    }

                    if (style.paddingBottom) {
                        height -= style.paddingBottom.replace('px', '');
                    }

                    if (style.borderTopWidth && style.borderTopWidth != 'medium') {
                        height -= style.borderTopWidth.replace('px', '');
                    }

                    if (style.borderBottomWidth && style.borderBottomWidth != 'medium') {
                        height -= style.borderBottomWidth.replace('px', '');
                    }

                    cn[h].style.height = height + 'px';
                }
            }
        }
    }

    ChangeBox();
    window.onresize = ChangeBox;
}

呼び出す時は例えば ChangeHeight(‘div’, ‘main’); とします。HTML 側は

<div id="main">
  <div id="menu">

  </div>

  <div id="content">

  </div>
</div>

の様な場合、

  • menu, content の高さが Web ブラウザの縦幅に追随して広がりつつ揃う
  • 一度広げた高さは Web ブラウザの縦幅を縮めても縮小せずスクロールバーが表示

します。Web アプリケーション向けの動作を前提としていますが、静的な Web ページでも十分に使用に耐えるでしょう。

Random Select

ミニストップ メニュー
数日前にオフィスからやや離れたミニストップの店頭に ベルギーチョコフェア のポスターが貼られていることに気が付きました。またあの ミニストップ (ベルギーチョコソフト) が帰って来る季節なのかと思いつ
おろしそ餃子 並盛定食
天鴻餃子房 (海老にら餃子) から 1 ヶ月経ちました。改めて見ると、中々有名な様です。この日は、気になっていた "おろしそ餃子" を試してみることにしました。ずっと "
中本鮮魚店 (4)
久高島 (No. 5 – 久高船待合所) の続きです。久しぶりに久高島を訪れてエネルギーをもらった様な感じがしました。本島南部に戻ってから特に予定は決めていませんでしたが、天ぷらで有名な
湧出 (1)
伊江島 (No. 3 – 伊江島タッチュー Part 2) の続きです。城山 (ぐすくやま) から降りて登山口の売店を少し眺めた後は、移動を開始しました。湧出 (わじー)湧出は伊江島の北側
うまい ! がすごい。クリーミー生サーバー (4)
うまい ! がすごい。クリーミー生サーバー (Part 1) の続きです。1 度にシール 6 枚分まで登録出来るので、コツコツ続けていると、テストで満点という訳ではありませんが、何だかいい気分♪82
こなゆきコラーゲン (3)
タマチャンショップ で一番お世話になっている こなゆきコラーゲン は、飲み始めてからすでに 2 年が経ちました。コラーゲンを常用する様になったきっかけは、ここ数年通っているリフレクソロジーで配っていた
VGP-WAR100 (6)
VAIO Fit 13A + VGP-WAR100 (Part 1) の続きです。デバイス側の準備が完了した時点で、付属の取扱説明書に書かれている http://192.168.11.1/ にアクセス
手打ち生麺 沖縄そば定食
以前から興味があった "手打ち生麺 沖縄そば定食" を試してみようと突然思い立ち、1 週間ぶりに訪れました。うちなぁ料理と古酒家 ニライカナイ (ソーキそばセット) で投稿した 0
クリーミー生サーバー (6)
うまい ! がすごい。クリーミー生サーバー (Part 2) の続きです。正確には覚えていませんが、キャンペーン終了翌日の 2013/08/26 から 1 ヶ月程経過してようやく届きました。中々の大ぶ
FreeBSD Logo
Migrate to FreeBSD 9.1-RELEASE (JDK 1.6) に続いて idnconv (idnkit) を移行しました。idnconv は国際化ドメイン名のエンコード・デコードを
Valid HTML5 Valid CSS3 Another HTML Lint