我有一个大小和宽度可变的外部容器。假设在这个容器内,我有一个画布,我希望它尽可能地增长,同时保持比例而不是裁剪。为此,我通常会使用object-fit: contain
.
现在,假设我不仅有一个画布,还有一个画布,旁边放置了另一个元素。
HTML:
<div class="outerContainer">
<canvas width="640" height="360"></canvas>
<div class="beside">
</div>
</div>
CSS:
.outerContainer {
display: flex;
border: 0.5em solid #444;
margin-bottom: 2em;
object-fit: contain;
}
.outerContainer canvas {
flex-grow: 1;
background: #77a;
}
/* This element has a fixed width, and should be whatever height the <canvas> is */
.outerContainer .beside {
flex-basis: 3em;
flex-grow: 0;
flex-shrink: 0;
background: #7a7;
}
在这种情况下,我想缩放整个 externalContainer 的大小,就像我对画布所做的那样。问题是它object-fit
实际上并没有缩放元素……它缩放了它的内容。这似乎不适用于普通的块元素,导致如果有足够的宽度,内部的画布可能会倾斜。
如果我添加object-fit: contain
到canvas
元素中,它会保持比例但仍使用全宽,这意味着.beside
元素一直向右。这通过画布上的紫色背景进行可视化。
我想要的是outerContainer
使用画布内容进行缩放,以便.beside
始终具有画布内容的高度。应该在父元素中居中,在.outerContainer
不扭曲画布的情况下占用尽可能多的空间。像这样,在任何比例范围内:
这对现代 CSS 可行吗?或者我必须使用脚本解决方案吗?