【问题标题】:Alternative option of object-fit:cover for internet explorerobject-fit 的替代选项:internet explorer 的封面
【发布时间】:2020-03-07 04:53:29
【问题描述】:

我正在寻找 Internet Explorer 的 object-fit:cover 的替代方法,因为不支持它。基本上我使用 object-fit:cover 来不拉伸 div 内的图像。我在互联网上寻找一些解决方案,但我发现的只是从 css 加载图像而不是从 img 标签加载图像的解决方案,就像我正在做的那样。有没有人有任何替代方法不在 Internet Explorer 上的 div 内拉伸图像有人可以帮助我吗?

这是一个简单的代码

HTML

<div class="grid-image"> 
  <img itemprop="image" alt="TEST" src="images/15.jpg">
</div>

CSS

.grid-image {
    width: 100%;
    background-color: grey;
    position: relative;
    overflow: hidden;
    height: 100%;
}

grid-image img {
    object-fit: cover;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

【问题讨论】:

    标签: html css


    【解决方案1】:

    好的,我用这个解决了

    HTML

    <div class="grid-image" style="background-image: url(images/15.jpg);"></div>
    

    CSS

      -webkit-background-size: cover;
      -moz-background-size: cover;
      -o-background-size: cover;
      background-size: cover;
      background-repeat: no-repeat;
      background-position: 50% 50%;  
    

    【讨论】:

    • IE 7 怎么样?它不支持对象覆盖,它用于 html 内联图像,而不是背景图像。
    • 这是一个不适用于 IE7 的解决方案。我不关注 IE7,因为它的市场份额为 0.35%
    • IE8 怎么样?我做了一些研究,人们最常使用 IE8 和 IE9-10。
    • 如果人们仍在使用 IE 7-10,他们无法期待完美,请使用以下方式告知他们他们的旧浏览器:browser-update.org
    【解决方案2】:

    您真的可以使用 Modernizr 为 ie9+ 创建替代方案。因此,您仍然可以在支持的地方使用对象拟合。在这个例子中,我也使用了 jQuery。

    if ( ! Modernizr.objectfit ) {
      $('.grid-image').each(function () {
          var $wrapper = $(this),
          imgUrl = $wrapper.find('img').prop('src');
          if (imgUrl) {
             $wrapper
             .css('backgroundImage', 'url(' + imgUrl + ')')
             .addClass('compat-object-fit')
             .children('img').hide();
          }  
       });
     }
    

    显然,如果任何用户想要使用 20 世纪的软件浏览网页,他将获得 20 世纪版本的网页。这就像试图在 4:3 电子管电视中观看《星际穿越》(或任何现代 16:9 电影)的 70 毫米场景,您不会看到对接场景的所有功能。

    【讨论】:

    • 不幸的是,Edge 也不支持对象匹配...所以我不仅是旧浏览器的问题:/ 为什么是微软,为什么?当您必须使用 img 标签并且无法/不需要使用 background-image 时,您在此处展示的内容是一个很好的解决方案。谢谢你:)
    • @miss.emenems 对象位置不受 Safari 支持。它不仅是 Microsoft ;-)
    【解决方案3】:

    我的方法理想地适用于所有浏览器,因为它是一个简单的 CSS 技巧。请检查下面的图像,看看它的效果。

    我采用的方法是使用 absolute 将图像放置在容器内,然后使用以下组合将其放在中心

    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    

    一旦它在中心,我给图像,

    // For vertical blocks (i.e., where height is greater than width)
    height: 100%;
    width: auto;
    
    // For Horizontal blocks (i.e., where width is greater than height)
    height: auto;
    width: 100%;
    

    这使得图像得到Object-fit:cover的效果。


    这里是上述逻辑的演示。

    https://jsfiddle.net/furqan_694/s3xLe1gp/

    这个逻辑应该适用于所有浏览器。


    【讨论】:

    • 关于这个主题的最佳建议之一!
    • ...虽然缺点是一旦容器比例变得比图片比例窄,就会出现空白。
    • 对较小的图像尺寸应用 100%,对较大的尺寸应用 100%,使图像填满容器的所有空间。这能回答你的评论吗?如果没有,请分享一个示例来演示该场景。这将帮助我更好地理解它,并可能改进我的答案。
    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2010-10-12
    • 2016-08-17
    • 2010-12-14
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多