前言
我们都知道在前端开发中经常遇到需要保持一个元素的长宽比,最常见的就是我们的Img元素
,但是除了img
、vidoe
这种可替换元素元素具有长宽比的特性,那么其它元素如果保持长宽比呢,这给我们的开发带来了许多不便利,今天就教大家使用aspect-ratio
属性解决实际问题
正文
臭名昭著的Padding-Top Hack💚
不知道你有没有遇到过这么一道经典面试题(请你写一个保持长宽纵横比的
DIV元素
)就得用Padding-Top Hack解法。
什么是Padding-Top Hack
,不知道你是否遇到过这种需求,需要一个非可替代元素始终保持它的长宽比?,如何做的?Padding-Top Hack
就是最常见的解决方案。
利用padding来保持元素的长宽比
*{
padding: 0;
margin: 0;
}
.aspect-ratio-hack {
position: relative;
height: 0;
padding-top: 56.25%;
}
.inner {
background-color: pink;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
上面就是最臭名昭著的Padding-Top Hack
方案,如果换做是你,你会怎么做,留言告诉我你的答案~~
什么是aspect-ratio
🌽
aspect-ratio
是一个很早就在W3C提出的保持元素纵横比的规范
,但是早期
各大浏览器都支持的不好,而现在各大主流浏览器都已经很好的支持了这个css原生属性,它出现的目的就是为了解决我们保持元素纵横比遇到的各种麻烦的事
W3C
【各大主流浏览器已经完美支持】
【浏览器支持率百分之89%】
如何使用aspect-ratio
🍪
就拿我们刚才上面使用Padding-Top Hack
的例子来试试吧,来看看它究竟有多好用
只需要添加这一行代码
哈哈哈哈哈 太爽了😂
.inner {
background-color: pink;
color: red;
font-size: 30px;
width: 50%;
text-align: center;
aspect-ratio: auto 2 / 1; //就添加这一行
}
aspect-ratio
详细解析🐳
语法 : aspect-ratio: auto ||
auto
: 默认值,它指定元素没有首选的纵横比,应该像往常一样调整自己的大小。因此,替换元素,如具有固有纵横比的图像,使用 该 纵横比。<ratio>
: 由正斜杠 (/
)分隔的两个正数值,它们周围有或没有空格,目标是元素的宽度和高度。在单个值的情况下,第二个值被认为是 1。涉及首选纵横比的大小计算适用于指定的框的尺寸box-sizing
。initial
: 应用属性的默认设置,即auto
。inherit
: 采用aspect-ratio
父级的值。unset
: 从元素中删除当前的纵横比。
直接上例子解释吧
html
<div class="preferably-square"></div>
<img class="preferably-square" src="https://source.unsplash.com/random/800x600?iran" alt="">
css
body {
display: flex;
align-items: flex-start;
justify-content: center;
gap: 2rem;
padding: 2rem;
}
.preferably-square {
width: 300px;
aspect-ratio: auto 2 / 1;
}
div {
background-image: linear-gradient(90deg,#ec4899,#ef4444,#f59e0b);
}
img {
}
auto
属性适用于可替换元素(img、video这种本身就具有长宽比的元素)
使用了auto属性,那么可替换元素将继续保持它原本的长宽比,不会受你css属性的影响。
可以看到图中div是按照2/1的纵横比拉升的,和图片还是保持了原来的纵横比
授人予鱼不如授人以渔,我把codepen地址贴出来 各位小伙伴亲自动手试试效果更佳
总结 🍁
在这篇文章中我们了解到了什么是aspect-ratio
,以及如何使用这个属性,让你不再为保持元素长宽比
发愁,以及以前我们是如何解决长宽纵横比问题的,了解了它的使用场景,和简单的解释,希望小伙伴们能自己再去动手实验一下🧪,授人予鱼不如授人以渔
,地址在这codepen,没使用过的小伙伴赶紧去尝试一下,提升自己的开发速率,早日迎娶白富美,哈哈哈哈😂
结束语 🌞
那么我的每个前端都应该知道的一个css技巧,89%的浏览器都大力支持它🐣
就结束了,文章的目的其实很简单,就是对日常工作的总结和输出
,输出一些觉得对大家有用的东西,菜不菜不重要,但是热爱🔥,希望大家能够喜欢我的文章,我真的很用心在写,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾
,欢迎加我好友
,一起沙雕
,一起进步
。
伙伴们,如果喜欢我的口水话
给🐟🐟点一个赞👍或者关注➕都是对我最大的支持。最后我还会分享一些前端大礼包给大家【加君羊:581286372】帮助大家学习!