这是我的代码(解释后):https://jsfiddle.net/L7a35dda/1/设置一个div的高度等于计算宽度
body {
width: 1920px;
height: 1080px;
background-color: rgb(48, 48, 48);
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: flex-start;
align-content: flex-start;
}
/* Overall Styles */
.group-container {
display: flex;
flex-direction: column;
}
.group-header {
height: 40px;
background-color: rgb(21, 101, 192);
}
.group-body {
flex-grow: 1;
display: flex;
}
.tile {
display: flex;
flex-direction: column;
}
.tile-header {
background-color: rgb(25, 118, 210);
}
.tile-body {
flex-grow: 1;
}
/* Group 1 */
#group-1 {
width: 50%;
order: 1;
border-right: 3px solid black;
border-bottom: 3px solid black;
}
#group-1 .group-body {
flex-wrap: wrap;
align-items: flex-start;
align-content: flex-start;
}
#group-1 .tile {
width: calc(100%/3);
height: 300px; /* Placeholder: Actual value needs to be equal to width */
}
/* Group 2 */
#group-2 {
width: 50%;
order: 2;
flex-grow: 1;
border-right: 3px solid black;
border-top: 3px solid black;
}
#group-2 .group-body {
flex-direction: column;
align-items: flex-start;
}
#group-2 .tile {
flex-grow: 1;
width: 100%;
height: 100%;
}
/* Group 3 */
#group-3 {
width: 50%;
height: 100%;
order: 3;
border-left: 3px solid black;
}
#group-3 .group-body {
flex-direction: column;
}
#group-3 .tile {
flex-grow: 1;
width: 100%;
height: 100%;
}
<div id="group-1" class="group-container">
<div class="group-header">Group 1</div>
<div class="group-body">
<div class="tile">
<div class="tile-header">Tile 1A</div>
<iframe class="tile-body"></iframe>
</div>
<div class="tile">
<div class="tile-header">Tile 1B</div>
<iframe class="tile-body"></iframe>
</div>
<div class="tile">
<div class="tile-header">Tile 1C</div>
<iframe class="tile-body"></iframe>
</div>
<div class="tile">
<div class="tile-header">Tile 1D</div>
<iframe class="tile-body"></iframe>
</div>
<div class="tile">
<div class="tile-header">Tile 1E</div>
<iframe class="tile-body"></iframe>
</div>
<div class="tile">
<div class="tile-header">Tile 1F</div>
<iframe class="tile-body"></iframe>
</div>
</div>
</div>
<div id="group-2" class="group-container">
<div class="group-header">Group 2</div>
<div class="group-body">
<div class="tile">
<div class="tile-header">Tile 2A</div>
<iframe class="tile-body"></iframe>
</div>
<div class="tile">
<div class="tile-header">Tile 2B</div>
<iframe class="tile-body"></iframe>
</div>
</div>
</div>
<div id="group-3" class="group-container">
<div class="group-header">Group 3</div>
<div class="group-body">
<div class="tile">
<div class="tile-header">Tile 3A</div>
<iframe class="tile-body"></iframe>
</div>
</div>
</div>
上面的代码的目的是将屏幕分为三组砖:
- 组3占据屏幕的整个右侧 - 其宽度可配置(目前设置为50%)。它的内容可以忽略不计,因为它目前是未来发展的占位符。
- 组1占据了屏幕左侧的剩余部分的上部,其中包含6个方形的3x2布局的瓷砖。每个瓷砖的宽度应该相等。
- 组2填满组1下的最后剩余空间。它在垂直布局中具有2个瓦片,跨越整个可用宽度和高度,在它们之间均匀分布垂直空间。
所以代码似乎做了我需要它做的一切,除了我需要组1瓷砖为正方形的部分。我目前正在将它作为这个问题的占位符进行硬编码 - 这在实际产品中是无法完成的,因为它将通过网络部署到多台计算机上,呈现在不同屏幕分辨率的不同介质上。
我应该如何更改我的代码以实现此目的?
编辑:将问题标题从iframe更改为div,因为问题最初是针对该问题的,尽管最终发布的问题是针对tile div。
当你说它应该在不同的分辨率/媒体上呈现,那么你的布局应该是响应,对吧?假设分辨率非常小,Group1/Group2/Group3会叠加在一起吗? – retober
这有帮助吗? http://stackoverflow.com/a/6615994/5561605 – sol
@retober我认为他们不会在使用flexbox CSS时彼此堆叠?无论如何,决议不会那么小。部署的系统将用于客户的日常操作,并打算全屏使用。它将按照客户指定的高清分辨率进行。 – thegreatjedi