你还不知道这个CSS技巧?89%的浏览器都已经完美支持它啦!🐣

8,599 阅读5分钟

「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战

大家好,我是速冻鱼🐟,一条水系前端💦,喜欢花里胡哨💐,持续沙雕🌲,是隔壁寒草🌿的好兄弟。
欢迎小伙伴们加我微信:sudongyuer拉你进群,一起讨论,期待与大家共同成长🥂~

阅读本文🦀

1.您将了解到如何保持元素自适应长宽比

2.您将了解到什么是aspect-ratio

3.如何使用aspect-ratio方便的使元素保持自适应长宽比

前言🌵

我们都知道在前端开发中经常遇到需要保持一个元素的长宽比,最常见的就是我们的Img元素,但是除了imgvidoe这种可替换元素元素具有长宽比的特性,那么其它元素如果保持长宽比呢,这给我们的开发带来了许多不便利,今天就教大家使用aspect-ratio属性解决实际问题

正文 🦁

臭名昭著的Padding-Top Hack💚

不知道你有没有遇到过这么一道经典面试题(请你写一个保持长宽纵横比的DIV元素)就得用Padding-Top Hack解法。

什么是Padding-Top Hack,不知道你是否遇到过这种需求,需要一个非可替代元素始终保持它的长宽比?,如何做的?Padding-Top Hack就是最常见的解决方案。

利用padding来保持元素的长宽比

Kapture 2021-11-21 at 21.13.11

  *{
            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

image-20211121212615058

各大主流浏览器已经完美支持

浏览器支持率百分之89%

image-20211121212807959

如何使用aspect-ratio 🍪

就拿我们刚才上面使用Padding-Top Hack的例子来试试吧,来看看它究竟有多好用

只需要添加这一行代码 哈哈哈哈哈 太爽了😂

 .inner {
        background-color: pink;
        color: red;
        font-size: 30px;
        width: 50%;
        text-align: center;
        aspect-ratio: auto 2 / 1; //就添加这一行
      }

Kapture 2021-11-21 at 21.34.19

aspect-ratio详细解析🐳

语法 : aspect-ratio: auto ||

  • auto 默认值,它指定元素没有首选的纵横比,应该像往常一样调整自己的大小。因此,替换元素,如具有固有纵横比的图像,使用 纵横比。
  • <ratio>: 由正斜杠 ( /)分隔的两个正数值,它们周围有或没有空格,目标是元素的宽度和高度。在单个值的情况下,第二个值被认为是 1。涉及首选纵横比的大小计算适用于指定的框的尺寸 box-sizing
  • initial 应用属性的默认设置,即auto
  • inherit 采用aspect-ratio父级的值。
  • unset 从元素中删除当前的纵横比。

直接上例子解释吧

Kapture 2021-11-21 at 21.56.00

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地址贴出来 各位小伙伴亲自动手试试效果更佳

codepen:codepen.io/seyedi/pen/…

参考文献 📚

总结 🍁

在这篇文章中我们了解到了什么是aspect-ratio,以及如何使用这个属性,让你不再为保持元素长宽比发愁,以及以前我们是如何解决长宽纵横比问题的,了解了它的使用场景,和简单的解释,希望小伙伴们能自己再去动手实验一下🧪,授人予鱼不如授人以渔,地址在这codepen,没使用过的小伙伴赶紧去尝试一下,提升自己的开发速率,早日迎娶白富美,哈哈哈哈😂

结束语 🌞

那么我的每个前端都应该知道的一个css技巧,89%的浏览器都大力支持它🐣就结束了,文章的目的其实很简单,就是对日常工作的总结和输出,输出一些觉得对大家有用的东西,菜不菜不重要,但是热爱🔥,希望大家能够喜欢我的文章,我真的很用心在写,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步

github🤖:sudongyu

个人博客👨‍💻:速冻鱼blog

vx👦:sudongyuer

写在最后

伙伴们,如果喜欢我的口水话给🐟🐟点一个赞👍或者关注➕都是对我最大的支持。

加我微信:sudongyuer,邀你进群,一起学习前端,成为更优秀的工程师~(群二维码在这里->前端要早睡, 二维码过期了的话看链接沸点中的评论,我会把最新的二维码放在评论区,当然也可以加我微信我拉你进群,毕竟我也是有趣的前端,认识我也不赖🌟~