HTML中输入真实空格需用 、 、 实体或标签及white-space:pre样式;压缩工具默认保留这些实体,消失多因CSS渲染问题或动态拼接未转义。
普通键盘敲空格,浏览器会自动合并成一个空格显示,这是HTML的默认行为。要让多个空格或保留格式,得用特殊字符或标签。
常用方案有三个:
:不换行空格,最常用,适合单个“强制空格”场景,比如“姓名: 张三” :半个汉字宽(约0.5em),语义上表示“字母间距级空格” :一个汉字宽(约1em),适合对齐或视觉留白 或 white-space: pre CSS 控制整段文本保留空白,但会影响换行和缩进逻辑 会不会被删掉不会。所有 、 、 都是HTML实体,属于有效标记内容,主流压缩工具(如 html-minifier、Webpack 的 html-webpack-plugin)默认保留它们。
但要注意例外情况:
removeEmptyAttributes: true 且误配到 所在上下文(极少见) 这类数字实体当“无用字符”删了这不是压缩导致的,而是渲染层问题。常见原因

font-size: 0 或 line-height: 0,让 高度坍缩display: flex 且没设 flex-wrap: wrap,多个 被挤出视区text-indent 或 letter-spacing 干扰了视觉感知 或 里直接写 ,它不会生效——这些控件只认纯文本空格,且会被 trim动态拼接时容易漏转义,导致浏览器原样输出 文本而不是空格:
html = f"用户名: {name}" # ✅ 正确:字符串里直接写
html = "用户名:" + " " + name # ✅ 同上
html = "用户名: " + name # ❌ 错! 会被显示为字面量在模板中(如 Django、Flask jinja2),确保关闭自动转义或用 |safe 标记,否则 会被转成 。
真正容易被忽略的是:空格是否参与语义。比如用多个 对齐表格列,不如用 CSS text-align 或 grid;用 分隔按钮文字,不如加 margin。视觉空格 ≠ 结构空格。