我的目标是为图像阵列实现以下布局:
如您所见,一个简单的2列正方形图像网格-在Bootstrap环境中,这很容易,其中一个用户指定2个cols或6个大小,然后只需设置图像的CSS object-fit
即可覆盖为了避免拉伸并将高度设置为自动。
问题是,我试图实现这一点的地方是在Ionic 4中,其中img元素是一个Web组件,只有某些可公开的属性可以自定义。到目前为止,我可以以2列的方式显示图像,但是长宽比不可用。(我也必须使用该元素,因此不能简单地使用HTML5 img元素)。
这是我到目前为止所拥有的:
<ion-grid>
<ion-row>
<ion-col size="6" *ngFor="let image of selectedImageURIs">
<ion-img [src]="image"></ion-img>
</ion-col>
</ion-row>
</ion-grid>
注意:Ionic框架具有它自己的“ Bootstrap”,如称为ion-grid的框架。我最终得到的是这样:
我知道需要使它们的高度和高度保持一致,并设置适合覆盖的对象,但是如何使用ion-img做到这一点?我是一个Web组件,因此Shadow Dom发挥了作用。文档仅提及"The component uses Intersection Observer internally"
。那能满足我的需求吗?我是Web组件的新手,试图了解我所缺少的内容。
答案 0 :(得分:0)
page.html
<ion-row class="row-card">
<ion-col size="6" class="col-card">
<ion-card class="card-service">
<img src="../../assets/images/services/w-medical.png" class="img-service" />
</ion-card>
</ion-col>
<ion-col size="6" class="col-card">
<ion-card class="card-service">
<img src="../../assets/images/services/w-professional.png" class="img-service" />
</ion-card>
</ion-col>
</ion-row>
page.css
.row-card{
padding: 0px 5px 0px 5px;
.col-card{
padding: 0px;
.card-service{
margin: 5px;
height: 160px;
border-radius: 0px;
padding: 8px;
box-shadow: 0px 0px;
.img-service{
height: 100%;
width: 100%;
object-fit: cover;
margin: 0 auto;
border: 0 solid #024f9a;
background: linear-gradient(#0486ca,#024f9a);
border-radius: 50%;
padding: 15px;
font-weight: bold;
}
}
}
}
答案 1 :(得分:0)
ion-grid >
<ion-row>
<ion-col col-6 col-md-4 col-xl-3 *ngFor="let image of [1,2,3,4,5,6,7,8,9,10,11]">
<img src=''/>
<!-- <div class="image-container" [style.background-image]="'url(assets/img/' + image + '.jpg)'"></div> -->
</ion-col>
</ion-row>
</ion-grid>
答案 2 :(得分:0)
这是我用于Ionic 4应用程序的解决方案。我使用CSS来完成您想要的外观。您的模板看起来像这样,并使用ion-img
来利用延迟加载功能。
html
<ion-grid>
<ion-row>
<ion-col *ngFor="let category of categories" size="6">
<button #categoryButton type="button" (click)="selectCategory(categoryButton, category)" class="category-button">
<ion-card padding class="category-card">
<ion-card-content class="category-card-content">
<ion-img *ngIf="!imageNotLoaded; else loadingCategory" src="{{category.icon_image}}" class="category-icon" (ionError)="imageNotLoaded = true"></ion-img>
<ng-template #loadingCategory>
<ion-skeleton-text animated style="height: 70px;width: 70px"></ion-skeleton-text>
</ng-template>
</ion-card-content>
<ion-card-title class="category-title">{{category.name}}</ion-card-title>
</ion-card>
</button>
</ion-col>
</ion-row>
</ion-grid>
像这样设置您的sass代码。
scss
ion-col {
text-align: center;
}
.active {
.category-card {
border-color: var(--ion-color-primary)!important;
box-shadow: 0 4px 16px var(--ion-color-primary)!important;
}
}
.category-button {
padding: 4px;
background: transparent;
.category-card {
min-width: 100%;
margin: 0;
border: 2px solid;
.category-card-content {
text-align: center;
.category-icon {
width: available;
}
}
.category-title {
font-size: x-small;
font-weight: bolder;
}
}
}
这将产生最终结果,如下图所示。
注意:否则,这是所有组件级代码,否则您需要使用::ng-deep
来避开CSS代码的影子域。