【问题标题】:Getting the new height of backround image when using CSS background-size: cover?使用 CSS background-size:cover 时获取背景图像的新高度?
【发布时间】:2015-05-12 08:28:38
【问题描述】:

我在 CSS 中使用 background-size: cover;,虽然它运行良好,但我注意到一旦它“启动”,那么您可能会遇到背景图像的整个 height 不显示的问题。

例如,我有这样的代码:

#home .top {
    min-height: 768px;
    background: #fff url('../images/home-bg-lg.jpg') center top no-repeat;
    background-size: cover;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
}

现在,min-height: 768px; 指的是图像的实际高度,所以我设置它以确保无论内容如何,​​它始终显示完整高度;但是很明显,一旦背景大小开始增加,height 也会增加,因此 768px 大小不再足够大,并且很多背景都没有显示。

有没有办法用CSS解决这个问题,如果没有,用JavaScript怎么样,最好是jQuery

如果只是一个 JavaScript/jQuery 解决方案,可能值得一提的是我使用 breakpoints 并以较小的分辨率使用较小的背景图像;无需对这些应用任何内容。

编辑:为了澄清,我想知道是否有可能在它展开时始终显示图像的完整高度。因此,例如,如果它使用的是1600 x 768 的图像并且有人以1920 x 900 分辨率查看它,那么它将扩展到1920px 宽度,因此如果min-height 可以更改为922px 会很好那现在应该是正确的高度吗?

【问题讨论】:

  • 嘿布雷特,你能澄清一下你想要它做什么吗?我在这里做了一个小提琴:jsfiddle.net/5uyxsxn4。图像扩展以填充整个 div(屏幕)。这是你想要的吗?您想始终显示全高并在左/右有白色边框吗?
  • 您想始终看到整个背景图像而不管纵横比如何?
  • @MartinGottweis 我编辑了我的问题以澄清。
  • @Samurai 请参阅编辑。
  • 哦,我不确定我现在明白了。你有这个问题的演示网站吗?设置为覆盖的背景大小将扩展图像以填充 div。另一种选择是拉伸图像,这听起来不太可能。

标签: javascript jquery css background-size


【解决方案1】:

我假设你有背景的原始尺寸,如果不是 here's how you can get it

var bgw = 1600;
var bgh = 768;

function coverBg() {
    var el = $('#home .top');
    var elw = el.outerWidth();
    var elh = el.outerHeight();
    var newHeight = elw*bgh/bgw;
    el.css('height', newHeight);
}

【讨论】:

  • 这难道不是在任何断点控制背景并影响较小的背景,而不是在背景变得大于最大尺寸时才启动吗?
  • 我怀疑,任何小于最小高度的高度都不应该有任何影响。您可以在最后一行之前添加任何条件。例如if(elw > bgw)。如果无论大小变化都保持纵横比,那么如果容器的宽度也较小,也会出现同样的问题,部分高度将不可见。但我可能没有正确理解这个问题。
【解决方案2】:

我会说如果图像是背景,那么它只是“装饰”,因此是否裁剪一点并不重要。如果您的图像很重要,那么它是您页面“内容”的一部分,那么您应该使用标签来放置它。这样它就会自动生长。 如果您仍想将图像显示为背景,则无法获得渲染高度,因此您必须进行一些javascript计算:

  1. 创建图片对象,获取bg图片的宽高:

    var height, width, proportion; var img = new Image(); img.src = imageurl; img.onload = function(){ height = img.height; width = img.width; proportion = width/height; }

  2. 然后可以对比一下图片的比例和容器的比例,看是更垂直还是更水平。

  3. 如果更垂直,则裁剪侧面,如果更水平,则裁剪顶部和底部。
  4. 知道这一点后,您可以更改容器的大小以适应图像的比例。

编辑:我个人的看法是,用 js 做这件事有点乱。在大多数情况下,最好使用标签或忘记那些裁剪的部分。如果您认为图像的重要部分没有显示,也许您可​​以使用background-position 玩一点,以确保始终显示图像的焦点。

【讨论】:

  • 我也在考虑同样的方法。 +1
  • 公平积分。我的意思是,如果其中一些不显示,这不是一个大问题,但我想这将是理想的。不能真正使用标签,因为内容显示在它上面,并且不想使用绝对定位来放置内容,如果我这样做,背景也不会水平扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2016-01-27
相关资源
最近更新 更多