【问题标题】:Scale images inside divs with text使用文本缩放 div 内的图像
【发布时间】:2019-06-02 05:20:39
【问题描述】:

对于使用 Angular、Angular Material 和 Flex-Layout 的个人项目,我正在尝试实现 Bring! App 使用的类似布局:

拥有不同大小的图像(并非全部为正方形),我希望将它们按比例居中并允许在它们下方放置一些文字。 我有以下模板和 scss 样式:

<div fxLayout="row" fxLayoutGap="5px" class="cards-container">
 <div class="item-card">
   <div class="image">
     <img src="../../../../assets/icons/apple.png" alt="Mela" />
   </div>
   <span class="item-name">Mela</span>
   <span class="description">12</span>
 </div>
 <div class="item-card">
  <div class="image">
     <img src="../../../../assets/icons/milk.png" alt="Latte" />
  </div>
  <span class="item-name">Latte</span>
  <span class="description">1 description comes here, must be hidden if long text</span>
 </div>
</div>

//---------------------------------------------------

.cards-container {
  flex-wrap: wrap;

  .item-card {
    display: flex;
    flex-direction: column;
    justify-items: end;
    color: white;
    width: 7em;
    height: 7em;
    text-align: center;
    background-color: darkslategray;
    margin: 5px 0;
    img {
        width: 40%; // TODO: how to scale?
        height: 40%;
    }

    .text-container {
        display: flex;
        flex-direction: column;

        .item-name {
            display: inline-block;
            font-size: 1.1em;
        }

        .description {
            width: 99%;
            font-size: 0.8em;
            text-align: center;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
            display: inline-block;
        }
    }
  }
}

但是图像不会按比例缩小以保持与其他图像的比例,尤其是窄而长的图像。

【问题讨论】:

  • 请提供minimal reproducible example,当我们可以实际尝试代码时,css问题会更快解决。
  • 这是一个旁注,但您想将您的 img 路径更改为:src="assets/icons/apple.png" 否则它们将不会在产品构建中找到
  • 完全正确的mchl18,我还在本地测试,但我会尽快修复它。

标签: css angular sass flexbox angular-material


【解决方案1】:

看起来一切正常,但您的 HTML 代码似乎缺少 .text-container div 和类。

<div class="item-card">
   <div class="image">
     <img src="../../../../assets/icons/apple.png" alt="Mela" />
   </div>
   <span class="item-name">Mela</span>
   <span class="description">12</span>
 </div>

应该是

<div class="item-card">
   <div class="image">
     <img src="../../../../assets/icons/apple.png" alt="Mela" />
   </div>
   <div class="text-container">
     <span class="item-name">Mela</span>
     <span class="description">12</span>
   </div>
 </div>

现在对于text-overflow: ellipsis;,这在多行上不起作用,除非你实现了一些 JavaScript 或其他东西。

如果您的代码有任何更改,我会将图像设为background-image。没有这个可能还有其他方法,但我用它来确保容器响应,图像始终响应并居中。

例如:https://codepen.io/StudioKonKon/pen/wRjOzr(包括 SCSS)

.image {
  background-position: center center;
  background-size: contain;
  background-repeat: no-repeat;
  font-size: 0;
}
.image-mela {
  background-image: url("https://via.placeholder.com/150x175");
}
.image-latte {
  background-image: url("https://via.placeholder.com/200x50");
}
.image-long {
  background-image: url("https://via.placeholder.com/50x100");
}

.cards-container {
  width: 100%;
  margin: auto;
  display: flex;
  flex-wrap: wrap;
}
.cards-container .item-card {
  display: flex;
  flex-direction: column;
  justify-items: end;
  color: white;
  width: 7em;
  height: 7em;
  text-align: center;
  background-color: darkslategray;
  margin: 5px;
  padding: 0.5em;
  box-sizing: border-box;
  overflow: hidden;
}
.cards-container .item-card .image {
  display: block;
  margin: auto;
  width: 40%;
  height: 40%;
}
.cards-container .item-card .text-container {
  display: flex;
  flex-direction: column;
}
.cards-container .item-card .text-container .item-name {
  display: inline-block;
  font-size: 1.1em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cards-container .item-card .text-container .description {
  font-size: 0.8em;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: inline-block;
}
<div fxLayout="row" fxLayoutGap="5px" class="cards-container">
  <div class="item-card">
    <div class="image image-mela">Mela</div>
    <div class="text-container">
      <span class="item-name">Mela</span>
      <span class="description">12</span>
    </div>
  </div>
  <div class="item-card">
    <div class="image image-latte">Latte</div>
    <div class="text-container">
      <span class="item-name">Latte</span>
      <span class="description">1 description comes here, must be hidden if long text</span>
    </div>
  </div>
  <div class="item-card">
    <div class="image image-long">Long Image</div>
    <div class="text-container">
      <span class="item-name">Long Image Text</span>
      <span class="description">must be hidden if long text</span>
    </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    你试过了吗:

       img {
            width: 40%; 
            height: auto;
        }
    

    它应该保持图像比例一致。

    【讨论】:

    • 我试过了,但留下 height:auto 与方形图像(例如苹果)相比,无法正确缩放长图像(例如瓶子)
    【解决方案3】:

    这很简单。我认为它会解决问题。 :)

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>item</title>
        <style type="text/css" media="screen">
        .item-single{
            width: 100px;
            background-color: #e7e7e7;
            height: 100px;
            text-align: center;
        }
        .item-single span{
            display: block;
        border: 1px solid #000; /* just to show the alignment  */
        }
        .item-single img{
            width: 50%; /*  you can scale it down using width */
        border:1px solid #000; /* just to show the alignment */
            display: block;
            margin: auto;
        }
    </style>
    </head>
    <body>
        <div class="item-single">
            <img src="http://sugamparajuli.com.np/wp-content/uploads/2019/01/banana.png">
            <span class="item-name">Mela</span>
            <span class="description">12</span>
        </div>
    </body>
    </html>
    

    这就是结果。 item-image

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 2022-11-18
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多