当前位置: 首页 > Web前端 > CSS

【回顾】CSS实现宽高比自适应容器

时间:2023-03-31 13:55:28 CSS

最近在开发手机页面的时候,遇到这样的情况:当页面宽度为100%时,高度是宽度的一半,仍然是宽度的一半手机宽度变化。所以我们需要实现一个宽度自适应的容器,它的高度是宽度的一半。这里以高度为宽度的一半为例,也可以是其他比例。1、思考这个问题如何实现类似于:我们在移动端页面有一张宽度为100%的图片。如果我们不设置高度,图片会按照原来的大小按比例缩放。我们可以利用这个思路,根据元素的高度,为元素设置一个对应的比例高度。2.实现方法1——实现所谓的视口单位(viewportunits)相对于视口(viewport)的大小,100vw等于100%的视口宽度,即1vw等于视口的1宽度%。我们可以利用这个特性在移动端实现宽高比自适应容器。HTML代码:

CSS代码:*{margin:0;填充:0}。盒子{宽度:100%;高度:51.5vw}.boximg{宽度:100%;}为什么.box的高度是51.5vw?原因是图片原始大小为884*455纵横比,即455/884=51.5%。与原始图片缩放相比,这种方式有一个优点:无论图片是否加载成功,始终计算容器的高度,不会造成页面抖动或页面重绘,从而提高性能。我们来看看本例中图片加载成功与失败的对比:三、实现方式二——通过子元素padding实现是通过设置子元素的padding属性来实现的,比较常用和有更好的效果。这里需要理解的是:子元素的padding属性百分比的取值首先是相对于父容器的宽度。看下面的代码和效果图来理解:HTML代码:我是王平安,pingan8787
CSS代码:.box{width:200px;}.text{padding:10%;}分析:这里我们设置父容器.box的宽度为200px,子元素.text的padding:10%,所以padding的计算结果.box是20px;然后结合主题,我们利用这个原则来实现等比例:HTML代码:png"/>
CSS代码:.box{width:100%;}.text{overflow:hidden;高度:0;padding-bottom:51.5%;}.box.textimg{width:100%;}这里是.text:51.5%;的padding-bottom;也是按照第一种方法计算的,使用图片原始尺寸的纵横比。需要注意的是,这里设置.text为height:0;高度比例会出现实际高度的问题,所以为了避免这种情况,需要设置height:0;。所以我们通过两种方式解决了这个问题。作者王平安E-mailpingan8787@qq.com博客www.pingan8787.com微信pingan8787每日文章推荐https://github.com/pingan8787...ES小册子js.pingan8787.com微信公众号