You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让input文本框超出宽度时自动换行并自适应高度?

解决方案:Input文本自动换行+高度自适应

嘿,这个问题我之前也踩过坑!首先得明确一点:原生的<input type="text">本身就是单行输入控件,哪怕你加了white-space: normal这类CSS样式,它也没法自动换行显示多行内容——这是控件本身的特性决定的。不过没关系,我给你准备了两个不用jQuery的方案,都能完美实现你要的文本自动换行、高度自适应的效果:


方案一:CSS+Textarea替换(最简单直接)

既然input天生不支持多行换行,那我们可以用<textarea>来替代它——毕竟textarea原生就支持多行显示,而且可以设置成只读模式,外观还能和input完全一致。

步骤1:修改HTML

把原来的<input>换成<textarea>

<textarea readonly class="lbl-txt">Hi ssfgsdg dgd gdf bdf bdf bdfb fb fb fb fb fb</textarea>

步骤2:应用CSS样式

在你提供的样式基础上,补充几个关键属性,让textarea看起来和input一样,同时自动换行自适应高度:

.lbl-txt {
  width: 250px;
  height: auto;
  white-space: normal;
  overflow: hidden;
  color: ghostwhite;
  font-size: 14px; /* 补全你未写完的字体大小 */
  border: 1px solid #ccc; /* 可选:模拟input的边框 */
  resize: none; /* 禁止用户拖动调整大小 */
  background: #fff; /* 可选:设置背景色,和input一致 */
  padding: 4px 6px; /* 可选:模拟input内边距 */
}

这样设置后,textarea会自动根据内容的多少调整高度,文本也会自动换行,完全满足你的需求。


方案二:纯JS动态替换(保留原有Input标签结构)

如果因为某些原因你必须保留原有的<input>标签,那可以用JS自动把这些input替换成textarea,同时保留所有原有属性和值,不用手动修改HTML:

JS代码

// 获取所有需要处理的.lbl-txt类只读input元素
const targetInputs = document.querySelectorAll('input.lbl-txt[readonly]');

// 遍历替换每个input
targetInputs.forEach(input => {
  // 创建一个新的textarea元素
  const textarea = document.createElement('textarea');
  
  // 复制input的核心属性
  textarea.className = input.className;
  textarea.readOnly = input.readOnly;
  textarea.value = input.value;
  // 按需复制其他自定义属性(比如id、name)
  if (input.id) textarea.id = input.id;
  if (input.name) textarea.name = input.name;
  
  // 替换原input为textarea
  input.parentNode.replaceChild(textarea, input);
});

然后同样应用方案一里的CSS样式,就能实现和方案一完全一样的效果。


内容的提问来源于stack exchange,提问作者user9446405

火山引擎 最新活动