Jieunny์ ๋ธ๋ก๊ทธ
S4) Unit 2. [HTML/CSS] CSS ์ ๋๋ฉ์ด์ & Canvas ๋ณธ๋ฌธ
S4) Unit 2. [HTML/CSS] CSS ์ ๋๋ฉ์ด์ & Canvas
Jieunny 2023. 3. 17. 12:00๐ฃ CSS ์ ๋๋ฉ์ด์
๐ญ. CSS ์ ๋๋ฉ์ด์
โ๏ธ ์ฌ๋ฌ ๊ฐ์ CSS ์คํ์ผ์ ๋ถ๋๋ฝ๊ฒ ์ ํ์์ผ์ค๋ค.
โฐ @keyframes ํค์๋๋ฅผ ํ์ฉํ๋ฉด ์๊ฐ ์์๋๋ก ์ ๋ฐํ๊ฒ ์ง์ฌ์ง ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ ์๋ค.
๐ฎ. @keyframes
1๏ธโฃ CSS๋ก ํคํ๋ ์ ๋ธ๋ก ๋ง๋ค๊ธฐ
/* '%' ๋จ์๋ก ์๊ฐ ์งํ์ ๋ฐ๋ฅธ ์ํ๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค. */
@keyframes ์ ๋๋ฉ์ด์
์ด๋ฆ {
0% { /* from ์ด๋ผ๊ณ ์์ฑํด๋ ๋ฉ๋๋ค.*/
CSS์์ฑ : ์์ฑ๊ฐ;
}
50% { /* ์ ๋๋ฉ์ด์
์งํ๋์ ๋ฐ๋ฅธ ์คํ์ผ์ ์ค์ ํฉ๋๋ค. */
/* ํ์ํ๋ค๋ฉด 1๋ถํฐ 99๊น์ง๋, ์์์ ๊น์ง๋ ๋ชจ๋ ์์ฑํด๋ ๋ฉ๋๋ค.*/
CSS์์ฑ : ์์ฑ๊ฐ;
}
100% { /* to ๋ผ๊ณ ์์ฑํด๋ ๋ฉ๋๋ค.*/
CSS์์ฑ : ์์ฑ๊ฐ;
}
}
2๏ธโฃ ํคํ๋ ์ ์ ๋๋ฉ์ด์ ๋ง๋ค๊ธฐ
@keyframes lotate {
0% {
transform : rotate(0deg)
}
50% {
transform : rotate(180deg)
}
100% {
transform : rotate(360deg)
}
}
/* ์์ ์์ ์์ 0๋, 50% ์์ ์์ 180๋, ์๋ฃ ์์ ์์ 360๋ ํ์ ์ํค๋ ์ ๋๋ฉ์ด์
์
๋๋ค. */
3๏ธโฃ ์ ์ฉ์ํค๊ณ ์ถ์ ์์์ animation ์์ฑ์ผ๋ก ํคํ๋ ์ ์ด๋ฆ ๋ถ๋ฌ์ค๊ธฐ
๐ฏ. animation ์์ฑ
โ๏ธ animation : ๋์ด์ฐ๊ธฐ๋ก ์์ฑ์ ๋์ด ํ ์ ์๋ค.
โฐ animation-name : ์ ๋๋ฉ์ด์ ์ ์ค๊ฐ ์ํ๋ฅผ ์ง์ ํ๋ ์ด๋ฆ. @keyframes ๋ธ๋ก์ ์์ฑ
โฐ animation-duration : ํ ์ธ์ดํด์ ์ ๋๋ฉ์ด์ ์ด ์ฌ์๋ ์๊ฐ ์ง์
โฐ animation-delay : ์ ๋๋ฉ์ด์ ์ ์์์ ์ง์ฐ์ํฌ ์๊ฐ ์ง์
โฐ animation-direction : ์ ๋๋ฉ์ด์ ์ฌ์ ๋ฐฉํฅ์ ์ง์
โฐ animation-iteration-count : ์ ๋๋ฉ์ด์ ์ด ๋ช ๋ฒ ๋ฐ๋ณต๋ ์ง ์ง์
โฐ animation-play-state : ์ ๋๋ฉ์ด์ ์ ์ฌ์ ์ํ. ๋ฉ์ถ๊ฑฐ๋ ๋ค์ ์ฌ์ ์ํฌ ์ ์์
โฐ animation-timing-function : ์ค๊ฐ ์ํ๋ค์ ์ ํ์ ์ด๋ค ์๊ฐ๊ฐ๊ฒฉ์ผ๋ก ์งํํ ์ง ์ง์
โฐ animation-fill-mode : ์ ๋๋ฉ์ด์ ์ด ์ฌ์ ์ ํ์ ์ํ ์ง์
#logo {
**animation-name : lotate;** /* lotate ๋ผ๋ ์ด๋ฆ์ ํคํ๋ ์ ์ ๋๋ฉ์ด์
์ */
animation-duration : 3s; /* 3์ด ๋์ ์ฌ์ํ๋ฉฐ, */
animation-iteration-count : infinite; /* ์ ๋๋ฉ์ด์
์ ๋ฌดํ ๋ฐ๋ณตํ๊ณ , */
animation-timing-function : linear; /* ์ ํ์ผ๋ก ์ฌ์ํฉ๋๋ค. */
}
/* ์๋์ ๊ฐ์ด ์ผ๊ด ์์ฑํด๋ ๋์ผํ๊ฒ ์ ์ฉ */
#logo {
animation : **lotate** 3s infinite linear;
}
๐ฃ Canvas
๐ญ. Canvas
โ๏ธ ๋จ์ํ ๋ํ๋ถํฐ ๋ฐ์ดํฐ ์๊ฐํ, ์ ๋๋ฉ์ด์ , ์น ๊ฒ์ ๋ฑ์ ์ปจํ ์ธ ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
๐ฎ. Canvas ์ฌ์ฉ๋ฒ
1๏ธโฃ ์บ๋ฒ์ค ํ๊ทธ ์์ฑ
<canvas id="canvas">
์บ๋ฒ์ค๋ฅผ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์์๋ ์บ๋ฒ์ค ๋์ ํ๊ทธ ์ฌ์ด ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
</canvas>
2๏ธโฃ canvas ์๋ฆฌ๋จผํธ๋ฅผ DOM์ผ๋ก ์กฐ์
const canvas = document.querySelector("#canvas");
3๏ธโฃ canvas ํฌ๊ธฐ ์ค์
<canvas id="canvas" width="500" height="500"></canvas>
<canvas id="canvas" width="50vw" height="40vh"></canvas>
// vw, vh๋ฅผ ์ ๋ฌํ์ง๋ง 50ํฝ์
* 40ํฝ์
๋ก ์ค์ ๋ฉ๋๋ค.
โฐ ์บ๋ฒ์ค ํ๊ทธ์ width, height ์์ฑ์ ํฝ์ ๋จ์๋ก๋ง ๋ช ์ํด์ผ ์ธ์ํ๋ค.
// ํ๋ฉด ํฌ๊ธฐ์ ๋ง์ถฐ์ ์ค์ ํด์ค ์๋ ์์ต๋๋ค.
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
// ํ๋ฉด ํฌ๊ธฐ๋ฅผ ๊ฐ์ ธ์ ๊ทธ์ ๋น๋กํ์ฌ ์ค์ ํด์ค ์๋ ์์ต๋๋ค.
canvas.width = window.innerWidth * 0.5;
canvas.height = window.innerHeight * 0.4;
// DOM์ผ๋ก ์ค์ ํ ์, ํฝ์
๋จ์๊ฐ ์๋ vw, vh๋ก ๋จ์๊ฐ์ ์ง์ ํด๋ ์ค์ ์ด ๋ฉ๋๋ค.
// ์ฃผ์ํด์ผ ํ ์ ์ style ์์ฑ์ ์ด์ฉํ์ฌ ํฌ๊ธฐ์ ๋ณํ๋ฅผ ์ฃผ๋ ๊ฒฝ์ฐ๋ ํฝ์
์ ํฌ๊ธฐ๊น์ง ํด๋น ๋จ์์ ๋น๋กํด ํ๋ํ๋ ๊ฐ๋
์ด๋ฏ๋ก,
// ํน์ ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์ฌ์ฉ์ ์์ ํฉ๋๋ค.
canvas.style.width = "50vw";
canvas.style.height = "40vh";
โฐ DOM์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ฉด ์ํ๋ ๋จ์๋ก ์ ๋์ ์ธ ๊ฐ์ ์ค์ ํด์ค ์ ์๋ค.
๐ฃ Canvas๋ก ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
๐ญ. ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
โ๏ธ ์์น ๋ ์ฌ๊ฐํ
ctx.fillStyle = 'blue';
// ์์น ํ ์์
ctx.fillRext = (10, 10, 100, 50);
//์ ๋ฌ ์ธ์๋ ์์๋๋ก x์ขํ, y์ขํ, ๊ฐ๋ก๊ธธ์ด, ์ธ๋ก๊ธธ์ด ์
๋๋ค.
โ๏ธ ์ ์ผ๋ก๋ง ๋ ์ฌ๊ฐํ
ctx.lineWidth = 5;
// ์ ์ ๊ตต๊ธฐ
ctx.strokeStyle = "black";
// ์ ์ ์์
ctx.strokeRect(10, 10, 100, 50);
//์ ๋ฌ ์ธ์๋ ์ด๋ฒ์๋ ์์๋๋ก x์ขํ, y์ขํ, ๊ฐ๋ก๊ธธ์ด, ์ธ๋ก๊ธธ์ด ์
๋๋ค.
//์์์ ๊ทธ๋ ค์ค ์์น ๋ ์ฌ๊ฐํ ๋ฐ๋ก ์์ ๊ทธ๋ ค๋ณด์ธ์.
โ๏ธ ์ฌ๊ฐํ์ผ๋ก ์ง์ฐ๊ธฐ
ctx.clearRect( 20, 20, 80, 30);
// ์ง์ธ ๋ฒ์ ์ค์
// ์ ๋ฌ ์ธ์๋ ์ญ์ ๋์ผํฉ๋๋ค. ๊ทธ๋ ค๋์ ์ฌ๊ฐํ ๊ฐ์ด๋ฐ ๋ถ๋ถ์ ์ง์๋ณด์ธ์.
๐ฎ. ์บ๋ฒ์ค๋ก ํด๋ฆญ ์ด๋ฒคํธ ๋ง๋ค๊ธฐ
โ๏ธ ์บ๋ฒ์ค๋ฅผ ํด๋ฆญํ๋ฉด ํด๋ฆญํ๋ ์์น์ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๋ ์ด๋ฒคํธ
canvas.onclick = function (event) {
const x = event.clientX - ctx.canvas.offsetLeft
// ํ๋ฉด์ ๋ง์ฐ์ค ์์น - ํ๋ฉด์ ์บ๋ฒ์ค ์์น
const y = event.clientY - ctx.canvas.offsetTop
// ๊ตฌํ ์ขํ๋ฅผ ์ด์ฉํด์ ์ฌ๊ฐํ์ ๊ทธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
ctx.fillRect(x - 15, y - 15, 30, 30);
// ํด๋ฆญํ ๋๋ง๋ค 30ํฝ์
*30ํฝ์
ํฌ๊ธฐ์ ์ฌ๊ฐํ์ ๊ทธ๋ฆฌ๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
// ์ด ๋, x, y๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ๋ฉด ํด๋น ์ขํ๋ถํฐ ์ฌ๊ฐํ์ด ์์๋์ด ์ด์ํ ๋๋์ ์ค๋๋ค.
// ํด๋ฆญํ ์์น๋ฅผ ์ฌ๊ฐํ์ ์ ์ค์์ด ๋๊ฒ ํ๋ ค๋ฉด ์ฌ๊ฐํํฌ๊ธฐ/2 ํ ๋งํผ ์ขํ์์ ๋นผ์ฃผ๋ฉด ๋ฉ๋๋ค.
// ๋ฐ๋ผ์ x - 15, y - 15 ๋ฅผ ์ ๋ฌํฉ๋๋ค.
}
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S4) Unit 4. [React] Virtual DOM (0) | 2023.03.22 |
---|---|
S4) Unit 3. [React] ๋ฒ๋ค๋ง๊ณผ ์นํฉ (0) | 2023.03.20 |
S4) Unit 2. [HTML/CSS] ๋ฐ์ํ ์น (0) | 2023.03.16 |
S4) Unit 2. [HTML/CSS] ๋ธ๋ผ์ฐ์ &๋ ๋๋ง (0) | 2023.03.16 |
S4) Unit 1. [์๋ฃ๊ตฌ์กฐ/ ์๊ณ ๋ฆฌ์ฆ] Tree & Graph (0) | 2023.03.15 |