この問題の一般的な解決策は、絶対配置またはクロップされた浮動小数点数を使用しますが、列が数値+サイズで変更される場合は広範囲の調整が必要であり、「メイン」列が常に最長であることを確認する必要があるという点でトリッキーです。代わりに、次の3つの堅牢なソリューションのいずれかを使用することをお勧めします。
display: flex
:非常にシンプルで最良のソリューションであり、非常に柔軟性がありますが、IE9以前ではサポートされていません。
table
またはdisplay: table
:非常にシンプルで、非常に互換性があり(ほとんどすべてのブラウザー)、非常に柔軟です。
display: inline-block; width:50%
マージンハックが負の場合:非常に単純ですが、列の下の境界線は少しトリッキーです。
1。 display:flex
これは本当にシンプルで、より複雑なレイアウトやより詳細なレイアウトに簡単に適応できます。ただし、フレックスボックスはIE10以降でのみサポートされています(他の最新のブラウザーに加えて)。
例: http : //output.jsbin.com/hetunujuma/1
関連するHTML:
<div class="parent"><div>column 1</div><div>column 2</div></div>
関連するCSS:
.parent { display: -ms-flex; display: -webkit-flex; display: flex; }
.parent>div { flex:1; }
Flexboxはより多くのオプションをサポートしていますが、列をいくつでも持つには上記で十分です!
2. <table>
またはdisplay: table
これを行うためのシンプルで非常に互換性のある方法は、table
- を使用することです。古いIEのサポートが必要な場合は、最初に試すことをお勧めします。あなたは列を扱っています。div + floatはそれを行うための最良の方法ではありません(cssの制限をハックするためにネストされたdivの複数のレベルが単純なテーブルを使用するよりも「セマンティック」であるということは言うまでもありません)。table
要素を使用したくない場合は、CSSを検討してくださいdisplay: table
(IE7以前ではサポートされていません)。
例: http : //jsfiddle.net/emn13/7FFp3/
関連するHTML:(ただし、<table>
代わりにプレーンを使用することを検討してください)
<div class="parent"><div>column 1</div><div>column 2</div></div>
関連するCSS:
.parent { display: table; }
.parent > div {display: table-cell; width:50%; }
/*omit width:50% for auto-scaled column widths*/
このアプローチはoverflow:hidden
、フロートで使用するよりもはるかに堅牢です。ほとんどの列を追加できます。必要に応じて、自動スケーリングさせることができます。そして、あなたは古いブラウザとの互換性を保持します。floatソリューションが必要とするのとは異なり、どの列が最も長いかを事前に知る必要もありません。高さは問題なく調整できます。
KISS:特に必要がない限り、フロートハックを使用しないでください。IE7に問題がある場合でも、メンテナンスが難しく、柔軟性の低いトリックCSSソリューションよりも、セマンティック列のあるプレーンテーブルをいつでも選択します。
ちなみに、レイアウトをレスポンシブにする必要がある場合(たとえば、小さな携帯電話には列がない)、@media
クエリを使用して小さな画面幅のプレーンブロックレイアウトにフォールバックできます。<table>
これは、他のdisplay: table
要素を使用するかどうかに関係なく機能します。
3. display:inline block
負のマージンハックを使用します。
もう1つの方法は、を使用することdisplay:inline block
です。
例: http : //jsbin.com/ovuqes/2/edit
関連するhtml:(div
タグの間にスペースがないことは重要です!)
<div class="parent"><div><div>column 1</div></div><div><div>column 2</div></div></div>
関連するCSS:
.parent {
position: relative; width: 100%; white-space: nowrap; overflow: hidden;
}
.parent>div {
display:inline-block; width:50%; white-space:normal; vertical-align:top;
}
.parent>div>div {
padding-bottom: 32768px; margin-bottom: -32768px;
}
これは少し注意が必要です。負のマージンは、列の「真の」底部が不明瞭になることを意味します。これは、によって切り取られるため、これらの列の下部を基準にして何も配置できないことを意味しますoverflow: hidden
。インラインブロックに加えて、フロートでも同様の効果が得られることに注意してください。
TL; DR:IE9以前を無視できる場合はflexboxを使用します。それ以外の場合は、(css)テーブルを試してください。これらのオプションのどちらもうまくいかない場合は、マージンハックがマイナスになりますが、開発中に見落とされがちな奇妙な表示の問題が発生する可能性があり、レイアウトの制限に注意する必要があります。