我的页面上有一个组件(在示例中名为
grid
)。
我希望这个组件能够实现以下约束:
-1- 保持 1:1 纵横比
-2- 尽可能大
-3- 留在视口的范围内(无滚动条)
-4- 最好没有 JavaScript
我能够满足 1、2 和 4,但不能满足 3:
grid
及其子级将根据需要缩小,以保持 1:1
的纵横比。grid
组件会扩展到视口底部之外,从而创建滚动条。这是我正在查看的 HTML:
<div id="wholePage" class="black">
<div>top bar placeholder</div>
<div id="grid">
<div class="row darkGray">
<div class="column red"></div>
<div class="column yellow"></div>
</div>
<div class="row lightGray">
<div class="column green"></div>
<div class="column blue"></div>
</div>
</div>
</div>
这是相关的 CSS:
#wholePage {
background-color: gray;
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
}
#grid {
width: auto;
height: auto;
flex: 0 0 auto;
display: flex;
flex-direction: column;
aspect-ratio: 1;
}
.row {
height: 50%;
width: 100%;
flex: 0 1 auto;
display: flex;
flex-direction: row;
}
.column {
height: 100%;
width: 100%;
flex: 0 1 auto;
}
您可以使用
aspect-ratio
和 max-width/height
来防止它超出父容器:
* {
box-sizing: border-box;
}
html,
body {
margin: 0;
width 100%;
height: 100%;
}
.box {
aspect-ratio: 1 / 1;
max-width: 100%;
max-height: 100%;
border: 5px solid green;
}
<div class="box"></div>