英文:
Image aspect ratio is preserved in Firefox, Chrome, and mobile Safari—but not in desktop Safari
问题
我的图像具有不同的宽高比,如4:3、3:4、3:3、2:3和16:9。因此,我在CSS中没有设置固定的宽高比。相反,我设置了max-height: 94vh
。这样,图像将适应屏幕。
当图像被点击时,我应用这个CSS,即当它具有active
类时:
li.container {
display: inherit;
background-color: var(--fallback);
}
li.container:hover {
cursor: pointer;
}
li.container.active {
z-index: 1;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0, 0.9);
}
li.container.active img {
max-height: 94vh;
background: none;
}
我在Gatsby中使用gatsby-plugin-image
。这是一个示例图像li
:
<li class="Photo-module--container--7f2bd active" tabindex="0" role="button">
<div
data-gatsby-image-wrapper=""
class="gatsby-image-wrapper gatsby-image-wrapper-constrained"
>
<div style="max-width: 3717px; display: block">
<img
alt=""
role="presentation"
aria-hidden="true"
style="max-width: 100%; display: block; position: static"
/>
</div>
<div
aria-hidden="true"
data-placeholder-image=""
style="opacity: 0; transition: opacity 500ms linear 0s; object-fit: cover"
></div>
<picture>
<source type="image/webp" sizes="(min-width: 3717px) 3717px, 100vw" />
<img
data-main-image=""
style="object-fit: cover; opacity: 1"
sizes="(min-width: 3717px) 3717px, 100vw"
decoding="async"
loading="lazy"
src="/static/7056e98c21e47b0856022508014b51ca/d3da5/DSCF3885.jpg"
alt="Vannassen, Vassåsveien, Stavanger, 2023-02-11"
width="3717"
height="4956"
/>
</picture>
<noscript>
<picture>
<source type="image/webp" sizes="(min-width: 3717px) 3717px, 100vw" />
<img
width="3717"
height="4956"
data-main-image=""
style="object-fit: cover; opacity: 0"
sizes="(min-width: 3717px) 3717px, 100vw"
decoding="async"
loading="lazy"
src="/static/7056e98c21e47b0856022508014b51ca/d3da5/DSCF3885.jpg"
alt="Vannassen, Vassåsveien, Stavanger, 2023-02-11"
/>
</picture>
</noscript>
</div>
<!-- 绝对位置的按钮 -->
</li>
这在除了桌面Safari之外的所有浏览器中都可以正常工作。
例如,在Firefox中:
但在桌面Safari中,会出现以下问题:
似乎桌面Safari尊重了max-height: 94vh
,但没有尊重宽高比。它只是放大了图像。为什么?
英文:
My images are set with different aspect ratios, such as 4:3, 3:4, 3:3, 2:3, and 16:9. I therefore don't set a fixed aspect ratio in the CSS. Instead, I set a max-height: 94vh
. That way, the images will fit the screen neatly.
I apply this CSS when the image is clicked—when it has the active
class:
li.container {
display: inherit;
background-color: var(--fallback);
}
li.container:hover {
cursor: pointer;
}
li.container.active {
z-index: 1;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0, 0.9);
}
li.container.active img {
max-height: 94vh;
background: none;
}
I use Gatsby with the gatsby-plugin-image
. Here's an example image li
:
<li class="Photo-module--container--7f2bd active" tabindex="0" role="button">
<div
data-gatsby-image-wrapper=""
class="gatsby-image-wrapper gatsby-image-wrapper-constrained"
>
<div style="max-width: 3717px; display: block">
<img
alt=""
role="presentation"
aria-hidden="true"
style="max-width: 100%; display: block; position: static"
/>
</div>
<div
aria-hidden="true"
data-placeholder-image=""
style="opacity: 0; transition: opacity 500ms linear 0s; object-fit: cover"
></div>
<picture>
<source type="image/webp" sizes="(min-width: 3717px) 3717px, 100vw" />
<img
data-main-image=""
style="object-fit: cover; opacity: 1"
sizes="(min-width: 3717px) 3717px, 100vw"
decoding="async"
loading="lazy"
src="/static/7056e98c21e47b0856022508014b51ca/d3da5/DSCF3885.jpg"
alt="Vannassen, Vassåsveien, Stavanger, 2023-02-11"
width="3717"
height="4956"
/>
</picture>
<noscript>
<picture>
<source type="image/webp" sizes="(min-width: 3717px) 3717px, 100vw" />
<img
width="3717"
height="4956"
data-main-image=""
style="object-fit: cover; opacity: 0"
sizes="(min-width: 3717px) 3717px, 100vw"
decoding="async"
loading="lazy"
src="/static/7056e98c21e47b0856022508014b51ca/d3da5/DSCF3885.jpg"
alt="Vannassen, Vassåsveien, Stavanger, 2023-02-11"
/>
</picture>
</noscript>
</div>
<!-- button with absolute position -->
</li>
This works fine in all browsers except for desktop Safari.
In Firefox, for instance:
But in desktop Safari, this happens:
It seems desktop Safari respects the max-height: 94vh
, but it doesn't respect the aspect ratio. It just zooms in all the way.
Why?
答案1
得分: 1
li.container.active img {
object-fit: contain !important;
}
英文:
for fix aspect ratio in safari desktop we can use object-fit css property :
li.container.active img {
object-fit: contain !important;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论