我需要在 div 左侧放置一个图像,并放置该图像:
- 与 div 高度相同(其本身具有非固定的、与内容相关的高度);
- 完全可见;
- 保持其纵横比。
Flexbox 似乎非常适合这项工作,但当将图像设置为 100% 高度时,其尺寸保留自然宽度,内容会溢出到 div 下方。请参阅下面的片段:
.container {
display: inline-flex;
background-color: green;
}
.image {
flex: 0 0 auto;
background-color: purple;
}
.image img {
display: block;
height: 100%;
}
.right {
flex: 1 1 auto;
width: 100px;
height: 100px;
background-color: yellow;
}
<div class="container">
<div class="image">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABOUlEQVRYhc2XPW6DQBCFP6bJEeLOMhKdS3dukOhT5FAcIAdJYfkKruzSnQvjCvsGSTUpdpEilMAiA7NPetXCvMfPzr5JlGBkwBbYAGtgBbz6tQdwBc7ACTgAl6Cq2s9c4UOhUtBAVv6evK9+12KqUCrUA4TbrH2NdKiBQmH/hHCbe18zyMCbwnFE8YZHX7vTQDGR+G8TxX8G0pFfe9fnSP8yUM4g3rBsG8j1ub99KGuvifh28A4sghrHOFh4TVDIdFiTGYuVQia49rqc8ekbLIGt4Hq7FTaCO1issBbcqWaFVaLwBbwYGfiW/mumheDChBUegksyVrgKLkZZ4Sy4DGeFk+AC5M1A/AYcBJdedwYGdsCl2YafwH1G8bvXjCeQRBHJzENpFLE8isEkitFstuE00fC9O8l4/gNz0YYudsoRxwAAAABJRU5ErkJggg==">
</div>
<div class="right">right div</div>
</div>
The red circle is clipped but I'd like it to be entirely visible, like so:
我尝试将图像放置在自己的 div 中并尝试使用各种溢出值,但没有成功。当使用开发工具禁用然后启用时,Chrome最终会正确显示它height: 100%
在 img 元素上,但这在 Firefox 中不会发生。
这在某种程度上是不可能的,因为浏览器需要至少两次迭代才能正确计算最终宽度,这可能会形成一个循环。基本上,浏览器将首先忽略图像的百分比高度来设置容器的宽度/高度,然后将解析百分比高度,然后计算图像的宽度以保持比例,但不会返回调整再次更改容器的宽度,因为在某些情况下它可能会导致无限循环,这就是为什么您只会发生溢出。
这里有一个hack这只适用于 Chrome,您可以通过应用动画来强制再次计算宽度。
.container {
display: inline-flex;
background-color: green;
}
.image {
background-color: purple;
}
.image img {
display: block;
height: 100%;
animation:hack 1s infinite linear;
}
.right {
width: 100px;
height: 100px;
background-color: yellow;
}
@keyframes hack {
to {
height:99.9%;
}
}
<div class="container">
<div class="image">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABOUlEQVRYhc2XPW6DQBCFP6bJEeLOMhKdS3dukOhT5FAcIAdJYfkKruzSnQvjCvsGSTUpdpEilMAiA7NPetXCvMfPzr5JlGBkwBbYAGtgBbz6tQdwBc7ACTgAl6Cq2s9c4UOhUtBAVv6evK9+12KqUCrUA4TbrH2NdKiBQmH/hHCbe18zyMCbwnFE8YZHX7vTQDGR+G8TxX8G0pFfe9fnSP8yUM4g3rBsG8j1ub99KGuvifh28A4sghrHOFh4TVDIdFiTGYuVQia49rqc8ekbLIGt4Hq7FTaCO1issBbcqWaFVaLwBbwYGfiW/mumheDChBUegksyVrgKLkZZ4Sy4DGeFk+AC5M1A/AYcBJdedwYGdsCl2YafwH1G8bvXjCeQRBHJzENpFLE8isEkitFstuE00fC9O8l4/gNz0YYudsoRxwAAAABJRU5ErkJggg==" >
</div>
<div class="right">right div</div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)