如何在文本叠加扩展时扩展图像?

How to expand image as text overlay expands?

我们在 codepen 上有以下代码。我们遇到的问题是我们正在使用 <picture> 属性来渲染基于 viewport 的图像,但无法让图像占用与文本相同数量的 space覆盖在图像上。

codepin 详细信息:

  1. 当前文本有 background-color: #eee,因此您可以看到文本占用的区域。
  2. 图文有position: absolute,可打开修改。
  3. 基于viewport,我们总是希望<source>标签中的图像只占文本所占的部分。

目标:

  1. 使图像占据与覆盖在顶部的文本相同的高度和宽度
  2. 使用 <picture><source>
  3. 不在 <div class="item__img">
  4. 上使用 style: background-image('path/to/image')
  5. 愿意裁剪图像以使其适合,但更希望在不裁剪的情况下完成。

当前问题:

期望的输出

我们如何让 image 随着其顶部文本的扩展而扩展?

如果您的图片总是比文本框大,这里有一个解决方案

.item {
  position: relative;
  max-width: 100%;
}
  
.item__img img {
  width: 100% !important;
}
 
.item__text {
  position: absolute;
  background: rgba(238,238,238, 0.5);
  padding: 32px;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 5;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
<div class="item">
  <div class="item__img">
    <picture>
      <source media="(min-width: 1300px)" srcset="https://placeimg.com/1000/480/nature">
      <source media="(min-width: 1024px)" srcset="https://placeimg.com/960/480/nature">
      <img src="https://placeimg.com/640/480/nature" alt="Flowers" style="width:auto;">
    </picture>
  </div>
  <div class="item__text">
    <div>
      <h3>Some title</h3>
      <p>Efficiently communicate sticky quality vectors after compelling growth strategies. </p>
    </div>
  </div>
</div>

您可以在您的 img 上使用 object-fit 属性:

.item {
  position: relative;
  width: 33%;
}

img{
  position:absolute;
  width:100%;
  height:100%;
  object-fit:cover;
}

.item__text {
  background-color: #eee;
  opacity: 0.5;
  padding:32px;
}
<div class="item">
 <div class="item__img">
  <picture>
   <source media="(min-width: 1300px)" srcset="https://placeimg.com/1000/480/nature">
   <source media="(min-width: 1024px)" srcset="https://placeimg.com/960/480/nature">
   <img src="https://placeimg.com/640/480/nature" alt="Flowers">
  </picture>
 </div>
 <div class="item__text">
  <h3>Some title</h3>
  <p>Efficiently communicate sticky quality vectors after compelling growth strategies. </p>
 </div>
</div>