iframe要素といえばちょいと昔(XHTML1.1とか)では非推奨となってましたが
HTML5になるとWebアプリとしての期待からか復活しよりまして(笑)

そらーもうGoogleマップからYoutubeからなんでもかんでも
埋め込みコードを発行するとiframeだらけの水泳大会ですわ。
(決してヤケクソになっているわけではありません)

さて、これがスマホ対応となるとそれなりに面倒くさいんですわね。
そんなもん幅100%指定してやればいいんじゃねえのか、と思いますが
そーんな簡単にはいかんのですよね。
縦横の比率を保持したまま、とかになるとそれなりに頭使わんといけませんでした。

まずは

  • iframe要素をdivで囲んでしまう
  • どちらにもpositionプロパティを設定。
    (divにはrelative、iframeにはabsolute)
  • 親要素のpaddingで、画面比率を無理からねじ込む

という事を考えてみる。

4:3と16:9さえあれば大概は対処出来るやろ、と思いやす。
横幅が100%やとすると、高さの比率 ÷ 幅の比率 × 100なので
4:3なら75%で16:9なら56.25%。

HTMLはこんな感じ。

<div class="iframebox">
 <iframe src="http://xxxxxxxxxxxx.xxx" frameborder="0"></iframe>
</div>

CSSはこう。(これは4:3の場合です。paddingの値で調節)

.iframebox {
   position: relative;
 width: 100%;
    padding: 75% 0 0 0; 
}
.iframebox iframe {
    position: absolute;
 top: 0;
 left: 0;
    width: 100%;
    height: 100%;
}

これできっちりと比率を保持したままレスポンシブ化が出来ます。