在HTML5中将一个div放在canvas上方

11

我正在尝试将一个div元素放在画布上(用于游戏),位于页面中心。这是一个开始屏幕,在开始游戏之前我想显示它(此开始屏幕具有“播放游戏”,“设置”等选项)。问题是我无法做到这一点,我已经在谷歌上搜索了很多,并且看过许多示例,但似乎没有一个适用于我。这是我的代码:

<div id="gamecontainer">
            <canvas id="myCanvas" width="800" height="600">
                Sorry, <strong>CANVAS</strong> is not supported by your browser. Get a more recent one to play my game!
            </canvas>

            <div id="gamestartscreen" class="gamelayer">
                <img src="images/icons/play.png" alt="Play Game" onclick="alert('ceve');"><br>
                <img src="images/icons/settings.png" alt="Settings">
            </div>
</div>

这是CSS:

#gamecontainer {
    width: 800px;
    height: 600px;
    background-color: beige;
    border: 1px solid black;
    position: relative;
    margin: 0 auto;
}

.gamelayer {
    width: 800px;
    height: 600px;
    position: absolute;
    display: none;
    z-index: 0;
}


/* Screen for the main menu (Like Play, Settings, etc.) */
#gamestartscreen {
    position: relative;
    margin: 0 auto;
}

#gamestartscreen img {
    margin: 10px;
    cursor: pointer;
}

请问有人能告诉我我做错了什么吗?

1个回答

23
问题在于画布层以其本地静态定位的方式呈现,而gamestart div则采用相对定位且没有正值层叠顺序(z-index)。实际上,您只需要将画布元素设置为position: absolute或者position: relative,同时令startscreen div拥有一个大于1的z-index即可解决问题。这个JSFiddle应该能够让一切变得清晰明了。 谢谢!

#gamecontainer {
  width: 800px;
  height: 600px;
  background-color: beige;
  border: 1px solid black;
  position: relative;
  margin: 0 auto;
}

canvas {
  position: absolute;
  z-index: 1;
}

#gamestartscreen {
  position: absolute;
  margin: 0 auto;
  z-index: 2;
  background: red;
}
<div id="gamecontainer">
  <canvas id="myCanvas" width="800" height="600">
    Sorry, <strong>CANVAS</strong> is not supported by your browser. Get a more recent one to play my game!
  </canvas>

  <div id="gamestartscreen" class="gamelayer">
    Hello world!
  </div>
</div>


1
谢谢。那帮了我很多,但我还有一个问题:我也想让类为.gamelayer的元素居中。例如,<div id='gamestartscreen' class='gamelayer'> 也要居中。有什么想法吗? - André Hincu
2
没问题。您只需要设置 left: 50; top: 50%,然后在 margin 属性上进行一些计算即可。请在此处查看:链接 - Radu Chelariu
当画布覆盖在div上时,div内容将无法访问,如何解决这个问题? - Vahid Alimohamadi

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