【发布时间】:2023-01-09 18:30:37
【问题描述】:
我有一个 <section> 元素,它不能大于 100vh,也不能大于 100vw。理想情况下,它应该遵循其父容器尺寸。
<section> 应该有一个使用 css 变量的网格布局; var(--cols, 56)和var(--rows, 32)
网格中的每个单元格必须是 1:1 的比例,这意味着单元格宽度必须始终 === 单元格高度。
如果视口(父元素)增长,<section> 元素应该增长,除非这使得单元格不是正方形。如果是这种情况,<section> 元素应该居中。因此,如果视口宽度变大而视口高度变小,<section> 将水平居中。但是如果视口高度变大而视口宽度变小,<section>元素就会垂直居中。
这是我到目前为止所拥有的:
<section #widgets>
<ng-container *ngFor="let widget of widgetConfig">
<ng-container [libTileContainer]="widget"></ng-container>
</ng-container>
</section>
section {
display: grid;
gap: 5px;
grid-template-columns: repeat(
var(--cols, 56),
calc(((100vw - (var(--cols, 56) * 5px) - 2rem) / (var(--cols, 56))))
);
grid-template-rows: repeat(
var(--rows, 32),
calc(((100vw - (var(--cols, 56) * 5px) - 2rem) / (var(--cols, 56))))
);
max-width: 100%;
max-height: 100%;
}
这尊重细胞的方形性,但它会从它的父级中流出。 计算也将只考虑视口宽度而不是高度。
我怎样才能达到我想要的?
【问题讨论】:
-
不确定它是否适用于网格单元,但您可以尝试使用 css
aspect-ratio使它们成为正方形 -
我试过在 section 元素的父元素上设置纵横比。这将修复部分宽度不溢出,但由于 cols 和 rows 是变量,我无法将其设置为固定比例。
-
哦,你的意思是在单元格本身上设置纵横比?是的,但细胞不一定是元素。而那些包含元素的元素通常会填充不止 1 列和行。