95

textarea 标签下有一些额外的空间。在不同的浏览器中从 1 到 4 像素。标记非常简单:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
    <head>
        <style>
            body {
                margin: 0;
                padding: 0;
            }
            .main {
                background-color: red;
            }
            textarea {
                background-color: gray;
                resize: none;
                margin: 0;
                border: 0 none;
                padding: 10px;
                height: 50px;
                overflow: hidden;
            }
        </style>
    </head>
    <body>
        <div class="main">
            <textarea></textarea>
        </div>
    </body>
</html>

以下是它在浏览器中的呈现方式:

截屏

为什么会这样?如何删除这个额外的空间?

4

3 回答 3

232

添加vertical-align: toptextarea.

间隙的原因是它textarea是一个inline(或)元素,而间隙是为文本中的下降inline-block者保留的空间。我不知道为什么不同浏览器之间的差距是不同的。

于 2011-08-22T08:43:48.320 回答
23

在我的情况下,三十点的答案不适用于 parent<div>的底部边框。

display: block不过很适合我。

于 2015-11-06T03:20:22.470 回答
1

我还发现,如果 textarea 的父级正在使用,空间就会消失display:flex

/* The relevant part: */
#FlexLayout { display: flex; flex-direction: column; }

/* The boring part: */
.ShowChildBorders * { border: 1px solid; }
#DefaultLayout * { border-color: red; }
#FlexLayout * { border-color: green; }
#SideBySide { display: flex; }
#SideBySide > div { flex: 1; margin: 4px; }
#SideBySide * { margin: 0; padding: 0; }
<div id="SideBySide">
  <div class="ShowChildBorders">
    <div id="DefaultLayout">
      <div>Default Layout</div>
      <textarea>Text Area</textarea><br/>
      <textarea>Text Area</textarea>
    </div>
  </div>
  <div class="ShowChildBorders">
    <div id="FlexLayout">
      <div>Flexbox Layout</div>
      <textarea>Text Area</textarea>
      <textarea>Text Area</textarea>
    </div>
  </div>
</div>

在 Chrome 91.0.4472.77、Windows 10 64 位上,呈现为:

在此处输入图像描述
于 2021-06-04T22:47:53.040 回答