如何在不设置特定高度(或最小高度)的情况下让div自动调整为我为其设置的背景大小?
有一种非常好的和很酷的方法可以使背景图像像img
元素一样工作,因此它会height
自动调整.你需要知道图像width
和height
比例.将height
容器的容器设置为0,并padding-top
根据图像比率设置百分比.
它将如下所示:
div { background-image: url('http://www.pets4homes.co.uk/images/articles/1111/large/feline-influenza-all-about-cat-flu-5239fffd61ddf.jpg'); background-size: contain; background-repeat: no-repeat; width: 100%; height: 0; padding-top: 66.64%; /* (img-height / img-width * container-width) */ /* (853 / 1280 * 100) */ }
你刚刚得到一个具有自动高度的背景图像,就像img元素一样.这是一个工作原型(你可以调整大小并检查div高度):http://jsfiddle.net/TPEFn/2/
另一种可能效率低下的解决方案是将图像包含在img
元素集下visibility: hidden;
.然后使background-image
周围的div与图像相同.
这会将周围的div设置为img
元素中图像的大小,但将其显示为背景.
无法使用CSS自动调整背景图像大小.
您可以通过测量服务器上的背景图像然后将这些属性应用于div来破解它,正如其他人所提到的那样.
您还可以根据图像大小(一旦图像下载后)修改一些javascript以调整div的大小 - 这基本上是相同的.
如果你需要你的div来自动调整图像,我可能会问你为什么不在你的div里放一个标签?
这个答案与其他答案类似,但对大多数应用程序来说总体上是最好的.你需要事先了解手头的图像尺寸.这将允许您添加叠加文本,标题等,没有负片填充或图像的绝对定位.它们的关键是设置填充%以匹配图像宽高比,如下例所示.我使用了这个答案,基本上只是添加了一个图像背景.
.wrapper {
width: 100%;
/* whatever width you want */
display: inline-block;
position: relative;
background-size: contain;
background: url('https://upload.wikimedia.org/wikipedia/en/thumb/6/67/Wiki-llama.jpg/1600px-Wiki-llama.jpg') top center no-repeat;
margin: 0 auto;
}
.wrapper:after {
padding-top: 75%;
/* this llama image is 800x600 so set the padding top % to match 600/800 = .75 */
display: block;
content: '';
}
.main {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
color: black;
text-align: center;
margin-top: 5%;
}
This is where your overlay content goes, titles, text, buttons, etc.
也许这可以提供帮助,但这不是一个背景,但你明白了:
Hi there
很确定这一直都不会在这里看到.但如果您的问题与我的问题相同,那么这就是我的解决方案:
.imaged-container{ background-image:url('<%= asset_path("landing-page.png") %> '); background-repeat: no-repeat; background-size: 100%; height: 65vw; }
我想在图像的中心有一个div,这将允许我这样做.
有一个纯CSS解决方案,其他答案已错过.
"content:"属性主要用于将文本内容插入元素,但也可用于插入图像内容.
.my-div:before { content: url("image.png"); }
这将导致div将其高度调整为图像的实际像素大小.要调整宽度,请添加:
.my-div { display: inline-block; }
您可以在服务器端执行:通过测量图像然后设置div大小,或者使用JS加载图像,读取它的属性然后设置DIV大小.
这是一个想法,将相同的图像作为IMG标记放在div中,但是给它可见性:隐藏+使用位置相对来玩+给这个div作为背景图像.
我有这个问题并找到了Hasanavi的答案,但是我在宽屏幕上显示背景图像时遇到了一个小错误 - 背景图像没有扩散到整个屏幕宽度.
所以这是我的解决方案 - 基于Hasanavi的代码,但更好......这应该适用于超宽屏和移动屏幕.
/*WIDE SCREEN SUPPORT*/ @media screen and (min-width: 769px) { div { background-image: url('http://www.pets4homes.co.uk/images/articles/1111/large/feline-influenza-all-about-cat-flu-5239fffd61ddf.jpg'); background-size: cover; background-repeat: no-repeat; width: 100%; height: 0; padding-top: 66.64%; /* (img-height / img-width * container-width) */ /* (853 / 1280 * 100) */ } } /*MOBILE SUPPORT*/ @media screen and (max-width: 768px) { div { background-image: url('http://www.pets4homes.co.uk/images/articles/1111/large/feline-influenza-all-about-cat-flu-5239fffd61ddf.jpg'); background-size: contain; background-repeat: no-repeat; width: 100%; height: 0; padding-top: 66.64%; /* (img-height / img-width * container-width) */ /* (853 / 1280 * 100) */ } }
您可能已经注意到,该background-size: contain;
属性不适合超宽屏幕,并且该background-size: cover;
属性不适合移动屏幕,因此我使用此@media
属性来调整屏幕大小并解决此问题.