基于图像高度 css 角度动态设置可变填充

Posted

技术标签:

【中文标题】基于图像高度 css 角度动态设置可变填充【英文标题】:Dynamically set variable padding based on image-height css angular 【发布时间】:2021-11-10 22:04:54 【问题描述】:

我有一些有角度的 html 代码可以呈现图像列表(其中一些可能是其他图像的重复),如下所示:

<div *ngFor="let content of contentList>
  <img class="image" src=" content.image "/>
</div>

图片的css:

.image 
  height: 100%;
  max-height: 72px;

我想根据图像的高度为每个图像设置 padding-bottom。 padding-bottom 应该是72px - height of image--基本上,padding 应该包含最大高度为 72px 的任何剩余像素。

类似:

.image 
  height: 100%;
  max-height: 72px;
  padding-bottom: (72 - the image's height)px;

如何做到这一点?

【问题讨论】:

【参考方案1】:

您可以将所有逻辑保留在模板中,以便在 ngFor 中工作:

<div *ngFor="let content of contentList">
  <img
    class="image"
    (load)="image.style.paddingBottom = 72 - image.height + 'px'"
    [src]="content.image"
    #image
  />
</div>

【讨论】:

【参考方案2】:

您可以使用如下模板创建组件:

<img
  [src]="path"
  (load)="onLoad()"
  [style.paddingBottom.px]="paddingBottom"
  #image
/>

其中path 代表图像源链接,paddingBottom 定义图像底部填充。图像被标记为#image 标识符以访问元素 (ElementRef)。加载图像后(在onLoad() 函数中),您可以访问图像高度并计算底部填充。特此ImageComponent

export class ImageComponent implements OnInit 

  @Input() paddingBottom = 72;
  @Input() maxPaddingBottom = 72;
  @Input() path = '';
  @ViewChild('image') image?: ElementRef;

  ...

  onLoad(): void 
    if (this.image) 
      const h = (this.image?.nativeElement as HTMLImageElement).height;
      this.paddingBottom = this.maxPaddingBottom - h;
    
  

当然你可以在你的组件容器中多次调用这个组件。

<ng-container *ngFor="let p of paths">
  <app-image [path]='p'></app-image>
</ng-container>

【讨论】:

如果我只有一张图像,这可能会起作用,但在循环渲染多张图像的情况下似乎不起作用 快速解决方案:将上述内容移动到自定义组件中(带有路径属性)并在循环中调用该组件【参考方案3】:

如果您想要的效果是最大图像高度为 72px,您可以尝试将 img 包装在一个 div 中并在该 div 上设置高度吗?这会给你想要的视觉效果吗?它不需要不同的填充,“填充”将是 imgHolder div 内留下的空间。

.imgHolder 
  height: 72px;


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



<div *ngFor="let content of contentList>
   <div class="imgWrapper"
     <img class="image" src=" content.image "/>
   </div>
</div>

【讨论】:

以上是关于基于图像高度 css 角度动态设置可变填充的主要内容,如果未能解决你的问题,请参考以下文章

基于内容高度的可变图像高度[重复]

无法添加一致的高度和填充。动态表格视图单元格之间

容器行高自动填充/使用 CSS 调整

我可以设置我的自动布局约束,以便将图像视图设置为图像的高度

UIStackView 动态高度图片

如何根据swift 4或5中的图像大小使图像视图高度和宽度(纵横比)动态? [关闭]