Safari 调整对象大小的问题

Safari resizing issue with object-fit

提问人:GeForce RTX 4090 提问时间:11/17/2023 最后编辑:GeForce RTX 4090 更新时间:11/19/2023 访问量:98

问:

当调整具有适合对象定位的背景图像的图像内部元素的大小时,它会严重故障。这是一个 FIDDLE,它有一个适合对象的、绝对定位的背景图像,它里面有一个带边框的块。折叠带边框的块时,只有块下方和内部的图像部分是正确的。有人经历过这种情况并知道解决方案吗?

function changeSize() {
  const currentHeight = document.getElementById('stretcherdiv').getAttribute("style");
  if (currentHeight === "height:400px;") {
    document.getElementById('stretcherdiv').setAttribute("style", "height:100px;");
  } else {
    document.getElementById('stretcherdiv').setAttribute("style", "height:400px;");
  }
}
.outer {
  position: relative;
  overflow: hidden;
  width: 100%;
  display: flex;
}

.stretcher {
  height: 20px;
  width: 80px;
  background: rgba(0,0,0,0);
  border: 1px solid cyan;
  z-index: 100;
  margin: 120px auto;
}

.image {
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0;
  object-fit: cover;
  object-position: center center;
}
<button onclick="changeSize()">
  expand/collapse
</button>

<div class="outer">
  <div class="stretcher" id="stretcherdiv" style="height:400px;"></div>
  <img class="image" src="https://www.w3schools.com/html/img_girl.jpg"> </img>
</div>

问题 - 折叠有边框块后的 Safari,错误,糟糕:

enter image description here

任何其他浏览器在崩溃块后,期望的行为,正确,良好:

enter image description here

HTML Safari( HTMLcss野生动物

评论

0赞 GeForce RTX 4090 11/17/2023
@gre_gor 已结束的问题符合所有合法的标准,没有理由将其关闭。我还能做什么。
0赞 GeForce RTX 4090 11/17/2023
@gre_gor 从字面上看,有一个 jsfiddle 在一个最小的示例中重现了这个问题
2赞 TylerH 11/17/2023
JSFiddle 是一种异地资源,对于最小的可重现示例来说是不够的。正如链接页面上的第一句话以粗体显示的那样,重现问题的代码需要在您的问题中
2赞 TylerH 11/18/2023
@GeForceRTX4090 您可以包含指向 JSFiddle 或其他站点的链接,只要代码中包含重现您的问题的完整代码即可。链接页面的第一句话就说明了这一点:“在提出调试问题时,如果您在问题中以文本形式提供代码,以便潜在回答者可以轻松理解并用于重现问题,人们将能够更好地提供帮助。
2赞 TylerH 11/18/2023
Смотритетакже: 我的网站或项目中的某些内容不起作用。我可以只粘贴一个链接吗?
1赞 Cristik 11/18/2023
看起来像一个Safari错误,我在测试代码时遇到了其他故障,例如图像的顶部被复制到底部而不是图像扩展。您可能需要改变方法。

答:

0赞 GeForce RTX 4090 11/24/2023 #1

我设法通过将绝对位置应用于图像包装器而不是图像本身来解决这个问题。

似乎是Safari的故障,可以通过这种方式解决。

function changeSize() {
  const currentHeight = document.getElementById('stretcherdiv').getAttribute("style");
  if (currentHeight === "height:400px;") {
    document.getElementById('stretcherdiv').setAttribute("style", "height:100px;");
  } else {
    document.getElementById('stretcherdiv').setAttribute("style", "height:400px;");
  }
}
.outer {
  position: relative;
  overflow: hidden;
  width: 100%;
  display: flex;
}

.stretcher {
  height: 20px;
  width: 80px;
  background: rgba(0,0,0,0);
  border: 1px solid cyan;
  margin: 120px auto;
  z-index:100;
}

.imgwrap {
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0;
}

.image {
  height: 100%;
  width: 100%;
  object-fit: cover;
  object-position: center center;
}
<button onclick="changeSize()">
  expand/collapse
</button>

<div class="outer">
  <div class="stretcher" id="stretcherdiv" style="height:400px;"></div>
  <div class="imgwrap">
    <img class="image" src="https://www.w3schools.com/html/img_girl.jpg"> </img>
  </div>

</div>