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

如何使用纯JavaScript在调整div尺寸时按约束比例基于宽度适配高度?

保持div宽高比随宽度自动调整高度的实现方案

对应需求:初始宽300px、高600px,修改宽度为400px时高度自动计算为800px,无需手动设置高度。

纯CSS方案(推荐)

无需JS干预,直接通过样式约束宽高比,后续修改宽度时高度自动适配。

方案1:使用aspect-ratio属性(主流浏览器均支持)

该属性直接指定元素的宽高比,高度会随宽度自动按比例计算:

.demo-div {
  /* 初始宽度300px,宽高比为1:2(300:600) */
  width: 300px;
  aspect-ratio: 1 / 2;
}

后续需要调整宽度时,仅修改width属性即可,高度自动匹配比例:

/* 宽度改为400px,高度自动计算为800px */
.demo-div {
  width: 400px;
  aspect-ratio: 1 / 2;
}

方案2:兼容旧浏览器的padding hack

如果需要兼容不支持aspect-ratio的老旧浏览器,可通过内边距撑开高度实现比例约束:

.demo-div {
  width: 300px;
  height: 0;
  /* 高度为宽度的2倍,因此padding-top设为200% */
  padding-top: 200%;
  position: relative;
}
/* 内部内容需用绝对定位填充,避免被内边距挤开 */
.demo-inner-content {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

后续修改width时,高度同样会自动按2倍比例计算。

JS动态计算方案

如果需要动态获取初始宽高比、且频繁手动修改宽度,可通过JS监听宽度变化自动更新高度:

const targetDiv = document.querySelector('.demo-div');
// 从初始属性中计算比例:高度 / 宽度 = 600 / 300 = 2
const heightRatio = targetDiv.offsetHeight / targetDiv.offsetWidth;

// 封装高度更新方法
function syncHeight() {
  const currentWidth = targetDiv.offsetWidth;
  targetDiv.style.height = currentWidth * heightRatio + 'px';
}

// 监听元素宽度变化(比window resize更精准,只监听目标元素)
const resizeObserver = new ResizeObserver(syncHeight);
resizeObserver.observe(targetDiv);

// 手动修改宽度时无需手动计算高度,监听会自动触发更新
// 比如设置宽度为400px,高度自动变为800px
targetDiv.style.width = '400px';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 01:24:01