在 div 内裁剪居中的图像

Posted

技术标签:

【中文标题】在 div 内裁剪居中的图像【英文标题】:Crop centered image inside div 【发布时间】:2013-12-24 06:56:24 【问题描述】:

我有一个包含图像 (img) 元素的 div,该元素在其中扩展了 100% 的宽度。我想为 div 指定一个最大高度,并隐藏超过这个高度的图像部分。但我也想保持这个图像在 div 内垂直居中,只显示它的中心部分。

例如,如果浏览器宽度为 1200 像素,图像纵横比为 4:3,则图像应显示 (1200x900) 像素。但是,如果我们只想将高度裁剪为 300px 并垂直居中,则图像应位于 div 内的 -300px 处(并且 div 应隐藏图像高度的 0-300 和 600-900)。可以对其他宽度进行类似的思考。

我很确定这可以使用 javascript 轻松完成,但我想知道是否也可以使用 CSS 来完成。提前致谢!

【问题讨论】:

【参考方案1】:

所以您希望 div 充当图像的查看窗口?这听起来像图像精灵(一张大的图标放在一起,每个图标单独显示),但图像更大:

http://www.w3schools.com/css/css_image_sprites.asp

如果你提供一个 JSFiddle,我可以给你一些更具体的东西。

【讨论】:

【参考方案2】:

你可能想看看这个问题:Resizeing an oversized image using overflow:hidden and keep the aspect ratio

http://codepen.io/gcyrillus/pen/Grbxg

.grid_3  width:260px; margin:0 20px; float:left;  text-align:center;
  overflow:hidden;background:rgba(255,255,255,0.02);

.grid_3 a 
  display:block;  
  height:171px; border:solid 2px #FFFFFF;
  line-height:168px;
  overflow:hidden;
  margin-bottom:10px;

.max-img-border   width:100%; margin:-100% 0;vertical-align:middle;

这是另一支笔,正在探索这个,vertical-align:middle 和一个几乎没有高度变化的图像。http://codepen.io/gc-nomade/pen/DxCgv

当然,如果在你的内容中没有任何意义,背景中心的图像设置是很容易的。

【讨论】:

overflow:hidden 拯救了我的一天!【参考方案3】:

我对此的看法:http://codepen.io/vsync/pen/DpmnK

html

<div class='box'>
  <img src="http://www.biztalk360.com/Events/BizTalk-Innovation-day-2014-Norway/images/banner.jpg">
</div>

SCSS

.box
  // this is the image container distentions 
  width:100%;
  height:100px;

  // The magic
  > img
    position:absolute;
    z-index:-1;
    top:50%;
    left:50%;
    width:100%;
    transform:translate(-50%, -50%); 
    &.max width:auto; height:100%; 
  

javascript(这只是为了响应)

var photo     = document.images[0],
    container = document.querySelector('.box');

$(window).on('resize.coverPhoto', function()
  requestAnimationFrame(checkRatio);
);

function checkRatio()
  var state = photo.clientHeight <= container.clientHeight && 
              photo.clientWidth >= container.clientWidth;

  photo.classList[state ? 'add' : 'remove']('max');

【讨论】:

以上是关于在 div 内裁剪居中的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何自动裁剪和居中图像

居中并裁剪 div 内的图像 [重复]

如何在 div 容器中自动裁剪和居中图像

Android 自定义相机 - 在矩形内裁剪图像

使用 CSS 居中和裁剪图像

如何使用 CSS 居中和裁剪图像以始终以方形显示?