使用Flexbox将动态对象居中

时间:2019-04-09 10:05:08

标签: html css flexbox

游戏开始时,flexbox居中效果很好(在静态对象上)。 在游戏进行过程中,两个(标题和剩余div)都会更改其值/大小,从而导致通过flexbox不断调整中心位置(标题中的所有div都在移动)。

我希望标题中的每个div在游戏过程中保持“固定”状态。

仅通过使用flexbox还是有可能的?我应该使用其他方法吗? 我应该单独放置每个元素吗?

您可以观察远程服务器上的标头行为: https://stacho163.000webhostapp.com/firstLevel.html

body {
  margin: 0;
  width: 100%;
  height: 100%;
}

header {
  display: flex;
  justify-content: space-around;
  align-items: center;
  background-color: white;
}

#game-window {
  position: absolute;
  width: 90vw;
  height: 90vw * 16/9;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -46%);
  background-color: gray;
}
<body>
  <header>
    <div id="lifes">
      Life1 Life2 Life3
    </div>
    <div id="title">
      Title (changes when you win)
    </div>
    <div id="remain">
      Remaining: (from 100 to 0)
    </div>
  </header>
  <canvas id="game-window"></canvas>
</body>

https://jsfiddle.net/nfzj183t/14/

我正在问,因为我在网络方面经验不足,因此我想使用正确的方法来解决这个简单的问题。
预先感谢您的提示:)

1 个答案:

答案 0 :(得分:2)

一种方法可能是使用网格作为主要布局,并在网格的每个元素内部使用flexbox组件。

标题类似于:

header {
  display: grid;
  grid-template-columns: repeat(3,1fr);
  grid-template-rows: 10vh;
}

您将需要使每一列都为“ display:flex;”。容器。这将是“生命”的一个例子:

#lifes{
  display: flex;
  align-items: center;
  justify-content: center;
}

如果需要,我可以向您展示更复杂的示例。

参考:https://gridbyexample.com/examples/