これらの方法のどれかはプロのWebデザイナーによって好まれますか?
Webサイトを描画するときにこれらの方法のいずれかがWebブラウザによって優先されますか?
これはすべて個人的な好みですか?
私が欠けている他のテクニックはありますか?
注:上記の質問は複数列レイアウトの設計に関するものです
これは私が列レイアウトを作成するときにいつも使う方法です、そしてそれはちょうどうまくいくようです。親は自分自身で崩壊するので、あとでclear:both;
を覚えておく必要があります。私がちょうど見つけたもう一つのconはテキストを垂直に整列させることができないということでした。
これは折りたたみ親の問題を修正するようですが、空白を追加します。
Htmlから空白を削除するのがこの問題を解決する最も簡単なようですが、あなたが本当にあなたのhtmlについてうるさいのであれば望ましくありません。
display:inline;
とまったく同じように振る舞うようです。
完璧に動作します。
レイアウトを壊すような例外があるように、たくさんのものが欠けていると確信していますが、display:table-cell;
は最善を尽くしているようで、いつもfloat:left;
をめちゃくちゃにしているのでclear:both;
を置き換え始めると思います。私はウェブ上でこれについて多くの記事やブログを読んだが、それらのどれも私のウェブサイトをレイアウトするとき私が何を使うべきかについての明確な答えを私に与えない。
あなたが尋ねたオプションのうち:
float:left;
float
の概念全体はCSSの仕様ではうまく設計されていません。私たちが今それについてできることは何もない。しかし重要なことはそれがうまくいくこと、そしてそれはすべてのブラウザ(IE6/7でさえも)でうまくいくので、あなたがそれを好きならそれを使ってください。フロートをクリアするために:after
セレクタを使用する場合、クリアのための追加のマークアップは必要ないかもしれませんが、IE6またはIE7をサポートしたい場合、これはオプションではありません。
display:inline;
これは、display:inline; zoom:1
がinline-block
のための壊れたサポートのための代替ハックであるIE6/7を除いて、レイアウトのために使われるべきではありません。
display:inline-block;
これは私のお気に入りの選択です。それはいくつかの要素のためにそれをサポートするIE6/7のための警告で、すべてのブラウザにわたってうまくそして一貫して動作します。しかし、これを回避するための厄介な解決策については上記を参照してください。
inline-block
に関するもう1つの大きな注意点は、インラインの観点から、要素間の空白はテキストの単語間の空白と同じように扱われるため、要素間に空白ができることです。これには回避策がありますが、どれも理想的ではありません。 (最善の方法は、単純に要素間にスペースを入れないことです)
display:table-cell;
table-cell
はtable
およびtable-row
としてスタイル設定された要素の内側にあるという文脈で使用されるように設計されていることに注目する価値があります。 table-cell
を単独で使用することはそれを意図した方法ではないので、あなたはそれを異なって扱う異なるブラウザを経験するかもしれません。あなたが見逃したかもしれない他のテクニック?はい。
これは複数列レイアウトのためのものであると言うので、あなたが知りたいと思うかもしれない CSS列機能 があります。ただし、最もよくサポートされている機能ではありません(IE 9でもIEではサポートされていません。他のすべてのブラウザではベンダープレフィックスが必要です)ので、使用したくない場合があります。しかし、それは別の選択肢であり、あなたは尋ねました。
CSS FlexBox機能もあります。これは、ボックスからボックスへテキストを流すことを目的としています。これはいくつかの複雑なレイアウトを可能にするエキサイティングな機能ですが、これはまだ開発中です。 http://html5please.com/#flexbox を参照してください。
それが役立つことを願っています。
私は通常float: left;
を使用し、overflow: auto;
を 親の崩壊の問題を解決する に追加します(これが機能する理由として、overflow: auto
はスクロールバーを追加する代わりに親を展開します明示的な高さを与えないでください、overflow: hidden
も機能します)。私が持っていた垂直方向の配置のほとんどは、 メニューバーの1行のテキスト であり、line-height
プロパティを使用して解決できます。本当にブロック要素を垂直方向に揃える必要がある場合は、親と垂直方向に揃えられたアイテムの明示的な高さ、絶対位置、上位50%、負のマージンを設定します。
display: table-cell
を使用しない理由は、サイトの幅が処理できる以上のアイテムがある場合にオーバーフローする方法です。 table-cellはユーザーに水平スクロールを強制しますが、フロートはオーバーフローメニューをラップし、水平スクロールを必要とせずに使用できるようにします。
Float:leftとoverflow:autoの最大の利点は、ハッキングなしでIE6に戻って動作することです。おそらくそれ以上です。
私はそれがあなたがそれを必要とするものに依存すると言うでしょう:
あなたが3列のレイアウトを得るためだけにそれを必要とするならば、私はfloat
でそれをすることを勧めます。
メニューに必要な場合は、inline-block
を使用できます。空白の問題については、Chris Coyierがここで説明しているように、いくつかのトリックを使用できます http://css-tricks.com/fighting-the-space-between-inline-block-elements/ .
幅を指定されたボックス内に均等に広げる必要がある複数選択オプションを作成する必要がある場合は、display: table
をお勧めします。これは一部のブラウザでは正しく機能しないため、ブラウザのサポートによって異なります。
最後に、最良の方法はflexbox
を使うことです。この仕様は何度か変更されているので、まだ安定していません。しかし、いったんそれが完成したら、これが私が考える最高の方法になるでしょう。
フロートも便利ですが、私はインラインブロックを好む。テーブルセルは古いIEでは正しくレンダリングされません(インラインブロックもしませんが、私がよく使うzoom: 1; *display: inline
ハックがあります)。親よりも身長の小さい子供がいると、フロートで上に移動しますが、インラインブロックでは失敗することがあります。
ほとんどの場合、ブラウザがIEを除いて、すべてを正しく解釈します。あなたはいつもIEが吸い込まないことを確かめるためにチェックしなければなりません - 例えば、テーブル - セルの概念。
すべての現実において、はい、それは個人的な好みに帰着します。
余白を取り除くために使えるテクニックの1つは、親に0のfont-size
を設定し、それから子供にfont-size
を返すことです。
レコードだけのために、Spudleyの答えに加えるために、あなたが列幅を知っていればposition: absolute
とマージンを使う可能性もあります。
私にとっては、メソッドを選択する際の主な問題は、列全体を同じ高さにする必要があるかどうかです。ここで、table-cellが最も簡単な方法です(古いブラウザにあまり関心がない場合)。