隠された詳解:clearfixは+オーバーフローをリローデッド

中| 6時27分に2010年9月27日には、ティエリKoblentzによって午前CSS 101 | 12コメント

著者について:ティエリKoblentzはYahoo!でフロントエンドエンジニアです
彼が所有しているTJKデザインEZ-css.orgを あなたがでTwitterでティエリーに従うことができます@ thierrykoblentz

clearfixoverflowhidden構造的なマークアップなしでフロートをクリアするには、2つの最も人気のあるテクニックかもしれません。

この短い記事は、最初の方法を強化し、第二の本当の意味でいくつかの光を流しています。

clearfix

あなたはclearfix知っているすべて間違っている我々はまだマージンを崩壊に対処しなければならない者としてものの、私はこの方法ではブラウザ間で作成する問題を説明し、私浮動小数点数(モーダルウィンドウなど)が隣接していない要素にclearfixを使用することをお勧め。 このデモページには、問題を示しています。

のマージン崩壊挙動最初の二つのボックスは、それはボックス(理にかなっている内部の下マージンを保持し、生成された( 非空 )コンテンツであることを示している仕様による )。

したがって、ブラウザ間で同じボックスのレイアウトを作成する我々は両方擬似要素を使用してコンテンツを生成することによって、元のメソッドを向上させることができます:before :after

  。clearfix:前に、
 。clearfix:{の後に
  内容:; "。"    
  表示:ブロック;    
  高さ:0;    
  オーバーフロー:隠された;	
 }
 。clearfix:の後に{クリア:両方;}
 。clearfix {ズーム:1;} / * IEの<8 * / 

あなたが他のメソッドを介してマージンを崩壊に関連して既にパッチを当てた問題が発生する可能性があり、単にしかし、 既存のプロジェクトでこれらの新しいものを使用してclearfixのルールを置き換えるものではありません。

overflow

決済に関するほとんどの議論に浮かぶoverflow:hidden方法が現れ、それは常に"によって撃墜されたあなたは、div内の絶対座標で配置された要素を配置している場合、あなたはこれらの要素を切断されるだろう "。 しかし、これは本当の必要はありません。 overflow:hidden常に相対的に配置された要素をクリップしますが、それは常に絶対座標で配置されたものを非表示になりません。 それがすべて包含ブロックに依存しているため、これは次のとおりです。

"包含ブロック"の10.1定義

4。 要素は、 'の位置:絶対的な"を持っている場合は、包含ブロックは、最も近い先祖によって確立される"位置" 、 "絶対"の、 "相対的な'または'固定'、...

これは絶対座標で配置された要素がでスタイルボックスの外側に表示されることを意味overflow:hidden彼らの包含ブロックは、ボックス自体または前記ボックス内の要素である場合を除きます

ことが確認できます。 このデモページを物事がどのように動作するか確認する。

より良い代替

あなたは浮動小数点数を含む要素に幅を適用することできた場合は、あなたの最良のオプションは、使用することです。

 表示:インラインブロック;
幅:<any明示VALUE>。 

参考文献

共有および拡張: del.icio.usでブックマーク | Diggそれ! | reddit!

12コメント

  1. オーバーフローのためにありがとう:隠された謎解き。 私のデフォルトの "clearfix"ソリューションとして隠されて、時には私がために絶対にボックスの外側に配置された要素の別の(または私がすると思っていた)を選択しなければならなかった:私はオーバーフローを使用する傾向があります。 今、私はそれが私が思ったより微妙な知っている。

    ディスプレイ:テーブルがあまりにも動作しますが、その後、位置は使用できません:その要素の相対的な。

    によるコメントフロランV. - 2010年9月27日

  2. これは良い点です。 テーブルまたは表示:テーブルのセル、この制限を認識していません私はディスプレイを使用している多くの人々は確信しています。

    ご意見をお寄せいただきありがとうございます。

    によるコメントティエリKoblentz - 2010年9月28日

  3. IE6、IE7、IE8であなたの "より良い代替手段の作品をしていますか?

    によるコメントホルヘEpuñan - 2010年9月30日

  4. @ホルヘ

    はいそれは、実際にはIE 5.0で動作しません+

    ロジックは、 "インラインブロック"は、IE 8や他のモダンブラウザでのブロックの書式コンテキストを作成しながら、すなわち5,6,7に明示的な幅はhasLayoutをトリガすることです。

    ボックスは "インラインブロック"シュリンクラップとしてスタイルので、幅は、物事はボードでも越えて動作させるための鍵となります。

    記事によればこれはなぜです: "あなたは浮動小数点数を含む要素に幅を適用することができたら..."

    によるコメントティエリKoblentz - 2010年10月1日

  5. 表示使用して周りのプレイ:インラインブロック&幅を私はいくつかのバグを発見しました。

    div要素の間にスペースがある場合、それはdiv要素の間にスペースとして示されたされます。
    垂直方向の配置は地獄です。 @ティエリーは、どのようにそれを使うのですか?

    ここで私の試みを見てみましょうhttp://jsfiddle.net/UZr7L/

    によるコメントマイケルLajlev - 2010年10月10日

  6. @マイケル

    私は(少なくともレイアウトのための)兄弟である要素にそれを使用していますが、何を経験していることはバグではありませんので注意していません。
    文字間隔と単語間隔を(負の値)を使用して、これでYUI 3のグリッド情報。

    によるコメントティエリKoblentz - 2010年10月11日

  7. 以下の生鮮プレスのこのコメント 、私は私が上記のclearfixのルールを更新しましたそこにタイプミスがあったことに気づいた。
    他の方法とは異なり、それがオーバーフローを使用しています。可視性、 隠されて いない :隠された。

    おかげでダレン問題:)を高めるための

    によるコメントティエリKoblentz - 2010年10月22日

  8. 明らかに使用して、 content: "020" clearfixのためにすることも良いです。

    unwiredbrainによるコメント- 2010年10月28日

  9. イテッ! WordPressは私のコードを噛んだ!

    それがあったcontent: " backslash zero zero two zero "

    unwiredbrainによるコメント- 2010年10月28日

  10. @ unwiredbrain

    あなたは "可視性:隠された"を使用する技術に言及されていますが、私が使っていると、 "オーバーフロー:隠された"であるので、それは違いを作るべきではありません。

    ご意見をいただきありがとうございます

    によるコメントティエリKoblentz - 2010年10月28日

  11. ああ。 私は、2つを混同している必要があります。 そのため申し訳ありません。

    unwiredbrainによるコメント- 2010年10月28日

  12. 見事。 私は、HTML5のボイラープレートの一部としてすべてのプロジェクトでこれを使用しています。 私は決まり文句のすべてを使用しませんが、。clearfixは常に便利です。 ありがとう!

    によるコメントYJ - 2011年5月10日

申し訳ありませんが、コメントフォームは、この時点でクローズされます。

ヤフーが主催する

著作権©2006-2012ヤフー株式会社すべての権利を保有。 プライバシーポリシー - サービス利用規約

を搭載ワードプレスヤフー ウェブホスティング