嵌套 CSS 网格放置在 HTML 表格元素内时会水平溢出

问题描述 投票:0回答:1

我在动态生成的发票中有一个 CSS 网格。我提前知道行数和列数。我还使用模板行和模板列,并专门为每列定义列宽,因为我需要以相同的格式在发票中使用它。所以我无法使用

auto
值。

为了简化代码示例,假设我有一个恰好有 7 列和 2 行的网格。第一行有 7 列。第二行有 1 列,跨度为 7 列。第二行中的这 1 列有一个 1 行 3 列的嵌套网格。当我在 html 中进行此设置时,这将按预期工作,如下所示。

enter image description here

但是当我将整个设置放在表格内时,它会水平破裂并溢出,如下所示。

enter image description here

使用表格的原因是当发票有多个页面时,thead 元素将有助于在所有页面中放置标题。现在我很困惑表带来的差异是什么导致出现水平滚动和溢出。

这是代码片段。

<html>

<head>
    <style type="text/css">
        body {
            font-family: Calibri, monospace;
            font-size: 0.8rem;
            margin: 1rem;
            border: 1px solid;
        }

        table {
            width: 100%;
            height: 100%;
            border-collapse: collapse;
            page-break-inside: auto;
        }

        td section div {
            page-break-inside: avoid;
        }

        table tbody td {
            height: 100%;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
        }

        main {
            display: flex;
            flex-direction: column;
            height: 100%;
        }

        #invoiceitems {
            display: block;
            height: 100%;
            text-transform: uppercase;
        }

        #itemscontent {
            height: 100%;
            display: grid;
            grid-auto-rows: minmax(1rem, max-content);
            grid-column-gap: 1px;
            align-items: center;
        }

        #itemscontent>div {
            display: flex;
            align-items: center;
            border: 1px solid;
            height: 100%;
            border-top: 0;
            border-right: 0;
            padding: 0 0.25rem;
        }

        .border-left-0 {
            border-left: 0 !important;
        }

        .span-7 {
            grid-column-start: span 7;
        }

        #invoiceinformation {
            text-transform: none;
            border-left: 0 !important;
            display: grid !important;
            grid: "note" "bankdetails" "signature";
            grid-template-columns: minmax(min-content, 40%) minmax(min-content, 35%) minmax(min-content, 25%);
            padding: 0 0.5rem;
        }

        #invoiceinformation div {
            align-self: stretch;
            align-items: center;
            padding: 0 0.5rem;
        }

        #bankdetails {
            border: 1px solid;
            border-top: 0;
            border-bottom: 0;
        }

        #signature {
            display: flex;
            border-left: 0 !important;
            padding-right: 0.5rem !important;
        }
    </style>
</head>

<body>
    <table>
        <tbody>
            <tr>
                <td>
                    <main style="padding-bottom: 0">
                        <section id="invoiceitems">
                            <section id="itemscontent"
                                style="grid-template-columns: minmax(min-content, max-content) minmax(min-content, auto) max-content max-content  max-content max-content max-content; grid-template-rows: repeat(2, minmax(1rem, max-content));">
                
                                <div class="border-left-0">S.No</div>
                
                                <div>Description</div>
                                <div><b></b></div>
                                <div>Days</div>
                                <div>Unit</div>
                
                                <div>Price</div>
                
                                <div>Unit Price</div>
                                <div id="invoiceinformation" class="span-7">
                                    <div id="note">
                                        <small>NOTE</small>
                                        <br>
                                        <text>Certified that the particulars
                                            given above are true and correct</text>
                                    </div>
                                    <div id="bankdetails">
                                        <small>COMPANY BANK DETAILS</small>
                                        <br>
                                        <text>BANK:
                                            ABC BANK, A/C. NO: 1111111111111111, IFSC: IABC0000000, Branch: DEF
                                            Road, GHI</text>
                                    </div>
                                    <div id="signature">
                                        <text><b>for ABC</b>
                                            <br>
                                            <br>
                                            <br>Authorized Signatory</text>
                                    </div>
                                </div>
                            </section>
                        </section>
                    </main>
                </td>
            </tr>
        </tbody>
    </table>
    
    <!-- <main style="padding-bottom: 0">
        <section id="invoiceitems">
            <section id="itemscontent"
                style="grid-template-columns: minmax(min-content, max-content) minmax(min-content, auto) max-content max-content  max-content max-content max-content; grid-template-rows: repeat(2, minmax(1rem, max-content));">

                <div class="border-left-0">S.No</div>

                <div>Description</div>
                <div><b></b></div>
                <div>Days</div>
                <div>Unit</div>

                <div>Price</div>

                <div>Unit Price</div>
                <div id="invoiceinformation" class="span-7">
                    <div id="note">
                        <small>NOTE</small>
                        <br>
                        <text>Certified that the particulars
                            given above are true and correct</text>
                    </div>
                    <div id="bankdetails">
                        <small>COMPANY BANK DETAILS</small>
                        <br>
                        <text>BANK:
                            ABC BANK, A/C. NO: 1111111111111111, IFSC: IABC0000000, Branch: DEF
                            Road, GHI</text>
                    </div>
                    <div id="signature">
                        <text><b>for ABC</b>
                            <br>
                            <br>
                            <br>Authorized Signatory</text>
                    </div>
                </div>
            </section>
        </section>
    </main> -->
