You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让textarea根据内容宽度自适应,同时限制最小/最大宽度?

Textarea 宽度自适应实现(兼容最小/最大宽度)

要实现textarea宽度随内容自适应,同时遵守min-width和max-width限制,仅靠CSS无法完成,得结合JavaScript和一个辅助元素来模拟内容宽度。以下是完整的实现方案,同时保留你已有的高度自适应功能:

核心思路

使用一个隐藏的<div>作为影子元素,让它和textarea拥有完全一致的字体、内边距等样式,这样影子元素的宽度就是内容所需的实际宽度。通过JS将这个宽度同步给textarea,并限制在设置的最小/最大宽度范围内。

完整代码

HTML

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.6.3.min.js"></script>
<!-- 用于计算内容宽度的隐藏辅助元素 -->
<div class="textarea-shadow"></div>
<textarea>this is my normal content, and it has to consider this content to be as long as the max-width</textarea>
<textarea>this is my normal content, should be consider</textarea>
<textarea>this is my min content</textarea>

CSS

textarea{
  border: 1px solid black;
  min-width: 50px;
  max-width: 300px;
  font: inherit;
  padding: 4px;
  box-sizing: border-box; /* 确保内边距不影响宽度计算 */
}

.textarea-shadow {
  position: absolute;
  visibility: hidden;
  white-space: nowrap; /* 强制单行,保证宽度计算准确 */
  padding: 4px;
  font: inherit;
  min-width: 50px;
  max-width: 300px;
  box-sizing: border-box;
}

JavaScript

// 初始化所有textarea
$("textarea").each(function () {
  // 设置初始高度
  this.style.height = this.scrollHeight + "px";
  // 设置初始宽度
  updateWidth(this);
}).on("input", function () {
  // 更新高度(保留你原有的逻辑)
  this.style.height = 0;
  this.style.height = this.scrollHeight + "px";
  // 更新宽度
  updateWidth(this);
});

// 触发一次input事件完成初始化
$("textarea").trigger("input");

// 计算并更新textarea宽度的工具函数
function updateWidth(textarea) {
  const shadow = $(".textarea-shadow");
  // 同步textarea内容到影子元素
  shadow.text(textarea.value || textarea.placeholder);
  // 获取影子元素的实际宽度
  const contentWidth = shadow[0].offsetWidth;
  // 获取设置的最小/最大宽度
  const minW = parseInt($(textarea).css("min-width"), 10);
  const maxW = parseInt($(textarea).css("max-width"), 10);
  // 计算最终宽度(限制在min和max之间)
  const finalW = Math.max(minW, Math.min(maxW, contentWidth));
  // 设置textarea宽度
  textarea.style.width = finalW + "px";
}

实现效果

期望的textarea宽度自适应效果

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:27:41