【问题标题】:Weird scroll behavior with fixed size container of a changing img具有变化的 img 的固定大小容器的奇怪滚动行为
【发布时间】:2020-04-04 22:28:58
【问题描述】:

我有一个高度和宽度为 100% 的页面,一个固定大小的 img 容器和一个每秒变化的 img。 Img 在其容器内垂直和水平居中。

问题是当你向下滚动半只猫时,当img发生变化时,滚动开始上下跳跃。

有人可以解释这种行为吗? 我有一个 codepen 来说明这个问题。

html:

<div class="to-change-container">
  <img class="to-change"></img>
</div>
<div class="height-stratcher"></div>

css:

html, body {
  height: 100%;
  margin: 0;
}

body {
  overflow: auto;
}

.to-change-container {
  height: 300px;
  width:300px;
  display: flex;
  justify-content: center;
  align-items: center;
}

.height-stratcher {
  height: 1000px;
}

.to-change {
  max-height: 100%;
  max-width: 100%;
}

js:

picLinks = [
  'https://www.meme-arsenal.com/memes/43cdd26dcc65986fac314bcab0d4d2be.jpg',
  'https://pngriver.com/wp-content/uploads/2018/04/Download-Red-Cat-PNG.png',
  'https://www.meme-arsenal.com/memes/d5054013f48d02a72a054bae89a15992.jpg'
]

setInterval(()=> {
  let element = document.getElementsByClassName('to-change')[0];

  element.src = picLinks[Math.floor(Math.random()*10) % 3];
}, 1000);

UPD

设置overflow: hidden 似乎可以解决原始代码笔中显示的问题。在图片breaks it again之前添加更改文本。

此外,图像似乎不会影响图像容器的尺寸。

有没有办法在不裁剪和分层的情况下将图像放入容器中?

【问题讨论】:

  • 我无法使用您的 codepen 重现此问题。既不是在 chrome 中,也不是在 Edge 中。你能澄清一下到底发生了什么,或者发布一个 gif 图像吗?
  • 注意右边的滚动条gif。您需要先向下滚动一点才能看到滚动条跳跃。

标签: html css


【解决方案1】:

您需要使图像具有响应性,您可以使用以下样式实现它:

.to-change-container img {
    display: inline-block;
    max-width: 100%;
    height: auto;
}

【讨论】:

  • 请为您的回答提供上下文,以便与所提出的问题相关
【解决方案2】:

大猫脸图比其他的大,好像影响身高。

试试这个:

.to-change-container {
  overflow: hidden;
}

【讨论】:

    【解决方案3】:

    limco 是正确的

    .to-change-container {
      overflow: hidden;
    }
    

    会解决你的问题。

    问题在于 flex 框,并且来自 API 的图像大小都不同,并且正在扩展包含的 div。 Display flex 的行为不像显示块大小可以在子项更改时发生变化。

    如果您担心隐藏溢出的裁剪,您可以随时选择将 to-change-container 设置为 display:block 并将内部图像设置为 100% 宽度和自动高度,您可以使用几种不同的策略.

    【讨论】:

    • 感谢您的回答。它确实修复了滚动条在代码笔中跳跃的问题。但是我检查了没有overflow: hidden 的图像容器大小,它没有改变。所以我不认为图像大小会影响图像容器。我制作了另一个codepen,在图像顶部带有图像标签,图像容器已隐藏溢出,滚动条仍在各处跳跃。可以看看吗?
    • 如果你把'border:solid 1px red'放在容器上,'border:solid 1px blue'放在图像上你会明白我的意思,你可以看到容器的高度反弹当图像发生变化时在底部。
    • 那是因为滚动条在跳跃。一直滚动到顶部,以便整个容器都在视图中,尺寸不会改变。
    【解决方案4】:

    由于图像的高度不同,滚动条会跳动。 如果要保留滚动条,则需要为图像设置固定高度。试试这个:

    .to-change-container {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    .to-change {
      height: 300px;
      width: auto;
    }
    

    否则,将overflow: hidden; 设置为其他答案指出的那样。

    【讨论】:

    • 图像的高度不同,但我在 devtools 中看不到图像容器尺寸的变化。我又做了一个codepen,隐藏了容器的溢出。同样的问题。更改 align-items 以开始(或任何其他不是center)似乎可以解决它,但图片没有居中。
    • 你需要在body元素上设置它:body { overflow: hidden; }。但是,这会隐藏整个页面的滚动条。
    • 否则请尝试为您的容器提供一个固定高度,该高度高于您的图像的最大高度(这有意义吗哈哈?)
    • 它破坏了固定大小容器中不同大小图片的想法:)
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多