【问题标题】:How to prevent background-image from zooming on mobile browser when adding elements vertically?垂直添加元素时如何防止背景图像在移动浏览器上缩放?
【发布时间】:2019-09-09 13:58:31
【问题描述】:

我有一个 ReactJS 应用程序,当我按下“发布”按钮时,我从上到下垂直添加元素。

当我添加元素时,它们可以很好地显示在移动和桌面浏览器上。

但是,在移动浏览器上,每次添加元素时,背景图像都会不断缩放。

我选择在我的public/index.html 中使用 Jquery,因为我需要它来随机更改我的背景图像,这要归功于我拥有的一个函数(我不能在 CSS 文件中为 background-image 调用 url() 内的 js 函数) .

我的桌面版本也有以下内容并且它可以工作,所以我知道我必须在这里修改我的 CSS:

$(document).ready(function() {
  const randomImage = chooseBackground();
  if ($(window).width() < 650) //mobile browser
  {
    $('html, body').css('background-image', `url(${randomImage})`);
    $('html, body').css('background-repeat', 'no-repeat');
    $('html, body').css('background-attachment', 'fixed');
    $('html, body').css('background-size', 'cover');
    $('html, body').css('background-position', 'center');
  }
});

我的目标是在移动设备上固定背景图像而不移动和缩放,并且能够向下滚动以查看我添加的所有元素。

【问题讨论】:

  • 嗨,我认为是“背景尺寸:封面”规则导致了这种行为发生。当您添加元素时,页面大小会发生变化,背景大小也会发生变化。您是否尝试过硬编码值?
  • 是的,我试过了,但它不起作用。

标签: javascript jquery html css reactjs


【解决方案1】:

我相信这与这条线有关$('html, body').css('background-size', 'cover');background-size 尝试不同的值。你可以阅读更多关于它的信息here

cover 值会调整背景图像的大小以覆盖整个容器,即使它必须拉伸图像 或从其中一个边缘剪掉一点.

【讨论】:

  • 这也可能与background-position 有关,尝试将其设置为center 以外的其他值。在此处阅读更多信息:w3schools.com/cssref/pr_background-position.asp。请记住使用background-sizeauto 而不是cover,这样它就不会拉伸。
  • 我相信center 上的background-position 将在添加新元素后容器展开时将图像置于中心。我现在无法测试它,但与background-size cover 一起它会产生缩放效果。尝试将background-position 放入center-topleft-top 并将background-size 放入autocontain。祝你好运!
【解决方案2】:

background-size: cover 将使用垂直或水平框限制来将图像完美地放入容器中。添加元素时,你的 body 会垂直增长,这意味着它必须将图像放入比以前“更高”的容器中,因此看起来像是在缩放。

如果您将max-height: 100vh 设置为正文和overflow: auto,它应该可以工作,请参阅this fiddle

尽管如此,您也应该考虑使用 React 来处理背景图像,因为混合框架通常不是一个好的选择。

更新

我现在在手机上试过了,看来这与 Safari 手机上的身体缩放有关。如果您将页面包装在 &lt;div class="wrapper"&gt; 或类似内容中并将样式应用于此容器,它将保持背景图像大小,因为可以限制包装器的大小。

请注意,由于 Safari 的弹簧滚动,这可能会导致滚动体验不佳,请在手机上查看 this codepen

IMO,最简单的解决方案是使用&lt;div class="background"&gt; 容器,即position: fixed 并且具有较低的z-index,例如this codepen

.background {
  position: fixed;
  top: 0px;
  left: 0px;
  right: 0px;
  bottom: 0px;
  z-index: -1;

  background-image: url(http://placehold.it/300x300);
  background-attachment: fixed;
  background-size: cover;
  background-position: center center;
}

这适用于我的手机(尝试在手机上打开result view)。

【讨论】:

  • 你在桌面上试过这个。可悲的是,它不适用于我的移动应用程序版本。对于框架混合我同意,但是没有办法从你的css文件中调用背景图像的url属性中的函数,这就是我说I chose to use Jquery in my public/index.html because I need it to change randomly my background image的原因
  • 你说得对,我在 Safari 桌面上进行了测试,认为它在 Safari 移动版上也能正常工作......这似乎与 body 上的样式有关。我更新了我的答案并使用了一个后台容器,它可以在我的手机上运行。
  • 它不工作,我不知道如何解决这个问题。无论如何,非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2016-05-23
  • 2012-08-29
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
相关资源
最近更新 更多