CSS3 object-fit理解 以及object-fit的兼容性,包括兼容IE9+浏览器

老白 3个月前 616浏览 6评论

本文还是着重讲下object-fit:cover,特别是关于object-fit:cover的兼容性问题,如何去兼容更多浏览器。具体的object-fit:cover用法请看《object-fit:cover 剪裁图片尺寸适配div - 居中并裁剪图片

下面简单讲述下object-fit的含义以及如何提高兼容性,比如兼容IE!

object-fit理解

CSS3 background-size出现的比较早,大家应该知道其支持的一些值,除了数值之外,其还支持几个关键字,例如:covercontain等。

object-fit也是类似的,但还是有些差异,具体有5个值:

.fill { object-fit: fill; }
.contain { object-fit: contain; }
.cover { object-fit: cover; }
.none { object-fit: none; }
.scale-down { object-fit: scale-down; }

每个属性值的具体含义如下(自己理解的白话文,官方释义见官网):

  • fill: 中文释义“填充”。默认值。替换内容拉伸填满整个content box, 不保证保持原有的比例。

  • contain: 中文释义“包含”。保持原有尺寸比例。保证替换内容尺寸一定可以在容器里面放得下。因此,此参数可能会在容器内留下空白。

  • cover: 中文释义“覆盖”。保持原有尺寸比例。保证替换内容尺寸一定大于容器尺寸,宽度和高度至少有一个和容器一致。因此,此参数可能会让替换内容(如图片)部分区域不可见。

  • none: 中文释义“无”。保持原有尺寸比例。同时保持替换内容原始尺寸大小。

  • scale-down: 中文释义“降低”。就好像依次设置了none或contain, 最终呈现的是尺寸比较小的那个。

假设我们使用的原始图片是:
CSS3 object-fit理解 以及object-fit的兼容性,包括兼容IE9+浏览器 CSS学习 第1张

容器的尺寸是160*160, 背景色是灰蓝色,同时,测试的图片高宽设置为100%, 如下CSS代码:

.box { width: 160px; height: 160px; background-color: #beceeb; }
.box > img { width: 100%; height: 100%; }

结果,各个属性值的表现如下截图:
CSS3 object-fit理解 以及object-fit的兼容性,包括兼容IE9+浏览器 CSS学习 第2张

大家可以对照示意感受下,什么是内容拉伸(fill),什么是内容全部都显示(contain),什么是容器没有留白(cover),什么是该多大就多大(none)。

object-fit兼容性

首先,看下object-fit目前兼容的浏览器,IE是完全不支持啊,怎么搞到object-fit去兼容至少IE9呢!

CSS3 object-fit理解 以及object-fit的兼容性,包括兼容IE9+浏览器 CSS学习 第3张对于IE全部不兼容,那么总有办法吧? 下面介绍一个方法,使用CSS+JS的方法去兼容IE9+!

下面看一个案例:(可以支持IE9+)

<!doctype html><html><head><meta charset="utf-8"><title>CSS3 object-fit理解 以及object-fit的兼容性,包括兼容IE9+浏览器</title></head><body>
<style>
 .box { width: 160px; height: 160px; margin: 10px 0 20px; background-color: #beceeb; overflow: hidden; resize: both; }
 .box img {width: 160px; height: 160px; background-color: #cd0000;overflow: hidden;
  object-fit:cover; 
}
</style>
<link rel="stylesheet" href="object-fit-master/dist/polyfill.object-fit.css">
<strong>object-fit: cover</strong>
<div class="box">
    <img src="我的支付宝.jpg">
</div>
<!--兼容JS文件-->
<script src="object-fit-master/dist/polyfill.object-fit.js"></script>
 <script>
  // Call polyfill to fit in images
  document.addEventListener('DOMContentLoaded', function () {
   objectFit.polyfill({
    selector: 'img',
    fittype: 'cover'
   });
  });
 </script>
<!--//兼容JS-->
</body>
</html>

其中的CSS和JS文件,打包放在这里!

下载:dist.zip

使用CSS+JS去兼容IE9+测试成功!

评论
精彩评论
  • 2017-06-29 08:44:55

    嗯嗯嗯嗯嗯嗯

    • 2017-06-29 08:44:57

      • 2017-06-29 08:44:59

        • 2017-06-29 08:45:03

          额鹅鹅鹅

          • 2017-07-22 22:03:50

            为了兼容ie 这么一大段js,感觉很不值得。暂且的做法还是做成背景图片方式控制好些。