横幅width100%のiframeに出る余白を消す方法
もはやHTMLの化石ともいえるiframe。
見かけたら「 遺跡が出たぞー! 」叫びたくなるレベル。役所に電話しなきゃ。
しかしお馴染みの楽天RMSやYahoo!ショッピングのストアクリエイターProなど、ネットショップではよく使われています。
以前下記リンクの記事にて「 iframeに width="100%" をかけていても左右に余白が出る。 」とのコメントをいただきました。
確かにiframeタグにwidth="100%" 入れてもCSSで width:100%; 指定をかけていても左右に余白できちゃうんですよね。
iframeの余白を無くす方法
正確にいうと「 iframeの左右 」ではなく「 iframe内部のbodyタグ上下左右 」に余白ができています。
余白を消すにはiframeパーツの中身になるhtmlファイル内 のbody開始タグ( <body> )を下記のどちらかに書き換えてください。
上下左右 or 左右の余白のみを消す
[html]
<body style="margin:0;padding:0;"><!– 上下左右すべての余白を消す –>
[/html]
こちらは上下左右の余白を全て消す方法です。
ただし、すでに上下位置をキッチリ決めて「 あとは左右の余白だけ気になる 」ってときにこちらのコードを使うと、上下の余白も消えるのでその分上にズレます。
ついでにiframeの下にある要素との距離も詰まってしまう。
上下余白はそのままにしたい場合は次の左右余白のみを消すコードをお使いください。
左右の余白のみを消す
[html]
<body style="margin:auto 0;padding:auto 0;"><!– 左右余白だけ消す –>
[/html]
こちらであれば左右の余白のみ消えるので、上下要素との距離は変わりません。
ただ、あとで位置や余白を微調整するなどメンテナンス性を考えれば、余白はiframeの中身ではなくiframe本体につけたCSSなどでコントロールした方が楽です。
といってもコーディングルール的に間違いではないので、お好きな方を使うと良いでしょう。
iframeの中身に余白ができてしまう理由
先述の通り、iframeに余白がついているのではなく、iframeの中身となる<body>タグに余白がついています。
もともとブラウザ自体が各種要素(タグ)に対してデフォルトでCSSをもっており、bodyタグにmarginをつけるために余白ができてしまうのです。
そこでbodyタグにstyle属性で0指定し、余白を消すってわけです。
ちなみに、デフォルトCSSはブラウザによっても違いがあります。私が確認した限りchromeではbodyがmarginを持っていました。
ほかにもpaddingがのるブラウザもあるかもしれないので、ついでにpaddingも0指定しています。
まとめ:width100%でも出てしまうiframeの余白を消す方法
- iframeにwidth100%指定しても余白ができる場合、中身htmlのbodyタグにかかる余白がリセットされていない。
- bodyタグのデフォルトmarginとpaddingをstyleで0指定することで消すことが可能。
イマドキのホームページはブラウザごとにCSSが違ってしまうと面倒なので、主なタグのデフォルトCSSをリセットしてから再指定する手法がとられます。
が、ちょっと読み込むだけのiframeパーツにはそこまでしなくても……って感じなので、今回のように必要な分だけ書き換えるのが一般的。
無駄にCSS読み込ませてもiframeの読み込み & 表示が遅くなってしまいますし。
ほかにもブラウザによってiframeの見た目が変わってしまい困っている、なんてときはブラウザのデフォルトCSSがかんでいる可能性が高いので確認してみてください。
ディスカッション
コメント一覧
いつも参考にさせていただいています。ありがとうございます。
今回、横の余白0の、goldサーバー上で余白がないページををiframeで表示したいのですが、RMSに入れると余白ができてしまいます。
試しにRMS上で画像1枚を100%表示したところ、同様に余白がついてしまいiframeの中身が原因ではなさそうですが、RMS上で何か追記しないといけないのでしょうか。共通パーツの他のコンテンツは消してテストしています。
https://www.rakuten.ne.jp/gold/loopsky/sptest_js/footer.htm
>>ringoppi様
コメントありがとうございます。
素敵なお店ですね!
質問の件ですが、RMSも入力された内容をiframeだったりiframeに近い形で読み込むことで表示させています。
場所にもよりますが、読み込まれるときの外枠に余白がある設定だと余白が出ることはありますね。
その場所のCSSを無理矢理にでもいじれる場所なら消すこともできるかもですが、場所によっては無理だったりします。
具体的にはどこに表示させたい&RMSのどこにiframeを入力してらっしゃるのでしょうか?
お返事ありがとうございます^^
余白ができてしまうのは、スマホ商品ページの、カート下の自由スペースです。
どうやら楽天のデフォルトで余白の設定があるようです。
でも、参考にしたサイト(モダンデコさん)では商品情報部分にもフッター余白がなかったので
、余白がない前提でコンテンツを作ってしまい、何とかならないかと思っております。
>ringoppiさん
商品ページのスマートフォン用商品説明文に個別に入れるってことですよね?
パッと見た感じだと説明文を囲うdivブロックにblockWrapクラスに8pxのpaddingがかかってて、それが左右に余白作ってるみたいですね。
.blockWrap{padding:0px;!important}
を効かせてあげれば左右余白は消えるかと。
GOLD上に上記が入ったCSSファイルを作ってGOLDにアップして、下記裏技でスマートフォン デザイン設定 > 商品ページ共通パーツ設定 の商品ページ共通説明文でそのCSSファイルを読み込ませればいけるはずです。
【楽天RMS裏技】禁止タグを使ってCSSやiframe、jsファイルを読み込む方法
https://ec-tsushin.com/rma_tag_tec/
お調べいただきありがとうございます。試してみたところ、余白を詰めたいのはスマートフォン用商品説明文ではなかったです。お手数をおかけしてしまい申し訳ありませんでした。スマートフォン用商品説明文の写真などを大きく見せたい時は、お調べいただいたCSSを適用したいと思います。
スマートフォン用のカテゴリページ共通説明文&商品ページ共通説明文に、表示場所を固定しないiframeタグを記載すると、カートの下部にある「ショップの人気ランキング」の更に下にコンテンツが表示されるのですが、その部分の余白でした。
先日より連投失礼いたします。困っていた件は管理者様に頂いたタグを元に自己解決しました。
ブログのタイトルと趣旨が異りますが、他の方の参考になればと思い記載させていただきます。
RMSのスマホカテゴリページ&商品ページの共通説明文に、横幅width100%のiframeを表示するためにデフォルトの余白を消すタグです。
スマホカテゴリページ
.commondescription{padding:0px;!important}
スマホ商品ページ
#shopCommonText div{margin:0px;!important}
>>ringoppi様
ありがとうございます!
私が思い違いをしてしまい大変失礼を……
そして実装例までいただきなんとお礼を申し上げていいやら。
ありがとうございます。<(_ _)>