ど素人から毛を生やす。<延>

floatが効かないとき

Web > css 2014年2月10日(最終更新:3年前)

このページは2014.2.10に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。
一人が楽しすぎる餅。です。

2014/10/09 当サイトの中でも特にアクセス数の多い記事のようなので、改正版に差し替えました。

floatが上手く行かないときは

取り敢えず回りこまされるコンテンツにoverflow:autoを設定します。
(imgとpがあってimgがfloatならpの方)

floatとはどのような状態か

floatを指定すると、続く要素を回りこませることができます。
このとき、親要素にはfloatの高さや幅は認識されなくなるので、clear:bothなどで回りこみを解除するか、回りこまされる要素がfloatの要素より大きくなるように設置しなければfloatの要素は親要素をはみ出ることになります。

親要素等に高さや幅の情報を認識されなくなるcssとしては、position:absolute(あるいはfixed)がありますが、こちらは要素が回り込まず、positionを設定した要素の下に潜り込みます。

h261009_1

が、このとき、回りこまされている要素がfloat状態でない場合、その要素の位置情報はposition:absoluteのときと同じです。

h261009_2

list-styleで設定したリストのマークや、before要素などは要素の頭の位置を基準に表示されるので、上図の場合はマークやbeforeが表示されない状態になります。

あるいは、当初この記事を書いたときの状況では回りこませる要素が半角で改行なしの場合だと、回りこんでくれないこともあるようです。

overflow:autoを設定したらどうなるのか

overflowを設定すると、flowした要素の位置情報が認識されるようになります。

値はauto以外にも、scroll・hiddenでも大丈夫です。
hiddenは、はみ出たコンテンツを容赦なく消すため、取り敢えずautoを使うことをお勧めします。
しかしautoやscrollだと内部のcssの設定次第でス要らないクロールバーが出てしまうこともあります。
その場合はoverflow:hiddenに設定したほうが良いでしょう。

h261009_3

但し、ブロック要素は「ブロック要素のまま」回りこまされるので、floatの要素が終わっても回りこみは解除されません。
サイトの状況によっては、やり方を考慮する必要がありそうです。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (2)
  • (`・ω・´) 役に立った (3)
  • (・∀・) 参考になった (4)