</body>

</html>

请问你能帮我吗?

html css html-table css-grid
1个回答
0
投票

因此,对于

auto
宽度,此表可以正常工作,如下面的代码片段所示。为什么不能使用
auto
作为列宽?为什么你使用
max-content
,这意味着“让我足够宽以容纳我的所有内容而不需要任何包装”?

        body {
            font-family: Calibri, monospace;
            font-size: 0.8rem;
            margin: 1rem;
            border: 1px solid;
        }

        table {
            width: 100%;
            height: 100%;
            border-collapse: collapse;
            page-break-inside: auto;
        }

        td section div {
            page-break-inside: avoid;
        }

        table tbody td {
            height: 100%;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
        }

        main {
            display: flex;
            flex-direction: column;
            height: 100%;
        }

        #invoiceitems {
            display: block;
            height: 100%;
            text-transform: uppercase;
        }

        #itemscontent {
            height: 100%;
            display: grid;
            grid-auto-rows: minmax(1rem, max-content);
            grid-column-gap: 1px;
            align-items: center;
        }

        #itemscontent>div {
            display: flex;
            align-items: center;
            border: 1px solid;
            height: 100%;
            border-top: 0;
            border-right: 0;
            padding: 0 0.25rem;
        }

        .border-left-0 {
            border-left: 0 !important;
        }

        .span-7 {
            grid-column-start: span 7;
        }

        #invoiceinformation {
            text-transform: none;
            border-left: 0 !important;
            display: grid !important;
            grid: "note" "bankdetails" "signature";
            grid-template-columns: minmax(min-content, 40%) minmax(min-content, 35%) minmax(min-content, 25%);
            padding: 0 0.5rem;
        }

        #invoiceinformation div {
            align-self: stretch;
            align-items: center;
            padding: 0 0.5rem;
        }

        #bankdetails {
            border: 1px solid;
            border-top: 0;
            border-bottom: 0;
        }

        #signature {
            display: flex;
            border-left: 0 !important;
            padding-right: 0.5rem !important;
        }
<table>
  <tr>
    <td>
      <main style="padding-bottom: 0">
        <section id="invoiceitems">
          <section id="itemscontent"
              style="grid-template-columns: auto auto auto auto auto auto auto;">

              <div class="border-left-0">S.No</div>

              <div>Description</div>
              <div><b></b></div>
              <div>Days</div>
              <div>Unit</div>

              <div>Price</div>

              <div>Unit Price</div>
              <div id="invoiceinformation" class="span-7">
                  <div id="note">
                      <small>NOTE</small>
                      <br>
                      <text>Certified that the particulars
                          given above are true and correct</text>
                  </div>
                  <div id="bankdetails">
                      <small>COMPANY BANK DETAILS</small>
                      <br>
                      <text>BANK:
                          ABC BANK, A/C. NO: 1111111111111111, IFSC: IABC0000000, Branch: DEF
                          Road, GHI</text>
                  </div>
                  <div id="signature">
                      <text><b>for ABC</b>
                          <br>
                          <br>
                          <br>Authorized Signatory</text>
                  </div>
              </div>
          </section>
        </section>
      </main>
    </td>
  </tr>
</table>
   

© www.soinside.com 2019 - 2024. All rights reserved.