πŸ“Web Developing/CSS 기초

VI. νŠΈλžœμ§€μ…˜κ³Ό μ• λ‹ˆλ©”μ΄μ…˜ - 1. λ³€ν˜•

Hush 2022. 6. 7. 22:26

transform κ³Ό λ³€ν˜• ν•¨μˆ˜

CSSμ—μ„œ λ³€ν˜•μ„ μ μš©ν•˜λ €λ©΄ transform 속성과 λ³€ν˜• ν•¨μˆ˜ 이름을 ν•¨κ»˜ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

transform: ν•¨μˆ˜

μ›Ή μš”μ†Œλ₯Ό μ΄λ™μ‹œν‚€λŠ” λ³€ν˜• ν•¨μˆ˜λŠ” translate()인데, 예λ₯Ό λ“€μ–΄ μ›Ή μš”μ†Œλ₯Ό xμΆ•μœΌλ‘œ 50px, yμΆ•μœΌλ‘œ 100px μ΄λ™ν•˜λŠ” 클래슀 μ„ νƒμž .photoλ₯Ό μ •μ˜ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.

.photo {transform: translate(50px, 100px); }

 

2차원 λ³€ν˜•κ³Ό 3차원 λ³€ν˜•

2차원 λ³€ν˜•μ€ μ›Ή μš”μ†Œλ₯Ό ν‰λ©΄μ—μ„œ λ³€ν˜•ν•œλ‹€.

예λ₯Ό λ“€μ–΄ μˆ˜ν‰λ°©ν–₯으둜 μ΄λ™ν•˜κ±°λ‚˜ 수직 λ°©ν–₯으둜 μ™Έκ³‘ν•œλ‹€.

μ΄λ ‡κ²Œ ν‰λ©΄μ—μ„œ λ³€ν˜•ν•  λ•ŒλŠ” 2차원 μ’Œν‘œλ₯Ό μ‚¬μš©ν•˜λŠ”λ°,

x좕은 였λ₯Έμͺ½μœΌλ‘œ 갈 수둝 값이 컀지고

y좕은 μ•„λž˜λ‘œ λ‚΄λ €κ°ˆμˆ˜λ‘ 값이 컀진닀.

 

반면 3차원 λ³€ν˜•μ€ 2차원 좕에 z좕을 μΆ”κ°€ν•΄μ„œ λ³€ν˜•ν•œλ‹€.

3차원 λ³€ν˜•μ—μ„œ z좕은 μ•žλ’€λ‘œ μ΄λ™ν•˜λ©°, λ³΄λŠ” μ‚¬λžŒ μͺ½μœΌλ‘œ λ‹€κ°€μ˜¬μˆ˜λ‘ 값이 컀지고 λ’€λ‘œ 갈수둝 값이 μž‘μ•„μ§„λ‹€.

 

2차원 λ³€ν˜• ν•¨μˆ˜

2μ°¨μ›μ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€ν˜• ν•¨μˆ˜μ˜ μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

λ³€ν˜• μ „ 사진. 200px * 200px λ°•μŠ€.

μ’…λ₯˜ μ„€λͺ…  
translate(tx, ty) μ§€μ •ν•œ 크기만큼 xμΆ•, yμΆ•μœΌλ‘œ μ΄λ™ν•œλ‹€.
(μ˜ˆμ‹œλŠ” 50px, 100px)
translateX(tx) μ§€μ •ν•œ 크기만큼 xμΆ•μœΌλ‘œ μ΄λ™ν•œλ‹€.  
translateY(ty) μ§€μ •ν•œ 크기만큼 yμΆ•μœΌλ‘œ μ΄λ™ν•œλ‹€.  
scale(sx,sy) μ§€μ •ν•œ λΉ„μœ¨λ§ŒνΌ xμΆ•κ³Ό yμΆ•μœΌλ‘œ ν™•λŒ€ μΆ•μ†Œν•œλ‹€.
(μ˜ˆμ‹œλŠ” 1.5, 1.5 λ˜λŠ” 150%, 150%)
ν™•λŒ€ μΆ•μ†Œμ˜ 기쀀이 μš”μ†Œμ˜ μ€‘μ‹¬μž„μ„ μ°Έκ³ .

