使用弹性盒子模型居中动态对象

3
当游戏开始时,flexbox居中对静态对象非常有效。在游戏进行过程中,标题和剩余的div会改变它们的值/大小,这会导致flexbox不断调整中心位置(header中的所有div都在移动)。
我希望header中的每个div在游戏过程中都能保持“固定”。
使用flexbox是否可能实现这一点,或者我应该采用另一种方法?我应该单独定位每个元素吗?
您可以在远程服务器上观察header的行为: 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个回答

2
一种方法是使用网格来进行主要布局,并在每个网格元素内部使用flexbox组件。
标题可能类似于:
header {
  display: grid;
  grid-template-columns: repeat(3,1fr);
  grid-template-rows: 10vh;
}

您需要将每一列都设置为 "display: flex;" 容器。以下是一个以“lifes”为例的示例:
#lifes{
  display: flex;
  align-items: center;
  justify-content: center;
}

如果需要,我可以展示给你更复杂的例子。
参考:https://gridbyexample.com/examples/

这很接近了。如果 div 内只有一个元素,那么它可以正常工作,但是在 #lifes div 内有 3 个对象,所以输出就像使用 justify-content: space-between 一样分布。Lifes 应该紧贴在一起,同时居中于 #lifes 中。有什么想法如何解决这个问题吗?我已经在远程服务器上更新了这个。 - Smooth Coding
问题出在应用于每个图标的fas类的“margin:auto”中。将该边距设置为0或10px。值“auto”使边距填充所有可用空间。顺便说一句,游戏很不错,令人印象深刻。 - AngelMdez
非常感谢,我没有注意到margin: auto,现在运行得很好! - Smooth Coding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接