如何在div中放置图像(img)并保持纵横比?

Bin*_*hen 128 html css

我有一个48x48的div,里面有一个img元素,我想把它装进div而不会丢失任何部分,同时保持这个比例,是否可以使用html和css实现?

小智 309

使用max-height:100%; max-width:100%;了DIV内的图像.

  • 仅在缩小图像时有效.如果你想在一个更大的容器中放入一个小图像,这将不起作用 (20认同)
  • @ZoveGames非JS启用的浏览器?2010年的雅虎统计数据显示平均值为1.3%.我认为假设a是安全的.今天它可能会更低而且b.http://programmers.stackexchange.com/questions/26179/why-do-people-disable-javascript/26186#26186 (4认同)
  • 它对我不起作用......它使图像100%自己的大小(例如:300px宽,对于实际为300px宽的图像). (4认同)
  • 它不保留图像的原始宽高比. (2认同)

And*_*kyi 73

不幸的是,max-width + max-height并没有完全覆盖我的任务......所以我找到了另一个解决方案:

在缩放时保存图像比例,您也可以使用object-fitCSS3属性.

实用文章:使用CSS3控制图像宽高比

img {
    width: 100%; /* or any custom size */
    height: 100%; 
    object-fit: contain;
}
Run Code Online (Sandbox Code Playgroud)

坏消息:不支持IE(我可以使用)

  • 这必须标记为答案.."对象适合"工作完美. (5认同)
  • `object-fit:cover;`对我有用。此处:http://stackoverflow.com/questions/9071830/contain-an-image-within-a-div (2认同)
  • 如果您希望图像位于左上角而不是居中,则还需要使用 object-position 0 0。 (2认同)

Tho*_*mas 67

如果您在编写css时不知道图像的尺寸,则需要一些JavaScript来防止裁剪.

HTML和JavaScript

<div id="container">
    <img src="something.jpg" alt="" />
</div>

<script type="text/javascript">
(function() {

var img = document.getElementById('container').firstChild;
img.onload = function() {
    if(img.height > img.width) {
        img.height = '100%';
        img.width = 'auto';
    }
};

}());
</script>
Run Code Online (Sandbox Code Playgroud)

CSS

#container {
   width: 48px;
   height: 48px;
}

#container img {
   width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

如果您使用JavaScript库,则可能希望利用它.

  • 不,只要图像大于div,迈克尔的答案就会起作用.如果您希望图像填充有关图像尺寸的div(如果您事先不知道图像尺寸,则可以这样做),这是可行的方法. (3认同)
  • 迈克尔的答案更简单,它不使用Javascript.我不知道浏览器兼容性. (2认同)
  • 你不能使用max-height:100%; 最大宽度:100%; 最小宽度:100%; min-height:100%然后获得相同的结果?诚实的问题. (2认同)

Max*_*Max 38

仅使用CSS:

div > img {
  width: auto;
  height : auto;
  max-height: 100%;
  max-width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

  • 这很棒!我网站上的所有图像现在都将保留其纵横比,这就是我想要的。 (2认同)

ale*_*lex 16

HTML

<div>
    <img src="something.jpg" alt="" />
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

div {
   width: 48px;
   height: 48px;
}

div img {
   display: block;
   width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

这将使图像扩展以填充其父级,其大小在divCSS中设置.

  • 不要添加`height:100%`,这会使图像比率偏斜 - OP希望保持这个比例. (2认同)

小智 7

对我来说,以下 CSS 有效(在 Chrome、Firefox 和 Safari 中测试)。

有多种因素协同作用:

  • max-height: 100%;max-width: 100%;height: auto;width: auto;使 img 缩放到先达到 100% 的尺寸,同时保持纵横比
  • position: relative;在容器和position: absolute;子项中以及top: 50%;容器left: 50%;中的 img 左上角居中
  • transform: translate(-50%, -50%);将 img 移回左侧和顶部,移动大小的一半,从而使 img 在容器中居中

CSS:

.container {
    height: 48px;
    width: 48px;

    position: relative;
}

.container > img {
    max-height: 100%;
    max-width: 100%;
    height: auto;
    width: auto;

    position: absolute;
    top: 50%;
    left: 50%;

    transform: translate(-50%, -50%);
}
Run Code Online (Sandbox Code Playgroud)


Bar*_*ann 6

我有很多问题要解决这个问题,我找到的每一个解决方案似乎都没有用.

我意识到我必须将div显示设置为flex,所以基本上这是我的CSS:

div{
display: flex;
}

div img{ 
max-height: 100%;
max-width: 100%;
}
Run Code Online (Sandbox Code Playgroud)


Fai*_*sal 5

试试CSS:

img {
  object-fit: cover;
  height: 48px;
}
Run Code Online (Sandbox Code Playgroud)