scaleX(sx) μ§€μ •ν•œ 크기만큼 xμΆ•μœΌλ‘œ ν™•λŒ€ μΆ•μ†Œν•œλ‹€.  
scaleY(sy) μ§€μ •ν•œ 크기만큼 yμΆ•μœΌλ‘œ ν™•λŒ€ μΆ•μ†Œν•œλ‹€.  
rotate(각도) μ§€μ •ν•œ κ°λ„λ§ŒνΌ νšŒμ „ν•œλ‹€.
(μ˜ˆμ‹œλŠ” 20deg)
skew(ax, ay) μ§€μ •ν•œ κ°λ„λ§ŒνΌ xμΆ•κ³Ό yμΆ•μœΌλ‘œ μ™œκ³‘ν•œλ‹€.
(μ˜ˆμ‹œλŠ” 20deg, 5deg)
skewX(ax) μ§€μ •ν•œ κ°λ„λ§ŒνΌ xμΆ•μœΌλ‘œ μ™œκ³‘ν•œλ‹€  
skewY(ay) μ§€μ •ν•œ κ°λ„λ§ŒνΌ yμΆ•μœΌλ‘œ μ™œκ³‘ν•œλ‹€.  

 

3차원 λ³€ν˜• ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

μ’…λ₯˜ μ„€λͺ…
translate3d(tx, ty, tz) μ§€μ •ν•œ 크기만큼 μ΄λ™ν•©λ‹ˆλ‹€.
translateZ(tz) μ§€μ •ν•œ 크기만큼 zμΆ•μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
scale3d(sx, sy, sz) μ§€μ •ν•œ λΉ„μœ¨λ§ŒνΌ ν™•λŒ€ μΆ•μ†Œν•©λ‹ˆλ‹€.
scaleZ(sz) μ§€μ •ν•œ λΉ„μœ¨λ§ŒνΌ zμΆ•μœΌλ‘œ ν™•λŒ€ μΆ•μ†Œν•©λ‹ˆλ‹€.
rotate(rx, ry, 각도) μ§€μ •ν•œ κ°λ„λ§ŒνΌ νšŒμ „ν•©λ‹ˆλ‹€.
rotate3d(rx, ry, rz, 각도) μ§€μ •ν•œ κ°λ„λ§ŒνΌ νšŒμ „ν•©λ‹ˆλ‹€.
rotateX(각도) μ§€μ •ν•œ κ°λ„λ§ŒνΌ xμΆ•μœΌλ‘œ νšŒμ „ν•©λ‹ˆλ‹€.
rotateY(각도) μ§€μ •ν•œ κ°λ„λ§ŒνΌ yμΆ•μœΌλ‘œ νšŒμ „ν•©λ‹ˆλ‹€.
rotateZ(각도) μ§€μ •ν•œ κ°λ„λ§ŒνΌ zμΆ•μœΌλ‘œ νšŒμ „ν•©λ‹ˆλ‹€.
perspective(길이) μž…μ²΄μ μœΌλ‘œ 보일 수 μžˆλ„λ‘ κΉŠμž‡κ°’μ„ μ§€μ •ν•©λ‹ˆλ‹€.

 

 

μ›Ή μš”μ†Œλ₯Ό μ΄λ™μ‹œν‚€λŠ” translate() ν•¨μˆ˜

translate() ν•¨μˆ˜λŠ” xμΆ•μ΄λ‚˜ yμΆ• λ˜λŠ” μ–‘μͺ½ λ°©ν–₯으둜 이동할 거리λ₯Ό μ§€μ •ν•˜λ©΄ ν•΄λ‹Ή μš”μ†Œκ°€ μ§€μ •ν•œ 크기만큼 μ΄λ™ν•œλ‹€.

translate() ν•¨μˆ˜μ—μ„œ μ‚¬μš©ν•˜λŠ” ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™λ‹€.

