我一直无法找到这个问题的答案: 规范或UA文档中的默认宽度为a <td>
界定?
我搜索过了 HTML生活标准, HTML5推荐标准和其他各种来源。
我的理解(基于使用和观察)是默认情况下,表格单元格将占据其所在列的整个宽度。如果列中存在其他单元格,则单元格的宽度不能与列不同。
我正在寻找这种行为的官方确认,最好是在W3C或用户代理文档中。但任何权威参考都是可以接受的。
我一直无法找到这个问题的答案: 规范或UA文档中的默认宽度为a <td>
界定?
我搜索过了 HTML生活标准, HTML5推荐标准和其他各种来源。
我的理解(基于使用和观察)是默认情况下,表格单元格将占据其所在列的整个宽度。如果列中存在其他单元格,则单元格的宽度不能与列不同。
我正在寻找这种行为的官方确认,最好是在W3C或用户代理文档中。但任何权威参考都是可以接受的。
表格单元格的物理/视觉宽度不是由HTML定义,而是由CSS定义。 CSS 2.1规范有一整页专门用于 表格布局 它补充了HTML对表格数据的描述。
此外,CSS本身 才不是 充分 确定 如何计算单元格的宽度。它使用固定表格布局算法:
在固定表格布局算法中,每列的宽度确定如下:
- “width”属性的值为“auto”的列元素设置该列的宽度。
- 否则,第一行中具有“width”属性的“auto”值以外的值的单元格将确定该列的宽度。如果单元格跨越多个列,则宽度将在列上分割。
- 任何剩余的列均等地划分剩余的水平表空间(减去边框或单元格间距)。
然后,表的宽度是表元素的'width'属性的值和列宽的总和(加上单元格间距或边框)的较大值。如果表格比列宽,则应在列上分配额外空格。
但它没有提供超出自动表格布局的粗略指导方针的任何内容,用户代理可以自由地遵循或偏离(它列出了与固定表格布局不同的逐步程序,但整个列表是非-normative)。 通常 你可以期待UAs中的一致行为 最 共同 场景 - 正如您所观察到的,自动调整大小的表格单元通常会占用内容所需的空间,而不会占用更多空间。但是深入研究边缘情况,你会发现各种各样的情况 疯。
这是计算表格列宽度的W3C标准。基本上它由实现浏览器/代理。
如果作者未指定列的宽度信息,则为用户代理 可能无法逐步格式化表格,因为它必须等待 为了分配整个数据列而到达 适当的宽度。
如果列宽被证明对于a的内容来说太窄 特定的表格单元格,用户代理可以选择重排表格。
资源: http://www.w3.org/TR/html401/struct/tables.html#h-11.2.4.4
注意:这是HTML4文档。
表格单元格的最小宽度为0或该单元格中最大单词或图像的大小。
表大小调整算法
默认大小调整算法需要两次遍历表数据。在第一遍中,自动换行被禁用,用户代理会跟踪每个单元格的最小和最大宽度。最大宽度由最宽的线给出。由于自动换行已被禁用,因此段落将被视为长行,除非被断开
元素。最小宽度由最宽的单词或图像等给出,考虑到前导缩进和列表项目符号等。换句话说,如果要在单独的窗口中格式化单元格的内容,请确定可以使单元格的最小宽度。事物开始被修剪之前的窗口。然后使用最小和最大单元格宽度来确定列的相应最小和最大宽度。反过来,这些用于查找表的最小和最大宽度。请注意,单元格可以包含嵌套表,但这并不会显着地使代码复杂化。下一步是根据当前窗口大小(更准确地说 - 左边距和右边距之间的宽度)指定列宽。
表格边框和单元间边距需要包含在分配步骤中。有三种情况:
- 最小表宽度等于或大于可用空间。在这种情况下,指定最小宽度并允许用户水平滚动。对于转换为盲文,有必要通过引用包含其全部内容的注释来替换单元格。按照惯例,这些出现在表格之前。
- 最大工作台宽度适合可用空间。在这种情况下,请将列设置为其最大宽度。
- 表的最大宽度大于可用空间,但最小表宽度较小。在这种情况下,找到可用空间和最小表宽度之间的差异,让我们称之为W.也可以调用D表格的最大和最小宽度之间的差异。
对于每列,令d为该列的最大和最小宽度之间的差异。现在将列的宽度设置为最小宽度加上D乘以D的D倍。这使得具有大量文本的列比具有较小量的列宽。
然后对嵌套表重复此分配步骤。在这种情况下,封闭表格单元格的宽度在上面的描述中扮演当前窗口大小的角色。对所有嵌套表以递归方式重复此过程。
如果COLSPEC属性明确指定列宽,则用户代理可以尝试使用这些值。如果随后,其中一个单元溢出其列宽,则可以调用两个传递机制以使用更合适的宽度重绘表。如果属性指定相对宽度,则始终需要两个传递模型。
然后修改列宽分配算法:
- 在给定时,应使用COLSPEC属性的显式宽度,前提是它们大于最小列宽,否则应使用后者。
- 对于相对宽度,如上定义的剩余空间W在列之间被适当地划分,确保每列被给予至少其最小宽度。如果W为零或负值,则应在最小宽度上增加列宽以满足相对宽度要求。
如果使用WIDTH属性指定表宽度,则用户代理会尝试设置列宽以匹配。如果这导致列小于其最小宽度,则应忽略WIDTH属性。