Canvas๋ ์ฃผ๋ก 2D ๊ทธ๋ํฝ์ ์ค์ ์ ๋
WebGL ์ฌ์ฉ์ 3D ๊ตฌํ๋ ๊ฐ๋ฅํ๋, WebGL๋ ๊ฒฐ๊ตญ canvas ๊ธฐ๋ฐ
ํฝ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ๊ฐ๋ฅํ๋ฏ๋ก, ์ผ๋ฐ html css๋ก ํํ ๋ถ๊ฐํ ๊ฒ๋ค ๊ฐ๋ฅ
(ex) Apple ๊ณตํ
๊ทธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฑฐ๋ค ๋ณธ svg์ ๋น๊ต๊ฐ ๋ง์ด ๋จ
๋ฒกํฐ = ์ ๊ณผ ์ ์ฌ์ด์ ์ฐ์ฐ์ ํตํด ๊ทธ๋ ค๋ด๋ ๊ฒ
(ex) ์ผ๋ฌ์คํธ
์ฅ์ : ์ฐ์ฐ์ผ๋ก ๊ทธ๋ฆผ => ํฌ๊ธฐ๊ฐ ์ปค์ ธ๋ ์ฉ๋ ๋์ด๋์ง ์์
๋ฐ๋ฉด, ์บ๋ฒ์ค๋ ๋นํธ๋งต์ด๋ฏ๋ก ์ ๊ณ์ฐํ ๊ฒ ๋ง์ผ๋ฉด ์ฐ์ฐ up, ๋ ๋๋ง ๋๋ ค์ง
<script>
// Canvas ์ง์ ์ฌ๋ถ ํ์ธ
if (Modernizr.canvas) {
// console.log('Canvas๋ฅผ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ');
}
const canvas = document.querySelector('canvas');
if (canvas.getContext) {
console.log('์บ๋ฒ์ค ์ง์');
}
</script>
500 x 300
๋น์ฐํ ์บ๋ฒ์ค์์ ๋/๋์ด ์ง์ ์ด ๊ฐ๋ฅํ๊ณ , CSS๋ก๋ ๋/๋์ด๋ฅผ ์ค ์ ์์
๊ทผ๋ฐ ๋งค์ฐ ํฐ ์ฐจ์ด์ ์กด์ฌ!
.canvas {
width: 500px;
height: 300px;
background: #eee;
}
<canvas class="canvas" width="500" height="300"></canvas>
<canvas class="canvas canvas2" width="1000" height="600"></canvas>
<script>
const canvas = document.querySelector('.canvas');
const canvas2 = document.querySelector('.canvas2');
const context = canvas.getContext('2d');
const context2 = canvas2.getContext('2d');
context.arc(100, 100, 50, 0, Math.PI*2, false);
context2.arc(100, 100, 50, 0, Math.PI*2, false);
context.fill();
context2.fill();
</script>
CSS๋ ๊ฐ์์ ์ผ๋ก ๋ดค์ ๋ ์ด๊ฑฐ์ง๋ก ๋ผ์๋ง์ถ ์๋ ์์ผ๋, canvas ์์์ ์์๋ฅผ ๊ทธ๋ ธ์ ๋ canvas๊ฐ ๋ถ์ฌํ ๋/๋์ด ๊ธฐ์ค์ผ๋ก ๊ทธ๋ ค์ง
์์ฒ๋ผ ๋ ํฐ๋ ๋์์ ์ํด CSS๋ก ์ค์ด๋ ๋ฐฉ๋ฒ์ด ์์ฃผ ์ฐ์. Canvas ๊ฐ ํ์คํฌ๋ฆฐ์ผ๋ก ์ฐ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด๋๋ ์ด๋ป๊ฒ ์ค์ด๋?
=> JS๋ก ์บ๋ฒ์ค์ ๋/๋์ด๋ฅผ window ์คํฌ๋ฆฐ*2๋ฐฐ๋ก ํ ํ, CSS์์๋ 100%
=> BUT ๋ง๋ฅ ์ข์ง๋ ์์. ํฝ์
๊ฐ์๊ฐ ๋ง์์ ธ์ ๋ ๋๋ง ์๋ ์ ํ
=> SO ๋ฏธ์ vs ์ฑ๋ฅ ์ ๊ณ ๋ คํด์
(ex) Apple ๊ณตํ๋ 2๋ฐฐ ํด์ CSS๋ก 2๋ฐฐ ์ค์