ν•¨μˆ˜ λ³€ν˜•λ‚΄μš©
transform: translate(tx, ty) x μΆ•μœΌλ‘œ tx만큼, yμΆ•μœΌλ‘œ ty만큼 μ΄λ™ν•©λ‹ˆλ‹€.
tx와 ty 두가지 값을 μ‚¬μš©ν•˜μ§€λ§Œ ty값이 μ£Όμ–΄μ§€μ§€ μ•ŠμœΌλ©΄ 0으둜 κ°„μ£Όν•©λ‹ˆλ‹€.
transform: translate3d(tx, ty, tz) xμΆ•μœΌλ‘œ tx만큼, yμΆ•μœΌλ‘œ ty만큼, 그리고 zμΆ•(μ•žλ’€)으둜 tz만큼 μ΄λ™ν•©λ‹ˆλ‹€.
transform: translateX(tx) xμΆ•μœΌλ‘œ tx만큼 μ΄λ™ν•©λ‹ˆλ‹€.
transform: translateY(ty) yμΆ•μœΌλ‘œ ty만큼 μ΄λ™ν•©λ‹ˆλ‹€.
transform: translateZ(tz) zμΆ•μœΌλ‘œ tz만큼 μ΄λ™ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ translate() ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ μ‚¬μš©μžκ°€ λ„ν˜• μœ„λ‘œ 마우슀 포인터λ₯Ό μ˜¬λ €λ†“μœΌλ©΄ μ΄λ™ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€,

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="utf-8">  
        <title>Html-basic</title>
        <style>
            .box {
                width: 200px;
                height: 200px;
                background-color: blue;
                margin: 100px;
            }
            #movex:hover {transform: translateX(80px);}
            #movey:hover {transform: translateY(80px);}
            #movez:hover {transform: translateZ(80px);}

            
        </style>
    </head>
    <body>
        <div class="box" id="movex"></div>
        <div class="box" id="movey"></div>
        <div class="box" id="movez"></div>
    </body>
</html>

 

μš”μ†Œλ₯Ό ν™•λŒ€ μΆ•μ†Œν•˜λŠ” scale() ν•¨μˆ˜

scale() ν•¨μˆ˜λŠ” μ›Ή μš”μ†Œλ₯Ό μ§€μ •ν•œ 크기만큼 ν™•λŒ€ν•˜κ±°λ‚˜ μΆ•μ†Œν•œλ‹€.

scale() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™λ‹€.

κ΄„ν˜Έ μ•ˆμ˜ 값이 1 λ˜λŠ” 100%보닀 크면 ν™•λŒ€λ˜κ³  κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μΆ•μ†Œλœλ‹€.

μ’…λ₯˜ λ³€ν˜•κ²°κ³Ό
transform: scals(sx, sy) xμΆ•μœΌλ‘œ sxλ°°, yμΆ•μœΌλ‘œ syλ°° ν™•λŒ€ν•©λ‹ˆλ‹€.값이 ν•˜λ‚˜λΏμ΄λΌλ©΄ x, y 에 같은 값을 μ μš©ν•©λ‹ˆλ‹€.
transform: scale3d(sx, sy, sz) 각 μΆ•μœΌλ‘œ 각 κ°’λ§ŒνΌ ν™•λŒ€ν•©λ‹ˆλ‹€.
transform: scaleX(sx) ...
transform: scaleY(sy) ...
transform: scaleZ(sz) ...
<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="utf-8">  
        <title>Html-basic</title>
        <style>
            .box {
                width: 200px;
                height: 200px;
                background-color: blue;
                margin: 100px;
            }
            #scalex:hover {transform: scaleX(2);}
            #scaley:hover {transform: scaleY(2);}
            #scalez:hover {transform: scaleZ(2);}

            
        </style>
    </head>
    <body>
        <div class="box" id="scalex"></div>
        <div class="box" id="scaley"></div>
        <div class="box" id="scalez"></div>
    </body>
</html>

 

 

μš”μ†Œλ₯Ό νšŒμ „μ‹œν‚€λŠ” rotate() ν•¨μˆ˜

2차원 rotate()ν•¨μˆ˜

μš”μ†Œλ₯Ό νšŒμ „μ‹œν‚€λŠ” rotate() ν•¨μˆ˜λŠ” 2차원 νšŒμ „κ³Ό 3차원 νšŒμ „μ—μ„œ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€.

