html - CSS:将图像放在较小的一边

标签 html css

我正在尝试创建一个可以显示任何图像尺寸(长或宽)的图标容器。

图像应以其较小的一侧适合容器,而额外的部分应位于容器外部。在应用溢出之前:隐藏它应该像这样工作。

enter image description here

用 js 做起来似乎很容易,但我很想找到一个 css 解决方案。

<div class="container">
   <img src="test.png"/>
</div>

.container {
   width: 30px;
   height: 30px;
}
.container img {
   position: relative;
   left: 50%;
   top: 50%;
   transform: translateY(-50%) translateX(-50%);
}

最佳答案

如果您不想借助 background-size:cover 来使用 CSS 背景(尽管这也不是一个糟糕的解决方案),这是一项相当具有挑战性的任务,因为一个关键因素:风景与肖像图像。在 CSS 中无法检测图像的方向。这是一个问题,因为您不能只分配 heightwidth(或 max-heightmax-width) 到 100% 并期望它能正常工作。它会扭曲图像并失去纵横比。在这种情况下,我建议使用一些 javascript 来区分两者。这是不幸的,但如果您想使用 HTML img 元素实现此效果,则这是必要的(同样,这不是唯一的解决方案。背景图像仍然可行)。

为了达到这个效果,我想出了以下办法:

var images = document.querySelectorAll('.container img');
for(var i = 0, len = images.length; i < len; i++) {
  images[i].addEventListener('load', function() { 
    this.className += (this.width > this.height) ? ' landscape' : ' portrait';
  });
}
.container {
    position: relative;
    width: 50px;
    height: 50px;
    margin: 3em auto;
}
.container:after {
    content: '';
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    border: 2px solid;
    box-sizing: border-box;
}
.container img {
    position: absolute;
    max-width: 100%;
    max-height: 100%;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    padding: 2px;
    box-sizing: border-box;
}

.container img.landscape {
    max-width: none;
}
.container img.portrait {
    max-height: none;
}
<div class="container">
    <img src="//placehold.it/200x300"/>
</div>

<div class="container">
    <img src="//placehold.it/300x200"/>
</div>

<div class="container">
    <img src="//placehold.it/200x200"/>
</div>

<div class="container">
    <img src="//placehold.it/500x100"/>
</div>

关于html - CSS:将图像放在较小的一边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28758354/

相关文章:

html - 为什么这些元素不垂直对齐?

javascript - 如何使用jquery检索单选按钮内选择标签中的值?

javascript - 使用php从html输入中添加数字

javascript - 选择框在转换后在 Firefox 中移动 :scale()

jquery - 试图制作一个隐藏每个元素的响应式导航栏

html - 如何在悬停效果中更改html ul中的颜色和反转颜色

html - 创建一个具有两行文本的完美圆

css - div中的垂直滚动条,它是CSS网格列的子级

css - 使用 :not to exclude classes in css

html - 如何在文本框中添加垂直线以分隔元素