<div>
私は比較的位置が決まっていて、サイズが定義されているアウターを持っています。その中に、<table>
絶対配置されtop
、 、left
、right
およびbottom
がゼロに設定されたオブジェクトがあります。上/左/右/下の制約に従うようにテーブルが拡張されることを期待していましたが、これは起こりません。代わりに、テーブルのディメンションはその内容に基づいて計算されます。
<div>
の代わりにインナーを使用する<table>
と、期待どおりに機能します。一方、display: table;
内側に置くと<div>
、テーブルとまったく同じように動作します。
私の質問は:なぜそれが起こるのですか?この動作は仕様のどこで定義されていますか? それともブラウザのバグですか(ほとんどありません)?
CSS 2.1 仕様を確認しました。セクション9.7 Relationships between 'display', 'position', and 'float' , 10.3.7 Absolutely positioned, non-replaced elements , 17 Tablesを読みました。Mozilla Developer Network の position CSS 属性も確認しました。StackOverflowでも検索しました。それでも、テーブルがこのように動作する理由についての説明が見つかりません。
ライブ デモを参照してください: http://jsfiddle.net/LgCDE/2/ Chrome 27 と Firefox 20.0 の両方で結果を再現できます。
HTML:
<div class="box">
<table class="table">
<tr>
<td>Hey!</td>
</tr>
</table>
</div>
<div class="box">
<div class="table">Hey!</div>
</div>
<div class="box">
<div class="table" style="display: table;">Hey!</div>
</div>
CSS:
div.box {
position:relative;
border: 2px dashed red;
background: #800;
width: 100px;
height: 50px;
}
.table {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: auto;
height: auto;
margin: 0;
border: 3px double blue;
background: #CCF;
table-layout: fixed;
border-collapse: collapse;
}