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

Pur*_*oxy 52 html css

我需要始终使用CSS将随机大小的图像裁剪为正方形160x160.裁剪后图像应保持居中.

我的标记应该是:

<a href="#" class="cropper">
   <img src="image" alt="description" />
</a>
Run Code Online (Sandbox Code Playgroud)

搜索在计算器上我找到了一些答案(如),但他们不为情况下,你的图像可以是更大的工作水平(宽)垂直(高).

具体而言,我需要能够呈现一个都像这样宽的图像类似这样的高图像在正方形的形式,没有预先知道哪一个是呈横长方形或垂直矩形.它还应该支持已经平方的图像.

Ita*_*tay 96

jsFiddle演示

div
{
    width: 200px;
    height: 200px;
    overflow: hidden;
    margin: 10px;
    position: relative;
}
img {
    position: absolute;
    margin: auto; 
    min-height: 100%;
    min-width: 100%;

    /* For the following settings we set 100%, but it can be higher if needed 
    See the answer's update */
    left: -100%;
    right: -100%;
    top: -100%;
    bottom: -100%;
}
Run Code Online (Sandbox Code Playgroud)

更新 - 改进

正如Salman A在评论中提到的那样,原始解决方案有一个缺陷 - 如果img的高度或宽度(或两者)比(包含div)大3倍*大,它就不能很好地工作.

问题在这里显示.

萨尔曼也提供了一个非常简单和优雅的解决方案.我们只需要更新img的位置坐标(顶部,左侧,底部,右侧)以使用更高的百分比.以下修复程序适用于1000%,但您当然可以根据需要进行调整.

此处显示修复程序.

修复之前和之后

*原因是,当我们设置IMG(或:顶部底部)坐标为-100% (含的DIV),整体允许宽度(或:高度)的的IMG,可以是至多300%的含有宽度(或:高度),因为它是的总和的div的宽度(或:高度)和(或:顶部底部)坐标.

  • 哇这可能是我在一段时间内看到的最不明确的帖子.你每分钟都在增加要求 (7认同)
  • 它是什么?它增加了不必要的利润,并没有使图像居中...... (2认同)
  • 如果图像大于 div 大小的 300%,它是否有效?[我不这么认为。小提琴](http://jsfiddle.net/salman/J7a5R/465/) (2认同)

Tur*_*tan 39

object-fit财产是神奇的.在JsFiddle.

CSS

.image {
  width: 160px;
  height: 160px;
}

.object-fit_fill {
  object-fit: fill
}

.object-fit_contain {
  object-fit: contain
}

.object-fit_cover {
  object-fit: cover
}

.object-fit_none {
  object-fit: none
}

.object-fit_scale-down {
  object-fit: scale-down
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div class="original-image">
  <p>original image</p>
  <img src="http://lorempixel.com/500/200">
</div>

<div class="image">
  <p>object-fit: fill</p>
  <img class="object-fit_fill" src="http://lorempixel.com/500/200">
</div>

<div class="image">
  <p>object-fit: contain</p>
  <img class="object-fit_contain" src="http://lorempixel.com/500/200">
</div>

<div class="image">
  <p>object-fit: cover</p>
  <img class="object-fit_cover" src="http://lorempixel.com/500/200">
</div>

<div class="image">
  <p>object-fit: none</p>
  <img class="object-fit_none" src="http://lorempixel.com/500/200">
</div>

<div class="image">
  <p>object-fit: scale-down</p>
  <img class="object-fit_scale-down" src="http://lorempixel.com/500/200">
</div>
Run Code Online (Sandbox Code Playgroud)

结果

渲染图像的外观(在支持<code> object-fit </ code>的浏览器中)

  • 很高兴知道这存在!让我们希望尽快实现完全的跨浏览器兼容性。 (2认同)

小智 15

<div>
    <img class="crop" src="http://lorempixel.com/500/200"/>
</div>

<img src="http://lorempixel.com/500/200"/>




div {
    width: 200px;
    height: 200px;
    overflow: hidden;
    margin: 10px;
    position: relative;
}
.crop {
    position: absolute;
    left: -100%;
    right: -100%;
    top: -100%;
    bottom: -100%;
    margin: auto; 
    height: auto;
    width: auto;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/J7a5R/56/


Mat*_*her 6

由于它的警告在IE和某些较旧的移动浏览器中不起作用,因此简单object-fit: cover;通常是最佳选择。

.cropper {
  position: relative;
  width: 100px;
  height: 100px;
  overflow: hidden;
}
.cropper img {
  position: absolute;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
Run Code Online (Sandbox Code Playgroud)

没有object-fit: cover支持,图像将被奇怪地拉伸以适合盒子,因此,如果需要对IE的支持,我建议使用其他答案之一-100% top,left,right和bottom值作为备用。

http://caniuse.com/#feat=object-fit