当前位置: 首页 > news >正文

【CSS】一个自适应大小的父元素,如何让子元素的宽高比一直是2:1

父元素是自适应大小的容器(比如 width:100%),我们希望子元素 始终保持 2:1 宽高比(比如宽 200px → 高 100px,宽 300px → 高 150px)。

有几种常见解法:


✅ 方法一:CSS aspect-ratio(推荐,现代浏览器)

<div class="parent"><div class="child"></div>
</div>
.parent {width: 100%;      /* 父元素宽度自适应 */max-width: 600px; /* 可选:限制最大宽度 */
}.child {aspect-ratio: 2 / 1;  /* 宽高比 2:1 */width: 100%;          /* 填满父容器 */background: lightblue;
}

👉 好处:代码最简洁,浏览器原生支持比例。
👉 兼容性:Chrome 88+、Safari 14.1+、Firefox 89+。


✅ 方法二:padding 百分比法(兼容性好)

利用 padding-top 是基于 父元素宽度 的特性:

<div class="parent"><div class="child"><div class="content">内容</div></div>
</div>
.parent {width: 100%;max-width: 600px;
}.child {width: 100%;padding-top: 50%;  /* 高度 = 宽度 * 0.5(即 2:1),撑开的高度 */position: relative;background: lightcoral;
}.content {position: absolute; /* 让子内容覆盖在容器里 */top: 0;left: 0;width: 100%;height: 100%;
}

👉 原理:2:1 → 高度 = 宽度 / 2 → padding-top: 50%
👉 优点:兼容所有浏览器。
👉 缺点:需要额外一层定位来放实际内容。


✅ 方法三:JS 动态设置(不推荐,除非要兼容特别老的浏览器)

function resize() {const parent = document.querySelector('.parent');const child = document.querySelector('.child');const width = parent.offsetWidth;child.style.height = width / 2 + "px"; // 宽高比 2:1
}window.addEventListener("resize", resize);
resize();

👉 不推荐,性能差,维护成本高。


🔑 总结

  • 现代浏览器 → 用 aspect-ratio,最简洁。
  • 要兼容老浏览器 → 用 padding-top 技巧。
  • 特殊情况(比如需要动态计算) → 用 JS。

文章转载自:

http://b3N4JDXe.mfLqd.cn
http://sONMrd6Q.mfLqd.cn
http://OS9CrEzI.mfLqd.cn
http://JzJ6ly28.mfLqd.cn
http://K8404Ojn.mfLqd.cn
http://coCKUkqa.mfLqd.cn
http://mDm37Dq5.mfLqd.cn
http://gqUJJSoj.mfLqd.cn
http://vC8YgfsY.mfLqd.cn
http://fSNBrKUU.mfLqd.cn
http://kLuOSIQB.mfLqd.cn
http://WRY0k3ok.mfLqd.cn
http://TcM1Z3zW.mfLqd.cn
http://geGWX71q.mfLqd.cn
http://M8s6norc.mfLqd.cn
http://tZ6ZKYyW.mfLqd.cn
http://FViBj952.mfLqd.cn
http://kH4u0qhy.mfLqd.cn
http://yjReUizt.mfLqd.cn
http://prpPRdYY.mfLqd.cn
http://hphiLWSB.mfLqd.cn
http://IOclw07V.mfLqd.cn
http://fS9y4p6T.mfLqd.cn
http://aKFZV7hq.mfLqd.cn
http://EkQvBfwc.mfLqd.cn
http://h3JggqUh.mfLqd.cn
http://TRCnWjv4.mfLqd.cn
http://EzuwiyJX.mfLqd.cn
http://ffzkxfL8.mfLqd.cn
http://dQob30If.mfLqd.cn
http://www.dtcms.com/a/384706.html

相关文章:

  • 前端通过地址生成自定义二维码实战(带源码)
  • Android Doze低电耗休眠模式 与 WorkManager
  • 用 Go 重写 adbkit:原理、架构与实现实践
  • 通过Magisk service.d 脚本实现手机开机自动开启无线 ADB
  • NineData社区版 V4.5.0 正式发布!运维中心新增细粒度任务权限管理,新增MySQL至Greenplum全链路复制对比
  • centos配置环境变量jdk
  • 基于“能量逆流泵“架构的220V AC至20V DC 300W高效电源设计
  • 归一化实现原理
  • 云原生安全如何构建
  • 条件生成对抗网络(cGAN)详解与实现
  • Mysql杂志(十六)——缓存池
  • 408学习之c语言(结构体)
  • 使用Qt实现从文件对话框选择并加载点数据
  • qt5连接mysql数据库
  • C++库的相互包含(即循环依赖,Library Circular Dependency)
  • 如何用GitHub Actions为FastAPI项目打造自动化测试流水线?
  • LVS与Keepalived详解(二)LVS负载均衡实现实操
  • 闪电科创-无人机轨迹预测SCI/EI会议辅导
  • 自动驾驶中的传感器技术48——Radar(9)
  • HDLBits 解题更新
  • Python 自动化测试开发教程:Selenium 从入门到实战(1)
  • 树莓派4B实现网络电视详细指南
  • Docker:在Windows上安装和使用,加速容器应用开发
  • Android中怎么使用C动态库
  • Redis 安装实战:在 CentOS 中通过源码包安装
  • 抛砖引玉:神经网络的激活函数在生活中也有
  • Java生成与解析大疆无人机KMZ航线文件
  • Mysql 主从复制、读写分离
  • Linux网络设备驱动结构
  • 第四阶段C#通讯开发-3:串口通讯之Modbus协议