【问题标题】:In a gallery, how do I make my portrait image larger so as to fill the full div while also keeping it centered?在画廊中,如何使我的肖像图像更大以填充整个 div 同时保持居中?
【发布时间】:2018-12-14 16:52:28
【问题描述】:

我已阅读其他答案,但找不到适合我的答案。我正在尝试创建一个响应式图像库,并采用不同大小和方向的图像,即有些是横向的,有些是纵向的。我想要它,这样无论它的大小或方向如何,它都会填充 div 的大小并在其中居中。

目前,div 的高度为 250px,宽度为容器的 23%。这是我能得到的最好的。使用这种方法,横向图像显示良好,但纵向图像的两侧都有空白,因为它没有占用完整的 div。

我怎样才能得到它,以便无论图像的大小如何,它都会填充 div 而不拉伸它?我不介意图像是否更大并通过溢出被切断:只要它完全覆盖 div,就隐藏起来。

编辑:纠正了我所说的图像容器宽度的大小,因为我说错了。

这是我的代码:

CSS

.gallery-container {
    width: 90%;
    margin: 0 auto;
}


.image-container {
    float: left;
    position: relative;
    overflow: hidden;
    height: 250px;
    margin: 5px;
    border: 1px solid #ccc;
    width: 23%;
}

div.image-container:hover {
    border: 1px solid #777;
}

div.image-container img {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate( -50%, -50%);
    height: 100%;
    
}
HTML
   <div class="gallery-container">
    
    <div class="image-container">
           <a target="_blank" href="img/60.jpg">
               <img src="img/60.jpg" alt="flowers">
           </a>
           <!-- <div class="desc">Add a description here
                  
               </div> -->
    </div>
      <div class="image-container">
           <a target="_blank" href="img/portrait.jpg">
               <img src="img/portrait.jpg" alt="portrait">
           </a>
           <!-- <div class="desc">Add a description here</div> -->
       
    </div>
      <div class="image-container">
           <a target="_blank" href="img/flowers2.jpg">
               <img src="img/flowers2.jpg" alt="flowers2">
           </a>
           <!-- <div class="desc">Add a description here</div> -->
       
    </div>
    </div>

【问题讨论】:

  • 介意裁剪的图像,或者您是否要在不裁剪的情况下以最大的宽度或高度呈现图像?
  • 我刚刚更正了我的帖子以提及这一点。我不介意它是否被裁剪。只要填满宽度、高度并居中即可。
  • object-position: 50% 50% to center 和 object-fit:cover css-tricks.com/on-object-fit-and-object-position 删除 img 上的所有样式,否则将无效。
  • 这是一种有趣的方法,但由于某种原因,它对我来说根本不起作用。我删除了您提到的其他样式,并将它们替换为对象位置和对象匹配,但所发生的只是它们在 div 中放大为全尺寸图像并且只显示左上角。当我尝试操纵对象位置时,它们的位置不会有所不同......
  • 没关系,我用那个方法让它工作,只是稍微摆弄了一下。知道如何使我的整个画廊居中吗?它目前是从左到右的,当我把浏览器窗口变大时它没有居中。

标签: css


【解决方案1】:

object-fit and object-position 是专门用于 replaced elements 行为的 CSS 属性,例如 &lt;img&gt;&lt;video&gt;。像这样应用:

div.image-container img {
  /* Added */
  width: 100%;
  height: 100%;
  /* Added */
  object-position: 50% 50%;
  /* Added */
  object-fit: cover;
}

这个特定的规则集将渲染&lt;img&gt;,这样它就会边到边地填充其父容器而不会失真但是如果父容器的尺寸与图像的 AR(Aspect比率)。

要使一系列元素居中,display:flex and justify-content:center 就足够了:

.gallery-container {
  width: 90%;
  margin: 0 auto;
  /* Added */
  display: flex;
  /* Added */
  justify-content: center;
}

演示

.gallery-container {
  width: 90%;
  margin: 0 auto;
  /* Added */
  display: flex;
  /* Added */
  justify-content: center;
}

.image-container {
  overflow: hidden;
  height: 250px;
  margin: 5px;
  border: 1px solid #ccc;
  width: 23%;
}

div.image-container:hover {
  border: 1px solid #777;
}

div.image-container img {
  /* Added */
  width: 100%;
  height: 100%;
  /* Added */
  object-position: 50% 50%;
  /* Added */
  object-fit: cover;
}
<div class="gallery-container">

  <div class="image-container">
    <a target="_blank" href="img/60.jpg">
      <img src="https://interactive-examples.mdn.mozilla.net/media/examples/plumeria.jpg" alt="flowers">
    </a>
    <!-- <div class="desc">Add a description here
                  
               </div> -->
  </div>
  <div class="image-container">
    <a target="_blank" href="img/portrait.jpg">
      <img src="https://interactive-examples.mdn.mozilla.net/media/examples/plumeria.jpg" alt="portrait">
    </a>
    <!-- <div class="desc">Add a description here</div> -->

  </div>
  <div class="image-container">
    <a target="_blank" href="img/flowers2.jpg">
      <img src="https://interactive-examples.mdn.mozilla.net/media/examples/plumeria.jpg" alt="flowers2">
    </a>
    <!-- <div class="desc">Add a description here</div> -->

  </div>
</div>

【讨论】:

  • 这很好用,谢谢!我还添加了flex-wrap: wrap 以提高响应速度。
  • 太棒了,编码愉快!
【解决方案2】:
div.image-container img {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate( -50%, -50%);
    width:100%;    

}

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 2010-12-25
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2018-07-04
    • 2014-06-11
    • 2013-11-22
    相关资源
    最近更新 更多