rotate() ν•¨μˆ˜λ₯Ό 2μ°¨μ›μ—μ„œ μ‚¬μš©ν•  λ•ŒλŠ” κ°λ„λ§Œ μ§€μ •ν•˜λ©΄ λœλ‹€.

ν•¨μˆ˜λŠ” μ›Ή μš”μ†Œλ₯Ό μ§€μ •ν•œ κ°λ„λ§ŒνΌ νšŒμ „μ‹œν‚¨λ‹€.

transform: rotate(각도)

rotate() ν•¨μˆ˜μ—μ„œ μ§€μ •ν•  수 μžˆλŠ” κ°λ„μ˜ 값은 degreeλ‚˜ radian을 μ‚¬μš©ν•œλ‹€.

값이 μ–‘μˆ˜μ΄λ©΄ μ‹œκ³„λ°©ν–₯으둜, 음수이면 λ°˜μ‹œκ³„λ°©ν–₯으둜 νšŒμ „ν•œλ‹€.

μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€

#rotate1:hover {transform: rotate(20deg);}
#rotate2:hover {transform: rotate(1rad);}

 

3차원 rotate() ν•¨μˆ˜

3차원 rotate() ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같이 xμΆ•, yμΆ•, z좕을 κΈ°μ€€μœΌλ‘œ νšŒμ „μ‹œν‚¨λ‹€.

transform: rotate(rx, ry, 각도)
transform: rotate3d(rx, ry, rz, 각도)
transform: rotateX(각도)
transform: rotateY(각도)
transform: rotateZ(각도)

μ΄λ•Œ perspective 속성을 ν•¨κ»˜ μ‚¬μš©ν•΄μ„œ 원근감을 μΆ”κ°€ν•΄ μ£Όλ©΄ νšŒμ „ ν˜•νƒœλ₯Ό μž…μ²΄μ μœΌλ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

perspective 속성은 3차원 λ³€ν˜•μ—μ„œ μ‚¬μš©ν•˜λŠ”λ°, κ΄€μΈ‘μ μ˜ 높이λ₯Ό μ„€μ •ν•˜μ—¬ 원근감을 ν‘œν˜„ν•œλ‹€.

μ£Όμ˜ν•  점은 perspective 속성은 λ³€ν˜•ν•˜λŠ” μš”μ†Œκ°€ μ•„λ‹ˆλΌ λ³€ν˜•ν•˜λŠ” μš”μ†Œμ˜ λΆ€λͺ¨ μš”μ†Œμ— μ •μ˜ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

rx, ry, rzλŠ” νšŒμ „μ˜ μΆ•μ΄λ˜λŠ” 벑터이닀.

 

 

μš”μ†Œλ₯Ό λΉ„ν‹€μ–΄ μ™œκ³‘ν•˜λŠ” skew() ν•¨μˆ˜

skew() ν•¨μˆ˜λŠ” μ§€μ •ν•œ κ°λ„λ§ŒνΌ μš”μ†Œλ₯Ό λΉ„ν‹€μ–΄ μ™œκ³‘ν•œλ‹€.

μ΄λ•Œ μ–‘μͺ½ λ°©ν–₯으둜 λΉ„ν‹€κ±°λ‚˜ ν•œμͺ½ λ°©ν–₯으둜만 λΉ„ν‹€ μˆ˜λ„ μžˆλ‹€.

transform: skew(x각도, y각도)
transform: skewX(x각도)
transform: skewY(y각도)
<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="utf-8">  
        <title>Html-basic</title>
        <style>
            .boxborder{
                width: 200px;
                height: 200px;
                border: solid;
                padding: 0px;
                margin: 60px
            }
            .box {
                width: 200px;
                height: 200px;
                background-color: blue;
            }
            #skewx {transform: skewX(30deg);}
            #skewy {transform: skewY(30deg);}
            #skewxy {transform: skew(30deg, 30deg);}
        </style>
    </head>
    <body>
        <div class="boxborder"><div class="box" id="skewx"></div></div>
        <div class="boxborder"><div class="box" id="skewy"></div></div>
        <div class="boxborder"><div class="box" id="skewxy"></div></div>
    </body>
</html>