【问题标题】:Fixed background image horizontally connected to content with fixed width固定背景图像水平连接到具有固定宽度的内容
【发布时间】:2013-08-16 00:19:47
【问题描述】:

问题是:我有一个巨大的背景图像和具有这些特征的内容:

  • 内容以margin: auto;为中心,宽度固定
  • 内容的位置与图像相关(就像它适合图像的中间一样)
  • 此连接仅是水平连接(垂直滚动可按预期移动所有内容)

实际上,这在位置固定在背景图像上的桌面设备上运行良好。

但问题是:当我调整窗口大小直到它小于内容时,内容固定在左侧,但背景图像仍然居中,正如预期的那样。在这种情况下,两个元素之间的连接会丢失。

我有这个 JavaScript 可以解决问题,但这当然是我想避免的一些开销,因为由于计算,它在任何时候都不流畅:

$(window).resize(function(){
    container.css('left', (body.width() - img.width()) / 2);
});

我也尝试过这样的事情:

<div id="test" style="
    position: absolute;
    z-index: 0;
    top: 0;
    left: 0;
    width: 100%:
    height: 100%;
    background: transparent url(path) no-repeat fixed center top;
"></div>

但这会导致与上述相同的问题。

这个问题有什么优雅的 CSS 解决方案吗?

演示

Try it yourself

注意

图像大小是固定的并且是已知的,它永远不会被浏览器缩放。

【问题讨论】:

  • 我认为一个例子小提琴看看效果可能会有所帮助
  • 回答你的问题,不是真的。您会注意到该作品的背景图像的分辨率比您低得多。那是因为在脚本中他们将图像缩放到屏幕的适当高度。
  • 我想你可以强制 html 将图像渲染为屏幕大小,但这会导致图像的比例问题,最好放大。
  • 是的,我明白你的意思,它看起来像图像不粘但它是。它粘在页面的顶部,这是正确的,只是图像的大小使它看起来不像(当您将窗口展开得非常大时,您也可以看到这一点)。在 CSS 中解决此问题的问题在于,无法在 CSS 中合理地将图像大小调整为屏幕大小,同时保持像素比一致,这就是该工作示例使用 JS 的原因。所以我完全不确定如何解决这个问题。
  • 您可以使用 css calc 以不同的单位添加不同的数字。看这里:developer.mozilla.org/en/CSS/-moz-calc

标签: javascript html css css-position


【解决方案1】:

这对你有用吗? http://jsfiddle.net/wPmrm/24/

HTML

<div class="background">
<div class="content">
    CONTENT
    <br><br>
    This example works fine until you the viewport size gets smaller than this content. After that the image isn't sticky anymore.
    <br><br>
    And check out vertical scrolling.

    <div style="height:1500px;"></div>
    END
</div>
</div>

CSS

div.background {
    min-width: 740px;
    background: url('http://placehold.it/1600x1050') top center fixed no-repeat;
}

div.content {
    width: 700px;
    height: 2000px;
    margin: auto;
    padding: 50px 20px;
    background: none;
    opacity: 0.7;
    color: #333;
}

.background 应该是具有居中背景的 .content 的包装器,并且具有 .contents 宽度+填充的最小宽度。

来自 cmets 的更新:

http://jsfiddle.net/wPmrm/28/

我们必须使用媒体查询,因此当宽度最大为 740 像素时,我们会更改背景位置。哦,我们再次将背景附件设置为固定。

添加了 CSS

@media screen and (max-width:740px) {
    div.background {
        background-position: -435px 0;
    }
}

我不明白为什么它是 -435px((1600-740)/2 会是 430),但它似乎是最准确的值。

【讨论】:

  • 嘿,这可以完美地使图像居中,即使窗口比内容小,它也很粘。但它没有“在”背景上的垂直滚动——这意味着,当用户向下滚动时,只有内容应该移动,而不是背景图像。啊,这很棘手。 :)
  • 是的,但我会看看我能做什么^^
  • 请注意,如果您的图像宽度发生变化,您必须更改负 bg 位置。
  • 是的,正如@Sammaye 之前所说,它可以与媒体查询一起使用,它确实可以。这是相当令人印象深刻的。非常感谢。现在我可以摆脱 JavaScript。哦等等,有 IE8,但我设法让它与这个 jQuery 脚本一起工作:protofunc.com/scripts/jquery/mediaqueries 非常好,再次感谢。
猜你喜欢
  • 2018-04-08
  • 2014-11-25
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多