图像宽度=100% 在嵌套的 flexbox 中在 Firefox 中不起作用

image width=100% not working in firefox within nested flexbox

提问人:Alex 提问时间:5/12/2023 更新时间:5/12/2023 访问量:227

问:

我在 firefox - 112.0.2 和 chromium - 112.0.5615.165 之间的
布局

css 方面遇到了问题

我在这里创建了一个小型的独立示例 https://codepen.io/alex116/pen/JjmZPJX

.dashboard {
  display:flex;
  justify-content: center;
  align-items: center;
}
.graphic {
  display:flex;
  justify-content: center;
  align-items: center;
}
.image {
  width: 100%;
}
<div class="dashboard">
  <div class="container">
    <div class="graphic">
      <img class="image" src="https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg">
    </div>
  </div>
</div>

在 chromium 中,我看到了 svg 图像,而在 firefox 中,图像的宽度为 0px。

为什么在firefox中会发生这种情况?这是任一浏览器中的错误吗?我写的是无效的css吗?

我不想更改 html 结构,但我很乐意修改 css

这是我正在从事的一个更大项目的一部分,我已经将问题简化为这个片段。此布局中有更多的垂直列,但我删除了它们以触及问题的核心。

html css 火狐 chromium

评论

0赞 Temani Afif 5/12/2023
解释起来有点棘手,但两者都可能是正确的。最好定义一个固定的宽度,并考虑最大宽度:100%

答:

1赞 rishi 5/12/2023 #1

这是我试图解释的

它没有显示在 firefox 中的原因是您的仪表板没有固定高度,因此默认为 0。 因此,当您的子元素(如图像)尝试占用百分比宽度时,这确实有效,但由于高度不存在,因此它不会显示出来。

因此,您可以在仪表板上设置固定高度,但您还必须记住,当您设置百分比宽度/高度时,它需要父级的百分比。

使用背景颜色很容易可视化,因此请尝试使用这些颜色并查看会发生什么(或通过开发工具)。

.dashboard {
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: skyblue;
  height: 10rem;
}

.container {
  height: 100%;
}

.graphic {
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: hotpink;
  height: 100%;
}

.image {
  height: 100%;
}
<div class="dashboard">
  <div class="container">
    <div class="graphic">
      <img class="image" src="https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg">
    </div>
  </div>
</div>

评论

1赞 Alex 5/13/2023
嗨,@rishi,这似乎可以使它在 firefox 中可见,但它的缺点是从侧面压扁时不会缩放。从技术上讲,它使它出现是正确的,但它的行为方式不同。我真的希望它在窗口较小时进行缩放。这就是 flexbox 通常做得很好的原因,但由于某种原因,将高度设置为 100% 就可以使它即使在挤压时也始终保持该尺寸。Chrome 在我提出的第一个示例中做了我想要的。
0赞 rishi 5/13/2023
@Alex 如果你想让它缩放到更小的尺寸上,我相信设置会成功。因为它会根据其父级进行缩放,即使在宽度轴上也是如此。width: 100%;.image
0赞 Sandy M 5/12/2023 #2

每当您需要处理图像时,请使它们具有响应性。完成后,使用父 div 控制高度和宽度。这将确保图像在所有设备上以相同的分辨率显示。此外,在多个设备上,您只需要更改父 div 的高度和宽度即可使图像看起来更好,而不必担心图像被像素化。这适用于所有浏览器。

响应式图像

CSS格式:

// change the size of parent div to modify image
.graphic {
  width: 5rem;
  height: 5rem;
}


.image {
  width: 100%;
  height: auto;
}