将 DIV 设置为背景图像的大小

Posted

技术标签:

【中文标题】将 DIV 设置为背景图像的大小【英文标题】:Set DIV to size of background-image 【发布时间】:2021-12-27 07:55:28 【问题描述】:

所以我想弄清楚,如何将第二个框的大小(见截图)设置为背景图像的大小。我正在使用引导程序,它正在构建弹性类。也许你们可以在这里帮助我。

基本上我想要的是紫色框与背景图像大小相同,并且在调整屏幕大小时保持相同大小。

为了进行测试,我提供了一个准备好的 Stackblitz 环境:https://stackblitz.com/edit/javascript-rs3ykl?file=index.html

.page-container 
  width: 100vw;
  height: 50vh;


.background-image 
  background: url('https://dummyimage.com/258x362/007aa5?text=Banner-Desktop-Large') center center / contain no-repeat;
  height: 100%;
  width: auto;
  background-origin: content-box;
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<div class="page-container">
  <div class="row w-100 h-100">
    <div class="col-4 bg-primary">
      <p>Box 1</p>
    </div>
    <div class="col-4">
      <div class="background-image">
        <div style="background: purple">
          <div class="d-flex justify-content-around" style="color: rgb(255, 255, 255)">
            <div class="d-flex flex-column">
              <div>Tage</div>
              <div>16086</div>
            </div>
            <div class="d-flex flex-column">
              <div>Stunden</div>
              <div class="">6</div>
            </div>
            <div class="d-flex flex-column">
              <div>Minuten</div>
              <div>13</div>
            </div>
            <div class="d-flex flex-column">
              <div>Sekunden</div>
              <div>34</div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="col-4 bg-secondary">
      <p>Box 3</p>
    </div>
  </div>
</div>

【问题讨论】:

您需要 javascript 来确定图像的纵横比并调整其 CSS。我制作了一个 demo 来说明这一点(拖动右下角调整大小) 如何将宽度:100% 和高度:100% 设置为紫色 div? 如果我们这样做,紫色框将填满 flex 提供的可用空间,但是我们需要从背景图像中获取空间。而且在这种情况下使用javascript也会有问题。这不是一个很好的解决方案,因为我们有服务器端渲染,并且使用这种方法可能会导致内容布局转移 【参考方案1】:

我认为最好使用图像标签而不是带有 div 的 url。所以我就这样改了

<link
  href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
  rel="stylesheet"
  integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
  crossorigin="anonymous"
/>
<style>
  .page-container 
    width: 100vw;
    height: 50vh;
  

  .background-image 
    height: 100%;
    width: auto;
    background-origin: content-box;
  
  .bk-image 
    object-fit: cover;
    width: 100%;
    height: 100%;
  
</style>
<div class="page-container">
  <div class="row w-100 h-100">
    <div class="col-4 bg-primary"><p>Box 1</p></div>
    <div class="col-4">
      <div class="background-image">
        <div style="background: purple">
          <div class="d-flex justify-content-around" style="color: rgb(255, 255, 255)">
            <div class="d-flex flex-column">
              <div>Tage</div>
              <div>16086</div>
            </div>
            <div class="d-flex flex-column">
              <div>Stunden</div>
              <div class="">6</div>
            </div>
            <div class="d-flex flex-column">
              <div>Minuten</div>
              <div>13</div>
            </div>
            <div class="d-flex flex-column">
              <div>Sekunden</div>
              <div>34</div>
            </div>
          </div>
        </div>
        <img class="bk-image" src = "https://dummyimage.com/258x362/007aa5?text=Banner-Desktop-Large">
      </div>
    </div>
    <div class="col-4 bg-secondary"><p>Box 3</p></div>
  </div>
</div>

现在紫色条与背景图片保持一致,因为您使用了 100% 的高度,我也这样做了,但如果您希望它与行保持一致,您可以将高度设置为与行高相同。

【讨论】:

如果您在全屏模式下检查您的解决方案,您会发现第二个框与其他两个框在高度方面没有正确对齐 正如我所说,我确实保持高度添加 100% bc 我虽然你只是希望它的宽度被固定但要修复高度你只需要删除“高度:100%;”在.bk-image css 样式

以上是关于将 DIV 设置为背景图像的大小的主要内容,如果未能解决你的问题,请参考以下文章

设置 div 背景图像以适合其大小?

如何将背景图像适合主div?

css怎么给div加背景图片

关于Html背景图自适应容器大小的问题

为div设置背景图片后,为啥不显示背景图片?

如何自动将div的高度调整到背景图像?