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

固定宽度容器内文本变长时如何自动调整字体大小适配容器

你之前使用vw单位无法满足需求的原因很简单:vw是相对于浏览器视口宽度的单位,仅会响应窗口尺寸变化,完全感知不到容器内的文本长度变化,自然无法在文本变长时触发缩放。
针对你的需求,最优实现方案如下,优先推荐兼容性更强的JS方案,可完美适配所有场景:


方案1:JS动态调整(推荐,兼容性覆盖全平台)

第一步:修改CSS约束

先固定label的容器尺寸,取消会自动撑开宽度的max-content配置:

.input-wrapper {
  display: flex;
  flex-direction: row;
  width: 70%;
}

label {
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 30%; /* 固定宽度占比,和input加起来占满父容器 */
  background-color: var(--violet);
  overflow: hidden;
  /* 如果你需要允许多行文本,可删除下面的white-space配置,调整JS逻辑判断scrollHeight即可 */
  white-space: nowrap;
}

input {
  border: 1px solid var(--violet);
  width: 70%;
}

第二步:添加适配逻辑

通过JS检测文本宽度和容器宽度的差值,动态缩小字号直到文本完全容纳:

function adjustLabelFontSize() {
  const label = document.getElementById('fixed');
  let fontSize = 16; // 初始最大字号,可自行调整
  label.style.fontSize = `${fontSize}px`;
  // 最小字号设为8px,避免文本缩到看不清
  while (label.scrollWidth > label.clientWidth && fontSize > 8) {
    fontSize -= 0.5;
    label.style.fontSize = `${fontSize}px`;
  }
}

// 页面加载完成后执行一次
window.addEventListener('load', adjustLabelFontSize);
// 若label文本会动态修改,在文本更新后手动调用adjustLabelFontSize()即可

如果你是用React开发,可把逻辑放到useEffect中,监听文本依赖变量触发重新计算即可。


方案2:纯CSS SVG适配(无JS,仅适合固定高度容器)

如果不想写JS,可借助SVG的自适应缩放能力实现:

<label id="fixed">
  <svg width="100%" height="100%" viewBox="0 0 200 50" preserveAspectRatio="xMidYMid meet">
    <text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle" fill="white">Gas cost</text>
  </svg>
</label>

只需调整viewBox的宽高数值匹配你的label容器尺寸即可,文本会自动缩放适配容器大小,兼容性也较好,支持所有主流现代浏览器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:01