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

キャベツ野菜炒め + もやしニラ野菜炒め
最初にお断りしておきますが、ローソン (朝ごパンセット) 同様 "野菜炒めセット" は私の造語ですのであしからず (笑)シンプルな料理を極めて自分の味が出したいという想いが強いので
jQuery Logo
Internet Explorer でのブラウザチェックにおすすめのツールツール -> 開発者ツールで 7 – 9 の互換表示。レスポンシブ Web デザイン制作に便利な Firef
ビーフカレー (ルー大盛り, 辛さ 25 倍)
カリーライス専門店 エチオピア 本店 (No. 2 – 辛さ 15 – 20 倍) の続きです。行く度に辛さを前回より 5 倍増しにし続け、日々修行の気分です。前回はルーが少な
特製二代目つけ麺
めん徳二代目つじ田 (二代目つけ麺) で心残りにしていた 特製二代目つけ麺 に久しぶりにご対 "麺" 出来ました。普段は 14:00 頃等ランチタイムを外しますが、今回は開店 11
My Select (2013/05/31)
沖縄出張 (No. 21 ? てぃーだ社員食堂 Part 1) の続きです。05/20 から 2 週間の沖縄出張で、ランチ時に社食をいただいたのは 4 回でした。Part 1 に引き続いて残り 3 回
ザ・プレミアム・モルツ <香るプレミアム> (1)
2014/05/27 発売開始の ザ・プレミアム・モルツ <香るプレミアム> は、2, 3 ヶ月以上前から宣伝等で目に触れていて実に興味がありました。元々 ザ・プレミアム・モルツ は KI
箱盛り鮮魚刺し
浜比嘉島 (No. 2 – 比嘉集落) の続きです。浜比嘉島を 1 時間程度の滞在で済ませた理由は、前々から行きたくてもなかなか機会がなかった 産地直送仲買人 目利きの銀次 新都心店 に予
遠隔地バックアップ開始のお知らせ
2012/08/01 より Drive Network では従来の東京データセンター内でのバックアップに加え、富山データセンターにさらにバックアップする運用を開始しました。Drive Network
猫丸庵カレー (1)
沖縄本島 (No. 53 – 猫丸庵 Part 2) の続きです。猫たちとたわむれながら静かに待っていると、ついに出て来ました。私が辛いカレーを良く食べていることを知ってか、スパイスも付け
bistro rose ♪
今日は "ハッシュ・ド・ビーフ" の作り方をご紹介。寸胴にデミグラスソース・ケチャップ・水を開けておく。量は 1:1:1.5 程度。水は多めにして、煮込んだ後 1:1:1 になれば
Valid HTML5 Valid CSS3 Another HTML Lint