大きな画像を利用するとレイアウトや見た目がメチャクチャになる場合があります。このサイトのように本文のカラム(つまり様々な画像を利用するカラム)が左でメニューのカラムが右にあるような場合や要素の内容物によりその要素のボックス幅が修正されてしまうというバグのあるInternet Explorerでは顕著です。幅固定なレイアウトの場合は、本文のカラムの幅は確実に把握できるので、それに合わせて画像をリサイズした上で利用すれば良いわけですが、幅可変なレイアウトの場合は、当然本文のカラムの幅が不定なのでそういうわけにはいきません。こういったケースにはoverflow
の値にhidden
やscroll
を指定することでレイアウトや見た目の崩れを回避することが可能です。
overflow
は要素のボックスからはみ出す内容物をどう表示するかを指定するプロパティで、値にhidden
を指定するとはみ出した部分は表示されません。つまり、
<div id="contents">
<div class="image_container">
<img src="foo.png" alt="でかすぎ・・・" width="100000000" height="100" />
</div>
</div>
というHTMLコードに対して、
div.image_container {
width: 100%;
overflow: hidden;
}
と、CSSのルールを書いておけば、foo.pngは#contents
の横幅をはみ出す部分は隠されるので、foo.pngの幅がどんな大きさでも問題ありません。
「レイアウトや見た目を崩したくないけど、せっかくの画像を隠すのも嫌だ」とかいう場合にはhidden
ではなくscroll
を使うと良いです。ブラウザによってscroll
による表示はかなり異なるのでちょっとアレな感じですが。
img
要素に対してmax-width
を指定するというアプローチの方がよりスマートかもしれません。が、Internet Explorer (以下略)。Internet Explorerでもexpression()
を使ってゴニョゴニョすればmax-width
相当(またはそれ以上)のことが実現可能ではありますけど。
以上は特に画像に限った話ではなく、pre
要素やiframe
要素などのボックス幅で折り返されない要素でも同じ話です。特にAdSenseで利用されているiframe
要素では幅と高さが指定されておりimg
要素とほとんど同じケースです。「AdSenseのせいでレイアウトが崩れてる!」とかあまり笑えない話なので、このようにoverflow
を使ってレイアウトの崩れを回避するようにしておくと「広告うざ・・・」と思われる回数が多少は減ることでしょう。