You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS已设页面与div高度,Chrome打印预览仍显示两页而非一页

问题描述

我将单个div元素的高度硬编码为29.7cm,同时设置页面高度为29.7cm,但在Chrome浏览器的打印预览中,页面显示为两页而非一页。

HTML代码

<html lang="en">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div></div>
</body>
</html>

CSS代码

* {
    box-sizing: border-box;
    margin: 0;
}

div {
    display: inline-block;
    border: 0.2cm solid red;
    height: 29.7cm;
    width: calc(0.5 * 21.0cm);
}

@page {
    size: 21.0cm 29.7cm;
    margin: 0cm;
}
原因分析

出现这个问题的核心原因有两个:

  • inline-block的默认垂直对齐行为:inline-block元素默认的vertical-align值是baseline,即使元素为空,浏览器也会为其预留一行文本基线的微小空间(由默认行高决定),这会让div实际占据的高度略大于你设置的29.7cm,超出页面高度限制后触发分页。
  • body默认内边距未清除:Chrome中body元素默认有8px的内边距,你的全局样式只清除了margin,没有清除padding,这会让div的位置向下偏移,进一步加剧高度溢出的问题。
解决方案

你可以通过以下任意一种方式解决:

  1. 将div的display改为block,彻底消除inline-block带来的基线空间问题:
div {
    display: block; /* 替换inline-block */
    border: 0.2cm solid red;
    height: 29.7cm;
    width: calc(0.5 * 21.0cm);
}
  1. 为div设置vertical-align: top,覆盖默认的基线对齐:
div {
    display: inline-block;
    vertical-align: top; /* 添加这一行 */
    border: 0.2cm solid red;
    height: 29.7cm;
    width: calc(0.5 * 21.0cm);
}
  1. 同时清除body的默认内边距,在全局样式中补充:
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0; /* 添加清除padding */
}

内容的提问来源于stack exchange,提问作者user32882

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:18:24