我的基于canvas的应用程序出现了问题。
我有4个(或更多)画布,每个画布都包装在带有旁边内容的div中。这些包装器本身被包装在“hbox”中。目标是使用flexbox
创建一个动态网格。
<div id="primaryScene" class="scene">
<div class="hbox" id="hbox0" style="flex-grow: 1.2;">
<div class="viewWrapper" id="view0" style="flex-grow: 0.4;">
<canvas class="canvasView"></canvas>
<aside class="sideContent"></aside>
</div>
<div class="viewWrapper" id="view1" style="flex-grow: 1.6;">
<canvas class="canvasView"></canvas>
<aside class="sideContent"></aside>
</div>
</div>
<div class="hbox" id="hbox1" style="flex-grow: 0.8;">
<div class="viewWrapper" id="view2">
<canvas class="canvasView"></canvas>
<aside class="sideContent"></aside>
</div>
<div class="viewWrapper" id="view3">
<canvas class="canvasView"></canvas>
<aside class="sideContent"></aside>
</div>
</div>
</div>
使用css:
.scene {
display: -webkit-flex;
display: flex;
-webkit-flex-flow: column;
flex-flow: column;
overflow: hidden;
}
.hbox {
min-height: 0;
-webkit-flex: 1 1 0%;
flex: 1 1 0%;
display: -webkit-flex;
display: flex;
position: relative;
}
.viewWrapper {
min-height: 0;
-webkit-flex: 1 1 0%;
flex: 1 1 0%;
position: relative;
margin: 0 2px 2px 0;
}
.canvasView {
display: block;
}
.canvasView {
position: absolute;
}
.sideContent{
max-width: 120px;
overflow-x: hidden;
overflow-y: auto;
margin-right: 6px;
}
因为我需要一些调整大小的事件,所以我不使用CSS属性resize: both;
。当我尝试添加.sideContent
时遇到了麻烦,因为我想让它们位于每个画布的右侧。
在那之前,由于画布是绝对定位的,我只需要使用{.viewWrapper}.getBoundingClientRect().width|height
动态更新宽度和高度(除了它们是flex:1
之外,viewWrapper和hbox通过类似上面代码中展示的flex-grow
手动调整大小)。现在,当我将画布切换到flex:1;
并删除绝对属性时,它们不再缩小。此外,我还会在Chrome和Firefox中获得与{oneCanvas}.getBoundingClientRect()
不同的值(没有在IE上测试),所以我也无法使用这个。
我该怎么办?如果您需要更多信息,请告诉我。