• ベストアンサー

回り込み解除(clearfixとの違いは!?)

http://www.u-ziq.com/blog/2007/01/css_1.html こちらのサイトに書かれている回りこみ解除のやり方は、 clearfixとは異なるのでしょうか?? clearfixについて調べると、 以下のように記述するようですが .clearfix:after { content: "."; /* 新しい要素を作る */ display: block; /* ブロックレベル要素に */ clear: both; height: 0; visibility: hidden; } .clearfix { min-height: 1px; } * html .clearfix { height: 1px; /*\*//*/ height: auto; overflow: hidden; /**/ } http://www.u-ziq.com/blog/2007/01/css_1.htmlのサイトのやり方のほうが短く、シンプルですよね?? 考え方が違うからなのでしょうか? 分かる方、ご教授お願いします><

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

リンク先の中のzoomというのがIE5.5以降の独自拡張なので、チェックをかけると正しくない文法になります。 つまりリンク先のclearfixはIE5.5以降とモダンブラウザ対応でエラーの出るのテクニックです。 質問者さんの書かれているcssの記述はmin-heightがIE7用、height1pxがIE6以下用、height:auto;とoverflow:hidden;がmacIE用に指定されています。 ソース中の /*\*//*/ /**/ の部分がコメントアウトとして、スターハックも今のところ正しい文法として評価されているのでこの書き方だとエラーになりません。(建前上ですが) この書き方ならIE5.0にも対応できるのはメリットです。 IE5以降とモダンブラウザ対応でエラーの出ないテクニックです。 また、独自拡張を使ってもいいのであればこんな書き方もできます。 .clerafix { height:1%; line-height:normal; overflow:hidden; overflow:-moz-scrollbars-none; /* Netscape 6.2~7.1 and IE5~6 */ } ですが、1さんも言われていますが普段は使わない方がいいと思います。 デザインによってはHTMLに無駄な要素を追加しないので重宝しますが、ハックに精通してないとどこまで対応しているのかわからないので逆に修正に時間がかかったりします。

infinity38
質問者

お礼

分かりやすいご回答ありがとうございます。 使わずに組み立てられるよう頑張りたいと思います! ありがとうございました☆

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

まったく同じこと書いてあるけど??? clearfixって単なるclass名だよ。 ふつうは、そもそもこんなことしなくても、ちゃんとしたHTMLで、詳細度が理解できていれば、こんなややこしいことしなくてもすむ。  たぶん、出所は一緒だろうね。  そもそも、セレクタにclass名しか使わないから、こんなおかしな複雑なCSSを書かなきゃならなくなる。 ・HTMLがきちんとかかれてない  ---class名にclearfixなんて、デザインのためだけと明白な名称をつける時点で    技量なしだな? ・セレクタには、全称/要素/クラス/一意/擬似/属性/・・と使える手段はたくさんある。  馬鹿の一つ覚えみたいにclassだけしかない時点で? ・回りこみ解除はclear: ・HTMLはきちんとマークアップしましょう。(文書構造にしたがって) ・セレクタには詳細度が決められています。それを使えばむやみにclass名はつけなくてすむ ・clearbothと、それと併用することがあるdisplay:hiddenには、ブラウザによって多少処理が異なるので、それでも差しさわりのないように文書を作りましょう。そんな細かいことに労力を使うのは無駄、膨大な数のブラウザに対応させるのは無理

infinity38
質問者

お礼

