質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • CSS

    6025questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • Bootstrap

    1012questions

    BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

  • iframe

    124questions

    HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

bootstrapでnav-tabs内のtab切替時にiframeの高さを調整するには?

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,294

hyksm

score 121

bootstrapでnav-tabs内のtab切替時にiframeの高さを調整するにはどうしたら良いですか?

【jQuery】iframeの高さを取得し自動調整するスクリプト(Microsoft Edgeにも対応)
こちらを参考にして組んでみたのですが、タブを切り替えた際に高さがおかしくなります

恐らく最初に取得した高さのまま表示されているのだとは思いますが対策方法が思いつきません

                            <ul class="nav nav-tabs">
                              <li class="active"><a href="#a" data-toggle="tab">タブA</a></li>
                              <li><a href="#b" data-toggle="tab">タブB</a></li>
                              <li><a href="#c" data-toggle="tab">タブC</a></li>
                              <li><a href="#d" data-toggle="tab">タブD</a></li>
                            </ul>
                            <div class="tab-content">
                            <div class="tab-pane active" id="a">
                                <iframe  src="#" class="autoHeight">高さ555</iframe>
                            </div>
                            <div class="tab-pane" id="b">
                                <iframe  src="#" class="autoHeight">高さ666</iframe>
                            </div>
                            <div class="tab-pane" id="c">
                                <iframe  src="#" class="autoHeight">高さ777</iframe>
                            </div>
                            <div class="tab-pane" id="d">
                                <iframe  src="#" class="autoHeight">高さ888</iframe>
                            </div>
                            </div>
(function(window, $){
    $(window).on("load",function(){
        $('iframe.autoHeight').each(function(){
            var D = $(this).get(0).contentWindow.document;
/*
            console.log(
                D.body.scrollHeight, D.documentElement.scrollHeight,
                D.body.offsetHeight, D.documentElement.offsetHeight,
                D.body.clientHeight, D.documentElement.clientHeight
            );
*/
            var innerHeight = Math.max(
                D.body.scrollHeight, D.documentElement.scrollHeight,
                D.body.offsetHeight, D.documentElement.offsetHeight,
                D.body.clientHeight, D.documentElement.clientHeight
                );
            $(this).removeAttr("height").css('height', innerHeight + 'px');
        });
    });
})(window, jQuery);

のようなの時にタブをABCD切り替えてもそれぞれの高さに調整されるようにしたいのです

最初に読み込まれた時にはactiveなAのタブの高さ555pxになりますが
BやCに切り替えても555pxのままで困ってます。。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • koronatail

    2017/01/05 17:56

    555px~888pxというのはiframe内に表示されている要素の高さという解釈で大丈夫でしょうか

    キャンセル

  • hyksm

    2017/01/06 17:48

    おっしゃるとおりです

    キャンセル

回答 1

checkベストアンサー

+1

bootstrapに限らず、タブ形式のこういうものは、現在表示されているもの以外display:noneになっていると思います。
これは「要素そのものを表示させない」ものですから、display:blockの基準しか存在しないのではないかと。
よってautoHeight自体、最初のタブの高さが基準になり(他のタブの高さは0扱い)、思うようにならないのではないでしょうか。

恐らくインラインフレーム自体のコンテンツを全部表示させた上で高さを取得して、タブ切り替えでも高さが変わらないようにしたいのだと思いますが(違ってたらすみません)、それぞれのインラインフレーム内部でコンテンツの高さを取得し、親フレームに数値を送った上で、最大の高さを設定してあげるしかないのかな・・と思います。

このあたり参考になりませんか?

http://bashalog.c-brains.jp/14/07/10-100000.php

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/06 18:14

    試してみましたが指定方法がよくわかりませんでした。
    子ページでは読み込まれるiframeから親ページへメーッセージを送信して
    親ページでは子ページからのメッセージを受け取ったらイベント発火
    まではつかめたのですがよくわかりませんでした。

    キャンセル

  • 2017/01/06 18:32

    高さを取得して送信、受け取ったら発火、というよりはインラインフレームは必ずあるのでしょうから、親ページはロードしたら処理でいいと思います。
    ただしbodyの下の方(インラインフレーム読み込み後)に処理してください。
    その上で正しく値を受け取ったかをjs内でalert(変数);で確認しながらやってください。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • CSS

    6025questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • Bootstrap

    1012questions

    BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

  • iframe

    124questions

    HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。