css 创建一个文本和图像缩放到适合剩余空间的div?

hrysbysz  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(186)

我想让一个div包含文本和一个图像,它会自动缩放以适应文本在div中没有占用的剩余空间。我得出的结论是,缩放img元素的最常见方法是通过max-height/max-width样式。但该值是相对于父元素的,并且根据设计,我不会知道它的空间大小。
因此,在自动缩放的div上使用“background-image”样式似乎是一条可行的路,Flex-box也是一条可行的路。
超文本标记语言:

<div class="item">
    <div class="item-img" style="background-image:url('images/piano.jpg')"/>
    <div class="item-desc"> A Piano.  This text will break it if too long</div>
</div>

字符串
CSS:

.item {
display: flex;
flex-direction: column;
height: 100vh;
}
.item-img {
background-size: contain;
background-position: center;
background-repeat: no-repeat;
flex: 1;
}
.item-desc {
flex: 1;
}


这很好用,除非描述文本太长。然后,出于某种原因,图像分割器不会缩小为文本腾出空间。我看到了关于使用“object-fit”的解决方案,但我认为必须有一个flex-box解决方案。似乎答案应该是flex-shrink和flex的某种组合-我可能会想出来,但这个问题有足够的有趣的事情和主要的概念,我认为这是值得张贴,我没有看到他们在这个网站上的任何地方都在一个。

kzmpq1sx

kzmpq1sx1#

我想一个div包含文本和图像自动缩放,以适应剩余的空间,文本没有在div中占据。
要做到这一点,image div 需要是flex: 1,因此它会增长并占用可用空间,而 text div 应该具有默认值,即flex: 0 1 auto,这意味着 * 不要增长(0) 允许收缩(1) 按内容调整大小(自动)*。
堆栈片段

body { margin: 0; }

.item {
  display: flex;
  flex-direction: column;
  height: 100vh;
}

.item-img {
  background-size: contain;
  background-position: center;
  background-repeat: no-repeat;
  flex: 1;
}

.item-desc {
}

个字符

相关问题