如何在不增加宽度的情况下向文本区域添加填充?

Posted

技术标签:

【中文标题】如何在不增加宽度的情况下向文本区域添加填充?【英文标题】:How can I add padding to a textarea without causing the width to increase? 【发布时间】:2011-05-10 00:17:06 【问题描述】:

我在设置 textarea 元素的宽度和通过 CSS 使用填充时遇到了问题。 padding 值似乎改变了 textarea 的宽度,我不希望它这样做。

这是我的 html 代码:

<div id="body">
    <textarea id="editor"></textarea>
</div>

还有我的 CSS 代码:

#body 
    height:100%;
    width:100%;
    display:block;


#editor 
    height:100%;
    width:100%;
    display:block;
    padding-left:350px;
    padding-right:350px;

但是,填充值似乎没有像预期的那样工作。 textarea 的宽度在两个方向上都增加了 350 像素,而不是在元素的边框与其内容之间定义空间。

我曾考虑通过将边距设置为“0px auto”来使文本区域居中,但如果鼠标悬停在其中一个空白边距上,我希望用户仍然能够滚动浏览文本区域。出于同样的原因,我不能添加另一个 div 来充当包装器,因为用户不能沿着空白区域滚动,而只能沿着无边距的文本区域滚动。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

CSS box model 将“宽度”定义为内容的宽度,不包括边框、内边距和边距。

幸运的是,CSS3 有一个新的box-sizing 属性,可让您修改此行为以在指定宽度中包含填充等:

box-sizing: border-box;

根据上面的链接,大多数现代浏览器(包括 IE >= 8)都支持这个属性,但是它们在每个浏览器中的名称不同。

【讨论】:

有趣。很难相信这只有在 CSS3 中才有可能。无论如何,它有效。谢谢! 不错的一个。这是 FF/Safari 的代码:-moz-box-sizing:border-box; /* Firefox / -webkit-box-sizing:border-box; / 野生动物园 */ 注意:box-sizing 应该在 parent 上指定,而不是 textarea。 不错...输入太有效..只选择无效...没关系...谢谢! 适用于 div 和大多数其他元素。不适用于文本区域。【参考方案2】:

在 '%' 中指定宽度和边距/填充会有所帮助。 这是一个例子 -

直播@http://jsfiddle.net/ninadpachpute/V2aaa/embedded/result

#body 
  background-color:#ccc;
  height:100%;
  width:100%;
  display:block;


textarea#editor 
  border:none;
  width:80%;
  height:100%;
  margin-left:10%;
  margin-right:10%;

【讨论】:

当您希望在文本区域内进行 PADDING 时,它没有帮助。【参考方案3】:

CSS 指定的宽度不包括内边距或边框(根据 W3C 规范)。我想这样做的一种方法是使用一些 javascript 将#editor 的宽度设置为 #body 的宽度减去 700px,但这有点混乱......不确定是否有 CSS 方式来做你想做的事情。当然,您可以使用 margin 然后将 onMouseWheel 事件注册到 #body 并使用它...

【讨论】:

【参考方案4】:

某些浏览器允许您定位占位符以更改颜色等,因此您也可以添加填充:

::-webkit-input-placeholder  /* WebKit browsers */
    padding: 5px 0 0 5px;

:-moz-placeholder  /* Mozilla Firefox 4 to 18 */
    padding: 5px 0 0 5px;

::-moz-placeholder  /* Mozilla Firefox 19+ */
    padding: 5px 0 0 5px;

:-ms-input-placeholder  /* Internet Explorer 10+ */
    padding: 5px 0 0 5px;

【讨论】:

【参考方案5】:

只需添加一个简单的边框:

border-bottom: 1em solid white;

随意使用所需的颜色和尺寸。您也可以使用 border-topborder-leftborder-right 或仅使用 border。要使其像填充一样,只需确保添加与 background-color

相同的颜色

.parent, textarea
  width:100%;


.parent
  display:flex;


textarea
  border:1em solid black;
<div class='parent'>
  <textarea rows="5"></textarea>
</div>

【讨论】:

以上是关于如何在不增加宽度的情况下向文本区域添加填充?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不缩小r闪亮中的矩阵大小的情况下向输入矩阵添加列?

向文本区域添加项目符号?

Jackson:如何在不修改 POJO 的情况下向 JSON 添加自定义属性

无法使用 CSS-Approach 或 JQuery-Apprach 向文本区域添加必需的验证

HTML / Javascript:如何提交输入并使用提交/添加更多按钮填充文本区域

如何在不阻止 textView 触摸的情况下向所有 UITextView 添加一个 UIGestureRecognizer