もっと簡単に可能なのですね! 正しくシンプルに書けるよう勉強してみます。 素早い回答、ありがとうございます☆

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • clearfixについて

    clearfixについて .clearfix:after { content: "."; /* 新しい要素を作る */ display: block; /* ブロックレベル要素に */ clear: both; height: 0; visibility: hidden; } .clearfix { min-height: 1px; } * html .clearfix { height: 1px; /*\*//*/ height: auto; overflow: hidden; /**/ } clearfixの:afterとcontentを使ったclearのやり方自体は分かるのですが、IEのバグ直し用の .clearfix { min-height: 1px; } というところがなぜmin-height: 1px;なのか意味がよく分かりません。

    • ベストアンサー
    • HTML
  • clearfixの存在意義

    この間、紹介して頂いたclearfixについて調べました。 clearfixについては賞賛しているサイトが多く、 良いものであるということは理解できました。   その理由が clear:both を実行するための余分な タグを書かなくても済むという内容でした。 それならばclearfixを実現するためにCSS内で かなり冗長なコードにするのに疑問を感じました。 そうまでしてもHTMLは簡潔に書くべきなのかと。 そこでもう少し調べていたら次のサイトに到達しました。 ここでは clear:both でのレイアウトの乱れを指摘しています。 http://webdesignrecipes.com/css-tips-for-beginner-ie7/#s4 最もらしい説明で、やはり clearfix を賞賛しています。 しかし、その後の説明で親要素に overflow:hidden を あてるのが流行?なのだそうです。 かくいう私どものソースも偶然にも overflow:hidden になってます。 これを clearfix に置き換えるべきか悩んでいます。

    • ベストアンサー
    • CSS
  • clearfixの記述の仕方

    サイトでclearfixを使わないと親要素の高さがなくなってしまうのは分かったのですが clearfixをどこにどのように記述したらいいのかが今ひとつ分かりません もし、お分かりの方いましたらご教授下さい。 以下の記述を探したのですがこれをどこかに記述すれば親要素の高さがでるのでしょうか? /* モダンブラウザ(Firefox Opera Safari)対策 */ .clearfix:after{ content:"."; display:block; height:0; clear:both; visibility:hidden; font-size:0; } /* Win版IE7とMac版IE5対策 */ .clearfix{ display:inline-block; } /* Win版IE5および6対策 */ /* Hides from IE-mac \*/ * html .clearfix{ height:1px; } .clearfix{ display:block; } /* End hide from IE-mac */

  • CSS Validatorでエラーの出ないclearfixハックとは

    W3CのCSS ValidatorでCSSをチェックしていますが、 フロートをクリアするための記述に問題があり、 正当なCSSと判断されません。 Validatorでエラーの出ないclearfixハックをご存知の方、 アドバイスをお願い致します。 関係あるかわかりませんが、一応書いておくと htmlの記述は「XHTML 1.0 Strict」で行っております。 以下、エラーが出ているclearfixの記述です。 /*------Floatのclearfix*/ #header:after{ content:"."; display:block; height:0; clear:both; visibility:hidden; } #header{ display:inline-block; } /*clearfix Win版IE7・Mac版IE5対策*/ *html #header{ height:1%; } #header{ display:block; } Validatorが問題としている箇所は、下記の部分です。 *html #header{ height:1%; } 現在、悩みすぎて泥沼状態です。 どうも他の対策を思いつく余裕がなくなってきました。 申し訳ありませんが、皆様のお力をお借りしたく、 投稿させて頂きました。 なお、clear:both;の場合、完全にクリアされないことが あり、あまり使いたくない状況です。 何か良い対策方法があれば、アドバイスをお願い致します。

    • ベストアンサー
    • HTML
  • ナビゲーションバーのfloatを解除できない。

    以上二つのソース(HTMLと,CSS)を用意しました。 top_naviのfloatを解除して その下に、画像の表示をさせたいのですが、(添付画像、ピンクエリア) top_naviの続きに、【div class="slideshow"】の画像表示エリアが表示されてしまいます。 (添付画像 水色のエリア。) 【<!--<div class="clearboth"></div>--> を使用すれば、思い通りに表示されるのですが、 clearfixの方法で解除したいと思っております。】 また、IE6~9、firefox10~11で動作させたいと思っております。 ご教授お願いします。 ==HTMLソース=== <div id="container"> <div id="top_navi"> <ul> <li>リンク1</li> <li>リンク2</li> <li>リンク3</li> </ul> </div> <!--<div class="clearboth"></div>--> <div id="show" class="slideshow" align="center"> <img src="photos/1.jpg" alt="画像の説明" width="960" height="300" border="0"> </div> </div> ==HTMLソースここまで=== ##CSSソース## *{ padding : 0px ; margin : 0px ; } #container{ width : 960px; border: 3px solid #FF9900; margin : 5px auto; } //navi設定部分ここから #top_navi { height: 1.3em; background-color: #3399FF; } #top_navi ul { padding: 0px; margin: 0px; list-style-type: none; } #top_navi li { float: left; width: 100px; height: 1em; text-align: center; padding: 0px; margin: 0px; } #top_navi li a { color: #0000FF; display: block; } #top_navi li a:hover { color: #FFFFFF; background-color: #000080; height: 1.3em; } //navi設定部分ここまで //naviとslideshowの間をclearfixする。 .clearfix:after { content: "."; /* 新しい要素を作る */ display: block; /* ブロックレベル要素に */ clear: both; height: 0; visibility: hidden; } .clearfix { min-height: 1px; } * html .clearfix { height: 1px; /*¥*//*/ height: auto; overflow: hidden; /**/ } .clearboth{ clear: both; } ##CSSソースここまで(一部抜粋)

    • ベストアンサー
    • CSS
  • 【CSS】clearとvisibilityについて

    【CSS】clearとvisibilityについて こんにちわ。いつもみなさまのご助言に大変感謝しております。 標記の件ですが、CSSの勉強をしていましたところ、いかのようなコードがあり、気になりました。 .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } この場合、クラス"clearfix"で括られているエリアの末端には「.」が入りますが、visibilityプロパティにより非表示とされることで文字通り画面上にはピリオドが 存在しない形式になっていますが、そもそもなんでこんなcontentプロパティやvisiblity プロパティを使っているのでしょうか。 .clearfix:after { display: block; height: 0; clear: both; } これだけだと何か不都合が生じるのでしょうか。

    • ベストアンサー
    • HTML
  • clearfix の後marginが効かない

    はじめました。web制作初心者です。 ご教授お願い致します。 グローバルナビゲーションを<li>で作り、それをfloatして横並びにし、マウスオーバーするように指定しました。その後、最初はclear:bothを指定していたのですが、ネットで「clearfix」の方が良いとのことでしたので初めて使いました。 すると次の<div>以降のmargin-topが効きません!! 今のブラウザはIEです。 <div id="wrapper"> <div id="navi"> <ul> <li class="menu"><a href="" title="お品書き" class="active">お品書き</a></li> <li class="drink"><a href="" title="ドリンク">ドリンク</a></li> </ul> </div> </div> <!-- ++++++++++++++++++++ E N D navi SECTION ++++++++++++++++++++ --> <!-- ++++++++++++++++++++ BEGIN contentss SECTION ++++++++++++++++++++ --> <div id="contents" class="clearfix"> <div id="left">   <div id="kodawari"> <img src="image/top_bar_coment.jpg" alt="###" width="635" height="40" /> </div> </div> </div> </div> #wrapper { width: 900px; } #navi ul, #navi ul li{ float: left; } /* afterに対応したブラウザ向け */ #contents .clearfix:after { content: "."; display: block; clear: both; height: 0; visibility: hidden; } /* IE6 */ * htm .clearfix { height: 1%; } /* IE7 */*:first-child+html .clearfix { height: 1%; } #contents { width: 900px; padding-top: 5px; padding-right: 13px; padding-left: 12px; } #contents #left { width: 660px; margin-top: 15px; ←これが効かない } ごめんなさい。このCSSでわかりますでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • CSS
  • IE8で印刷時に背景が出ない(Floatを内包する要素)

    IE8で印刷時に背景が出ない(Floatを内包する要素) 以下の内容のページを印刷の際、IE8で#wrapの内容が複数ページにまたがるときだけ#wrapの背景画像がうまく表示されません(最終ページのみ背景が出ます)。 firefox、IE6、IE7では問題なく印刷されます。 clearfixの仕方に問題があるのかと削除して試しても結果は同じでした。 他に原因が思い当たらず困ってるのですが、アドバイスをいただけないでしょうか? ※css #wrap { width: 850px; background-image: url(../_images/common/wrap_bg.gif); background-repeat: repeat-y; margin-right: auto; margin-left: auto; margin-top: 0px; } #main_contents { width: 600px; float: right; } #side { width: 250px; float: left; } .clearfix:after { content: " "; display: block; visibility: hidden; clear: both; height: 0.1px; font-size: 0.1em; line-height: 0; } .clearfix { display: inline-table; min-height: 1%; } @media print{ .clearfix:after{ content:"."; display:block; height:0; clear:both; visibility:visible; } } ※HTML (前略) <div id="wrap" class="clearfix"> <div id="main_contents">~</div> <div id="side">~</div> </div> (後略)

  • CSS リスト 外枠から文字と画像がはみ出る clearfix

    |ーーーーーーーーーーーーーーーーーー| ||ーーーー| →1111 →444 →777 | || 画像 | →2222 →555 →888 | ||ーーーー| →3333 →666 →999 | |ーーーーーーーーーーーーーーーーーー| 質問お願いします。 上記のように、左に画像があり、その横にリストが3つ並んでいる状態で1pxの外枠をつけたいのですが、 外枠が上一行目の所までしか囲んでくれません。 (※→は矢印の画像です) CSSの方に入っている.clearfixを使うとよいそうですが、 HTMLのどの部分に入れても上手く表示されません…。 どのように使えばいいのでしょうか? またどこか間違っている所があるのでしょうか? よろしければご教授ください。 ソースです。 --------------------------------- html <div class="box"> <img src="000000.gif" class="imgL"/> <ul> <li><img src="img/yajirusi.gif" /> 1111</li> <li><img src="img/yajirusi.gif" /> 2222</li> <li><img src="img/yajirusi.gif" /> 3333</li> </ul> <ul> <li><img src="img/yajirusi.gif" /> 4444</li> <li><img src="img/yajirusi.gif" /> 5555</li> <li><img src="img/yajirusi.gif" /> 6666</li> </ul> <ul> <li><img src="img/yajirusi.gif" /> 7777</li> <li><img src="img/yajirusi.gif" /> 8888</li> <li><img src="img/yajirusi.gif" /> 9999</li> </ul> </div> --------------------------- css .imgL { float: left; margin: 0 10px 10px 0;} .box { border:1px #CCCCCC solid; padding:5px;} .box ul{ float:left;} .clearfix:after { content: "."; display: block; clear: both; height: 0; visibility: hidden; } .clearfix { display: inline-block; } /* exlude MacIE5 \*/ * html .clearfix { height: 1% } .clearfix {display:block;} /* end MacIE5 */

    • ベストアンサー
    • HTML
  • floatを使って画像にテキストを回り込ませて解除する時

    floatを使って画像にテキストを回り込ませて解除する時 clear:both;などを使うけど、テキストの量が少ないと上手く解除されないですよね。そのとき、下記のようなCSSを書くのですが、これだとMacのIEではうまいこと解除できていません。 どう書いたら良いでしょうか? 【HTML】 <div class="box"> <img> <p>テキスト</p> </div> 【CSS】 div.box { zoom: 100%; background-color: #CCC; padding: 10px; width: 500px; } div.box:after { content: " "; clear: both; height: 0; display: block; visibility: hidden; } div img { float: left; }

    • 締切済み
    • CSS