调整大小+裁剪图像

use*_*932 6 html css

我有几张不同宽高比和不同方向(垂直/水平)的图片.

我想将它们显示在网格中,网格的每个块都是200px宽和200px高度.我知道如何创建网格("float:left; width:200px; height:200px").

我怎么能把图像放在那里?我想调整它们的大小,使得SHORTEST侧成为块的200px,并且"crop"(可能带有"overflow:hidden"?)较长的一侧到相同的200px.

这可能只有CSS吗?如果没有,你会如何解决它?调整服务器端的大小,使最长边始终"正确"(200px)?

到目前为止我有什么......

<div class="grid">

    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    <div class="item">

        <img src="pic1.jpg"/>

    </div>
    ....

</div>


.grid {
    width: 1000px;
}

.item {
    width: 200px;
    height: 200px;
    float: left;
}
Run Code Online (Sandbox Code Playgroud)

gil*_*ly3 1

您可以像这样在客户端调整图像大小:

img {
    height: 200px;
}
Run Code Online (Sandbox Code Playgroud)

但你需要 JavaScript 来确定哪条边较短:

function resizeImg(img) {
    var h = img.height;
    var w = img.width;
    if (h > w) {
        img.style.width = "200px";
    }
    else {
        img.style.height = "200px";
    }
}
Run Code Online (Sandbox Code Playgroud)

您走在正确的轨道上overflow: hidden。然后只需将图像的margin-height或设置为。margin-width( 200 -sideLength) / 2

就我个人而言,我会在服务器端完成这一切。浏览器在缩放图像方面并不是最好的。这个说法在五年前比现在更正确——他们现在似乎做得很好,所以这一点可能没有实际意义。而且,您还可以通过从服务器返回预缩小和裁剪的缩略图来减少下载大小。我用 C# 编写了一个缩略图程序,将缩略图写入磁盘,这样它只需处理以前从未请求过的图像,否则它将返回保存的图像。