프론트엔드 공부/CSS 기초

16일차 프론트엔드 공부 - transform

프망생222 2024. 9. 21. 17:34

- 16일차 프론트엔드 공부 -


transform

1. 변형 시킨다는 의미

2. 요소에 이동, 회전, 확대축소, 비틀기 등의 변형 효과를 줄 수 있다.

 

transform의 속성값

translate(x, y)

scale(x, y)

skew(x-angle, y-angle)

rotate(angle)

 

translate(x, y)

요소의 좌표를 움직일 수 있다.

x축으로 x만큼, y축으로 y만큼 이동시킨다.

transform: translate(20px, 20%)

 

translateX(n)

요소의 X축 좌표를 n만큼 움직일 수 있다.

transform: translateX(20px)

 

translateY(n)

요소의 Y축 좌표를 n만큼 움직일 수 있다.

transform: translateY(20px)

 

scale(x, y)

X축으로 x만큼, Y축으로 y만큼, 요소를 축소 혹은 확대한다.

transform: scale(0.75, 1.1)

 

scaleX(n)

요소를 X축 방향으로 n만큼 축소 혹은 확대한다.

transform: scaleX(1.1)

 

scaleY(n)

요소를 Y축 방향으로 n만큼 축소 혹은 확대한다.

transform: scaleY(0.45)

 

skew(x-angle, y-angle)

X축으로 x도 만큼, Y축으로 y도 만큼, 요소를 기울인다.

transform: skew(15deg, 10deg)

 

skewX(n)

요소를 X축으로 n도 만큼 기울인다.

transform: skewX(15deg)

 

skewY(n)

요소를 Y축으로 n도 만큼 기울인다.

transform: skewY(15deg)

 

rotate(angle)

요소를 n만큼 회전시킨다.

transform: rotate(45deg)

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="container">
        <div class="base"></div>
        <div class="target target1">
            <span>translate</span>
        </div>
    </div>
    <div class="container">
        <div class="base"></div>
        <div class="target target2">
            <span>scale</span>
        </div>
    </div>
    <div class="container">
        <div class="base"></div>
        <div class="target target3">
            <span>skew</span>
        </div>
    </div>
    <div class="container">
        <div class="base"></div>
        <div class="target target4">
            <span>rotate</span>
        </div>
    </div>
</body>
</html>

 

* {
    box-sizing: border-box;
}

.container {
    width: 500px;
    height: 320px;
    position: relative;
}

.base {
    width: 200px;
    height: 200px;
    border: 2px dashed #aaaaaa;
    border-radius: 10px;
    background: #dddddd;
}

.target {
    width: 200px;
    height: 200px;
    background: rgba(0, 0, 255, 0.8);
    position: absolute;
    top: 0;
    left: 0;
    border: 2px solid blue;
    border-radius: 10px;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
}

.target span {
    color: #ffffff;
}

.target1 {
    transform: translate(50%, 20px);
}

.target2 {
    transform: scale(0.8, 1.2);
}

.target3 {
    transform: skew(30deg, 0);
}

.target4 {
    transform: rotate(45deg);
}

 

transform 실습

 

 

transform 중

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="container">
        <div class="base"></div>
        <div class="target target1">
            <span>quiz</span>
        </div>
    </div>
</body>
</html>

 

 

* {
    box-sizing: border-box;
}

.container {
    width: 500px;
    height: 320px;
    position: relative;
}

.base {
    width: 200px;
    height: 200px;
    border: 2px dashed #aaaaaa;
    border-radius: 10px;
    background: #dddddd;
}

.target {
    width: 200px;
    height: 200px;
    background: rgba(0, 0, 255, 0.8);
    position: absolute;
    top: 0;
    left: 0;
    border: 2px solid blue;
    border-radius: 10px;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
}

.target span {
    color: #ffffff;
}

.target1 {
    transform: scaleY(0.75) skewX(20deg);
}

 

 

transform 중첩 실습

 

 

transform + translate

위 이미지 처럼 박스에 마우스를 두면 한글자씩 올라가는 박스를 만들어 볼 것이다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="box">
        <span id="text1">T</span>
        <span id="text2">R</span>
        <span id="text3">A</span>
        <span id="text4">N</span>
        <span id="text5">S</span>
        <span id="text6">F</span>
        <span id="text7">O</span>
        <span id="text8">R</span>
        <span id="text9">M</span>
    </div>
</body>
</html>

 

* {
    box-sizing: border-box;
}

.box {
    width: 600px;
    height: 120px;
    background-image: linear-gradient(to top, blue, orange);
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
}

.box span {
    font-size: 35px;
    color: white;
    font-weight: 600;
    transition: transform 0.4s ease-in-out;
}

.box #text1 {
    transition: transform 0.4s ease-in-out;
}

.box #text2 {
    transition: transform 0.4s ease-in-out 0.1s;
}

.box #text3 {
    transition: transform 0.4s ease-in-out 0.2s;
}

.box #text4 {
    transition: transform 0.4s ease-in-out 0.3s;
}

.box #text5 {
    transition: transform 0.4s ease-in-out 0.4s;
}

.box #text6 {
    transition: transform 0.4s ease-in-out 0.5s;
}

.box #text7 {
    transition: transform 0.4s ease-in-out 0.6s;
}

.box #text8 {
    transition: transform 0.4s ease-in-out 0.7s;
}

.box #text9 {
    transition: transform 0.4s ease-in-out 0.8s;
}

.box:hover span {
    transform: translateY(-20px);
}