【问题标题】:How to stop images stretching in Safari when using flex css使用flex css时如何在Safari中停止图像拉伸
【发布时间】:2021-06-03 11:06:45
【问题描述】:

一个 div 中的 2 个 img 元素。我希望图像彼此相邻而不是堆叠显示,因此应用了 flex。我还希望两个图像的宽度和高度相等。

除了 safari 之外,它在所有浏览器(chrome、opera、firefox、brave)上都能完美运行。我读过 safari 被窃听,所以会拉伸图像。

我添加了 align-items: flex-start;这修复了拉伸,但随后 2 张图像的高度在底部变得不均匀。

我现在刚刚设置了一个 webkit css,所以高度不均匀只在 safari 和其他浏览器上很好。

有没有办法解决这个问题?

CSS:

.portfolio-box {
    margin-top: 40px;
    display: flex;
    width: 100%;
}

.portfolio-box > * + * {
    margin-left: 4%;
}

.portfolio-box img {
    width: 48%;
    border-radius: 5px;
    margin-bottom: 150px;
}

HTML:

<div class="portfolio-box">
     <img src="./img/portfolio2.jpg" alt="">
     <img src="./img/portfolio3.jpg" alt="">
</div>

【问题讨论】:

  • 你能澄清一下你想要的结果吗?以相同宽度显示的图像有多高?还是宽度和高度相等?您期望较短图像下方的额外空白会发生什么?您能否提供一些有关您使用的 Safari 版本的详细信息? (我将上面的代码放入 CodePen 中,我在 Chrome、FF 和 Safari 上看到的都是一样的。)
  • 嘿,刚刚编辑了操作以澄清。我想以相同的宽度和高度显示两个图像,上面的 css 对所有浏览器都非常有效,但 safari 会拉伸它。如果我添加 align-items: flex-start;然后它修复了 safari 上的拉伸,但是在所有浏览器的底部高度变得不均匀。希望这更清楚。

标签: html css


【解决方案1】:

我认为 JavaScript 可能会对您有所帮助。如果您唯一缺少的是 Safari 浏览器上元素的高度不均匀,那么您可以使用简单的 JavaScript 函数设置元素的高度相等。这适用于所有浏览器,您无需为 CSS 添加前缀。

function setEqualHeight() {
    'use strict';
    
    var firstElement = document.getElementById("first-element");
    var firstElementHeight = document.getElementById("first-element").clientHeight;

    var secondElement = document.getElementById("second-element");
    var secondElementHeight = document.getElementById("second-element").clientHeight;

    if(firstElementHeight > secondElementHeight) {
        secondElement.style.height = firstElementHeight + "px";
    } 
    else {
        firstElement.style.height = secondElementHeight + "px";
    }
}

【讨论】:

  • 谢谢,我可以测试一下。
【解决方案2】:

图像(我假设是垂直的)拉伸是默认的 flexbox 行为,而不是 Safari 错误。我抓住了your code snippets and put them into Codepen - 它们在 Safari (Mac) 和 Firefox/Chrome (Win10) 上看起来都一样。

我在第 1 位下方添加了您的代码的其他一些变体,但最后一位我还限制了图像的高度。您可以看到它们再次变形。

您可以像这样在图像上使用“object-fit”(或参见上面链接的 Codepen 中的底部示例):

img {
    height: 100%;
    width: 100%;
    object-fit: cover;
}

但是,您可以看到第一张图片(较高的那张)被裁剪了。

归根结底,如果您希望图像的高度和宽度在 flexbox 布局中匹配而不会变形或裁剪,那么它们首先需要具有匹配的尺寸。

【讨论】:

  • 只提到了 safari 错误,因为原始 css 似乎在所有浏览器上都能完美运行,除了 safari - 它们都显示相同的宽度和高度而没有失真。我确实尝试了对象匹配规则,但收成不是很好。我认为您是对的,最好的解决方案可能只是将 Photoshop 中的 img 大小调整为相同的尺寸。只是好奇地想看看 safari 的 css 解决方法。谢谢!
  • 是的,希望有一个更简单的答案。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 2013-10-07
  • 1970-01-01
  • 2018-06-28
  • 2019-12-22
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
相关资源
最近更新 更多