ページに2つのテーブルを並べて表示し、それらをページ内の中央に配置します(実際には別のdiv内ですが、これは私が思いつく最も単純なものです)。
<style>
#outer { text-align: center; }
#inner { text-align: left; margin: 0 auto; }
.t { float: left; }
table { border: 1px solid black; }
#clearit { clear: left; }
</style>
<div id="outer">
<p>Two tables, side by side, centered together within the page.</p>
<div id="inner">
<div class="t">
<table>
<tr><th>a</th><th>b</th></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>4</td><td>9</td></tr>
<tr><td>16</td><td>25</td></tr>
</table>
</div>
<div class="t">
<table>
<tr><th>a</th><th>b</th><th>c</th></tr>
<tr><td>1</td><td>2</td><td>2</td></tr>
<tr><td>3</td><td>5</td><td>15</td></tr>
<tr><td>8</td><td>13</td><td>104</td></tr>
</table>
</div>
</div>
<div id="clearit">all done.</div>
</div>
テーブルがフロートしているという事実と関係があることは理解していますが、不足しているものを理解することはできません。ここで紹介するテクニックのようなものを説明する多くのWebページがありますが、いずれにしても機能しません。テーブルは頑固に左マージンにしがみついています。
残念ながら、これらのソリューションはすべて、固定幅の指定に依存しています。テーブルは動的に生成されるため(データベースから取得した統計結果)、幅を事前に知ることはできません。
2つのテーブルを別のテーブルにラップすることで、目的の結果を得ることができます。
<table align="center"><tr><td>
//code for table on the left
</td><td>
//code for table on the right
</td></tr></table>
結果は、任意の幅とページ(再)サイズに滑らかに応答する完全に中央に配置されたテーブルのペアです(さらに、align = "center"テーブル属性は、マージンオートで外側のdivに巻き上げられます)。
私は、テーブルでしか達成できないレイアウトがあると結論付けています。
それが私だったら-私はこのようなことをします:
<style type="text/css" media="screen">
table { border: 1px solid black;float:left;width:148px;}
#table_container{width:300px;margin:0 auto;}
</style>
次のようなテーブルで:
<div id="table_container">
<table>
<tr>
<th>a</th>
<th>b</th>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>4</td>
<td>9</td>
</tr>
<tr>
<td>16</td>
<td>25</td>
</tr>
</table>
<table>
<tr>
<th>a</th>
<th>b</th>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>4</td>
<td>9</td>
</tr>
<tr>
<td>16</td>
<td>25</td>
</tr>
</table>
</div>
これは古くからの質問ですが、とにかくここに行きます。
以下は、準拠モードのブラウザと標準モードのIE8(つまり、Doctypeセット)で動作します。
#inner {text-align:center;}
.t {display:inline-block;}
残念ながら、IE6で動作するように微調整する方法は本当にありません。 IE7の場合、zoom:1を.t divに(条件付きコメントを介して)追加すると役立つ場合がありますが、現時点ではIE7をテストに使用できません。
問題は、#inner
にセットwidth
(auto
またはinherit
以外)を与える必要があることです。 margin: 0 auto;
トリックは、内部要素がコンテナ要素よりも狭い場合にのみ機能します。 width
が与えられない場合、#inner
は自動的に#outer
の全幅に拡張され、その内容が左にフラッシュされます。
内側のdivに幅を与えます。
[〜#〜] example [〜#〜]
CSSを変更します。
<style>
#outer { text-align: center; }
#inner { text-align: left; margin: 0 auto; }
.t { float: left; }
table { border: 1px solid black; }
#clearit { clear: left; }
</style>
これに:
<style>
#outer { text-align: center; }
#inner { text-align: left; margin: 0 auto; width:500px }
.t { float: left; }
table { border: 1px solid black; }
#clearit { clear: left; }
</style>
頭の中で、#innerではなく#outerに "margin:0 auto"を使用してみてください。
私はよく、DIVに背景色を追加して、ビュー上での配置を確認します。これは、ここで何が起こっているかを診断する良い方法かもしれません。
問題は、テーブルを中央に配置するDIVに幅が定義されていないことです。デフォルトでは、DIVはブロック要素であり、親の幅全体(この場合はドキュメント全体(#outer DIVを介して伝播))を占めるため、自動マージンスタイルは効果がありません。
この手法が機能するには、margin:autoを持つdivの幅を「auto」または「inherit」以外の値(固定ピクセル値またはパーセンテージ)に設定するだけです。
<style>
#outer { text-align: center; }
#inner { width:500px; text-align: left; margin: 0 auto; }
.t { float: left; width:240px; border: 1px solid black;}
#clearit { clear: both; }
</style>
中央にある3番目のテーブル内に2つのサイドバイサイドテーブルを置くだけで、これを解決できることがわかりました。ここにコードがあります
2つの既存のテーブルの上部と下部に2行のコードを追加しました
<style>
#outer { text-align: center; }
#inner { text-align: left; margin: 0 auto; }
.t { float: left; }
table { border: 1px solid black; }
#clearit { clear: left; }
</style>
<div id="outer">
<p>Two tables, side by side, centered together within the page.</p>
<div id="inner">
<table style="margin-left: auto; margin-right: auto;">
<td>
<div class="t">
<table>
<tr><th>a</th><th>b</th></tr>
<tr><td>1</td><td>2</td></tr>
<tr><td>4</td><td>9</td></tr>
<tr><td>16</td><td>25</td></tr>
</table>
</div>
<div class="t">
<table>
<tr><th>a</th><th>b</th><th>c</th></tr>
<tr><td>1</td><td>2</td><td>2</td></tr>
<tr><td>3</td><td>5</td><td>15</td></tr>
<tr><td>8</td><td>13</td><td>104</td></tr>
</table>
</div>
</td>
</table>
</div>
<div id="clearit">all done.</div>
</div>