MT100本をAmazonで購入!

clearfixを使わないでやるには。

11月09日(日)23:39

category
CSSテンプレート, ビジュアル・小技
2008年11月11日お昼頃
overflow部分を一部加筆しました。

ウチのとあるページのコメント数が28になって、何となく嬉しい今日この頃。

さて、今回はこんなタイトルですけど、こんなエントリーをしようと思ったのは、floatを指定した要素の親要素の高さが算出されない時の解決手段として、clearfixでぐぐれみたいなのをよく見かけたり、あまりにもclearfixが有名だから、最近CSS覚えた人とかは、もしかしたら知らないのかなぁ~なんて思ったのです。

なので、一応基本に戻ってみましょうということで。
最近、「CSS Nite ビギナーズ」とかもやってますしね。

あ、clearfixを知らない方は、clearfix|CSS HappyLife辺りか適当にぐぐってくださいませ。

---- こっから続き

何か、久々に書いてる気がして、どうやって書いてたか思い出せない...

えっと、そもそもどんな状況の時かっていうと以下のような時。
キャプチャ:枠からはみ出てる

こんな時に、clearfixを使ったりすると思います。
毎度用意しているサンプルは、以下より。

サンプルを見てもらえば大体分かるかと思いますが、clearfixを使わない場合は、float、overflow、min-heigtプロパティ辺りでやるのが主だと思います。

全サンプルで共通しているスタイルは、以下のようになってます。

#main .section {
	margin: 10px 0 20px;
	padding: 10px;
	background: #fff;
	border: 1px solid #ccc;
}
 
#main .section p {
	float: left;
	width: 360px;
}
 
#main .section p.image {
	float: left;
	width: 128px;
	margin: 0 10px 0 0;
}
 
#main .section p.image img {
	vertical-align: top;
}

この状態だと、ダメなのでちゃんとしてあげるためにclearfixを使うと以下のようになります。

#main .section:after {
	content: ".";
	display: block;
	visibility: hidden;
	height: 0.1px;
	font-size: 0.1em;
	line-height: 0;
	clear: both;
}
 
#main .section {
	zoom: 1;
}

zoom使ってますが、独自拡張とか使うのが嫌な人はwidthプロパティの指定をしてもOKです。

一応ここからが本題の、clearfix以外でやるには。ですが、ボクが多く使うのは、overflowを使った方法。
以下のような感じです。

#main .section {
	overflow: hidden;
}
 
* html #main .section {
	height: 1%;
}

見た感じ、clearfix使うよりすっきり!
あ、これもIE6用のハックが嫌な場合は、widthプロパティの指定でもOKです。
widthの計算が面倒だったり忘れてる場合が多いから出来るだけ入れたくない人なんです...
後、もうちょっとまともな理由としては、横幅が変わってもwidthの指定が無ければ使い回しが楽ってのもあります。

なお、overflowの値は「hidden/auto/scroll」のいずれかでOKです。
あんまり覚えてないんですけど、hiddenが一番安定してた気がします。

とても良さ気に書いてますが1つ注意点として、overflowは印刷の時に、一部のブラウザで1枚に印刷できないときに改ページせずに消えてしまう時があり、全体を囲ってるdivとかで使ってしまうとよろしくないので、サンプルのようにメインエリア内の一部とかで使うのがいいと思います。
(Firefox2までだったと思う...)

overflowで高さが算出されるのは、2.1の仕様にそんな感じのことが書いてあります。
たぶんこの辺↓
10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'

英語は頭痛くなるので次。
floatでやる場合は以下のようになります。

#main .section {
	float: left;
}

floatしてる親要素もfloatさせることで、floatのルールが適用されて高さが算出されます。
ただ、floatを使ってやるとマージンの相殺がされないので、余白が変わってしまったり、widthプロパティの指定が無いとレイアウトが崩れたり、後続する要素にclearプロパティの指定が無いと一部のブラウザで崩れたりと、他の処理が面倒になってくるので使い勝手としては微妙かもしれません。(昔はこの方法しか知らなかったので良く使ってましたが)

min-heightプロパティを使ってやる場合は以下のような感じです。

#main .section {
	min-height: 128px;
}
 
* html #main .section {
	height: 128px;
}

コレが使える状況は限られていて、テキストが少なくて、今後を見越したときも明らかに長いテキストは入らないだろうって思える時に加え角丸があった場合に使ったりしてます。
なので、当然テキスト量が多かったり極端にフォントサイズを上げると枠からはみ出してしまいます。

ざっとこんな感じです。

各種SBMに追加
  • Hatenaブックマークに追加
  • del.icio.usに追加
  • POOKMARK Airlinesへ追加
  • livedoorクリップへ追加
  • ニフティクリップへ追加
  • newsingへ投稿
  • Redditへ追加

Track Back [3]

clearfixを使わないでやるには。

ウチのとあるページのコメント数が28になって、何となく嬉しい今日この頃。さて、今...

by ホームページ制作のためのリンク集|2008年11月10日(月)

有名ビジネスソフトの無料クローンをいろいろ紹介

