如何自动调整图像大小以适合“flex-box”容器?

Posted

技术标签:

【中文标题】如何自动调整图像大小以适合“flex-box”容器?【英文标题】:How do I auto-resize an image to fit a 'flex-box' container? 【发布时间】:2020-01-31 10:27:15 【问题描述】:

如何自动调整大图像的大小,使其适合较小宽度的 flex 容器,同时保持其宽高比?

此外,解决方案不得与vw / vh 相关,以便在页面上除此组件之外还有更多内容。

它应该是这样的:


这是我的代码:

body 
  margin: 0;

.wrapper 
  display: flex;
  flex-direction: column;
  height: 100vh;

.header 
  flex: 0 0 100px;
  background-color: cornflowerblue;

.content 
  text-align: center;

.image 
  width: 100%;
  height: 100%;

.footer 
  flex: 0 0 100px;
  background-color: cornflowerblue;
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Images Are Weird</title>
  </head>
  <body>
    <div class="wrapper">
      <div class="header"></div>
      <div class="content">
       <img class="image" src="https://villagesquare.me/wp-content/uploads/2018/07/Facebook-Square.png"  />
      </div>
      <div class="footer"></div>
    </div>
  </body>
</html>

我在这里找到的解决方案没有帮助

How do I auto-resize an image to fit a 'div' container?(非弹性上下文) Resize images to fit display:flex divs(图片固定大小,我需要动态大小)

【问题讨论】:

【参考方案1】:

只需将 图像类 width 更改为小于 100%,例如 50% 60% 或 70;

body 
  margin: 0;

.wrapper 
  display: flex;
  flex-direction: column;
  height: 100vh;

.header 
  flex: 0 0 100px;
  background-color: cornflowerblue;

.content 
  text-align: center;

.image 
  width: 50%;
  height: 100%;

.footer 
  flex: 0 0 100px;
  background-color: cornflowerblue;
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Images Are Weird</title>
  </head>
  <body>
    <div class="wrapper">
      <div class="header"></div>
      <div class="content">
       <img class="image" src="https://villagesquare.me/wp-content/uploads/2018/07/Facebook-Square.png"  />
      </div>
      <div class="footer"></div>
    </div>
  </body>
</html>

【讨论】:

【参考方案2】:

您也可以通过计算.content 的宽度并根据需要减去多少来做到这一点。如下所示...

.content 
    width:calc(100% - 100px);
    margin:0 auto;

body 
  margin: 0;

.wrapper 
  display: flex;
  flex-direction: column;
  height: 100vh;

.header 
  flex: 0 0 100px;
  background-color: cornflowerblue;

.content 
  width:calc(100% - 100px);
  margin:0 auto;

.image 
  width: 100%;
  height: 100%;

.footer 
  flex: 0 0 100px;
  background-color: cornflowerblue;
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Images Are Weird</title>
  </head>
  <body>
    <div class="wrapper">
      <div class="header"></div>
      <div class="content">
       <img class="image" src="https://villagesquare.me/wp-content/uploads/2018/07/Facebook-Square.png"  />
      </div>
      <div class="footer"></div>
    </div>
  </body>
</html>

【讨论】:

sbrrk,问题不在于我需要在图像周围进行水平填充。问题是它的大小没有根据 flex 容器正确改变。图片不应该占用比它的 flex 父级更多的宽度和高度,同时保持它的原始宽度:高度比。

以上是关于如何自动调整图像大小以适合“flex-box”容器?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS 调整图像大小以适合容器

如何使 HTML5 画布适合动态父/弹性框容器

自动调整 UIImageView 的大小以适合底层图像

如何调整 uiimageview 的大小以仅适合 aspectfill 中的图像?

水平图像滚动,图像大小调整以适合高度显示空白空间

图像没有相对于父 div 正确调整自身大小