-

clearfixについて、今の時代にあった主流な記述ってありますか?
Compass (SCSS)の場合、こんな感じですが。。。

overflow: hidden;
*zoom: 1;

みんなの回答 4 件

名無しさんの回答

micro clearfix hackが、すっきりしてていいです。
overflow:hiddenはclearしてるわけではないので、別物だと考えたほうが良いかもですね。

A new micro clearfix hack – Nicolas Gallagher

http://nicolasgallagher.com/micro-clearfix-hack/
.cf:before, 
.cf:after { 
    content:""; 
    display:table; 

 .cf:after {    clear:both;} 
 .cf {    zoom:1;}
名無し

トピ主です。回答ありがとうございます。micro clearfix hack…知らなかったです。こんなすっきりするんですね。勉強になります。

名無しさんの回答

上のブログの中の人です。
上の記事の内容は、1年ほど前のものなので、補足します。

IE6,7を対象にしたclearfixは、今まで通り
*zoom:1;
がベストだと思います。

IE8以上のfloat解除は、複数やり方存在します。

1.overflow
overflow:hidden; または overflow:auto;
どちらでも解除可能です。

2.擬似要素を使用する場合
記事の通り

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

が良いかと思います。

*:after {} も記載していますが、パフォーマンスの問題や:afterを使用した場合にdisplay:blockなどを継承してしまうので、避けたほうがいいかもしれません。
もし、*:afterのように、個別単位でやる場合は、SCSSで@includeよりも、@extendさせて行った方が、コンパイル後のファイルサイズは小さくなると思います。

3.table
あまりおすすめしない方法ですが、
display:table;
でもfloatも解除できます。
ただし、display:table;を使うぐらいなら、display:table-cell;を指定した方がいいと、個人的に思っています。

IE8以上は、3点例を出しましたが、自分のなじみやすいものを、使えばいいと思います。

名無し

横からすみません。display:table;をおすすめしない理由と、display:table-cell;にしたほうが良いと考えているのはなぜでしょうか。後学のために教えていただければ嬉しいです。

名無し

display:table;をすすめない理由は、その要素に対してtable要素と同じように振舞うことに指定しているからです。overflowや擬似要素によるfloatの解除については、親要素の属性(?)を変化させないですが、display:table;を指定することによって、<table> <div class="hoge"></div> <div class="hoge"></div></table>に近い状態になるので、なんらかのバグが潜んでいる可能性も否めないからです。table-cellについては、IE6,7切捨てでいい状況の場合です。table-cellを使用することによって、table要素と同じような挙動することができます。横並びのレイアウトでfloatを使わないでも横並びなるし、並んでいる高さも一致します。vertical-alignを使って、子の要素を垂直の軸の真ん中に配置することもでき、親に隣接する要素が回り込むこともありません。floatに慣れない人にとっては、こっちの方が慣れやすいと思ったからです。ただIE6,7さえなければ。。。

名無し

なるほど、要素への影響を懸念されているのですね。その発送はありませんでした。面白そうなので、ちょっと検証してみます。table-cellについても納得です。時間割いていただいて、ありがとうございました!

名無しさんの回答

トピ主です。回答ありがとうございます。!?・・・なんと、親切に長文のコメントまで頂いて・・・ありがとうございます。(^_^;) overflow:hidden;についての言及もあって、勉強になりました。

最終更新日:2012-08-29 (12,705 views)

関連するトピックス

ページ上部に戻る