あとで新聞 - 2008年11月11日(火)から 可読性が高い、使いやすそうなフリーフォント集 | コリス アルファベットのフォントを紹介。weezer...

by メシウマ状態 飯の旨いおかずがてんこ盛り|2008年11月11日(火)

ブラウザによるレイアウト崩れ防止のおまじない clearfix

私のお気に入りのブラウザはfirefox です。 でも、firefoxで見るとレイアウトが崩れているサイトって、まだまだたまにありますね。。 I...

by うぇぶねた帖|2009年08月15日(土)

comment [7]

1 - Sig. さん

僕がこの手法を初めて知ったのは、QuirksModeの記事ですね。
> http://www.quirksmode.org/css/clearing.html

コンテナブロックに「幅か高さ」を指定した後、overflowプロパティの値として「hidden/auto/scroll」の何れかを指定してやれば上記clearfixと同じ結果が得られる、みたいな内容。併せて紹介すれば、より解りやすいかも!

URL|2008年11月10日 16:38

2 - Alice さん

はじめまして、いつもこっそり拝見させていただいております。
ひとつ質問がありまして…。Javascriptに関しては全く無知なのですが、いろいろとサイトを見やすくしたいと思った時に、「自分が使いやすいと思ったJSを混ぜ混ぜしてみる」記事を拝見し、
"Thickbox"を使用してみようと思って設定?をしたのですが、
画像が大きすぎるせいか、原寸で表示されずやや縮小されてしまうのですが、どうすれば原寸が出るようになるかもしわかるようでしたら教えて頂きたいです…。Jacascriptを見たのですが、解読できずという現状です。スクリプトの中身?をいじるような感じだと思うので、もし何かアドバイスありましたらよろしくお願いいたします。

2008年11月10日 16:56

3 - M さん

失礼します。
今まで作っていたサイトのclearFix使っていた部分が、IE8beta1でくずれていたので(泣)、解説策を探してココに着きました。

私はこれまで以下のものつかっていました。
-----------------------------
.clearFix:after{
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearFix{display:inline-block;}

/* Hides from IE-mac \*/
* html .clearFix{height:1%;}
.clearFix{display:block;}
/* End hide from IE-mac */
-----------------------------

長いですよね・・・。
そしてココでclearFixを使わない方法に出会って感動です!
ありがとうございます。
早速「overflow: hidden;でやってみる。」を試してみたのですが、場合によってWinIE5.5では表示が崩れてしまうようですね。
もうIE5.5なんて不要かと個人的には思ったのですが、たまたま以下のように入れたら表示がキレイになりました。
(MacSafari・WinSafari・WinIE5.5,6,7,8beta1・WinFirefox2)
-----------------------------
.clearFix {
overflow: hidden;
}
* html .clearFix {
zoom: 1;
}
-----------------------------

もしかして偶然でしょうか・・全く理解せず呪文のように使っているので、自信がありません・・。
今から作るサイトは一旦これでためしてみようと思います。

2009年1月19日 16:41

4 - No Name さん

はじめまして。
今更だと思うのですが、これってheightにハックを使う意味あるのでしょうか?
heightを%指定にして値を100%以上にしなければ良いと思うのですが・・・

http://www.mozilla.gr.jp/standards/webtips/webtips0032.html

親要素にheightを指定したくないからclearfixを使うので条件的にもぴったりだと思います。
もちろん古いoperaやnetscapeなどでは問題が出ると思いますが、チェックから外すことも多いのではないかと。

2009年5月 1日 00:32

5 - keiko さん

はじめまして。
clearfixって有名なんですか?そんなの知りませんでした。
CSSを独学で勉強したはいいものの、どーーしてもBOXがはみ出る。テンプレートを使うと、長いページも短いページもあり、高さを指定できない。私の作り方が悪いのかと思い何度もやりました。ごはんも食べれない位、寝れない位悩んでいました。3キロ痩せました。これを手掛かりに解決しそうです。本当にありがとうございましたー。

2009年6月27日 02:14

6 - aks さん

overflowを使った方法はfirefox1やNNで表示がおかしくなるのでできる限り使用を避けたいところです。
また、zoomを指定する方法もCSS validatorに引っかかります。

色々試していても結局clearfixに戻ってきてしまいますよこれは。

2009年11月19日 15:31

7 - hirasawa さん

>aksさん
その考え方なら特に問題無いと思います。
ボクは、firefox1やNNを対象にしていませんし、CSS validatorに引っ掛かるからといって使わない理由にはならないので。

URL|2009年12月 4日 01:14

コメント投稿フォーム

post your comment

※コメントが認証されるまで、コメントは反映されません。ご了承くださいませ。

ブログパーツ

フィードメーター - CSS HappyLife

Feeds購読数

あわせて読みたい

change color or layout
  • デフォルトカラー
  • 薄い青
  • 青緑
  • 緑
  • 青
  • 薄い紫
  • ピンク
  • 黄金
  • 茶
  • 赤
  • 黒
  • 白
  • シルバー
  • 2カラム(カラーはデフォルト)
  • リキッドレイアウト(カラーはデフォルト)

ページトップへ