我正在尝试使用来使我的图像在某些flexbox容器内响应object-fit: contain
,并且在调整图像的大小时,布局似乎保持原始图像的大小,从而导致出现滚动条。
使用Chrome开发工具检查图像的宽度后,该宽度仍然为1024(但是高度已适当减小)。
我是否缺少一些其他CSS属性?
html,
body {
margin: 0;
height: 100%;
}
.page {
height: 100%;
display: flex;
}
.main-container {
flex: 1 1 0;
display: flex;
flex-direction: column;
}
.half-containers {
flex: 0 1 50%;
overflow: auto;
box-sizing: border-box;
border: 0.5px solid red;
display: flex;
}
.page-header {
flex: 0 0 auto;
background-color: #dcdcdc;
}
.page-footer {
flex: 0 0 auto;
background-color: #dcdcdc;
}
img {
object-fit: contain;
}
<div class="page">
<div class="main-container">
<div class="page-header">
This is a header
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="page-footer">
This is a footer
</div>
</div>
</div>
您拥有的是合乎逻辑的,您只需要了解其object-fit
工作原理即可。让我们从一个简单的例子开始:
.box {
width:300px;
height:300px;
border:1px solid;
}
img {
width:100%;
height:100%;
object-fit:contain;
}
<div class="box">
<img src="https://picsum.photos/300/200?image=1069">
</div>
如您所见,我使用了300x200
在300x300
框内拉伸的图像,因此破坏了它的比例,如果您检查图像的宽度/高度,您会发现它的尺寸仍然是静止的300x300
(应用前的尺寸变小object-fit
)。
从规格
object-fit属性指定如何 将 替换元素 的内容 适配到 由其使用的height和width建立 的框。
基本上,我们在 视觉上 更改图像的内容,以使其适合图像所建立的空间。object-fit
不会更改图像的大小,而是使用该大小作为参考来更改其内部内容。
让我们以相同的示例并50%
改为使用:
.box {
width:300px;
height:300px;
border:1px solid;
}
img {
width:50%;
height:50%;
object-fit:contain;
}
<div class="box">
<img src="https://picsum.photos/300/200?image=1069">
</div>
现在,图像的尺寸为150x150
,在其中,我们更改内容以具有 包含 效果。
所有值都将发生相同的逻辑
.box {
width:300px;
height:300px;
border:1px solid;
}
img {
width:50%;
height:50%;
}
<div class="box">
<img src="https://picsum.photos/300/200?image=1069" style="object-fit:contain;">
</div>
<div class="box">
<img src="https://picsum.photos/300/200?image=1069" style="object-fit:cover;">
</div>
在您的示例中,您有相同的事情。没有object-fit
图片如下
html,
body {
margin: 0;
height: 100%;
}
.page {
height: 100%;
display: flex;
}
.main-container {
flex: 1 1 0;
display: flex;
flex-direction: column;
}
.half-containers {
flex: 0 1 50%;
overflow: auto;
box-sizing: border-box;
border: 0.5px solid red;
display: flex;
}
.page-header {
flex: 0 0 auto;
background-color: #dcdcdc;
}
.page-footer {
flex: 0 0 auto;
background-color: #dcdcdc;
}
img {
/*object-fit: contain;*/
}
<div class="page">
<div class="main-container">
<div class="page-header">
This is a header
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="page-footer">
This is a footer
</div>
</div>
</div>
添加object-fit
不会更改其大小,只会更改我们看到的内容:
html,
body {
margin: 0;
height: 100%;
}
.page {
height: 100%;
display: flex;
}
.main-container {
flex: 1 1 0;
display: flex;
flex-direction: column;
}
.half-containers {
flex: 0 1 50%;
overflow: auto;
box-sizing: border-box;
border: 0.5px solid red;
display: flex;
}
.page-header {
flex: 0 0 auto;
background-color: #dcdcdc;
}
.page-footer {
flex: 0 0 auto;
background-color: #dcdcdc;
}
img {
object-fit: contain;
}
<div class="page">
<div class="main-container">
<div class="page-header">
This is a header
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="page-footer">
This is a footer
</div>
</div>
</div>
现在,另一个问题是您的图像的宽度为,1024px
而flex项目由于min- width
约束而不会超出其内容大小,因此为了获得所需效果,您需要添加的内容是min- width:0
。这样一来,您就不会再出现溢出问题,那么您的图像将包含在flexbox布局定义的区域内。
html,
body {
margin: 0;
height: 100%;
}
.page {
height: 100%;
display: flex;
}
.main-container {
flex: 1 1 0;
display: flex;
min-width: 0; /*added*/
flex-direction: column;
}
.half-containers {
flex: 0 1 50%;
overflow: auto;
box-sizing: border-box;
border: 0.5px solid red;
display: flex;
}
.page-header {
flex: 0 0 auto;
background-color: #dcdcdc;
}
.page-footer {
flex: 0 0 auto;
background-color: #dcdcdc;
}
img {
object-fit: contain;
min-width: 0; /*added*/
}
<div class="page">
<div class="main-container">
<div class="page-header">
This is a header
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="half-containers">
<img src='https://i.imgur.com/tqQvuFr.jpg' />
</div>
<div class="page-footer">
This is a footer
</div>
</div>
</div>
您也可以考虑相同的输出,background-image
并且由于没有更多内容,因此无需再background-size:contain
为min- width
约束而烦恼
html,
body {
margin: 0;
height: 100%;
}
.page {
height: 100%;
display: flex;
}
.main-container {
flex: 1 1 0;
display: flex;
flex-direction: column;
}
.half-containers {
flex: 0 1 50%;
overflow: auto;
box-sizing: border-box;
border: 0.5px solid red;
display: flex;
background:url(https://i.imgur.com/tqQvuFr.jpg) center/contain no-repeat;
}
.page-header {
flex: 0 0 auto;
background-color: #dcdcdc;
}
.page-footer {
flex: 0 0 auto;
background-color: #dcdcdc;
}
<div class="page">
<div class="main-container">
<div class="page-header">
This is a header
</div>
<div class="half-containers">
</div>
<div class="half-containers">
</div>
<div class="page-footer">
This is a footer
</div>
</div>
</div>
问题内容: 我正在使用Bootstrap创建轮播,我的图像很大,因此当屏幕小于图像时,不会保持该比例。 我该如何改变? 这是我的代码: 我需要图片适合100%的宽度,但要保持其500px的高度(我认为是500px),这意味着在较小的屏幕上我们看不到图片的最左侧和最右侧。 我尝试将图像包含在div中并添加 但这不起作用 谢谢! 问题答案: 问题在于引导CSS: 设置图像不会超过视口。您需要在CSS上
问题内容: 我处理了大量直观的示例测试案例。是否有任何方便的方法将它们包含在Java源代码中并在Javadocs中进行链接,因此我的IDE可以在编码时自动显示它们(通过在IDE中调用Javadoc渲染器功能)? 我尝试将图像放置在Java源代码旁边并使用,但是它没有使用(我使用了png)。 (注意-在这种情况下,它在我的测试源中) 问题答案: 由于您没有显示任何消息来源,所以我只能做个玻璃球猜测…
问题内容: 使用CSS flex box模型,如何强制图像保持其纵横比? JS小提琴:http://jsfiddle.net/xLc2Le0k/2/ 请注意,图像会拉伸或收缩以填充容器的宽度。很好,但是我们也可以拉伸或缩小 高度 以保持图像比例吗? 的HTML 的CSS 问题答案: 对于img标签,如果您定义一侧,那么将调整另一侧的大小以保持纵横比,并且默认情况下,图像会扩展到其原始大小。 使用此
我有一个试图加载到imageView中的图像的URI。 图像以全分辨率加载(高达2100万像素,导致内存不足异常)。我的应用程序不需要使用全分辨率图像,因此我希望以这种方式缩小图像,以便满足以下条件: > 如果图像高度大于宽度(即纵向),则将宽度缩放至1024像素,并将高度缩放至适当值以保持纵横比。 如果图像宽度大于高度(即横向),则将高度缩放到1024像素,并将宽度缩放到适当的值以保持纵横比。
我有一个jfilechooser,它帮助搜索和选择图像上传到项目数据库。还有一个缩略图类可以将上传的图像压缩成所需的大小。运行文件选择器的按钮action_performed的代码如下:
问题内容: 我希望图像填充其容器宽度的100%,并希望为其设置max-heigth属性,所有这些都保持长宽比,但允许丢失图像的任何部分。 我知道属性可以完成类似的操作,但是我想将其设置为内联标签。 关于如何使用CSS实现此目标的任何想法?或JavaScript? 问题答案: 您可以尝试CSS3 ,并查看浏览器支持 表 。 CSS3 / 指定对象(图像或视频)在其框内的放置方式的方法。对象适合选项包