使用视口动态调整 3x3 方格的大小
Posted
技术标签:
【中文标题】使用视口动态调整 3x3 方格的大小【英文标题】:Dynamically resize a 3x3 grid of squares with the viewport 【发布时间】:2019-01-23 20:02:52 【问题描述】:感谢您花时间了解我的困境。
我要做的是用 html/CSS 中其他方形 div 的 3x3 网格填充一个完美的方形 div。我希望容器居中,占据页面的整个高度(从不滚动)并动态调整大小,同时在调整视口大小时保持其纵横比。构成这个较大正方形的 9 个单元中的每一个都应动态调整大小并保持其纵横比。
这是我在真正陷入只有 WIDTH 受到影响的事实之前所得到的。当我调整窗口大小时,高度需要动态变化。
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="homestyle-test.css">
</head>
<body>
<div class="mainframe">
<div class="grid">
<div class="grid__item">
<div class="content">
<div class="content-inside">
<p>Upper left</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content">
<div class="content-inside">
<p>upper middle</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content content-lr">
<div class="content-inside">
<p>upper Right</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content">
<div class="content-inside">
<p>middle Left</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content">
<div class="content-inside">
<p>middle</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content content-lr">
<div class="content-inside">
<p>middle Right</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content">
<div class="content-inside">
<p>Lower Left</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content">
<div class="content-inside">
<p>Lower middle</p>
</div>
</div>
</div>
<div class="grid__item">
<div class="content content-lr">
<div class="content-inside">
<p>Lower Right</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
CSS
*
box-sizing: border-box;
html
background: url(home-assets/homebgtest.png) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
.grid
display: grid;
grid-template-columns: 1fr 1fr 1fr;
place-items: start;
.grid > *
background: orange;
width: 100%;
.grid > [style^='--aspect-ratio']::before
content: "";
display: inline-block;
width: 1px;
height: 0;
padding-bottom: calc(100% / (var(--aspect-ratio)));
【问题讨论】:
【参考方案1】:请根据您对完美正方形的要求查看下面的工作 sn-p,希望对您有所帮助:)
*
box-sizing: border-box;
body
margin: 0;
.wrap
max-width: 100vh;
margin: 0 auto;
.grid
display: grid;
height: 100vh;
grid-template-columns: 1fr 1fr 1fr;
.grid>*
background: orange;
padding: 20px;
box-shadow: inset 0 0 0 1px #fff;
<div class="wrap">
<div class="grid">
<div class="grid__item">
Upper left
</div>
<div class="grid__item">
upper middle
</div>
<div class="grid__item">
upper Right
</div>
<div class="grid__item">
middle Left
</div>
<div class="grid__item">
middle
</div>
<div class="grid__item">
middle Right
</div>
<div class="grid__item">
Lower Left
</div>
<div class="grid__item">
Lower middle
</div>
<div class="grid__item">
Lower Right
</div>
</div>
</div>
【讨论】:
您好 Girish,非常感谢您的帮助。但是,您版本中的框正在更改纵横比。对于我的用例,我确实需要调整大小并保留纵横比的方形框。谢谢。 如果您需要它们按照您的要求成为完美的正方形,请查看此链接codepen.io/girish/pen/NBZeKq, 这正是我想要的。非常感谢。你想重新发布你的答案,以便我可以选择它作为我的问题的正确解决方案吗?我不知道 UI 是否会让我选择子评论。 它确实帮了我很多忙!不幸的是,由于我的代表少于 15 个,因此我的赞成票没有显示,但它们已被记录。以上是关于使用视口动态调整 3x3 方格的大小的主要内容,如果未能解决你的问题,请参考以下文章
在不调整 cypress 视口大小的情况下捕获元素的屏幕截图
jquery $(window).width() 和 $(window).height() 在未调整视口大小时返回不同的值