根据图像高度动态设置可变填充 css angular
Dynamically set variable padding based on image-height css angular
我有一些 angular 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;
}
如何实现?
您可以使用如下模板创建组件:
<img
[src]="path"
(load)="onLoad()"
[style.paddingBottom.px]="paddingBottom"
#image
/>
其中 path
表示图像源 link,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>
您可以将所有逻辑保留在模板中,这样它就可以在 ngFor 中工作:
<div *ngFor="let content of contentList">
<img
class="image"
(load)="image.style.paddingBottom = 72 - image.height + 'px'"
[src]="content.image"
#image
/>
</div>
如果您想要的效果是最大图像高度为 72px,您可以尝试将 img 包装在 div 中并在 div 上设置高度吗?这会给你带来你正在寻找的视觉效果吗?它不需要不同的填充,“填充”将是 imgHolder div.
中留下的 space
.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>
我有一些 angular 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;
}
如何实现?
您可以使用如下模板创建组件:
<img
[src]="path"
(load)="onLoad()"
[style.paddingBottom.px]="paddingBottom"
#image
/>
其中 path
表示图像源 link,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>
您可以将所有逻辑保留在模板中,这样它就可以在 ngFor 中工作:
<div *ngFor="let content of contentList">
<img
class="image"
(load)="image.style.paddingBottom = 72 - image.height + 'px'"
[src]="content.image"
#image
/>
</div>
如果您想要的效果是最大图像高度为 72px,您可以尝试将 img 包装在 div 中并在 div 上设置高度吗?这会给你带来你正在寻找的视觉效果吗?它不需要不同的填充,“填充”将是 imgHolder div.
中留下的 space.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>