【问题标题】:Chrome attempts to print a simple html document as 31K+ empty pagesChrome 尝试将简单的 html 文档打印为 31K+ 空白页面
【发布时间】:2022-03-28 17:04:18
【问题描述】:

我有一个简单的 html 文档(参见 - https://5fa3b1d135e99.htmlsave.net)。当我尝试打印(cmd/ctrl+P)此文档时,chrome 将打印大小评估为 31,776 页:

经过一些研究,当从.block-row 中删除gap 属性时,它是固定的,但我不知道是什么原因,另外 - 我确实需要这个间隙。

有什么想法吗?

如果链接过期,输出如下:

@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700');
@media print {
    * {
        -webkit-print-color-adjust: exact;
    }
    .block-row,
    .block-signature {
        break-inside: avoid;
    }
}
html,
body {
    margin: 0;
}
body {
    font-size: 10px;
    font-family: "Open Sans";
}
.page-header {
    display: flex;
    align-items: center;
    justify-content: center;
    border-bottom: 1px solid #eaeaea;
    padding-bottom: 8px;
    margin: 0 24px 24px;
    width: 100%;
}
.page-header > div {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
}
.page-header > div > .a-logo-container,
.page-header > div > .other-logo-container {
    flex: 1;
}
.page-header > div > .a-logo-container {
    display: flex;
    align-items: center;
    justify-content: center;
}
.page-header .a-logo {
    display: block;
    width: 79px;
    height: 20px;
}
.page-header .other-logo-container {
    display: flex;
    align-items: center;
}
.page-header .other-logo {
    background: none no-repeat center center / contain;
    display: block;
    width: 40px;
    height: 20px;
}
.page-header .other-logo-container {
    gap: 8px;
}
.page-header .other-logo-container h2 {
    font-size: 10px;
}
.page-footer {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    font-size: 8px;
    font-weight: 400;
    width: 100%;
    margin: 0 24px;
    color: #999;
}
.block-box {
    padding: 16px 24px;
    background-color: #f9f9f9;
    border-radius: 8px;
    margin: 16px 0;
}
.block-box .block-column {
    gap: 10px;
}
.block-row {
    display: flex;
    gap: 32px;
}
.block-row > * {
    flex: 1;
}
.block-row > * + * {
    margin: 16px;
}
.block-column {
    display: flex;
    flex-direction: column;
}
.block-text,
.block-start-end-time {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.block-inline-key-value {
    display: flex;
    gap: 16px;
}
.block-inline-key-value > strong {
    font-weight: 600;
}
.block-inline-title {
    display: block;
    border-bottom: 2px solid;
    line-height: 25px;
    font-weight: 600;
}
.block-container .label {
    white-space: nowrap;
}
.block-title {
    background-color: #f9f9f9;
    padding: 6px 12px;
    border-radius: 8px;
    font-weight: 600;
}
.block-item {
    display: block;
    align-items: center;
}
.block-radios {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.block-radios .checkbox {
    width: 12px;
    height: 12px;
    border-radius: 100%;
    border: 1px solid #c4c4c4;
    box-shadow: 0 0 0 1px #fff inset;
}
.block-radios .checkbox[data-checked="true"] {
    background-color: #292929;
}
.block-radios > .block-container {
    display: flex;
}
.block-radios > .block-container > * {
    width: 100%;
}
.block-checkboxes {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.block-checkboxes > .block-container {
    display: grid;
    flex-wrap: wrap;
    gap: 10px;
    grid-template-columns: 1fr 1fr 1fr 1fr;
}
.block-checkboxes .checkbox {
    width: 12px;
    height: 12px;
    border: 1px solid #c4c4c4;
    border-radius: 2px;
}
.block-checkboxes .checkbox[data-checked="true"] {
    border-color: #292929;
    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAHCAYAAADam2dgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABISURBVHgBfYzBDQAQEASvBCUoQUk6oRSlqIgSlgvigrPJfCaTJVIGwHcMfYKAsSylY46gLsfSTMGkKxBPEXt3cIRFDURoX74BA3ZgYkt9TZoAAAAASUVORK5CYII=) no-repeat center center #292929;
}
.block-signature {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    gap: 12px;
    min-height: 100px;
}
.block-signature .signature-title {
    border-top: 2px solid;
    width: 100%;
    text-align: center;
    padding: 8px;
    box-sizing: border-box;
    max-width: 50vw;
}
.block-signature .signature-container > img {
    transform: translateY(50%);
    height: 80px;
}
<!DOCTYPE html>
<html>

<body>
  <section class="blocks">
      <div class="block-row">
          <div class="block-radios">
              <div class="block-inline-title">Radio</div>
              <div class="block-container">
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-title">Main Header</div>
      </div>
      <div class="block-row">
          <div class="block-radios">
              <div class="block-inline-title">Drop Down</div>
              <div class="block-container">
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-text">
              <div class="block-inline-title">Short Text</div>
              <div class="block-container">
                  <div class="block-item">lorem ipsum</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-text">
              <div class="block-inline-title">Number</div>
              <div class="block-container">
                  <div class="block-item">100</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-row">
              <div class="block-signature">
                  <div class="signature-container"><strong>Tracey Kutch</strong>
                  </div>
                  <div class="signature-title">Patient Name</div>
              </div>
              <div class="block-signature">
                  <div class="signature-container">None</div>
                  <div class="signature-title">Signature</div>
              </div>
              <div class="block-signature">
                  <div class="signature-container"><strong>2020-11-04T00:00:00Z</strong>
                  </div>
                  <div class="signature-title">Date</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-start-end-time">
              <div class="block-inline-title">Time</div>
              <div class="block-container">
                  <div class="block-item">Invalid Date</div>
              </div>
          </div>
      </div>
      </div>
      <div class="block-row">
          <div class="block-title">TODO Image @Newbie012</div>
      </div>
      <div class="block-row">
          <div class="block-title">TODO Chart @Newbie012</div>
      </div>
      <div class="block-row">
          <div class="block-row"></div>
      </div>
      <div class="block-row">
          <div class="block-checkboxes">
              <div class="block-inline-title">Multiple Select (check)</div>
              <div class="block-container">
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-radios">
              <div class="block-inline-title">Yes/No</div>
              <div class="block-container">
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-title">Sub Header</div>
      </div>
      <div class="block-row">
          <div class="block-text">
              <div class="block-inline-title">Long Text</div>
              <div class="block-container">
                  <div class="block-item">TypeScript supports JSX transpilation and code analysis. If you are unfamiliar with JSX here is an excerpt from the official website: JSX is an XML-like syntax extension to ECMAScript without any defined semantics. It's NOT intended
                      to be implemented by engines or browsers. It's NOT a proposal to incorporate JSX into the ECMAScript spec itself. It's intended to be used by various preprocessors (transpilers) to transform these tokens into standard ECMAScript.
                      The motivation behind JSX is to allow users to write HTML like views in JavaScript so that you can: Have the view Type Checked by the same code that is going to check your JavaScript Have the view be aware of the context it is
                      going to operate under (i.e. strengthen the controller-view connection in traditional MVC). Reuse JavaScript patterns for HTML maintenance e.g. Array.prototype.map, ?:, switch etc instead of creating new (and probably poorly typed)
                      alternatives. This decreases the chances of errors and increases the maintainability of your user interfaces. The main consumer of JSX at this point is ReactJS from facebook. This is the usage of JSX that we will discuss here.</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-row">
              <div class="block-signature">
                  <div class="signature-container"><strong>Eliya Local</strong>
                  </div>
                  <div class="signature-title">Employee Name</div>
              </div>
              <div class="block-signature">
                  <div class="signature-container">None</div>
                  <div class="signature-title">Signature</div>
              </div>
              <div class="block-signature">
                  <div class="signature-container"><strong>2020-11-04T00:00:00Z</strong>
                  </div>
                  <div class="signature-title">Date</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-row">
              <div class="block-signature">
                  <div class="signature-container"><strong>Signature</strong>
                  </div>
                  <div class="signature-title">Patient Name</div>
              </div>
              <div class="block-signature">
                  <div class="signature-container">None</div>
                  <div class="signature-title">Signature</div>
              </div>
              <div class="block-signature">
                  <div class="signature-container"><strong>2020-11-04T00:00:00Z</strong>
                  </div>
                  <div class="signature-title">Date</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-text">
              <div class="block-inline-title">Date</div>
              <div class="block-container">
                  <div class="block-item">12/Sa/1996</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-start-end-time">
              <div class="block-inline-title">Time</div>
              <div class="block-container">
                  <div class="block-item">Invalid Date</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-text">
              <div class="block-inline-title">Add Free Text</div>
              <div class="block-container">
                  <div class="block-item"></div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-title">TODO Chart @Newbie012</div>
      </div>
      <div class="block-row">
          <div class="block-text">
              <div class="block-inline-title">Blood Pressure</div>
              <div class="block-container">
                  <div class="block-item">100 / 90</div>
              </div>
          </div>
      </div>
      <div class="block-row">
          <div class="block-row"></div>
      </div>
      <div class="block-row">
          <div class="block-row"></div>
      </div>
      <div class="block-row">
          <div class="block-row"></div>
      </div>
  </section>
</body>

</html>

【问题讨论】:

  • .block-row { display: flex; gap: 32px; } 是罪魁祸首,不知道为什么...(无论如何可能值得bug report
  • 是和不是。间距有点可疑。当我试图消除间隙并用边距替换它时,它仍然表现不正确
  • 显然你只需要column-gap(通过快速视觉检查),而row-gap是触发这个bug的那个,所以把gap替换成column-gap就可以了。
  • @Kaiido 我还有其他需要row-gap 的表单(当block-row 中有多个孩子时)。因此,两者都需要。

标签: html css google-chrome


【解决方案1】:

正如@kaiido 指出的那样,罪魁祸首似乎是带有gap 属性的空.block-row

我们遇到了同样的问题并在 Chrome 中发布了一个错误,请参阅link

我们的解决方案是在容器为空时删除gap 属性。

你的情况

.block-row { display: flex; gap: 32px; }
.block-row:empty { gap: unset; }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2017-12-09
  • 2016-01-14
  • 2021-12-28
相关资源
最近更新 更多