当前位置:  开发笔记 > 编程语言 > 正文

如何让div高度自动调整到背景大小?

如何解决《如何让div高度自动调整到背景大小?》经验,为你挑选了9个好方法。

如何在不设置特定高度(或最小高度)的情况下让div自动调整为我为其设置的背景大小?



1> Hasanavi..:

有一种非常好的和很酷的方法可以使背景图像像img元素一样工作,因此它会height自动调整.你需要知道图像widthheight比例.将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/


确实太棒了!只是为了后代看到这个答案,如果你正在使用指南针(scss),我使用他们的辅助函数创建了一个mixin来为你做计算:`@mixin div-same-size-as-background-img($ url){background-image:url($ url); background-size:包含; background-repeat:no-repeat; 宽度:100%; 身高:0; padding-top:百分比(image-height($ url)/ image-width($ url)); }`
对于那些想知道的人来说,填充顶部不会创建空白区域,因为它只会增加元素的高度.图像是背景图像,因此显示正确的定位和间距.这是非常愚蠢的我们必须为CSS提出这样的技巧.
虽然这种方法适用于显示背景图像,但它通过填充填充来渲染div本身不太有用.Kryptik建议在容器内添加一个绝对定位的div,但为什么还要为背景图像烦恼呢?然后你可以在内容div中使用一个实际的图像,如果你只是绝对地将所有内容放在它上面.这首先破坏了使用背景图像的目的.
@GaryHayes你可以将`position:relative`设置为div并将另一个div放入`position:absolute; 顶部:0; 底部:0; 左:0; 右:0;`设置
不幸的是,padding-top不允许你在div中放置任何其他内容,例如背景上的表单元素.
最终,我最终将填充计算再次分为两半,并将其分别划分为顶部和底部(即“ padding:61.805%0%61.805%0%;”)。这样,至少我打算在背景图像上包含的内容位于div的中间,而不是一直推到底部。但是,这仍然需要一定的负利润。
如果要将内容放在div中而不使用相对/绝对位置(最常用于电子邮件模板),请使用padding-bottom代替
我不了解填充计算。答案是“ 853/1280 * 100”,等于“ 0.006664”。那等式中的“容器宽度”是什么?百分比值?像素值?为什么计算不等于所提供的代码中的内容?

2> Tmac..:

另一种可能效率低下的解决方案是将图像包含在img元素集下visibility: hidden;.然后使background-image周围的div与图像相同.

这会将周围的div设置为img元素中图像的大小,但将其显示为背景.


也许我错过了一些东西,但是如果你打算在你的标记中添加一个`img`,为什么不简单地*不*隐藏实际的``而不用"背景图像"呢?以这种方式做事有什么好处?
不完全有用,因为图像将使用'空间',内容看起来像有一个很大的边缘顶部.
@ www139当你说加载时,你究竟是什么意思?图像下载后,可能会被缓存.从那时起,任何其他请求都基于本地副本.所以不行.它没有下载两次.但是,它加载了两次.
很好的答案,但浏览器是否必须加载两次呢?

3> Orion Edward..:

无法使用CSS自动调整背景图像大小.

您可以通过测量服务器上的背景图像然后将这些属性应用于div来破解它,正如其他人所提到的那样.

您还可以根据图像大小(一旦图像下载后)修改一些javascript以调整div的大小 - 这基本上是相同的.

如果你需要你的div来自动调整图像,我可能会问你为什么不在你的div里放一个标签?


^^这可能不是一个好主意.浏览器可能需要几秒钟才能下载您的图像,并且在此之前您无法测量它,因此您的div将在相当长的时间内以错误的大小悬挂!

4> horsejockey..:

这个答案与其他答案类似,但对大多数应用程序来说总体上是最好的.你需要事先了解手头的图像尺寸.这将允许您添加叠加文本,标题等,没有负片填充或图像的绝对定位.它们的关键是设置填充%以匹配图像宽高比,如下例所示.我使用了这个答案,基本上只是添加了一个图像背景.

.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.


5> Luca Matteis..:

也许这可以提供帮助,但这不是一个背景,但你明白了:



Hi there



6> Carpk..:

很确定这一直都不会在这里看到.但如果您的问题与我的问题相同,那么这就是我的解决方案:

.imaged-container{
  background-image:url('<%= asset_path("landing-page.png") %> ');
  background-repeat: no-repeat;
  background-size: 100%;
  height: 65vw;
}

我想在图像的中心有一个div,这将允许我这样做.



7> Bernie Sumpt..:

有一个纯CSS解决方案,其他答案已错过.

"content:"属性主要用于将文本内容插入元素,但也可用于插入图像内容.

.my-div:before {
    content: url("image.png");
}

这将导致div将其高度调整为图像的实际像素大小.要调整宽度,请添加:

.my-div {
    display: inline-block;
}



8> Itay Moav -M..:

您可以在服务器端执行:通过测量图像然后设置div大小,或者使用JS加载图像,读取它的属性然后设置DIV大小.

这是一个想法,将相同的图像作为IMG标记放在div中,但是给它可见性:隐藏+使用位置相对来玩+给这个div作为背景图像.



9> martin schwa..:

我有这个问题并找到了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属性来调整屏幕大小并解决此问题.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有