代码之家  ›  专栏  ›  技术社区  ›  Johnny Metz

允许在tr和td元素内分页

  •  0
  • Johnny Metz  · 技术社区  · 6 年前

    我正在尝试创建一个单列表,该表允许在 tr td 细胞。下面只是一个例子,但是我的实际表在每个单元格中都有很多内容。

    <table>
      <thead>
        <tr>
          <th>TABLE HEADER</th>
        </tr>
      </thead>
      <tbody>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
        <tr><td><div class="my-cell">Hello World</div></td></tr>
      </tbody>
    </table>
    

    我使用以下样式查看单元格的起始和结束位置:

    .my-cell {
      padding: 160px 40px;
      border: 1px solid #000;
    }
    

    打印此页时,表在第二行后断开,以避免拆分第三行:

    enter image description here

    我的目标是防止这种自动分页符。我尝试添加以下CSS,但它仍在同一位置中断:

    tr, td {
      page-break-inside: initial;
    }
    

    是否允许在 TR TD 元素还是这不可能?这个属性实际上设置在哪里?它不会出现在Chrome开发人员工具或文档中的任何地方。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Alvaro Montoro    6 年前

    根据 specs ,的 page-break-inside 属性应用于块元素,尽管用户代理可以将其应用于其他元素:

    用户代理必须将这些属性应用于根元素正常流中的块级元素。用户代理还可以将这些属性应用于其他元素,例如“table row”元素。

    因此,一种可能性(可能不理想)是在打印时更改行的显示 display: block 而不是默认值 display: table-row . 类似这样的事情(这太普通了,您可能需要更具体一些):

    @media print {
        tr {
            page-break-inside: initial;
            display: block;
        }
    }
    

    我测试过,它在Chrome和Safari上运行良好,但似乎在Firefox上不起作用:

    Printing dialog

        2
  •  0
  •   Michael Parisi    6 年前

    https://css-tricks.com/almanac/properties/p/page-break/

     page-break-inside : auto | avoid
    

    ID数字自动可能有帮助。