强制 div 具有背景图像的大小

Force div to have the size of background image

在 Div 上使用背景图像时,我无法显示图像的完整高度,无论是使用 height:auto; 还是 height: 100%。为什么这样? 我该如何解决这个问题?

我在这里创建了一个 JS Fiddle:https://jsfiddle.net/2d0npz2v/5/

body, html {
  height: 100%;
  margin: 0px;
}
.imageContainer2 {
  background-image: url("http://i.imgur.com/AWi7r5m.jpg");
  background-position: center top;
  background-size: 100% auto;
  height: 100%;
}
<div class="imageContainer2"></div>

更新 为清楚起见,图像需要 100% 宽度和自动高度(不在底部剪切)。 此示例有效,但它使用 "content" 属性 而不是 "background-image":https://jsfiddle.net/j47a6x7s/。我正在寻找相同的行为,但没有使用内容。

试着把这三个给你的 .imageContainer2:

.imageContainer2 {
  position: fixed;
  width: 100%;
  height: 100%;
}

Fiddle: https://jsfiddle.net/jsse9yL3/

尝试:

body {
    padding: 0px;
}

如果您要在背景中显示的图像 属性 始终具有相同的纵横比,您可以使用其中一种技术 explained here 来制作 div根据宽度保持与图像相同的纵横比。

以您的示例为例:

body, html {
  height: 100%;
  margin: 0px;
}
.imageContainer2 {
  background-image: url("http://i.imgur.com/AWi7r5m.jpg");
  background-position: center top;
  background-size: auto 100%;
  padding-bottom:178%;
  background-repeat:no-repeat;
}
<div class="imageContainer2"></div>

请注意,我不知道您要达到的精确度是什么。根据上下文,使用此方法显示图像在语义上可能不正确。

嗯,这是为什么?

在您的工作示例中,您使用了内容。一个内容有它自己的高度并用完了 space,页面上的其他元素必须尊重它。

对于 background-image 解决方案,您使用了不使用 space 的背景。 .imageContainer2 元素无法知道背景图像的高度并自行适应它。

这里解决了这个问题:How to get div height to auto-adjust to background size?
只需检查解决方法是否适合您

您必须使用 IMG 才能做到这一点。为什么你坚持使用 CSS?

示例:

.container img
{
  width: 100%;
  height: auto;
}
<div class="container">
  <img src="http://www.wallpaperawesome.com/wallpapers-awesome/wallpapers-full-hd-1080-x-1920-smatphone-htc-one-lumia-1520-lg-g2-galaxy-s4-s5-awesome/wallpaper-full-hd-1080-x-1920-smartphone-vertical-stiped-nebula.jpg"/>
</div>

您不能使用 CSS 规则计算 background-image 高度,然后使 DIV 高度相等。 最接近您问题的解决方案是使用 background-cover 和所有相关的 "issues".

更新

另一个CSS解决方案可能是padding-trick方式,如下:

.container
{
    background-image: url('http://www.wallpaperawesome.com/wallpapers-awesome/wallpapers-full-hd-1080-x-1920-smatphone-htc-one-lumia-1520-lg-g2-galaxy-s4-s5-awesome/wallpaper-full-hd-1080-x-1920-smartphone-vertical-stiped-nebula.jpg');
    background-size: contain;
    background-repeat: no-repeat;

    width: 100%;
    height: 0;

    padding-top: 177.77%; /* img-height / img-width * container-width (1920 / 1080 * 100) */
}
<div class="container">
  
</div>

无论如何我建议使用第一个解决方案。

  var bgImg = new Image();
  bgImg.src = $('.test').css('background-image').replace(/"/g,"").replace(/url\(|\)$/ig, "");
  bgImg.onload = function() {
  $('.test').css({'height':this.height,'width':this.width});
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<div class="test" style="background-image: url('https://images.pexels.com/photos/36487/above-adventure-aerial-air.jpg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260');">

</div>

希望这能完全解决您的问题。

您可以使用:

.imageContainer2 {
  overflow: hidden;
  position: relative;
  background-repeat: no-repeat;
  background-position: 50%;
  margin: auto;
  min-height: 100vh;
  background-size: cover;
}