Angular 设置ngfor生成的dom元素的样式
背景:因此,我从后端获取一些数据,并将其作为数组存储在角度前端。现在我试图在模板上显示这些元素中的每一个(都是产品)。我基本上是想把产品放在一个用户可以浏览的页面上 问题:问题在于ngfor只是在模板的垂直线上一个接一个地绘制元素。我想要的是能够应用常规样式设置(可能是在托管ngfor的父元素上),因此元素从页面的左上角到右上角,按照视口宽度从1到X的元素数排列,然后在以下行上继续,直到原始数组中没有剩余的元素。另外,我曾尝试在父元素中使用css网格和flexbox,但它们只是被模板忽略 如果有人能为我指明实现预期结果的方向,我将不胜感激 我的模板代码如下:Angular 设置ngfor生成的dom元素的样式,angular,dom,styling,ngfor,Angular,Dom,Styling,Ngfor,背景:因此,我从后端获取一些数据,并将其作为数组存储在角度前端。现在我试图在模板上显示这些元素中的每一个(都是产品)。我基本上是想把产品放在一个用户可以浏览的页面上 问题:问题在于ngfor只是在模板的垂直线上一个接一个地绘制元素。我想要的是能够应用常规样式设置(可能是在托管ngfor的父元素上),因此元素从页面的左上角到右上角,按照视口宽度从1到X的元素数排列,然后在以下行上继续,直到原始数组中没有剩余的元素。另外,我曾尝试在父元素中使用css网格和flexbox,但它们只是被模板忽略 如果有
<div id="backGroundImage">
<div id="salesPageContainer">
<div id="saleItemsContainer" >
<div *ngFor="let saleItem of saleItems" id="itemContainer" >
<p id="itemName">{{ saleItem.itemName }}</p>
<p id="itemPrice">{{ saleItem.itemPrice }}</p>
<img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
</div>
</div>
</div>
</div>
{{saleItem.itemName}
{{saleItem.itemPrice}
在此处检查示例实现
如果应用程序中有引导程序,请添加class=“d-flex-flex-wrap”,如下所示
<div id="backGroundImage">
<div id="salesPageContainer">
<div id="saleItemsContainer" class="d-flex flex-wrap">
<div *ngFor="let saleItem of saleItems" id="itemContainer" >
<p id="itemName">{{ saleItem.itemName }}</p>
<p id="itemPrice">{{ saleItem.itemPrice }}</p>
<img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
</div>
</div>
</div>
</div>
使用CSS网格
<div id="backGroundImage">
<div id="salesPageContainer">
<div id="saleItemsContainer">
<div *ngFor="let saleItem of saleItems" id="itemContainer" >
<p id="itemName">{{ saleItem.itemName }}</p>
<p id="itemPrice">{{ saleItem.itemPrice }}</p>
<img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
</div>
</div>
</div>
</div>
对于*ngFor生成的样式元素没有特殊规则。只需在元素上放置一个类,并在css中设置该类的样式。顺便说一句,现在您正在使用相同的
id
属性生成X个元素,这不是一个好的HTML。非常感谢您的回复。这很有帮助。我想知道是否有一种方法也可以使css网格工作。例如,假设我添加了display:grid;至id=“saleItemsContainer”。我应该向id=“itemContainer”添加什么,以便对模板上绘制的数组的所有元素应用常规样式?@BlitzMee检查我用Css网格示例更新的stackblitz,如果您觉得有用,请接受答案,upvoteThis工作得很好。非常感谢。我已经接受了答案。但我不能投赞成票,因为我在我的问题上投了几张反对票,而我的代表票已经不够高了。尽管如此,我现在有16个代表接受了答案。得票最多:)
<div id="backGroundImage">
<div id="salesPageContainer">
<div id="saleItemsContainer">
<div *ngFor="let saleItem of saleItems" id="itemContainer" >
<p id="itemName">{{ saleItem.itemName }}</p>
<p id="itemPrice">{{ saleItem.itemPrice }}</p>
<img [src]="imageUrl + saleItem.imageID" alt="" id="itemImage" />
</div>
</div>
</div>
</div>
#saleItemsContainer {
display: grid;
grid-column-gap: 0.5rem;
grid-row-gap: 0.4rem;
grid-template-columns: auto auto auto;
}