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
カレーライス (ハウス ザ・カリー) + あきたこまち (白米)
自宅 de カレーライス (ハウス ザ・カリー <辛口> Part 1) の続きです。出来上がりの猛烈に食欲をそそる香りの誘惑に負けず、1 日寝かしました。今回は白米のあきたこまちが残って
オリオンハッピーパーク (1)
以前から一度は行ってみたいと思いつつなかなか行けなかった場所に、先日の沖縄出張時の休日に同時に 2 個所行けました。まずは、売れ切れる場合も多いと評判の 山原そば (やんばるそば) の沖縄そばを初めて
銀座わしたショップ 2014/06/13 (8)
銀座わしたショップ 2014/06/13 (三線自動演奏機) の続きです。1F は食料品を含めた物販がメインなので、改めて眺めてみることにしました。1F の入口左手側は冷蔵食品が並んでいて、最近興味が
百人のキセキ 至福のブラウンエール (3)
最近黒ビールを良く試していますが、ある時また見慣れないビールを見つけました。ニュースリリース 百人ビール・ラボ によると "サッポロ 百人のキセキ 至福のブラウンエール" 限定発売
ざるそば
昔は大みそかの年越しそばを冷めた目で見て気にもしない時期もありましたが、ふと 3, 4 年前に "まぁ、乗ってみるのも良いか" と軽い気持ちで楽天を物色しました。近所の店舗で混んで
もも ? (4)
10/09 から開始した本来の沖縄出張で、土・日を迎えることになりました。かねてからチームの K 君の飼い猫 "もも" に会ってみたいと思っていました。沖縄にも猫カフェがいくつかあ
松藤 限定古酒 43 度 (3)
沖縄本島 (No. 6 – 打ち上げ) で衝撃を受けた 松藤【限定古酒】43 度 を、東京に戻ってからも飲んでみようと考えていたところ、今も同僚でもある打ち上げのメンバーからプレゼントして
クリスマスツリー 2012
銀座・有楽町は最低でも 1 ヶ月に 2, 3 回は訪れるスポットです。クリスマス付近になると恒例の 「ミキモト ジャンボクリスマスツリー」点灯中です。カメラも解像度もまちまちなので統一感がありませんが
沖縄そば (大) + ジューシー
沖縄本島 (No. 10 – スカイライナー) の続きです。ここ最近は 沖縄本島 (No. 7 – 宮良そば) がお気に入りで、沖縄に行く際にはほぼ必ず訪れますが、ふとしたきっ
Valid HTML5 Valid CSS3 Another HTML Lint