html5/css/javascript:如何在 div 中疊加兩個畫布

function drawAll() {

// Upper zone, 8 grey transparent buttons

let canvas0 = document.getElementById("layer0");

canvas0.width = 1000;

canvas0.height = 100;

let bandeau = canvas0.getContext("2d");

bandeau.fillStyle = "rgba(128,128,80,0.3)";

for (var i = 0; i < 8; i++) {

bandeau.beginPath;

bandeau.arc(50 + 110 * i, 50, 45, 0, 2 * Math.PI);

bandeau.fill();

}

// Lower zone, a red rectangle partially under the buttons

let canvas1 = document.getElementById("layer1");

canvas1.width = 1000;

canvas1.height = 1000;

let dessin = canvas1.getContext("2d");

dessin.fillStyle = "red";

dessin.fillRect(30, 50, 800, 200);

canvas0.style.visibility = "visible";

canvas1.style.visibility = "visible";

}

drawAll() body {

background-color: rgb(249, 249, 250);

}

.container {

position: relative;

width: 100%;

height: 100%;

overflow: hidden;

z-index: -10;

}

.scrollable {

position: absolute;

top: 0px;

left: 0px;

z-index: 1;

}

.fixed {

position: absolute;

top: 0px;

left: 0px;

z-index: 2;

}

你好

我被困在兩個畫布的疊加問題上。這是一個簡化的例子。請注意,在實際應用中,按鈕和繪圖要復雜得多,我想保留 html5 / css / javascript 的結構。

我想我錯過了 css 中的一些東西,成功地將這兩個畫布疊加在一起,按鈕部分覆蓋了紅色矩形,但是什麼?

如果有人可以提供幫助,謝謝。

回答

問題是 沒有任何高度,這使得 .container 100% 的高度 同樣為零。

絕對定位的元素不會影響其父元素的高度。一旦你開始提供 .container 一個實際的高度,你可以看到它的內容。在下面的示例中,我選擇了 100vw 和 100vh 對於寬度和高度,但由於您的畫布是 1000 像素寬,您也可以使用該值或任何其他值。

正常文檔佈局流程中不再存在絕對定位的元素。相反,它位於自己的層上,與其他所有內容分開。

來源:MDN 網絡文檔

另一種選擇是刪除 overflow: hidden; 來自 .container 並顯示它之外的所有內容。

function drawAll() {

// Upper zone, 8 grey transparent buttons

let canvas0 = document.getElementById("layer0");

canvas0.width = 1000;

canvas0.height = 100;

let bandeau = canvas0.getContext("2d");

bandeau.fillStyle = "rgba(128,128,80,0.3)";

for (var i = 0; i < 8; i++) {

bandeau.beginPath;

bandeau.arc(50 + 110 * i, 50, 45, 0, 2 * Math.PI);

bandeau.fill();

}

// Lower zone, a red rectangle partially under the buttons

let canvas1 = document.getElementById("layer1");

canvas1.width = 1000;

canvas1.height = 1000;

let dessin = canvas1.getContext("2d");

dessin.fillStyle = "red";

dessin.fillRect(30, 50, 800, 200);

canvas0.style.visibility = "visible";

canvas1.style.visibility = "visible";

}

drawAll() body {

background-color: rgb(249, 249, 250);

}

.container {

position: relative;

overflow: hidden;

z-index: -10;

height: 100vh;

width: 100vw;

}

.scrollable {

position: absolute;

top: 0px;

left: 0px;

z-index: 1;

}

.fixed {

position: absolute;

top: 0px;

left: 0px;

z-index: 2;

}


《碧蓝航线驱逐图鉴大全——攻略介绍》 掌握关键舰船信息
斯里蘭卡