次のCSSを使用してIFRAMEのサイズを動的に設定したいと思います。
#myiframe {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
ただし、これをサポートしているブラウザはないようです。
優れたブラウザーでは、引用符で囲まれたCSSスタイルを使用してIFRAMEをDIVでラップし、IFRAMEの高さと幅を100%に設定できます。しかし、これはIE7では機能しません。 CSS式を使用する以外に、誰かがこれを解決することができましたか?
更新
MatTheCatは、IFRAMEが本体の真下にあり、body/htmlタグの高さが100%に設定されている場合に機能するシナリオで回答しました。私の最初の質問では、IFRAMEがどこにあり、どのようなスタイルがそのコンテナーに適用されているかについては述べていませんでした。うまくいけば、以下がこれに対処します:
<html>
<body>
<div id="container"><iframe id="myiframe"></iframe></div>
</body>
</html>
そして、次のコンテナCSSを想定しましょう。
#container {
position: absolute;
top: 10px;
bottom: 10px;
left: 10px;
right: 10px;
}
ここでheight: 100%
をIFRAMEに配置すると、サイズが正しくなりません。
すべての側面のパディングにdivを使用します。親divの100%を使用してiframeを配置します。
http://jsfiddle.net/sg3s/j8sbX/
ここで、覚えておく必要のあることがいくつかあります。 iframeは元々インラインフレームであるため、最近のブラウザは気にしませんが、display:blockを設定します。デフォルトでは、境界線もあります。実行したいスタイリングは、代わりにiframeコンテナーで実行する必要があります。そうしないと、100%コンテナーの境界が破られます。
そして、これは私たちがその上に要素を置く方法です:
http://jsfiddle.net/sg3s/j8sbX/25/ (編集:私の悪い、IE7のiframeでborder = 0を設定する必要があります)
IE7 +で正常に動作するはずです(IE6は絶対配置+上/右/下/左を使用してレイアウトを与えることを好みません)
編集いくつかの追加の説明
主に、iframe自体のサイズを上/左/下/右に設定できないため、iframeコンテナのスタイルを設定する必要があります。しかし、うまくいくのは、その幅と高さを100%に設定することです。したがって、そこから始めて、ウィンドウ未満を100%にするために確実にスタイルを設定できる要素でiframeをラップするだけです。これは、親のいずれにも静的な高さ/幅がない場合に要素がデフォルトで使用するサイズです。
それについて考えると、実際に絶対値を削除してブロックすることができます。 http://jsfiddle.net/sg3s/j8sbX/26/ それでもIE7を再確認したいかもしれません。
Iframeを100%の高さと幅にした後、マージン、パディング、境界線を配置することはできません。これは、すでに100%の高さと幅に追加されるためです。したがって、overflow:visibleが発生するdivの場合は、コンテナよりも大きくなり、すべてがエッジを超えていることを示します。しかし、その結果、要素に指定したマージン、パディング、オフセットが台無しになります。実際、高さと幅を100%にするためには、iframeのデフォルトの境界線を削除する必要があります。
私の例では、iframeに大きな境界線(3pxなど)を追加して試してみてください。レイアウトにどのように影響しているかを簡単に確認できます。
高さと幅を使ってみませんか?以下の例のように、上/下と左/右を設定することで、絶対位置を取得できます。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
html, body {
margin:0;
padding:0;
border:0px;
height:100%;
width:100%;
}
#container {
position: absolute;
top: 10px;
bottom: 10px;
left: 10px;
right: 10px;
}
#myiframe {
position: absolute;
top: 0%;
left: 0%;
height: 100%;
width: 100%;
}
</style>
</head>
<body>
<div id="container"><iframe id="myiframe"></iframe></div>
</body>
</html>
これは私にとってはうまくいきます(IE9でテスト済み)。
html,body {
margin:0;
padding:0;
height:100%;
min-height:100%;
}
#myiframe {
width:100%;
height:100%;
border:0;
}
iE7でも問題なく動作します。
このスタックオーバーフローの質問を見てください。それは役立つかもしれません: