缩放div以适合背景图像

Al *_*sey 22 html css css3

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

这是html:

<div id="mainHeaderWrapper">


</div><!--end mainHeaderWrapper-->
<br class="clear" />;
Run Code Online (Sandbox Code Playgroud)

这是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; }
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助

Rok*_*jan 25

让透明图像决定您的DIV尺寸.

jsBin演示

里面的div放了相同的图像

<div id="mainHeaderWrapper">
   <img src="path/to/image.jpg"><!-- I'm invisible! yey!-->
</div>
Run Code Online (Sandbox Code Playgroud)

将该图像设置为

#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 */
}
Run Code Online (Sandbox Code Playgroud)

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

不确定你是想要操纵背景图像颜色还是什么(使用CSS3 filter),但现在再次阅读我写的内容...
简单地将图像放入DIV中是不是更简单?:)

在DIV里面需要一些内容吗?

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

<div id="mainHeaderWrapper">
   <img src="path/to/image.jpg"><!-- I'm invisible! yey!-->
   <div>
     Some content...
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

#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%;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我想知道我将如何在div中添加内容,所以你答案的第二部分有很大帮助. (3认同)

sho*_*dev 8

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

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

根据盒子模型(w3.org):

百分比是根据生成的框的包含块的宽度计算的,即使对于"填充顶部"和"填充底部"也是如此.

下图中,图像为400px×200px,因此高宽比为1:2,padding-top设定为50%;

#mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top:50%;
  background-image: url(//lorempixel.com/400/200/abstract/1/);
  background-size: 100% auto;
  background-repeat: no-repeat;
}
Run Code Online (Sandbox Code Playgroud)
<div id="mainHeaderWrapper"></div>
stuff below the image
Run Code Online (Sandbox Code Playgroud)

在另一个示例中,图像是300px X 100px.高度是宽度的1/3,因此padding-top设置为33.33%:

#mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top:33.33%;
  background-image: url(//lorempixel.com/300/100/abstract/1/);
  background-size: 100% auto;
  background-repeat: no-repeat;
}
Run Code Online (Sandbox Code Playgroud)
<div id="mainHeaderWrapper"></div>
stuff below the image
Run Code Online (Sandbox Code Playgroud)


编辑:

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

#mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top: 33.33%;
  background-image: url(//lorempixel.com/300/100/abstract/1/);
  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;
}
Run Code Online (Sandbox Code Playgroud)
<div id="mainHeaderWrapper">
  <div id="inner_content">Hello World</div>
</div>
stuff below the image
Run Code Online (Sandbox Code Playgroud)