【问题标题】:Scale image maintaining aspect ratio, then center vertically and horizontally inside fluid height and width DIV缩放图像保持纵横比,然后在流体高度和宽度 DIV 内垂直和水平居中
【发布时间】:2015-01-03 23:51:58
【问题描述】:

好的,这有点拗口,而且非常具体。我会尽力解释的!

目标是在缩放图像的同时保持纵横比,并使其在仅由百分比定​​义的 DIV 内垂直和水平居中。图片需要保持最佳拟合,因此如果需要最大宽度,则使用它,反之亦然。

使用 Firefox 版本 33(或几个更早的版本) 查看这个 js fiddle 以查看它是否正常工作:

http://jsfiddle.net/3vr9v2fL/1/

HTML:

<div id="imageviewer" >

<div class="dummy"></div>
<div class="img-container centerer" id="imagevieweroriginal">
<img class="centered" src="http://chrisnuzzaco.com/couch/uploads/image/gallery/smiling_woman_wearing_drivers_cap.jpg"  alt="Doctor Concentrating on Work"></img>
</div> 

</div>

</div>

CSS:

#imagewrapper{
position:absolute;
width:69%;
height:100%;
top:0px;
bottom:0px;
background-color:gray;
}


#imageviewer{
position:relative;
width:100%;
height:100%;
}





.responsive-container {

position: relative;
width: 100%;
border: 1px solid black;
}


.dummy {
padding-top: 100%; /* forces 1:1 aspect ratio */
}

.img-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}

.centerer {
text-align:center; /* Align center inline elements */
font: 0/0 a;       /* Hide the characters like spaces */
}

.centerer:before {
content: ' ';
display: inline-block;
vertical-align: middle;
height: 100%;
}

.centered {

vertical-align: middle;
display: inline-block;
max-height: 100%;
max-width: 100%;
}

问题:

我最初在 stackoverflow 上找到了我的代码,并制作了一个简单的 mod,将 max-height/width 添加到 .centered 类。当时,这适用于所有主要浏览器。唯一的例外是 Opera。

Vertically align an image inside a div with responsive height

但是有一个大问题:最新版本的 Chrome(版本 38.0.2125.111)不再适用于此代码,而且我的用户更喜欢 chrome 而不是其他浏览器。

关于如何解决这个问题的任何想法?这是 Chrome 的错误吗?我对 JavaScript 建议持开放态度,以使这项工作再次发挥作用。

【问题讨论】:

    标签: css image centering fluid-layout


    【解决方案1】:

    看看CSS object-fit属性:

    不过,对于旧版浏览器,您可能需要 polyfill

    View browser support 用于对象拟合。

    【讨论】:

      【解决方案2】:

      我想出了这个:JSFiddle - centered image keeps aspect ratio in resizable fluid container

      .container {
          position: absolute;
          top: 0;
          left: 0;
          bottom: 0;
          right: 0;
          width: 100%;
          height: 100%;
      }
      .image {
          position: absolute;
          max-width: 100%;
          max-height: 100%;
          top: 50%;
          left: 50%;
          transform: translate(-50%, -50%);
      }
      body {
          width: 100%;
          height: 100%;
          position: absolute;
          margin: 0;
      }
      <div class='container'>
          <img class='image' src='http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/sample1_l.jpg'>
      </div>

      图像保持水平和垂直居中。如果窗口按比例缩小,则图像会按照原始纵横比缩小。

      虽然我没有在所有浏览器上测试它。

      【讨论】:

      • 我使用了相同的解决方案。但是在大屏幕上,图像并没有占据容器的全部宽度/高度。如果您可以修改答案,那就太好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 2017-03-16
      • 1970-01-01
      • 2014-07-01
      • 2019-05-21
      • 2015-07-31
      • 1970-01-01
      相关资源
      最近更新 更多