進行状況バーをシミュレートするために長方形のキャンバスを作成したいのですが、キャンバスの幅と高さを100%に設定すると、実際には親と同じくらい高く、広くなりません
以下の例をご覧ください
http://jsfiddle.net/PQS3A/
正方形でないキャンバスを作成することも可能ですか?キャンバスの高さと幅をハードコードしたくない
以下は、問題を修正する実例です。
あなたの例にはいくつかの問題がありました:
<div>
には、height
またはwidth
属性がありません。 CSSを使用してこれらを設定する必要があります。position:static
を使用していました。これは、divが子の位置決め親ではないことを意味します。キャンバスをdivと同じサイズにする場合は、divをposition:relative
(またはabsolute
またはfixed
)に設定する必要があります。width
およびheight
属性は、描画するデータのピクセル数(画像の実際のピクセルなど)を指定し、とは別ですキャンバスの表示サイズ。これらの属性は整数に設定する必要があります。上記にリンクされている例では、CSSを使用してdivサイズを設定し、配置された親にします。 JS関数(以下に示す)を作成して、キャンバスを配置された親と同じdisplayサイズに設定し、内部width
およびheight
プロパティ。これにより、表示されるピクセル数と同じになります。
var canvas = document.querySelector('canvas');
fitToContainer(canvas);
function fitToContainer(canvas){
// Make it visually fill the positioned parent
canvas.style.width ='100%';
canvas.style.height='100%';
// ...then set the internal size to match
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
}
実際に親要素と同じ大きさにしたい場合は、キャンバスのwidth
およびheight
属性を使用します。 JQuery を使用して設定できます。
$(document).ready(function() {
var canvas = document.getElementById("theCanvas");
canvas.width = $("#parent").width();
canvas.height = $("#parent").height();
});
JQuery がわからない場合は、次のJavaScriptを使用します。
var canvas = document.getElementById("theCanvas");
var parent = document.getElementById("parent");
canvas.width = parent.offsetWidth;
canvas.height = parent.offsetHeight;
css
の高さと幅の属性を使用する場合、style="width:100%; height:100%;"
、その後、あなたはちょうどキャンバスを伸ばしています。これにより、キャンバスに描くすべてのものが引き伸ばされて見えるようになります。
JSFiddle JQueryソリューションの場合。
JSFiddle Javascriptソリューションの場合。
タグの属性の代わりにCSSプロパティを使用します。
<div style="background-color:blue;width:140px;height:20px">
<canvas style="background-color: red;width:100%;height:100%">
</canvas>
</div>