自动增长Textareas的最干净技巧

更新日期: 2020-12-14阅读: 1.6k标签: textarea

想法是使 <textarea> 更像 <div>,因此它的高度可以扩展以包含当前值。这几乎是奇怪的,没有一个简单的原生解决方案,不是吗?

现在我得到了一个非常好的原生解决方案。

这里是演示,如果你只是想要一个工作的例子

<h1>Auto-Growing <code>&lt;textarea></code></h1>

<form action="#0">
  <label for="text">Text:</label>
  <div class="grow-wrap">
    <textarea
      name="text"
      id="text"
      onInput="this.parentNode.dataset.replicatedValue = this.value"
    ></textarea>
  </div>
</form>
.grow-wrap {
  /* 简单的方法将元素叠加在一起,并根据最高者的高度确定它们的大小。 */
  display: grid;
}
.grow-wrap::after {
  /* 注意奇怪的空间!需要预防跳动行为 */
  content: attr(>) " ";

  /* 这就是textarea文本的表现形式 */
  white-space: pre-wrap;

  /* 隐藏在视图,点击和屏幕阅读器中 */
  visibility: hidden;
}
.grow-wrap > textarea {
  /* 您可以保留此设置,但是在用户调整大小后,它将破坏自动调整大小 */
  resize: none;

  /* Firefox显示增长的滚动条,您可以像这样隐藏。 */
  overflow: hidden;
}
.grow-wrap > textarea,
.grow-wrap::after {
  /* 需要相同的样式! */
  border: 1px solid black;
  padding: 0.5rem;
  font: inherit;

  /* 放在彼此之上 */
  grid-area: 1 / 1 / 2 / 2;
}

body {
  margin: 2rem;
  font: 1rem/1.4 system-ui, sans-serif;
}

label {
  display: block;
}

效果

诀窍是,你要准确地将 <textarea> 的内容复制到一个可以自动展开高度的元素中,并匹配它的大小。

所以你有一个 <textarea>,它不能自动展开高度。

相反,您可以在另一个元素中完全复制该元素的外观,内容和位置,再复制的元素隐藏起来。


现在,这三个元素都是相互联系的。无论哪一个子元素最高,都会把父元素推到那个高度,而另一个子元素也会跟随。这意味着 <textarea> 的最小高度将成为“基础”高度,但是如果复制的文本元素碰巧变高了,所有的东西也会随之变高。

好聪明,我太喜欢了。


您需要确保复制的元素完全相同

相同的字体,相同的填充,相同的页边距,相同的边框…所有内容。这是一个相同的副本,只是在视觉上隐藏了 visibility: hidden;;如果不是完全一样的,那么所有的东西都不会完全正确地生长在一起。

我们还需要在复制的文本上 white-space: pre-wrap; ,因为这就是 textareas 的表现。


这是最奇怪的部分

在我的演示中,我将 ::after 用于复制的文本。我不确定这是否是最好的方法。对我来说感觉很干净,但是我想知道使用 <div aria-hidden =“ true”> 对于屏幕阅读器是否更安全?

或 visibility: hidden; 够了吗?无论如何,那不是奇怪的部分。这是奇怪的部分:

css
content: attr(>) " ";

因为我使用的是伪元素,伪元素是将 data 属性从元素中取出并以额外的空间将内容呈现到页面的行(这是奇怪的部分)。如果你不这样做,最终的结果会让人感觉 “跳脱”。我不能说我完全理解它,但它似乎更好地尊重了跨 textarea 和文本元素的换行行为。

如果你不想使用伪元素,嘿嘿,我没意见,只要注意跳动的行为即可。

完整示例和代码https://codepen.io/chriscoyier/pen/XWKEVLy


原文:https://blog.zhangbing.site/2020/12/02/the-cleanest-trick-for-autogrowing-textareas/
来源:https://css-tricks.com/


链接: https://fly63.com/article/detial/9946

小程序/网页实现textarea高度随内容自动改变

textarea默认的高度不是对着内容变化,而是随着内容增多,出现了滚动条。目前的需求是实现一个能够输入的textarea,并且高度跟着内容变化。以及小程序的textarea高度随内容自动改变的实现

JS使用textarea模拟post提交表单

textarea代表HTML表单多行输入域,textarea标签是成对出现的,以<textarea>开始,以</textarea>结束。cols -- 多行输入域的列数,rows -- 多行输入域的行数

jquery实现显示textarea输入字符数

起初会想到使用keyup、keydown、keypress或者是onchange事件,onchange需要失去焦点才触发, 其它三个有些对按住键盘某个键不放不生效,有些对使用中文输入法正在输入时统计不正确。

如何实现 textarea 的 autoHeight 功能

这个功能还比较常见,用来获取文本的长宽(避免了计算不准的问题),主要用于实现 textarea 自动变长。可以看到在我们使用 textarea 的时候,有时候需要感知内容的高度,然后动态撑开

textarea高度自动撑开_实现textarea高度自适应

textarea高度自适应,textarea高度自动增高,textarea高度自动撑开,本文通过复制textarea的html给另外一个元素pre,由于设置pre自动展开,所以不会存在有滞留的感觉,交互效果较好。

js换行符 - 对textarea换行符的处理方案

大家做前端的时候,相信都遇到过,利用多行文本控件 textarea 录入数据,多段落回车换行,但是在页面展示时,换行就不出效果了,有什么办法可以解决呢,下面给大家介绍两种个人觉得最简单的方法。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!