视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
html中关于表格单元格宽度的计算规则的具体介绍
2020-11-27 15:33:10 责编:小采
文档


关于表格宽度的渲染规则

表格单元格宽度的计算方式主要分为两种方式:固定表格布局、自动表格布局,这个经常写css的人应该还是知道的,但是我们经常会发现给表格列定了宽度不起作用,又或是没有定宽度渲染出来的却是正常的吗,下面就来介绍下这两个方式具体是怎么计算渲染的。

先设定几个通用的变量:

  • tableWidth=表格宽度=100%

  • tableBorderWidth=表格左右边框宽度

  • tdBorderWidth=所有列左右边框宽度和(合并的边框算1px)

  • tdPadding=所有列左右内填补和

  • tdWidth=所有定义了width的列的宽度和

  • tdLength=列个数

  • 一、固定表格布局,表格添加table-layout:fixed

    ps:在固定表格布局中,表格列的宽度与列内容多少无关,只与表格宽度、列宽度、表格左右边框、列左右边框、列左右内填补有关

    通过使用固定表格布局,用户代理在接收到第一行后就可以显示表格,即只有第一行的宽度才会起作用

    width为auto的列的宽度(即未定义width的列的宽度,如果计算结果为负数则为0)= (tableWidth-tableBorderWidth-tdBorderWidth-tdPadding-tdWidth)/tdLength

    1、所有th宽度未定义

    每列的宽度通过表格宽度平均分配

    th1th2th3th4th5th6th7th8th9th10
    row1row1row1row1row1row1row1row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row5row5row5row5row5row5row5row6row7row7row7row7row7row7row7row7row8row8row8row8row8row8row8row8row9row9row9row9row9row9row9row9row10row10row10row10row10row10row10


    2、所有th都定了宽度,同时所有列宽度之和小于表格宽度(tableBorderWidth+tdBorderWidth+tdPadding+tdWidth <= tableWidth)

    每列的宽度通过总宽度平均分配;表格的宽度为其定义的宽度

    th1th2th3th4th5th6th7th8th9th10
    row1row1row1row1row1row1row1row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row5row5row5row5row5row5row5row6row7row7row7row7row7row7row7row7row8row8row8row8row8row8row8row8row9row9row9row9row9row9row9row9row10row10row10row10row10row10row10


    3、所有th都定了宽度,同时所有列宽度之和大于表格宽度(tableBorderWidth+tdBorderWidth+tdPadding+tdWidth > tableWidth)

    每列的宽度为自身定义的宽度;表格的宽度为所有列宽度总和(会超出表格定义的宽度)

    th1th2th3th4th5th6th7th8th9th10
    row1row1row1row1row1row1row1row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row5row5row5row5row5row5row5row6row7row7row7row7row7row7row7row7row8row8row8row8row8row8row8row8row9row9row9row9row9row9row9row9row10row10row10row10row10row10row10

    4、部分th定了宽度,同时定了th宽度的列的宽度之后小于表格宽度(tableBorderWidth+tdBorderWidth+tdPadding+tdWidth <= tableWidth)

    ps:深灰色背景的列为定义了宽度的列

    定义宽度的列的宽度为自身定义的宽度,其他没有定义宽度的列的宽度为表格总宽度减去定义的宽度之和再平均分配

    th1th2th3th4th5th6th7th8th9th10
    row1row1row1row1row1row1row1row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row5row5row5row5row5row5row5row6row7row7row7row7row7row7row7row7row8row8row8row8row8row8row8row8row9row9row9row9row9row9row9row9row10row10row10row10row10row10row10

    5、部分th定了宽度,同时定了th宽度的列的宽度之后大于表格宽度(tableBorderWidth+tdBorderWidth+tdPadding+tdWidth > tableWidth)

    ps:深灰色背景的列为定义了宽度的列

    定义宽度的列的实际宽度为自身定义的宽度,其他没有定义宽度的列的宽度为表格总宽度减去定义的宽度之和再平均分配,平均分配后的宽度小于零,则其它没有定义宽度的列的宽度为0

    th1th2th3th4th5th6th7th8th9th10
    row1row1row1row1row1row1row1row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row5row5row5row5row5row5row5row6row7row7row7row7row7row7row7row7row8row8row8row8row8row8row8row8row9row9row9row9row9row9row9row9row10row10row10row10row10row10row10

    二、自动表格布局,表格设置table-layout:auto(该属性默认值就是auto)

    每个列的宽度由单元格中没有折行的最宽的内容设定的,此种算法有时候会很慢,这是由于它需要在确定最终的布局之前访问表格中所有的列

    1、所有th都未定最小宽度

    每一列的宽度完全由里面的内容所决定。

    th1th2th3th4th5th6th7th8th9th10
    row1row1row1row1row1row1row1row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row5row5row5row5row5row5row5row6row7row7row7row7row7row7row7row7row8row8row8row8row8row8row8row8row9row9row9row9row9row9row9row9row10row10row10row10row10row10row10

    2、所有th都定义了最小宽度,根据内容计算的所有列之和小于表格宽度

    每列宽度首先根据内容计算,同时不能小于定义的最小宽度,多余的宽度每一列上面平均分配点。

    th1th2th3th4th5th6th7th8th9th10
    row1row2row2row2row2row2row2row2row2row3row4row5row6row7row8row9row10

    3、所有th都定义了最小宽度,根据内容计算的所有列之和大于表格宽度

    每列宽度首先根据内容计算,其次不能小于定义的最小宽度

    th1th2th3th4th5th6th7th8th9th10
    row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row6row6row6row6row6row6row6row6row7row6row6row6row6row6row6row6row6row9row10row10row10row10row10row10row10

    4、部分th定义了最小宽度,根据内容计算的所有列之和小于表格宽度

    ps:深灰色背景的列为定义了最小宽度的列

    每列宽度首先根据内容计算,其次不能小于定义的最小宽度,最后表格渲染出来的宽度不能小于表格自身定义的宽度。

    th1th2th3th4th5th6th7th8th9th10
    row1row2row3row4row4row4row4row4row4row4row4row5row6row7row6row9row10

    5、部分th定义了最小宽度,根据内容计算的所有列之和小于表格宽度

    ps:深灰色背景的列为定义了最小宽度的列

    每列宽度首先根据内容计算,其次不能小于定义的最小宽度

    th1th2th3th4th5th6th7th8th9th10
    row1row2row2row2row2row2row2row2row2row3row4row4row4row4row4row4row4row4row5row6row6row6row6row6row6row6row6row7row6row6row6row6row6row6row6row6row9row10row10row10row10row10row10row10

    下载本文
    显示全文
    专题