缩放 div 以适合背景图像

新手上路,请多包涵

我有一个带有背景图像的 div,我想将其扩展 100% 宽度并自动缩放 div 以适应图像所需的高度。目前它不会缩放 div 高度,除非我将 div 的高度设置为 100%,但它只是拉伸到屏幕的整个高度,而我希望它缩放到图像的高度。

这是 html:

 <div id="mainHeaderWrapper">

</div><!--end mainHeaderWrapper-->
<br class="clear" />;

这是CSS:

     #mainHeaderWrapper{

     background: url(http://localhost/site/gallery/bg1.jpg);
     width: 100%;
     height: auto;
     -webkit-background-size: cover;
     -moz-background-size: cover;
     -o-background-size: cover;
     background-size: cover;
     background-size: 100% 100%;

     background-repeat: no-repeat;
     background-position: center center;

 }

 .clear { clear: both; }

感谢您的帮助

原文由 Al Hennessey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 231
2 个回答

让透明图像决定 DIV 尺寸。

在那个 div 里面用 CSS 放置相同的图像 opacity: 0

 <div id="mainHeaderWrapper">
   <img src="path/to/image.jpg"><!-- I'm invisible! -->
</div>

将该图像设置为

#mainHeaderWrapper {
    background: no-repeat url(path/to/image.jpg) 50% / 100%;
}
#mainHeaderWrapper img {
    vertical-align: top;
    width: 100%; /* max width */
    opacity: 0;  /* make it transparent */
}

这样,DIV 的高度将由包含的不可见图像决定,并将 background-image 设置为 中心,完整( 50% / 100% ) 它将匹配该图像的比例。

该 DIV 中需要一些内容吗?

由于包含图像,您需要一个额外的子元素,该元素将被设置为 position: absolute 作为覆盖元素

<div id="mainHeaderWrapper">
   <img src="path/to/image.jpg"><!-- I'm invisible! -->
   <div>Some content...</div>
</div>

 #mainHeaderWrapper{
    position: relative;
    background: no-repeat url(path/to/image.jpg) 50% / 100%;
}
#mainHeaderWrapper > img{
    vertical-align: top;
    width: 100%; /* max width */
    opacity: 0;  /* make it transparent */
}
#mainHeaderWrapper > div{
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
}

原文由 Roko C. Buljan 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您知道图像的比例,请使用百分比填充来定义容器的高度。设置 height:0 并将垂直填充设置为宽度的百分比。

这种方法的关键是基于百分比的垂直填充总是与宽度相关。

根据 盒子模型(w3.org)

该百分比是根据生成的框的包含块的 宽度 计算的,即使对于“padding-top”和“padding-bottom”也是如此。

下图为400px X 200px,所以高宽比例为1:2, padding-top 设置为50%;

 #mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top: 50%;
  background-image: url('https://dummyimage.com/400x200/');
  background-size: 100% auto;
  background-repeat: no-repeat;
}
 <div id="mainHeaderWrapper"></div>
stuff below the image

在另一个例子中,图像是 300px X 100px。高度是宽度的⅓,所以 padding-top 设置为33.33%:

 #mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top:33.33%;
  background-image: url('https://dummyimage.com/300x100/');
  background-size: 100% auto;
  background-repeat: no-repeat;
}
 <div id="mainHeaderWrapper"></div>
stuff below the image

编辑:

根据Paulie_D的提示,div中的其他内容必须绝对定位,如下所示。我建议也使用百分比来定位这些元素。

 #mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top: 33.33%;
  background-image: url('https://dummyimage.com/300x100/');
  background-size: 100% auto;
  background-repeat: no-repeat;
}

div#inner_content {
  position: absolute;
  top: 0;
  width: 100%;
  margin-top: 10%;
  color: #FFF;
  text-align: center;
  font-size: 20px;
}
 <div id="mainHeaderWrapper">
  <div id="inner_content">Hello World</div>
</div>
stuff below the image

原文由 showdev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题