当前位置:网站首页>设置图片纵横比
设置图片纵横比
2022-08-02 03:34:00 【IICOOM】
如果你正在思考如何根据容器的宽度 按比例 设置高度,那么这个应该可以帮到你。
最近遇到一个响应式设计的需求,页面缩放时保持整体结构不变,按原有比例缩放,如下图:每行展示4个图片。
这个需求看似简单,其实呢,也确实很简单… 开始写代码
<template>
<div>
<el-row :gutter="12" class="y_gap00">
<el-col v-for="(item, index) in cate_list" :key="index" :span="6" class="y_gap00 pointer">
<div>
<el-card shadow="hover" :body-style="{ padding: '0px' }">
<img :src="item.cover_url" class="image_tag">
<div style="padding: 14px; text-align: left">
<span class="nice_title">{
{item.title}}</span>
</div>
</el-card>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
name: "ratio",
data() {
return {
cate_list: [
{title: '组织创新大课', cover_url: 'https://static.cyjiaomu.com/delivery/zzcx.png'},
{title: '全媒体营销增长七剑特训营', cover_url: 'https://static.cyjiaomu.com/delivery/zzqj.png'},
{title: '兵头将尾销售主管实战训练营', cover_url: 'https://static.cyjiaomu.com/delivery/btjw.png'},
{title: '企业流量增长实战课', cover_url: 'https://static.cyjiaomu.com/delivery/llzc.jpg'},
{title: '企业品牌营销实战课', cover_url: 'https://static.cyjiaomu.com/delivery/ppyx.jpg'},
{title: '业务型HR实训营', cover_url: 'https://static.cyjiaomu.com/delivery/yewu.png'},
]
}
},
}
</script>
<style scoped>
.y_gap00 {
margin: 15px 0 0 0!important;
}
.nice_title {
text-overflow: ellipsis;
white-space: nowrap;
overflow:hidden;
width: 100%;
display: inline-block;
}
.image_tag {
width: 100%;
}
.image {
width: 100%;
display: block;
padding-top: 60%;
background-repeat: no-repeat;
background-size: cover;
}
.pointer {
cursor: pointer;
}
</style>
代码看似天衣无缝(当时了解需求的时候听说可能后续要增加课程,那我只要维护cate_list就可以了,随便你增加_)。
理想丰满,现实骨感 测试的时候发现,上边的代码在浏览器中表现的竟然是下面的样子!!!
为什么参差不齐?原因就在于需求方提供的图片尺寸并不是相同的!!!。
好吧,怎么让它们看起来相同?1. 图片设置固定高度(不可行,缩放之后就变形了);2. 图片设置固定宽高比(可行,这样缩放后也能保持统一)
那么问题来了,本来宽度就是不固定的,怎样按比例设置高度呢?这就是下面讲到的 纵横比(aspect ratio)。
替换掉img标签
<template>
<div>
<el-row :gutter="12" class="y_gap00">
<el-col v-for="(item, index) in cate_list" :key="index" :span="6" class="y_gap00 pointer">
<div>
<el-card shadow="hover" :body-style="{ padding: '0px' }">
<!--
<img :src="item.cover_url" class="image">
-->
<div class="image" :style="{backgroundImage: `url(${item.cover_url})`}"></div>
<div style="padding: 14px; text-align: left">
<span class="nice_title">{
{item.title}}</span>
</div>
</el-card>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
name: "ratio",
data() {
return {
cate_list: [
{title: '组织创新大课', cover_url: 'https://static.cyjiaomu.com/delivery/zzcx.png'},
{title: '全媒体营销增长七剑特训营', cover_url: 'https://static.cyjiaomu.com/delivery/zzqj.png'},
{title: '兵头将尾销售主管实战训练营', cover_url: 'https://static.cyjiaomu.com/delivery/btjw.png'},
{title: '企业流量增长实战课', cover_url: 'https://static.cyjiaomu.com/delivery/llzc.jpg'},
{title: '企业品牌营销实战课', cover_url: 'https://static.cyjiaomu.com/delivery/ppyx.jpg'},
{title: '业务型HR实训营', cover_url: 'https://static.cyjiaomu.com/delivery/yewu.png'},
]
}
},
}
</script>
<style scoped>
.y_gap00 {
margin: 15px 0 0 0!important;
}
.nice_title {
text-overflow: ellipsis;
white-space: nowrap;
overflow:hidden;
width: 100%;
display: inline-block;
}
.image_tag {
width: 100%;
}
.image {
width: 100%;
display: block;
padding-top: 60%;
background-repeat: no-repeat;
background-size: cover;
}
.pointer {
cursor: pointer;
}
</style>
把之前的img标签改为div,来给div设置背景图。因为这个固定纵横比是借助div padding-top 实现的。
给 div.image 设置了 padding-top: 60%; 这样它的宽高比就是5:3,页面缩放保持不变。 就是文章最上边的那张图的效果(当然每一个图片的大小相差不能太离谱哈)。
总结
div 的 padding-top 在响应式设计时可以实现固定宽高比的效果,如 padding-top: 60%; 这样它的宽高比就是5:3。如果你正在思考如何根据容器的宽度按比例设置高度,那么这个应该可以帮到你。
续(终极解决方法)
上边的设置 div padding-top 是比较hack的方式。后来发现一个更加直接的方法,那就是直接设置img的 aspect-ratio: 5 / 3;
.image_tag {
width: 100%;
aspect-ratio: 5 / 3;
}
这样就可以实现相同的效果。
各浏览器的支持情况如下
边栏推荐
猜你喜欢
随机推荐
【面试必看】链表的常见笔试题
学习(三):事件的订阅与发布
【LeetCode】链表相加 进位
rosdep update失败解决办法(亲测有效)
Process (in): process state, process address space
IDEA2021.2安装与配置(持续更新)
2020 - AAAI - 图像修复 Image Inpainting论文导读 -《Region Normalization for Image Inpainting》
2020 - AAAI - Image Inpainting论文导读《Learning to Incorporate Structure Knowledge for Image Inpainting》
【 LeetCode 】 design list
龙芯2K1000使用nfs挂载文件系统进行使用
蛮力法求解凸包问题
Lightly 支持 Markdown 文件在线编写(文中提供详细 Markdown 语法)
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
如何使用 PHP 实现网页交互
剑指Offer 47.礼物的最大值 动态规划
KMP 字符串匹配
UKlog.dat和QQ,微信文件的转移
MPU6050 accelerometer and gyroscope sensor is connected with the Arduino
【plang 1.4.5】编写坦克(双人)游戏脚本
进程(下):进程控制、终止、等待、替换