[CSS] 3D ํšจ๊ณผ (perspective)

Chenยท2024๋…„ 6์›” 4์ผ

CSS

๋ชฉ๋ก ๋ณด๊ธฐ
5/8
post-thumbnail

Transform rotate๊ณผ ๋‹ค๋ฅธ ์ ?

  • CSS์—์„œ transform: rotate ์ž์ฒด๋กœ๋Š” 3d ๋А๋‚Œ์„ ์ค„ ์ˆ˜ ์—†์Œ
  • ๊ฒฐ๊ตญ, 3์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•จ

[๋ฒˆ์™ธ] rem ๊ณผ em ์˜ ์ฐจ์ด

rem, em ๋ชจ๋‘ ์ƒ๋Œ€์ ์ธ ๊ธธ์ด ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋ƒ„, ์ƒ์œ„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ๋‹ค๋ฅผ ๋ฟ

rem = DOM Tree์—์„œ ๊ฐ€์žฅ ์ƒ๋‹จ์— ์žˆ๋Š” elm ๊ธธ์ด ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™” (์ฆ‰, rem์€ <html> ์˜ font-size ์†์„ฑ๊ฐ’์ด ๊ธฐ์ค€)

em = ์ ์šฉ๋œ elm์˜ ์ง๊ณ„ ๋ถ€๋ชจ ๊ธธ์ด ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™”

card {
    border-radius: 0.5em;
    font-size: 1.5rem;
}

/*   ํฐํŠธ์‚ฌ์ด์ฆˆ์— border-radius๊ฐ€ ๋น„๋ก€ํ•˜๋„๋ก ํ•˜๋Š” ์˜๋„ */
  • cf. ๋ณดํ†ต font-size์—๋Š” rem, padding์ด๋‚˜ margin๊ฐ™์ด ํ™”๋ฉด์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€ํ•˜๋Š” ํฌ๊ธฐ๋Š” em ์‚ฌ์šฉ

3D ๊ณต๊ฐ„์€ perspective ์†์„ฑ์œผ๋กœ

perspective ์†์„ฑ

// ํ˜„์žฌ html ๊ตฌ์กฐ

    <div class="world">
        <div class="card">CARD</div>
        <div class="card">CARD</div>
        <div class="card">CARD</div>
    </div>

์‚ฌ๋žŒ ๋ˆˆ์— ๊ฐ€๊นŒ์ด ์žˆ์„์ˆ˜๋ก, 3D ํšจ๊ณผ๊ฐ€ "๊ทน์ "์œผ๋กœ ๋ณด์ž„

  1. perspective: 1000px (์™„๋งŒํ•˜๊ฒŒ)
  2. perspective: 500px (์กฐ๊ธˆ ๋” "๊ทน์ "์œผ๋กœ)
.world {
	perspective: 500px;
}

perspective์œผ๋กœ ๋™์ผํ•œ 3d ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ ์‹ถ์„ ๋•Œ

๋ถ€๋ชจ elm์— perspective๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด, ๋ฐ”๋กœ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์นด๋“œ์˜ 3d ํšจ๊ณผ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค

ํ•˜์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด, 2d ์นด๋“œ๊ฒŒ์ž„์—์„œ๋Š” ์นด๋“œ ํŒจ์— ๋™์ผํ•œ 3d ํšจ๊ณผ๊ฐ€ ์ ์šฉ๋˜์–ด์•ผ ํ•จ

๋ถ€๋ชจ elm์ด ์•„๋‹Œ ๋ณธ์ธ์˜ transform ์†์„ฑ์—๊ฒŒ perspective ์„ ์ฃผ๋ฉด ๋œ๋‹ค!

.card {
	transform: perspective(500px) rotateY(45deg);
}

๊ฒฐ๋ก 

  1. ๊ทน์ ์œผ๋กœ, ๋ฆฌ์–ผํ•œ 3d ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด => ๋ถ€๋ชจ elm์—๊ฒŒ perspective
  2. ๋™์ผํ•œ 3d ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ  ์‹ถ์œผ๋ฉด => ๋ณธ์ธ ์ž์ฒด์˜ transform ์†์„ฑ์—๊ฒŒ perspective
profile
ํ˜„์‹ค์ ์ธ ๋ชฝ์ƒ๊ฐ€

0๊ฐœ์˜ ๋Œ“๊ธ€