Hier ist ein Arbeitsbeispiel zur Behebung der Probleme:
Sie hatten mehrere Probleme mit Ihrem Beispiel:
- A
<div>
hat keine height
oder width
Attribute. Sie müssen diese über CSS festlegen.
- Selbst wenn die Größe des Div korrekt war, wurde die Standardeinstellung verwendet
position:static
, was bedeutet, dass es NICHT das positionierende Elternteil eines Kindes ist. Wenn die Zeichenfläche dieselbe Größe wie das div haben soll, müssen Sie das div auf position:relative
(oder absolute
oder fixed
) setzen.
- Die Attribute
width
und height
auf einem Canvas geben die Anzahl der zu zeichnenden Datenpixel an (wie die tatsächlichen Pixel in einem Bild) und sind von der Anzeigegröße des Canvas getrennt. Diese Attribute müssen auf Ganzzahlen gesetzt werden.
In dem oben verlinkten Beispiel wird CSS verwendet, um die Div-Größe festzulegen und sie zu einem positionierten übergeordneten Element zu machen. Es erstellt eine JS-Funktion (siehe unten), mit der eine Zeichenfläche auf die gleiche Anzeigegröße wie das positionierte übergeordnete Element festgelegt wird. Anschließend werden die internen width
und height
Eigenschaften so angepasst, dass sie die gleiche Anzahl von Pixeln aufweisen, wie sie angezeigt werden.
var canvas = document.querySelector('canvas');
fitToContainer(canvas);
function fitToContainer(canvas){
canvas.style.width ='100%';
canvas.style.height='100%';
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
}
display:block
die kein CSSwidth
angegeben ist, werden so breit wie ihr Container. Containerelemente ohneheight
angegebenes CSS sind nur so hoch wie ihr Inhalt. Inhalte mit einer prozentualen Höhe entsprechen denen,height:0
wenn der Elternteil herausfindet, wie groß er sein muss. Wenn Sie absolute Positionierungs- oder Prozentabmessungen verwenden, werden diese relativ zum "übergeordneten Versatz" berechnet. Standardmäßig ist der Body der einzige übergeordnete Offset.position:static
(der Standardwert und das Verhalten aller Elemente) sind, starten kein neues Positionierungssystem, sondernposition:relative
(ohne die Anzeige des Elements anderweitig zu ändern). Sehen Sie sich zum Beispiel diese Demo an . Beachten Sie, wie#a1
die Position relativ zum Körper positioniert und bemessen ist, und ignorieren Sie dessen Inhalt<div>
. Beachten Sie, wie#b1
stattdessen relativ zu seinem Container positioniert und dimensioniert wird, mit dem einzigen Unterschied zwischen den beiden#b { position:relative}
.Verwenden Sie die Attribute
width
undheight
der Zeichenfläche, wenn Sie möchten, dass sie tatsächlich so groß wie das übergeordnete Element ist. Sie können sie mit JQuery festlegen .$(document).ready(function() { var canvas = document.getElementById("theCanvas"); canvas.width = $("#parent").width(); canvas.height = $("#parent").height(); });
Wenn Sie JQuery nicht kennen , verwenden Sie das folgende Javascript:
var canvas = document.getElementById("theCanvas"); var parent = document.getElementById("parent"); canvas.width = parent.offsetWidth; canvas.height = parent.offsetHeight;
Wenn Sie die
css
Attribute height und width verwenden,style="width:100%; height:100%;"
strecken Sie nur die Leinwand. Dadurch wirkt alles, was Sie auf die Leinwand zeichnen, gestreckt.JSFiddle für JQuery-Lösung.
JSFiddle für Javascript-Lösung.
quelle
style=""
dem übergeordneten Element kein explizites Attribut zuweisen oder JS zum Festlegen des Stils verwenden. Sie solltengetComputedStyle()
oder, wie ich in meiner Antwort getan habe,offsetWidth
/ verwendenoffsetHeight
.Verwenden Sie CSS-Eigenschaften anstelle von Attributen für die Tags:
<div style="background-color:blue;width:140px;height:20px"> <canvas style="background-color: red;width:100%;height:100%"> </canvas> </div>
Das scheint zu funktionieren
quelle