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

如何使用CSS计算当前视口(viewport)的宽高比?

解决方案:用CSS aspect-ratio 实现动态视口比例适配

你可以利用CSS的aspect-ratio属性直接绑定视口宽高比,无需JavaScript就能实现需求。这个属性支持用视口单位作为比例参数,完美避开calc()无法做单位除法的限制。

实现代码

.container {
  width: 240px;
  height: 160px;
  background: #ddd;
  /* 可选:让微缩图在容器内居中 */
  display: flex;
  align-items: center;
  justify-content: center;
}

.viewport-miniature {
  /* 直接设置为当前视口的宽高比 */
  aspect-ratio: 100vw / 100vh;
  /* 限制尺寸不超出容器 */
  max-width: 100%;
  max-height: 100%;
  background: pink;
}
<div class="container">
  <div class="viewport-miniature"></div>
</div>

原理说明

  • aspect-ratio: 100vw / 100vh:100vw对应视口宽度,100vh对应视口高度,这个属性会强制元素保持与当前视口完全一致的宽高比。
  • max-width: 100%和max-height: 100%:让元素自动适配容器的最大可用空间,优先填满宽度或高度(取决于视口比例与容器比例的匹配情况),同时保持比例不变。

旧浏览器兼容方案

如果需要兼容不支持aspect-ratio的浏览器(如IE),可以结合少量JavaScript动态计算视口比例,再用CSS变量实现:

// 计算并设置视口比例变量
document.documentElement.style.setProperty(
  '--viewport-ratio',
  window.innerWidth / window.innerHeight
);

// 窗口 resize 时更新比例
window.addEventListener('resize', () => {
  document.documentElement.style.setProperty(
    '--viewport-ratio',
    window.innerWidth / window.innerHeight
  );
});
.viewport-miniature {
  height: 0;
  /* 用变量计算内边距百分比 */
  padding-bottom: calc(100% / var(--viewport-ratio));
  max-width: 100%;
  max-height: 100%;
  background: pink;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:25:22