缩放图像以适合卡片且不与标题重叠

Scale Image to fit card and not overlap title

我有一些卡片,下面有一张图片和一个标题,图片和标题的大小会随着卡片的大小而调整,而卡片的大小会随着屏幕尺寸的变化而调整。在较小的屏幕或较长的标题上,我会遇到图像覆盖文本的问题。

我希望图像缩放以适合卡片,但当它达到卡片的宽度或文本的顶部时停止。 (所有图像都是完美的正方形,因此 img 宽度和高度应始终相等)

下面是一些结果截图,左边是我不想发生的两件事,右边是可以接受的事情。

link to image examples of cards

由于完整的代码有点长,这里有一个 JSFiddle,其中包含一个工作示例,说明现在的情况(卡片采用 bootstrap 样式 rows/columns)。 http://jsfiddle.net/js47withfeeling/dtbx78ay/4/

下面是一些相关的代码片段。

HTML一张卡

    <div class="card-column card">
        <img class="card-img" src="Link to Image">
        <p class="card-title">With Security</p>
    </div>

在这个 HTML 块中有一堆这样的卡片,它应用了一些 bootstrap

<div class="row">
    <div id="loadCardsHere" class="col-md-9 12u(mobile)">
        <!--cards go here -->
    </div>
</div>

相关CSS

body{
    font-family: 'Old Standard TT', serif;
}
.card{
    margin-top:5px;
    margin-right:5px;
}
.card-img{
    width:100%;
    max-height:500;
}

.card-title{
    position:absolute;
    bottom:0;
    align-self: center;
    font-size:180%;
}
.card-column{
    float: left;
    width: 32%;
    height:300;
    cursor: pointer;
    border-color: #01ABAA;
    border-width: medium;
}
@media screen and (max-width: 600px) {
    .card-column {
      width: 100%;
    }
  }
@media (min-width: 768px) {
    .card{
        max-width:33%;
        max-height:auto;
    }
}

是否有某种 CSS 属性,例如“max-height: (parent.height) - (parent.2ndChild.height) ”? (该语法显然是错误的,但大致如此)

从 .card-title 中删除 position:absolute; bottom:0;。 Absolute 将它从流中移除,并且它没有关于其他 divs/elements.

高度的上下文

Popshuvit 是正确的。此外, align-self 是一个 flex 属性 但是没有 flex-parent 来提供这个上下文。不过,您应该采用 flex 路线。我没有测试过,但你想要的结果可能是这样的:

.card {
  position: relative;
  display: flex;
  flex-flow: column;
  text-align: center;
  align-items: center;
  width: 100%;
}
.card-img {
  width: 100%;
  object-fit: contain;
}
.card-title {
  ...text styles
}

此外,您似乎为 .card 和 .card-column 使用了不同的样式,但实际上它们是同一元素。这只有在某些 'cards' 不包含 .card-column class 时才有意义。继续沿着 flex 路线走也能让你摆脱那些讨厌的花车!