欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > css使用aspect-ratio制作4:3和9:16和1:1等等比例布局

css使用aspect-ratio制作4:3和9:16和1:1等等比例布局

2025/5/6 6:58:42 来源:https://blog.csdn.net/pdd11997110103/article/details/147710660  浏览:    关键词:css使用aspect-ratio制作4:3和9:16和1:1等等比例布局

文章目录

  • 1. 前言
  • 2. 用法
    • 2.1 基本语法
    • 2.2. 与`max-width`、`max-height`等属性结合使用
    • 2.3. 动态计算比例
  • 3. 应用场景
  • 4. 兼容性和替代方案
  • 5. 总结

1. 前言

在网页制作过程中,有时候我们只知道宽度,或者只知道高度,这时候需要制作一个4:3和9:16这种类似的盒子,不使用js而使用纯css如何实现呢:

aspect-ratio 是 CSS 中用于定义元素宽高比的属性。它允许开发者指定一个元素的宽度和高度之间的固定比例关系,无论元素的实际尺寸如何变化,都会保持这个比例。这种特性在响应式设计、图片和视频布局等场景中非常实用,能够帮助开发者更轻松地控制元素的外观和布局,避免因内容尺寸变化导致的布局错乱问题。

2. 用法

下面列举了一些常用的用法:

2.1 基本语法

aspect-ratio属性接受一个由斜杠(/)分隔的两个数字,表示宽度与高度的比例,其语法如下:

element {aspect-ratio: <width> / <height>;
}

其中,widthheight为非负数字,例如:

.box {aspect-ratio: 16 / 9; /* 常见的视频宽高比 */width: 500px;background-color: lightblue;
}

在上述代码中,.box元素的宽度设置为500px,由于aspect-ratio设置为16/9,因此该元素的高度会自动计算为500px * 9 / 16 = 281.25px,从而保持16:9的宽高比。

2.2. 与max-widthmax-height等属性结合使用

aspect-ratio属性可以与max-width、max-height等属性配合,实现更灵活的响应式布局。例如:

.image-container {max-width: 800px;aspect-ratio: 4 / 3;overflow: hidden;
}.image-container img {width: 100%;height: 100%;object-fit: cover;
}

在这个例子中,.image-container的最大宽度为800px,并且保持4:3的宽高比。内部的图片会自动填满容器,并通过object-fit: cover属性确保图片在保持比例的同时,完整显示内容。

2.3. 动态计算比例

aspect-ratio的值也可以通过 CSS 变量(var())动态计算,以适应不同的布局需求:

:root {--ratio-width: 2;--ratio-height: 1;
}.dynamic-box {aspect-ratio: var(--ratio-width) / var(--ratio-height);background-color: lightcoral;
}

通过修改 CSS 变量的值,可以轻松改变元素的宽高比,而无需修改大量的 CSS 代码。

3. 应用场景

下面列举了一些常见的应用场景:

  • 响应式图片和视频布局

在响应式设计中,aspect-ratio属性常用于保持图片和视频的比例,防止其在不同设备上拉伸变形。例如,对于视频播放器:

.video-player {width: 100%;aspect-ratio: 16 / 9;
}

无论设备屏幕宽度如何变化,视频播放器都会始终保持16:9的比例,确保视频的正确显示。

  • 卡片式布局

在卡片式布局中,使用aspect-ratio可以让卡片在不同屏幕尺寸下保持一致的外观。例如:

.card {width: 300px;aspect-ratio: 3 / 4;border: 1px solid #ccc;border-radius: 10px;overflow: hidden;
}

这样,每张卡片都会保持固定的宽高比,即使卡片内容有所不同,整体布局也会显得整齐有序。

  • 图表和图形绘制

在绘制图表、流程图等图形时,aspect-ratio可以帮助开发者精确控制图形的比例,使其在不同屏幕上都能正确显示。例如:

.chart {width: 600px;aspect-ratio: 5 / 3;background-color: #f9f9f9;
}

通过设置合适的宽高比,图表可以更好地展示数据,提升视觉效果。

4. 兼容性和替代方案

虽然aspect-ratio属性功能强大,但在使用时需要注意其浏览器兼容性:

  • Chrome:从版本 89 开始支持aspect-ratio属性,目前主流版本均已完全支持。
  • Firefox:从版本 87 开始支持该属性。
  • Safari:从版本 15.4 开始支持,较旧版本的 Safari 不支持此属性。
  • Edge:从版本 89 开始支持,与 Chrome 保持一致。
环境版本支持情况
Chrome89+支持
Firefox87+支持
Edge89+(新版本基于Chromium)支持
Safari15.4+支持

对于不支持aspect-ratio属性的旧版浏览器,可以使用 JavaScript 来实现类似的效果。或者利用css里“百分比 padding 是相对于父容器宽度计算”的特性来实现:

  • 通过 JavaScript 监听窗口大小变化,动态计算并设置元素的高度:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Aspect Ratio Fallback</title><style>.fallback-box {width: 100%;background-color: lightgreen;}</style>
</head><body><div class="fallback-box" id="fallbackBox"></div><script>const fallbackBox = document.getElementById('fallbackBox');const ratio = 16 / 9;function setBoxHeight() {const width = fallbackBox.offsetWidth;fallbackBox.style.height = (width / ratio) + 'px';}window.addEventListener('load', setBoxHeight);window.addEventListener('resize', setBoxHeight);</script>
</body>
</html>
  • css里“百分比 padding 是相对于父容器宽度计算”的特性

设置 .box 的 height: 0,然后通过 padding-top: 75% 来创建高度。 因为 padding-top
百分比是基于父容器的宽度计算的,所以 75% 表示高度是宽度的 75%,即实现了 4:3 的比例(3 ÷ 4 = 0.75)。
使用position: absolute 可以在里面添加内容或覆盖其他元素。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Aspect Ratio Fallback</title><style>.container {width: 400px; /* 可以根据需要调整宽度 */position: relative;}.box {height: 0;padding-top: 75%; /* 3/4 = 0.75 = 75% */background-color: lightblue;position: relative;}/* 如果你想在盒子里放内容,可以用一个绝对定位的子元素 */.box-content {position: absolute;top: 0;left: 0;width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;}</style>
</head><body><div class="container"><div class="box"></div></div>
</body>
</html>

这2种方式可以在不支持aspect-ratio属性的浏览器中,模拟出类似的宽高比效果。

5. 总结

aspect-ratio属性为 CSS 开发者提供了一种简单而有效的方式来控制元素的宽高比,极大地简化了响应式设计和布局的实现过程。尽管存在一定的浏览器兼容性问题,但随着主流浏览器的不断更新,该属性的应用将会越来越广泛。在实际项目中,合理运用aspect-ratio属性,可以提升页面的视觉效果和用户体验,使布局更加灵活和美观。


本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~

往期文章

  • flutter-使用extended_image操作图片的加载和状态处理以及缓存和下载
  • flutter-制作可缩放底部弹出抽屉评论区效果
  • flutter-实现Tabs吸顶的PageView效果
  • Vue2全家桶+Element搭建的PC端在线音乐网站
  • 助你上手Vue3全家桶之Vue3教程
  • 助你上手Vue3全家桶之VueX4教程
  • 助你上手Vue3全家桶之Vue-Router4教程
  • 超详细!Vue的九种通信方式
  • 超详细!Vuex手把手教程
  • 使用nvm管理node.js版本以及更换npm淘宝镜像源
  • vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令

个人主页

  • CSDN
  • GitHub
  • 简书
  • 博客园
  • 掘金

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词