位置绝对父级在FireFox中没有子图像的宽度

时间:2019-06-12 10:48:55

标签: html css image firefox css-position

问题

我希望<img>的高度是其父代高度的100%,同时按比例缩放<img>的宽度。当<img>具有绝对位置并按预期工作时,这很容易做到。

*, *:before, *:after { box-sizing: border-box;}
body { margin: 0; }

.hero {
  border: 2px solid red;
  position: relative;
  min-height: 360px;
}

.content {
  /* Simulate content height */
  /* height: 500px; */
}

.background {
  border: 2px solid #2EA800;
}

img {
  border: 2px solid #0083FF;
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Example 1</title>
</head>
<body>
  <div class="hero">
    <div class="content">
      Hey there
    </div>
    <div class="background">
      <img src="https://via.placeholder.com/200x150" alt="">
    </div>
  </div>
</body>
</html>

Example 1

但是,当它位于位置绝对的父级(图像容器)<div>中时,父级的宽度计算不正确。

*, *:before, *:after { box-sizing: border-box;}
body { margin: 0; }

.hero {
  border: 2px solid red;
  position: relative;
  min-height: 360px;
}

.content {
  /* Simulate content height */
  /* height: 500px; */
}

.background {
  border: 2px solid #2EA800;
}

.background {
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
}

img {
  border: 1px solid red;
  height: 100%;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Example 2</title>
</head>
<body>
  <div class="hero">
    <div class="content">
      Hey there
    </div>
    <div class="background">
      <img src="https://via.placeholder.com/200x150" alt="">
    </div>
  </div>
</body>
</html>

Example 2

应该如何工作

这仅在FireFox中发生。在Chrome中,可以按预期正确计算图像容器的宽度。

Example 3

JS Fiddle中的代码示例(以便在其他浏览器中轻松打开)

2 个答案:

答案 0 :(得分:0)

希望这会有所帮助。

.background img{
  float:right;
}

答案 1 :(得分:0)

我刚刚遇到了Firefox的问题,这是一场噩梦。

尽管如此,我还是设法解决了它。

在我的情况下,我使用的图像叠加层必须为100%的高度,然后使用div渐变来填充屏幕上的其余空间。由于外部绝对div保持图像的大小并自行调整,因此在chrome中效果很好。 Firefox的表现就像图像是全高一样,因此,我需要坐在图像旁边以进行明显覆盖的渐变无法使用。

Praveen提出的浮动建议使我走上了正轨,所以谢谢Praveen!

我已经通过在父容器上使用flex解决了这个问题,然后我将自己的项目证明为flex end,因此它们都正确地堆叠在正确的位置。写下来听起来很简单,但这是一个令人沮丧的错误!!!