floatを解除するclearfixの使い方・書き方を簡単に紹介!

floatを解除するclearfixの使い方・書き方を簡単に紹介!

CSSのfloatを使うことで横並びのレイアウトが出来ますが、floatを使うとデザインが崩れ思い通りにいかない事があります。その問題はclearfixを使うことで対処することが出来ます。clearfixとは何か、使い方・書き方について紹介していきます。


目次[非表示]

  1. clearfixとは何?
  2. clearfixの使い方
  3. clearfixの書き方
  4. まとめ

clearfixとは何?

みなさんはHTML・CSSを使ってて、floatで横並びのレイアウトを作成している際に「clearfix(クリアフィックス)」を使っていますでしょうか?

clearfixを理解するためにflaotを使って横並びレイアウトを実現している例を見てみましょう。

下記例ではメインのコンテンツ(左・右)、フッターを並べている例です。

ここで注目してほしいのは、結果でオレンジのフッターが一番上に表示されていて、赤・青の要素と重なっている点です。

floatを使うとコンテンツが浮く

CSSのfloatは「浮く」という意味です。「浮く」とは要素がこれまでぎゅうぎゅうづめされていて、積み木のように配置されていた盤面から浮くイメージです。

floatで要素が浮いた

先程の例では左・右が浮いていますので、その隙間に下にあるフッターが入って重なったために、フッターが見えていない状態になっていたのです。

このように左・右とfloatをつけた要素が浮いて高さがとれなくなったために、それらを囲っているmainの高さも算出されずこのような現象が起きています。

clearfixを使う

ではclearfixを使って先程の問題を対処してみます。

いかがでしょうか。こちらの例ではしっかりと左・右の高さが算出されていて、今まで表示されていなかった緑の領域が出来て、その分フッターが下部に配置されています。

追加したclearfixのCSSは下記の通りです。

.clearfix:after {
  content: "";
  display: block;
  clear: both;
}

  • 「:after」ですので、clearfixクラスの後に適用
  • 「content: ""」で空の文字列を挿入
  • 「display: block」でblock要素に変更
  • 「clear:both」でfloatを解除。
clearはfloatプロパティを解除する機能を持ちます。bothを指定することでfloatの「left」「right」のどちらにも対応できます。

要するにclearfixというクラスをつけて、続く要素のために、flaotを解除しているのです。

clearfixの使い方

clearfixでfloatを解除

clearfixは上記の例で見たように、floatで横並びした要素の親要素に対してclearfixを適用する使い方をします。

clearfixというクラス名(クラス名は任意)を作成し、それのafterの擬似要素に対して「clear: both」を含む下記のスタイルを適用します。

.clearfix:after {
  content: "";
  display: block;
  clear: both;
}

下記はclearfixを使った3カラムの横並びの例です。各カラムの高さがちゃんと算出されて、オレンジのフッターがその下部に来ていますよね。

clearfixの書き方

floatを解除するclearfixについて見てきましたが、clearfixの書き方についてはいくつか種類があります。

clearfixの書き方の種類の違いとしては対応しているブラウザの違いや、先程の例ではafter要素を使っていますが、他の要素を使った書き方などclearfixのやり方が異なっています。

それではいくつかclearfixの種類をご紹介していきます。

micro clearfix

こちらは今回ご紹介する他のclearfixに比べても短く描けるclearfixです。Firefox 3.5以降、Safari 4以降、Chrome、Opera 9以降、IE 6以降に対応しています。

/**
 * For modern browsers
 * 1. The space content is one way to avoid an Opera bug when the
 *    contenteditable attribute is included anywhere else in the document.
 *    Otherwise it causes space to appear at the top and bottom of elements
 *    that are clearfixed.
 * 2. The use of `table` rather than `block` is only necessary if using
 *    `:before` to contain the top-margins of child elements.
 */
.cf:before,
.cf:after {
    content: " "; /* 1 */
    display: table; /* 2 */
}

.cf:after {
    clear: both;
}

/**
 * For IE 6/7 only
 * Include this rule to trigger hasLayout and contain floats.
 */
.cf {
    *zoom: 1;
}
A new micro clearfix hack

Position Is Everything版

下記サイトで紹介されているclearfixです。

<style type="text/css">

  .clearfix:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
    }

</style><!-- main stylesheet ends, CC with new stylesheet below... -->

<!--[if IE]>
<style type="text/css">
  .clearfix {
    zoom: 1;     /* triggers hasLayout */
    }  /* Only IE can see inside the conditional comment
    and read this CSS rule. Don't ever use a normal HTML
    comment inside the CC or it will close prematurely. */
</style>
<![endif]-->
Clearing a float container without source markup

結局どれがいいのか?

clearfixの書き方に違いがあれど、HTML初心者の方からすると、いずれもモダンなブラウザについては「floatを解除する」という大前提は抑えているので、どのclearfixを使ってもいいかと思います。

今回ご紹介したclearfixをコピペして使えばfloatが解除されます。

しかし「マイナーだけど、このブラウザもサポートすべきだよね!」「こちらの方がスマートな書き方じゃない?」と後から要望が出てきたと時に最新のclearfixの書き方を調べて拘るという順番でいいかと思います。

まとめ

いかがでしたでしょうか?

HTML初心者の方がfloatの横並びを覚えて興奮し、そしてすぐにデザインが崩れて挫折する事はよくあるかと思います。clearfixはfloatによるレイアウト崩れの救世主になれる存在です。

ぜひclearfixの使い方・書き方をマスターして、floatとともに使いこなしましょう!


またclearfixを試してみたけどclearfixが「効かない」問題で困っている方はぜひ下記の記事を参考にしてみて下さい。

【初心者向け】clearfixが効かない場合の原因と対処法をご紹介!

「clearfix」はfloatを使ってHTMLで横並びのレイアウトを作った際にfloatを解除する目的で使われます。しかし開発をしていてこのclearfixが効かないという場合があります。今回はclearfixが効かない場合の原因と対処法についてまとめました。

Thumb