HTML表格单元格的默认宽度是多少?

时间:2015-08-10 18:47:35

标签: html css html5 html-table w3c

我还没有找到这个问题的答案:规范或UA文档中的哪个是<td>定义的默认宽度?

我搜索了HTML Living StandardHTML5 Recommendation以及其他各种来源。

我的理解(基于使用和观察)是默认情况下,表格单元格将占据其所在列的整个宽度。如果列中存在其他单元格,则单元格的宽度不能与列不同。

我正在寻找对此行为的官方确认,最好是在W3C或用户代理文档中。但任何权威参考都是可以接受的。

3 个答案:

答案 0 :(得分:8)

表格单元格的物理/视觉宽度不是由HTML定义,而是由CSS定义。 CSS 2.1规范有一个专门用于table layout的整个部分,它补充了HTML对表格数据的描述。

此外,CSS本身does not fully define如何计算单元格的宽度。它使用固定的表格布局算法:

  

在固定表格布局算法中,每列的宽度确定如下:

     
      
  1. 一个列元素,其值不是&#39; auto&#39;对于宽度&#39; property设置该列的宽度。
  2.   
  3. 否则,第一行中的单元格的值不是&#39; auto&#39;对于宽度&#39; property确定该列的宽度。如果单元格跨越多个列,则宽度将在列上分割。
  4.   
  5. 任何剩余的列均等地划分剩余的水平表空间(减去边框或单元格间距)。
  6.         

    然后,表格的宽度是“宽度”值的较大值。表元素的属性和列宽的总和(加上单元格间距或边框)。如果表格比列宽,则应在列上分配额外的空格。

但它没有提供超出自动表格布局的粗略指导方针的任何内容,用户代理可以自由地遵循或偏离(它列出了与固定表格布局不同的逐步程序,但是整个清单都是非规范性的)。 通常您可以在most common场景中看到UA的一致行为 - 正如您所观察到的,自动调整大小的表格单元通常会占用其内容所需的空间,没有了。但是深入研究边缘情况,你会发现各种crazy

答案 1 :(得分:4)

这是关于计算表格列宽度的W3C标准。基本上它由实现浏览器/代理。

  

如果作者未指定列的宽度信息,则为用户代理   可能无法逐步格式化表格,因为它必须等待   为了分配一整个数据列到达   适当的宽度。

     

如果列宽对于a的内容来说太窄了   特定的表格单元格,用户代理可以选择重排表格。

来源:http://www.w3.org/TR/html401/struct/tables.html#h-11.2.4.4

注意:这是HTML4文档。

答案 2 :(得分:0)

表格单元格的最小宽度为0或该单元格中最大单词或图像的大小。

  

Table Sizing Algorithm

     

默认大小调整算法需要两次遍历表数据。在第一遍中,自动换行被禁用,用户代理会跟踪每个单元格的最小和最大宽度。最大宽度由最宽的线给出。由于自动换行已被禁用,因此段落将被视为长行,除非被子元素断开。最小宽度由最宽的单词或图像等给出,考虑到前导缩进和列表项目符号等。换句话说,如果要在单独的窗口中格式化单元格的内容,请确定最小宽度你可以在事情开始被修剪之前制作窗口。

     

然后使用最小和最大单元格宽度来确定列的相应最小和最大宽度。反过来,这些用于查找表的最小和最大宽度。请注意,单元格可以包含嵌套表格,但这并不会使代码复杂化。下一步是根据当前窗口大小指定列宽(更准确地说 - 左右边距之间的宽度)。

     

表格边框和单元间边距需要包含在分配步骤中。有三种情况:

     
      
  1. 最小表格宽度等于或大于可用空间。在这种情况下,指定最小宽度并允许用户水平滚动。对于转换为盲文,有必要通过引用包含其全部内容的注释来替换单元格。按惯例,这些出现在表格之前。
  2.   
  3. 最大表格宽度适合可用空间。在这种情况下,请将列设置为其最大宽度。
  4.   
  5. 表的最大宽度大于可用空间,但最小表宽度较小。在这种情况下,找到可用空间和最小表宽度之间的差异,让我们调用它。让我们调用D表格的最大和最小宽度之间的差异。
  6.         

    对于每列,令d为该列的最大和最小宽度之间的差异。现在将列的宽度设置为最小宽度加上D乘以D的D倍。这使得具有大量文本的列比具有较小量的列更宽。

         

    然后对嵌套表重复此分配步骤。在这种情况下,封闭表格的单元格的宽度在上面的描述中起到当前窗口大小的作用。对所有嵌套表递归重复此过程。

         

    如果COLSPEC属性明确指定列宽,则用户代理可以尝试使用这些值。如果随后,其中一个单元格溢出其列宽,则可以调用两个传递机制以使用更合适的宽度重绘表格。如果属性指定相对宽度,则始终需要两个传递模型。

         

    然后修改列宽分配算法:

         
        
    • 在给定时,应使用COLSPEC属性的显式宽度,前提是它们大于最小列宽,否则应使用后者。
    •   
    • 对于相对宽度,如上定义的剩余空间W在列之间被适当地划分,确保每列被给予至少其最小宽度。如果W为零或负值,则应在最小宽度上增加列宽以满足相对宽度要求。
    •   
         

    如果使用WIDTH属性指定表格宽度,则用户代理会尝试设置列宽以匹配。如果这导致列小于其最小宽度,则应忽略WIDTH属性。