div 中的文本区域宽度问题

Textarea width issue in div

我只是想把一个textarea变成一个div,我觉得应该问题不大:

代码

.panel {
  width: 250px;
  padding: 10px;
  box-sizing: border-box;
  border: 1px solid #000;
}
.panel textarea {
  width: 100%;
}
<div class="panel">
  <textarea></textarea>
</div>

这是一个非常困难的代码,不是吗?我们都做了一千次。

出于某种原因,textarea 右侧的宽度有问题。检查 .panel 的盒子模型似乎不错。

在 FF 中试过,Chrome,Edge,到处都是相同的结果。

谁能解释一下,为什么会这样,有什么解决办法吗?

我做了一个 jsFiddle 只是为了好玩。

<textarea> 一个 box-sizing: border-box 应该可以解决它。:

.panel {
    width: 250px;
    border: 1px solid #000;
    box-sizing: border-box;
    padding: 10px;
}

.panel textarea {
    display: block;
    box-sizing: border-box;
    width: 100%;
}

JSFiddle

我还向文本区域添加了一个 display:block 以消除文本区域底部边距的一些不一致 (How do I fix inconsistent Textarea bottom margin in Firefox and Chrome?)

你应该普遍应用 box-sizing:border-box 而不仅仅是 div

*,
*::before,
*::after {
  box-sizing: border-box;
}
.panel {
  width: 250px;
  padding: 10px;
  border: 1px solid #000;
}
.panel textarea,
.panel input {
  width: 100%;
}
<div class="panel">
  <textarea></textarea>
  <input type="text" />
</div>

而不是尝试向您的文本区域添加 0 的填充,因为 box-sizing:border-box 结果在某些浏览器上有所不同。

.panel textarea{
 width: 100%;
 padding:0;
}

发生这种情况是因为默认情况下文本区域具有填充和边框。当您将宽度设置为 100% 时,textarea 实际上变为 100% + padding-left/right + border-left/right-width。将 textarea 设置为 box-sizing: border-box 将使 padding/border 适合指定宽度,而不是超出指定宽度。

.panel textarea {width: 100%; box-sizing: border-box;}

这是一个直观的例子: https://css-tricks.com/examples/BoxSizing/