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

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

新規登録して質問してみよう
ただいま回答率
85.48%
iframe

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

Bootstrap

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

CSS

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

Q&A

解決済

1回答

4803閲覧

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

hyksm

総合スコア174

iframe

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

Bootstrap

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

CSS

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

0グッド

0クリップ

投稿2017/01/05 08:19

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のままで困ってます。。。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koronatail

2017/01/05 08:56

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

2017/01/06 08:48

おっしゃるとおりです
guest

回答1

0

ベストアンサー

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

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

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

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

投稿2017/01/05 09:00

takepieee

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hyksm

2017/01/06 09:14

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

2017/01/06 09:32

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問