Saya memiliki 2 kanvas, yang satu menggunakan atribut HTML width
dan height
untuk mengukurnya, yang lain menggunakan CSS:
<canvas id="compteur1" width="300" height="300" onmousedown="compteurClick(this.id);"></canvas>
<canvas id="compteur2" style="width: 300px; height: 300px;" onmousedown="compteurClick(this.id);"></canvas>
Compteur1 menampilkan seperti seharusnya, tetapi tidak compteur2. Konten diambil menggunakan JavaScript pada kanvas 300x300.
Mengapa ada perbedaan tampilan?
#attr-canvas-width
). Masalahnya adalah saya mengklik yang salahwidth
sebelumnya dan pergi ke#dom-canvas-width
bagian sebagai gantinya. Filed w3.org/Bugs/Public/show_bug.cgi?id=9469 tentang hal itu.Untuk mengatur
width
dan yangheight
Anda butuhkan, Anda dapat menggunakansumber
el.setAttribute('width', parseInt($el.css('width')))
berhasil, terima kasihwidth: 100%;
properti css?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Ulangi untuk ketinggian.Untuk
<canvas>
elemen, aturan CSS untukwidth
danheight
mengatur ukuran aktual elemen kanvas yang akan ditarik ke halaman. Di sisi lain, atribut HTMLwidth
danheight
atur ukuran sistem koordinat atau 'kisi' yang akan digunakan kanvas API.Sebagai contoh, pertimbangkan ini ( jsfiddle ):
Keduanya memiliki hal yang sama tergambar pada mereka relatif terhadap koordinat internal elemen kanvas. Tetapi di kanvas kedua, persegi panjang merah akan dua kali lebih lebar karena kanvas secara keseluruhan direntangkan melintasi area yang lebih besar oleh aturan CSS.
Catatan: Jika aturan CSS untuk
width
dan / atauheight
tidak ditentukan maka browser akan menggunakan atribut HTML untuk mengukur elemen sehingga 1 unit dari nilai-nilai ini sama dengan 1px pada halaman. Jika atribut ini tidak ditentukan maka mereka akan default kewidth
dari300
danheight
dari150
.sumber
Kanvas akan ditarik jika Anda mengatur lebar dan tinggi di CSS Anda. Jika Anda ingin memanipulasi dimensi kanvas secara dinamis, Anda harus menggunakan JavaScript seperti:
sumber
canvas.setAttribute
sebelumnyacanvas.getContext('2d')
untuk menghindari peregangan gambar.Browser menggunakan lebar dan tinggi css, tetapi elemen kanvas bersisik berdasarkan lebar dan tinggi kanvas. Dalam javascript, baca lebar dan tinggi css dan atur lebar kanvas untuk itu.
sumber
Koreksi shannimal
sumber
CSS menetapkan lebar dan tinggi elemen kanvas sehingga memengaruhi ruang koordinat sehingga semua yang digambar miring
Inilah cara saya tentang cara mengatur lebar dan tinggi dengan Vanilla JavaScript
sumber
Jika Anda menginginkan perilaku dinamis berdasarkan, misalnya kueri media CSS, jangan gunakan atribut lebar dan tinggi kanvas. Gunakan aturan CSS dan kemudian, sebelum mendapatkan konteks render kanvas, tetapkan untuk atribut width dan height lebar dan tinggi gaya CSS:
sumber