fix(文书纸): 用 min-height + container-type 修正纸张高度下限与窄容器下表格溢出
This commit is contained in:
@@ -41,22 +41,32 @@ export const DOCUMENT_PAPER_CSS = `
|
||||
--doc-paper-max-w: 820px;
|
||||
--doc-paper-pad-x: clamp(20px, 15.14%, 124px);
|
||||
--doc-paper-pad-y: clamp(16px, 6.83%, 56px);
|
||||
/* 同一套比例,用**容器查询单位**表达:给「纸壳宽度 == 纸宽」的场景(编辑器)用。
|
||||
那种场景下 cqw 精确等于纸宽的 1%,不需要 clamp 的两段兜底。
|
||||
⚠️ 这三个与上面那三个必须同步改;只在有 container-type:inline-size 祖先的元素上用,
|
||||
否则 cqw 会退化成相对视口算。 */
|
||||
--doc-paper-pad-x-cqw: 15.14cqw;
|
||||
--doc-paper-pad-y-cqw: 6.83cqw;
|
||||
--doc-paper-min-h-cqw: 141.43cqw; /* 297 / 210 */
|
||||
/* A4 的**最小高度**:纸宽封顶 820 时就是 1159.71px(= 820 × 297/210);
|
||||
容器比 820 窄时纸也会跟着窄,那时按容器宽 × 297/210 算(cqw = 容器宽的 1%)。
|
||||
两个分支在「容器 == 纸宽」处正好接上,所以 min() 挑哪个都对。
|
||||
|
||||
⚠️ **不要用 aspect-ratio 表达这个下限**(2026-09-27 踩过):
|
||||
aspect-ratio 会把纸的**高度定死**,正文比一页高时纸不长高、内容直接溢到纸外 ——
|
||||
实测深灰舞台那张纸卡在 1160px 而正文 1355px,用户看到的就是「纸张只显示一页」。
|
||||
min-height 只设下限,正文多了纸一定长高(编辑器的纸一直是这么写的,没出过问题)。
|
||||
|
||||
⚠️ cqw 相对**最近的容器查询祖先**解析 —— 纸的父级必须带
|
||||
container-type: inline-size(probe-a4-paper.cjs 会逐处断言纵向不溢出)。 */
|
||||
--doc-paper-min-h: min(calc(var(--doc-paper-max-w) * 297 / 210), 141.43cqw);
|
||||
}
|
||||
|
||||
/* 一页 A4:比例 + 一般文书页边距。
|
||||
aspect-ratio 只是**下限** —— 内容超过一页时盒子会长高(实测过),不裁切、不内滚。 */
|
||||
/* 一页 A4:至少一页的高度 + 一般文书页边距。
|
||||
min-height 是**下限** —— 正文超过一页时纸长高,不裁切、不内滚、不溢到纸外。
|
||||
|
||||
flex: none 也是必须的(2026-09-27 踩过):预览弹窗的纸舞台是 flex 列容器且高度受限,
|
||||
纸作为 flex 子项默认 flex-shrink: 1 → 会被**压回 min-height**、正文又溢到纸外。
|
||||
flex: none(0 0 auto)让纸既不伸也不缩,高度 = max(正文, 一页 A4)。 */
|
||||
.doc-paper--a4 {
|
||||
width: 100%;
|
||||
max-width: var(--doc-paper-max-w);
|
||||
margin: 0 auto;
|
||||
aspect-ratio: 210 / 297;
|
||||
flex: none;
|
||||
min-height: var(--doc-paper-min-h);
|
||||
padding: var(--doc-paper-pad-y) var(--doc-paper-pad-x);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user