div 中的背景图像没有占据整个视图

Posted

技术标签:

【中文标题】div 中的背景图像没有占据整个视图【英文标题】:Background image in div is not taking entire view 【发布时间】:2021-01-18 19:12:57 【问题描述】:

我正在开发一个电子商务平台。如果所有总计数为零,我必须在产品图像上显示SoldOut 图像。这是我的售罄产品的 CSS。

  &__imageSoldOut 
    background-color: green;
    display: flex;
    align-items: center;
    justify-content: center;
    background-position: center;
    background-repeat: no-repeat;
    width: 100%;
    height: 15rem;
    object-fit: cover;

    img 
      object-fit: contain;
      max-width: 70%;
    

    @media (max-width: $small-screen) 
      height: 210px;
    
  

我希望我的产品图片在背景中覆盖整个视图,就像左侧的可用产品一样,只有售罄的图片显示为叠加,这里的绿色视图将被背景图片覆盖。 这是我的反应 jsx

        <div
          className="product-list-item__imageSoldOut"
          style=
            backgroundImage: `url($(product.thumbnail.url &&
              product.thumbnail.url) ||
              "images/no-photo.svg")`,
          
        >
          <img src=soldOutThumb />
        </div>

【问题讨论】:

【参考方案1】:

在这种情况下,您可以将 backgroundSize (https://www.w3schools.com/cs-s-ref/css3_pr_background-size.asp) 设置为高度的 100%,以免图像倾斜或同时填充宽度和高度

       <div
          className="product-list-item__imageSoldOut"
          style=
            backgroundImage: `url($(product.thumbnail.url &&
              product.thumbnail.url) ||
              "images/no-photo.svg")`,
            backgroundSize: "auto 100%"
          
        >
          <img src=soldOutThumb />
        </div>

背景尺寸:“[宽度] [高度]”

【讨论】:

这仅适用于square div。如果它是一个宽 div,那么绿色将出现在左侧。但在这种情况下,这没关系。 也忘了说!如果重复打开,则图像将被重复。【参考方案2】:

在您的 JSX 中,删除 backgroundImage 并使用 background 并将 url()cover 一起写入。 cover 样式将通过缩放图像和裁剪/裁剪溢出来填充 div。

在代码中应该是这样的:background: url() cover

【讨论】:

【参考方案3】:

试着给它flex:1也试试object-fit: fill

【讨论】:

以上是关于div 中的背景图像没有占据整个视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥背景图片没有填满整个div

如何获取包含背景图像以覆盖整个div? [重复]

如何在 Android 中设置背景图像并将该图像适合整个卡片以用于卡片视图?

如何让单元格中的内容视图占据整个单元格?

CSS背景图像,根据视口调整大小[重复]

在导航栏下方设置图像视图