この回答のように、テーブル レイアウトの動作をエミュレートする必要があります。
これには、実際の要素と子要素の使用は含まれません。これには、プロパティ<table>
の特定の値、つまりおよびを使用して、テーブルのレイアウト動作をエミュレートすることが含まれます。純粋なレイアウトに実際のテーブル マークアップを使用したくないのは、意味的に正しくなく、眉をひそめているからです。コンテンツがテーブルに属する実際の表形式のデータである場合、 actual を使用することは完全に理にかなっています。それがあなたが望むものである可能性が高いので、ここではテーブル以外の方法を紹介します。display
table
table-cell
<table>
のように動作させるにdiv.container
は、要素にプロパティが必要です。また、すべての子要素を等間隔にするために、値を持つルールも必要になります。次に、要素を表のセルのように機能させる必要があります。ブラウザーは、子要素の等間隔レイアウトを自動的に計算するようになりました。ブラウザが計算するため、子要素のルールはもう必要ない/必要ないことに注意してください。コンテナ要素には何らかの幅が必要です。そうしないと、テーブルがコンテンツと同じ大きさに折りたたまれてしまいます。コンテンツの幅が、計算された等間隔の寸法よりも大きい場合、コンテンツが子要素からオーバーフローする可能性があることに注意してください。display: table;
<table>
table-layout
fixed
div.child
display: table-cell;
width
最終的なコードは以下で、ここにフィドルがあります。
HTML:
<div class="container">
<div class="child">AAAAA</div>
<div class="child">BB</div>
<div class="child">CCCCCCCCC</div>
<div class="child">D</div>
<div class="child">E</div>
<div class="child">E</div>
<div class="child">E</div>
</div>
CSS:
.container {
width: 100%;
border: 1px solid black;
display: table;
table-layout: fixed;
}
.child {
border: 1px solid grey;
display: table-cell;
}
また、 についての無関係なメモdisplay: inline-block;
。インラインブロック要素間のすべての空白をレンダリングします(これは、元のフィドルの子要素間の間隔として表示できます)。これは正常であり、仕様に従っていますが、望ましくない場合もあります。これを回避する方法については、こちらを参照してください。