본문 바로가기

기초 문법/HTML&CSS

[CSS] 특정 요소의 모양을 평면상에서 자유롭게 변형하기

 기존 웹 표준에서 모든 HTML 요소의 모양은 사각형이었으며 해당 모양을 변형할 수 있는 방법이 없엇지만 CSS3으로 넘어오면서 포토샵의 기능과 비슷한 변형 속성이 대거 추가되었습니다. 따라서 기존에 불가능하던 다양한 기법이 순수 CSS 기술만으로도 구현이 가능해졌습니다. 

 

다음은 transform에 속성 중 평면상에서 구현 가능한 기능들을 위주로 학습하겠습니다.

 

 

# Contents


  • translate
  • skew
  • scale
  • rotate
  • transform-origin

 

 

# translate


 translate는 현재 요소의 위치 값을 기준으로 x축 또는 y축으로 해당 요소를 이동시킵니다. 아래는 translate의 필수 구문입니다.

 

transform: translateX(x축 이동거리)

transform: translateY(y축 이동거리)

transform: translate(x축 이동거리, y축 이동거리) 

translate는 해당 요소의 원래 위치 값을 기준점으로 삼아 이동합니다.

 

먼저 예제코드를 보도록 하겠습니다. 첫번째로 index.html 코드입니다.

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="./css/reset.css" />
        <link rel="stylesheet" href="./css/style.css" />
    </head>
    <body>
        <div><p></p></div>
        <div><p></p></div>
        <div><p></p></div>
    </body>
</html>

 

다음은 style.css 코드입니다.

 

div {
    width: 200px;
    height: 200px;
    border: 1px solid red;
    margin-top: 20px;
}

div > p {
    width: 100%;
    height: 100%;
    background-color: red;
    opacity: 0.5;
}

div:nth-child(1) p {
    transform: translateX(100px);
}

div:nth-child(2) p {
    transform: translateY(100px);
}

div:nth-child(3) p {
    transform: translate(100px, 100px);
}

첫 번째 <div>의 <p> 태그는 오른쪽으로 100px 이동하고, 두 번째 <div>의 <p> 태그는 아래쪽으로 100px 이동하고, 세 번째 <div>의 <p> 태그는 오른쪽으로 100px 아래쪽으로 100px 이동한 것을 확인할 수 있습니다.

 

 

# skew


 skew는 현재 요소의 각도 값을 기준으로 x 축 또는 y축으로 해당 요소를 원하는 각도만큼 기울입니다. 아래는 skew의 필수 구문입니다.

 

transform: skewX(각도)

transform: skewY(각도)

transform: skew(x축 각도, y축 각도) 

 

각도를 나타내는 단위는 degree의 약자인 deg입니다.

 

먼저 예제코드를 보도록 하겠습니다. 첫번째로 index.html 코드입니다.

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="./css/reset.css" />
        <link rel="stylesheet" href="./css/style.css" />
    </head>
    <body>
        <div><p></p></div>
        <div><p></p></div>
        <div><p></p></div>
    </body>
</html>

 

다음은 style.css 코드입니다.

 

div {
    width: 200px;
    height: 200px;
    border: 1px solid red;
    margin-top: 20px;
}

div > p {
    width: 100%;
    height: 100%;
    background-color: red;
    opacity: 0.5;
}

div:nth-child(1) p {
    transform: skewX(30deg);
}

div:nth-child(2) p {
    transform: skewY(30deg);
}

div:nth-child(3) p {
    transform: skew(30deg, 30deg);
}

 

 

# scale


 scale는 현재 요소의 각도 값을 기준으로 x 축 또는 y축으로 해당 요소를 확대 축소 시킵니다. 아래는 scale의 필수 구문입니다.

 

transform: scaleX(x축 비율)

transform: scaleY(y축 비율)

transform: scale(x축 비율, y축 비율) 

 

scale 비율은 원본 크기 1을 기준으로 1보다 크면 확대, 1보다 작으면 축소됩니다. 비율 값은 소수점 이하로도 설정할 수 있습니다.

 

먼저 예제코드를 보도록 하겠습니다. 첫번째로 index.html 코드입니다.

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="./css/reset.css" />
        <link rel="stylesheet" href="./css/style.css" />
    </head>
    <body>
        <div><p></p></div>
        <div><p></p></div>
        <div><p></p></div>
    </body>
</html>

 

다음은 style.css 코드입니다.

 

div {
    width: 200px;
    height: 200px;
    border: 1px solid red;
    margin-top: 20px;
}

div > p {
    width: 100%;
    height: 100%;
    background-color: red;
    opacity: 0.5;
}

div:nth-child(1) p {
    transform: scaleX(1.5);
}

div:nth-child(2) p {
    transform: scaleY(0.5);
}

div:nth-child(3) p {
    transform: scale(1, 1);
}

 

 

# rotate


 rotate는 현재 요소의 각도 값을 기준으로 x 축 또는 y축으로 해당 요소를 평면상에서 회전시킵니다. 이전 속성들과는 달리 평면상에서 회전시킬 경우에는 따로 x축, y축을 지정하지 않습니다.

 

transform: rotate(각도)

 

먼저 예제코드를 보도록 하겠습니다. 첫번째로 index.html 코드입니다.

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="./css/reset.css" />
        <link rel="stylesheet" href="./css/style.css" />
    </head>
    <body>
        <div><p></p></div>
        <div><p></p></div>
        <div><p></p></div>
    </body>
</html>

 

다음은 style.css 코드입니다.

 

div {
    width: 200px;
    height: 200px;
    border: 1px solid red;
    margin-top: 20px;
}

div > p {
    width: 100%;
    height: 100%;
    background-color: red;
    opacity: 0.5;
}

div:nth-child(1) p {
    transform: rotate(15deg);
}

 

 

# transform-origin


 transform-origin 은 이처럼 변형이 일어나는 기준점을 사용자 임의로 변경해주는 기능입니다. 사용법은 다음과 같습니다.

 

transform-origin: left top

transform-origin: 20px 30px

transform-origin: 0% 100%

 

먼저 예제코드를 보도록 하겠습니다. 첫번째로 index.html 코드입니다.

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="./css/reset.css" />
        <link rel="stylesheet" href="./css/style.css" />
    </head>
    <body>
        <div><p></p></div>
        <div><p></p></div>
        <div><p></p></div>
    </body>
</html>

 

다음은 style.css 코드입니다.

 

div {
    width: 200px;
    height: 200px;
    border: 1px solid red;
    margin-top: 20px;
}

div > p {
    width: 100%;
    height: 100%;
    background-color: red;
    opacity: 0.5;
}

div:nth-child(1) p {
    transform-origin: right bottom;
    transform: rotate(15deg);
}