混合内容 (Image/Text) 在 Div 中调整大小

Mixed Content (Image/Text) Resizing in a Div

我正在尝试建立一个系统,用户可以在其中更改显示的 image/text 组合的大小(想想 "Exhibit #.#" 之类的东西),图像将按比例缩小到任意大小需要在不将周围内容推到包含 .但是,我尝试过的所有方法都存在这样或那样的问题,鉴于我正在处理的图像可能有各种尺寸,我需要一种能够处理所有情况的解决方案。

这似乎是一个简单的问题,但无论出于何种原因,我都被难住了。

这是一个带有动画大小的 JSBin,可以更好地说明我的问题:https://jsbin.com/sezimudedi/1/edit?css,output

我工作的html/css:

body div {
    text-align: center;
}

@keyframes movingbox {
    0%   { height: 100px; width: 100px; }
    25%  { height: 500px; width: 100px; }
    50%  { height: 500px; width: 500px; }
    75%  { height: 100px; width: 500px; }
    100% { height: 100px; width: 100px; }
}

div.divblock {
    display: inline-block;
    border: 2px dotted red;
    margin: auto;
    padding: 10px;
    text-align: center;
    animation: movingbox 8s linear infinite;
}

div.divblock div {
    width: 100%;
    height: auto;
}

div img {
    max-width: 100%;
    max-height: 100%;
}

div.divblock h6 {
    display: block;
}
<!DOCTYPE html>
<html>
 <head>
  <title></title>
 </head>
 <body>
  <div>
   <div class="divblock">
    <h4>Header Text</h4>
    <p>The quick brown fox jumped over the lazy dog.</p>
    <div>
     <img src="http://cdn.sstatic.net/Whosebug/img/apple-touch-icon@2.png?v=ea71a5211a91&a">
    </div>
    <h6>This is a test.</h6>
   </div>
  </div>
 </body>
</html>

看这个jsbin(只需拖动红色框角即可调整大小)。当你将图像父块的高度设置为自动时,像这样:

div.divblock div {
    width: 100%;
    height: auto;
}

你让这个块的高度取决于它的内容高度(img 元素),从另一方面来说,你希望图像的宽度和高度等于它的父块大小,使用这个代码:

div img {
    max-width: 100%;
    max-height: 100%;
}

在您的 jsbin 示例中满足所有这些条件,但是如果您为图像容器添加轮廓,您会看到它的高度保持不变(等于图像高度)。所以这里的问题不在图像中(它可以很好地调整大小),而是在图像块高度中。

图片块高变化的问题,当你用动画改变父容器的高度后,很难计算出父容器高度的哪一部分必须作为图像块的高度。您的父容器中还有一些高度不变的内容,因此每次更改其高度时,图像容器的高度都必须计算为 (100% - height_of_constant_content)。

我的解决方案是使用css calc() 函数,但要考虑到it's support in browsers。您也可以使用一些 js 重新计算图像容器的高度。