根據CSS規範,當一個表具有table-layout:fixed
屬性,其寬度被計算如下:爲什麼我的固定佈局表不如其列?
...每列的寬度被確定爲如下:
- A柱對於'width'屬性,值爲'auto'以外的值設置該列的寬度。
否則,'width'屬性的第一行中'auto'值以外的單元格將確定該列的寬度。如果單元格跨越多個列,則寬度將在列上劃分。
任何剩餘的列等分剩餘的水平表空間(減去邊框或單元格間距)。
表的寬度,則該表元素中的「width」屬性的值和列寬(加上單元格間隔或邊框)的總和大。
我的這種認識是:
- 每一列的寬度進行計算(用
<col>
元件的width
屬性,如果存在的話,取優先) - 列寬進行合計
- 如果列寬度總和大於
<table>
元素的width
屬性,則該表格將與列寬度總和一樣寬。
但是 - 在下面的示例中,我有一個表,其中一行包含三個單元格。使用<col>
元素將每列的寬度設置爲100像素。表元素沒有分配寬度,它是一個寬度爲200像素的<div>
的孩子。
我希望表的寬度爲300像素,因此它溢出其父母<div>
。然而,相反,該表只有200個像素寬(即,與其父母<div>
一樣寬),因此每列被縮小爲66.6個像素寬。 (我已經檢查過最新的Safari,Chrome,Firefox和Edge)。
爲什麼表格只有200像素寬,而不是300像素?
<div style="background:black; color:white; width:300px;">300px</div>
<br>
<div style="background:black; color:white; width:200px;">200px</div>
<br>
<div style="width:200px; background:green; overflow:scroll;">
<table style="table-layout:fixed; border-collapse:collapse;">
<col style="width:100px;">
<col style="width:100px;">
<col style="width:100px;">
<tr>
<td>1</td>
<td>2</td>
<td style="background:red;">3</td>
</tr>
</table>
</div>
(我已經給<div>
綠色背景和overflow:hidden
,第三單元的紅色背景,使意想不到的結果更加清晰。)