移动web图片高度自适应的解决方案

Posted JavaScript

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动web图片高度自适应的解决方案相关的知识,希望对你有一定的参考价值。

由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动

针对这个问题,有以下几种解决方案

  • 媒体查询+px

  • rem

  • vm

  • padding

媒体查询+px

 
   
   
 
  1. @media screen and(max - width: 320 px) {

  2.    img {

  3.        height: 50px;

  4.    }

  5. }

移动端设备种类繁多,媒体查询固然精准,但相应的是工作量的增加

rem 
rem这个低调的单位随着webapp的兴起,俨然成为了手机端屏幕适配的最佳方案

 
   
   
 
  1. img {

  2.    height: 0.5rem;

  3. }

但由于rem的小数像素问题,可能会导致1px偏差的产生,就看你是不是处女座了

vm

相对于视口的宽度或高度中较小的那个,其中最小的那个被均分为100单位的vm

算是比较完美的一个解决方案了,不过ios8以下及android4.4以下不支持

padding 
padding是可以百分比取值的,详见()

The percentage is calculated with respect to the width of the generated box's containing block, even for 'padding-top' and 'padding-bottom'. If the containing block's width depends on this element, then the resulting layout is undefined in CSS 2.1.

即取值为百分比时,计算出来的padding边距是相对于其父元素的宽度计算的(margin类同),如下图:

那么,解决图片占位的问题就很简单了。 
页面布局如下:

 
   
   
 
  1. <style>

  2.    * {

  3.        margin: 0;

  4.        padding: 0;

  5.    }

  6.    ul {

  7.        overflow: hidden;

  8.    }

  9.    li {

  10.        width: 50%;

  11.        float: left;

  12.        text-align: center;

  13.    }

  14.    img {

  15.        width: 100%

  16.    }

  17. </style>

  18. <ul>

  19.    <li>

  20.        <div class="cover">

  21.            <img src="2222.png" alt="">

  22.        </div>

  23.        <div>

  24.            文字

  25.        </div>

  26.    </li>

  27. </ul>

这里使用伪元素替代div充当子元素,由于padding-top使图片距离cover顶部100%,用相对定位到顶端。

 
   
   
 
  1. .cover {

  2.    position: relative;

  3.    font-size: 0;

  4.    display: inline-block;

  5.    width: 100%

  6. }

  7. .cover img {

  8.    width: 100%;

  9.    height: 100%;

  10.    position: absolute;

  11.    left: 0;

  12.    top: 0;

  13. }

  14. .cover:after {

  15.    content: '\20';

  16.    padding-top: 100%;

  17.    display: block;

  18. }

页面最终效果如下:

上述例子只适用于图片宽高1:1的情况,对于其他比例的图片需要修改padding-top值,例如宽高2:1的图片,padding-top改为50%即可

以上是关于移动web图片高度自适应的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

CSS设置背景图宽度100%,高度自适应

如何用CSS使图片自适应显示宽度

vue移动端高度自适应 100vh不够

解决:WebView高度自适应,视频全屏后,页面留白问题

图片裁剪自适应

轮播图js怎么设置图片自适应大小