我一直在尝试使用object-fit
放置在article
元素内部的一些图像,但它似乎根本不会影响它们.
该object-fit
属性的期望值将是cover
,但截至目前,其他任何值似乎都不起作用.
当我改变它的价值时,它们不会缩小,不会增长,不会......没有.
如果您看到CodePen,则两行之间会有空格,并且图像不会占用所有相同的空间/高度(正如预期的那样object-fit: cover
).
这是一个CodePen
body{
margin: 0 auto; padding: 0;
}
main{
min-height: 70vh;
padding: 0;
}
main > section.posts{
box-sizing: border-box;
margin: 0; padding: 0;
display: flex;
flex-flow: row wrap;
}
main > section.posts > article{
outline: 1px solid red;
width: 22vw;
min-height: 100vh;
margin: 0; padding: 0;
flex-grow: 1;
overflow: hidden;
box-sizing: border-box;
}
main > section.posts > article > img{ /* Our suspect */
object-fit: cover;
}
为了object-fit
工作,图像本身需要一个width
和height
.在OP的CSS中,图像没有设置宽度和/或高度,因此对象适合不起作用.
线索:width
和height
不需要的图像本身的尺寸!可以把它想象成一个div
:如果你想要div
填充它的容器,你会设置
width:100%; height:100%;
...并且浏览器会知道这个div应该完全填满其容器的空间.
如果是img
,浏览器执行两个步骤:
浏览器创建一个边界框:默认情况下,框尺寸将是图像本身的精确尺寸.但我们可以自由地告诉浏览器将图像的大小调整为其容器宽度的100%和容器高度的100%.然后它将创建一个完全填充容器空间的盒子.
浏览器将图像像素拟合到此框中:默认情况下,图像将被挤压/拉伸,因此图像宽度与框宽度匹配,图像高度与框高度匹配.但是使用时object-fit
,您可以选择如何匹配图像和框尺寸.例如,使用object-fit:cover
命令放大/缩小图像以完全填充框,同时保持其纵横比.
关于OP,我只想设置:
main > section.posts > article > img { width: 100%; /* image box size as % of container, see step 1 */ height: 100%; /* image box size as % of container, see step 1 */ object-fit: cover; /* matching of image pixels to image box, see step 2 */ }
最后一点需要注意:当使用%值进行大小调整时,容器必须具有定义的宽度和高度才能使对象适合工作.OP需要定义height
在main > section.posts > article
.
对象飞度
object-fit CSS属性设置如何调整替换元素(如a
或
)的内容以调整其容器的大小.
替换元素
内容不受当前文档样式影响的元素.使用CSS可以影响替换元素的位置,但不会替换替换元素本身的内容.
这意味着对象拟合与article
标记无关,因为对象拟合仅关注img标记的维度.
您还可以通过单击object-fit的链接来查看下面的示例.
$(function() { $("img").resizable(); });
img {
width: 300px;
height: 300px;
border: 1px solid #FF0000;
background-color: #00FF00;
}
.fill {
object-fit: fill;
}
.contain {
object-fit: contain;
}
.cover {
object-fit: cover;
}
.none {
object-fit: none;
}
.scaledown {
object-fit: scale-down;
}
.variant1 {
max-width: 100px;
}
.variant2 {
max-height: 100px;
}
这是规范中说的内容:
5.5.调整对象:
object-fit
属性该
object-fit
属性指定如何将替换元素的内容拟合到由其使用的高度和宽度建立的框中.
我专注于... 适合由其使用的高度和宽度建立的盒子.
因此,我增加height
和width
属性的img
元素,似乎现在的工作.
修改了Codepen
要删除每个图像下的微小空白行,请添加vertical-align: bottom
到img
.有关解释,请参阅此处:图像标记下方的神秘空白区域
作为旁注,您可能需要考虑浏览器支持:
object-fit
(没有IE支持;有限的Safari支持)
main
(没有IE支持)
flexbox(考虑前缀)