【问题标题】:Scalable background images with CSS使用 CSS 的可缩放背景图像
【发布时间】:2018-07-19 15:28:04
【问题描述】:

我有一个高度为 300 像素的 div。我想要一个或多个根据这个高度缩放的子图像。

当我使用带有下面#src CSS 的img 时,效果很好。宽度和高度未定义为像素分辨率,因此如果我更改了#wrap 的高度,它会按应有的比例缩放。

是否可以在不定义像素宽度/高度的情况下对 CSS 背景(无 Javascript)做同样的事情?我可以将宽度设置为 100% 并在其中放置一个最大宽度,但这会将图像限制为最大宽度,如果图像小于最大宽度,则右侧会有一个间隙(可以根据 max-width 的值很大)。

谢谢!

#wrap
{
    width:100%;
    height:300px;
}

#src
{
	display:inline-block;
	width:auto;
	height:100%;
	border:1px #0f0 solid;
}
    
#bg
{
	display:inline-block;
	background-image:url(https://i.imgur.com/6672G7J.png);
	background-repeat:no-repeat;
	background-size:contain;
	width:auto;
	height:100%;
	border:1px #f00 solid;
}
<div id="wrap">
	<img id="src" src="https://i.imgur.com/6672G7J.png" />
	<div id="bg"></div>
</div>

【问题讨论】:

标签: html css


【解决方案1】:

如果我理解正确...您可以使用background-size: cover;,然后图像将填满整个父容器,而无需指定宽度或高度

【讨论】:

  • 我试过时封面没有用。它要求我的 div 定义宽度/高度,除非我使用不正确?如果是正确的方法,我当然想不通。
【解决方案2】:

您是否正在寻找 background-size: cover 应用最大尺寸而不是较小尺寸?

【讨论】:

  • 我已经尝试过使用封面,但它对我不起作用。不过感谢您的建议!
【解决方案3】:

诀窍是将 div 的高度设置为 0,然后将 padding-top 设置为高度/宽度的比率。见https://stackoverflow.com/a/22211990/40161

#bg
{
    display:inline-block;
    background-image:url(https://i.imgur.com/6672G7J.png);
    background-repeat:no-repeat;
    background-size:contain;
    width:100%;
    height:0;
    padding-top: 100%; (Height/Width)
    border:1px #f00 solid;
}

注意:我将宽度更改为 100%。这将使其占用所有可用空间。但是,如果您希望它 100px 作为原始示例,则需要围绕 div 进行包装以限制大小。见https://jsfiddle.net/1x6p33f9/1/

【讨论】:

  • 100px 是我测试的残余。对于那个很抱歉。至于解决方案,它似乎不起作用,因为我需要设置一个宽度(在我的示例中,100% 的宽度显然会跨越整个屏幕)。我需要一排这些不同宽度的图像。这就是为什么我需要根据高度自动计算宽度。
  • 一旦 div 的大小与背景图像相同,您是要在 div 中放置任何其他内容还是只包含背景图像?据我所知,没有一种方法可以让许多 div 根据它们的任意背景图像自动调整大小,只使用 HTML 和 CSS。您可能想深入研究一些 JavaScript 来完成您的任务。见stackoverflow.com/a/12784180/40161
  • 是的,我们最终可能在每个 div 中都有一个链接。我绝对想避免使用 Javascript,所以我可能不得不使用 img 元素而不是使用背景图像。遗憾的是规范还没有。
  • 如果您能够使用 img 标签,那将是最简单的路线。如果需要创建叠加层,可以使用绝对定位的 div。这是引导程序所做的事情,例如:v4-alpha.getbootstrap.com/components/card/#image-overlays
  • 我最终选择了 img 标签。我不能再花时间试图弄清楚它是如何完成的。
猜你喜欢
  • 2011-10-14
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多