gpt4 book ai didi

css - 对象适合、对象定位和绝对定位

转载 作者:行者123 更新时间:2023-11-28 19:29:15 25 4
gpt4 key购买 nike

在尝试使图像适合矩形时,我遇到了一个奇怪的问题,想知道是否有人知道为什么这三种使用对象适合的方式表现不同:

.container {
width: 250px;
padding-top: 20%;
border: 1px solid red;
position: relative;
display:inline-block
}

.container>img {
position: absolute;
top: 0;
left: 0;
object-fit: contain;
object-position: center center;
}

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

.image-1 {
right: 0;
bottom: 0;
}

.image-2 {
right: 0;
bottom: 0;
max-height: 100%;
max-width: 100%;
}
<div class="container">
<img src="https://www.fillmurray.com/200/300" class="image">
</div>
<div class="container">
<img src="https://www.fillmurray.com/200/300" class="image-1">
</div>
<div class="container">
<img src="https://www.fillmurray.com/200/300" class="image-2">
</div>

正如您从第一张图片中看到的那样 - 在宽度和高度下一切正常。在第二张图片中,我尝试设置图片,使其用绝对定位而不是宽度和高度填充空间,但这完全被忽略了,图片只是溢出或保持其原始大小。

为了解决这个问题,我在第三张图片上使用了最大宽度和最大高度,但这完全忽略了对象位置并且不会增长到大于自身的宽度或高度。

为什么 object fit 只适用于声明的宽度和高度,而如果图像只是占用坐标空间,为什么 object-position 不适用于 max-width 和 height?

最佳答案

图像是一个替换元素,所以使用top/left/right/ bottom 不会像处理 non-replaced 元素(例如简单的 div)那样工作。以下是规范中的相关部分:

https://www.w3.org/TR/CSS2/visudet.html#abs-replaced-width

https://www.w3.org/TR/CSS2/visudet.html#abs-replaced-height

为了更容易地计算图像的height/width 不是由top/bottom 定义的code> 和 right/left 值,但它使用图像的默认值,因此没有比率失真,object-fit 将不执行任何操作.

bottom/right 使用不同的值,您将看到它们被忽略了:

.container {
width: 250px;
padding-top: 20%;
border: 1px solid red;
position: relative;
display:inline-block
}

.container>img {
position: absolute;
top: 0;
left: 0;
object-fit: contain;
object-position: center center;
}


.image-1 {
right: 0;
bottom: 0;
}
<div class="container">
<img src="https://www.fillmurray.com/100/200" class="image-1" >
</div>

<div class="container">
<img src="https://www.fillmurray.com/100/200" class="image-1" style="right:100px;bottom:10000px">
</div>

<div class="container">
<img src="https://www.fillmurray.com/100/200" class="image-1" style="right:-10px;bottom:-10000px">
</div>

<div class="container">
<img src="https://www.fillmurray.com/100/200" class="image-1" style="right:-100px;bottom:50%">
</div>

基本上 top/left 只是简单地调整位置,并使用图像的固有大小。如果您明确指定宽度/高度或添加 max-width/max-height 约束,那么您将能够更改计算的 height/width 就像你已经做过的那样。

输入元素发生相同情况的相关问题:Width of absolute positioned input doesn't follow CSS rules


在您的情况下,object-fit 仅适用于第一种情况,因为您设置了 height:100%width:100% 。第二种情况(如上所述)和第三种情况都不会发生任何事情,因为您只是定义了 max-height/max-width 因此图像将简单地遵循此约束并将尝试保持其初始比率。

换句话说,object-fit 只有在您更改宽度和高度并且此更改打破了初始比率时才会起作用。仅更改其中之一或不更改它们会使 object-fit 的使用变得无用。


相关问题:

CSS object-fit: contain; is keeping original image width in layout

How does object-fit work with canvas element?

关于css - 对象适合、对象定位和绝对定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com