HTML 中 <textarea> 默认会因行内元素的基线对齐(baseline alignment)特性,在其下方产生不可见的空白间隙;该问题在 Chrome 和 Firefox 中表现不一,但根源相同,可通过设置 display: block、vertical-align: top 或重置 line-height 等 CSS 方案根治。
html 中 `` 默认会因行内元素的基线对齐(baseline alignment)特性,在其下方产生不可见的空白间隙;该问题在 chrome 和 firefox 中表现不一,但根源相同,可通过设置 `display: block`、`vertical-align: top` 或重置 `line-height` 等 css 方案根治。
这个问题的本质并非边框(border)、外边距(margin)或轮廓(outline)导致,而是 <textarea> 作为可替换的行内级(inline-level)元素,在父容器(如 <div>)中默认按 vertical-align: baseline 对齐——它会预留出字母 descender(如 g、y、p 的下伸部分)所需的空间,从而在视觉上表现为“底部多出一段空白”。
虽然为 .it 类添加 margin: 0 能消除显式外边距,但无法解决基线对齐引发的布局间隙。以下是最可靠、语义清晰且兼容性良好的三种解决方案:
.it { min-width: 100%; border: none; background-color: lightblue; outline: none; margin: 0; /* 显式清除默认 margin */ display: block; /* 关键:脱离行内流,消除基线对齐影响 */}
此方案直接将 <textarea> 转为块级元素,完全规避行内对齐逻辑,无需额外类名,适用于绝大多数布局场景。
若需保留 <textarea> 与其他行内元素(如 <input>)并排显示,可改用:
立即学习“前端免费学习笔记(深入)”;
.it { /* ...原有样式 */ vertical-align: top; /* 或 middle / bottom,避免 baseline */ line-height: 1; /* 可选:进一步收紧行高,防止字体度量干扰 */}
注意:此时需确保父 <div> 未设置过大的 line-height,否则仍可能间接影响。
原答案中通过 .specific-height { height: 18px } 强制设定高度虽能“掩盖”间隙,但存在严重缺陷:
因此,除非有极特殊的 UI 约束,否则应避免硬编码高度。
<div> <input class="it" /> <textarea class="it"></textarea> <input class="it" /> <textarea class="it"></textarea></div>
.it { min-width: 100%; border: none; background-color: lightblue; outline: none; margin: 0; display: block; /* 核心修复 */ box-sizing: border-box; /* 确保 padding/border 不撑宽 */}.it:focus { outline: none;}
总结:textarea 后的“神秘空白”是 CSS 行内格式化上下文(IFC)的经典表现,根源在于 vertical-align: baseline。优先使用 display: block 彻底解耦,既符合语义,又零副作用;若需行内布局,则务必配合 vertical-align 与 line-height 精细调控。切勿依赖固定高度“治标不治本”。