본문 바로가기
웹/CSS

[코딩 공부_43] transform - translate, scale, skew, rotate?

by BEE_0o0 2021. 4. 2.

오늘 배운 내용인 transform의 translate, scale, skew, rotate에 대해 정리하는 시간을 가져보겠다!

 

translate : 이동

 - element 현재의 위치에서 이동을 시작한다

 -  value : px(x축, y축), %(본인 크기에 대한) / translateZ(px) : 3D에서 사용한다 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>translate</title>
<style>
    /* body {
        text-align: center;
    } */
    .box {
        width: 400px;
        height: 400px;
        margin-top: 200px;
        margin-top: 200px;
        /* display: inline-block; */
        background: gold;
        border: 10px solid red;
    }
    img {
        border-radius: 50%;
        width: 200px;
        height: 200px;
        display: block;
        transition: all .5s;
        transform: translate(50%, 50%);
        
    }
</style>
</head>
<body>
    <div class="box">
        <img src="./image/eggs-3216877_1920.jpg" alt="호랑이 이미지" title="호랑이 이미지">
    </div>
</body>
</html>

<중앙정렬>

 

<translate과 margin의 차이는 ?>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>margin vs translate</title>
<style>
    * {
        box-sizing: border-box;
        /* margin: 0;
        padding: 0; */
    }
    .wrap {
        display: inline-block;
        background: beige;
        border: 1px solid #000;
    }
    .box {
        display: inline-block;
        width: 200px;
        height: 200px;
        border: 1px solid #000;
    }
    .box:nth-of-type(1) {
        background: skyblue;
    }
    .box:nth-of-type(2) {
        background: gold;
        /* transform: translate(200px); */
        /* margin-left: 200px; */
    }
    .box:nth-of-type(3) {
        /* transform: translate(400px); */
        background: coral;
        /* margin-left: 100px; */
    }
</style>
</head>
<body>
    <div class="wrap">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>
</html>

- 기본 형태이다 gold 색에는 translate를 coral 색에는 margin-left를 넣어 차이를 주도록 하겠다!

 

<gold에 translate를 주었을 때>

 

 

<coral에 margin-left를 주었을 떄>

- translate를 주어 위치를 이동시키면 전체적인 박스형태는 그대로 gold 박스만 이동하지만, margin은 전체적인 박스도 같이 움직이기 때문에 hover같은 기능을 주었을 때 왔다리갔다리 하는 요상한 버그가 생기게 된다! 차이점을 유의해서 사용하자!!

 

 

 

scale : 규모

 - 확대 축소가 가능하다 ! defult는 1이다 

 -  value : 숫자만(x축, y축)/ translateZ(px) : 3D에서 사용한다 

<!-- 
    * 작성자 : 이예빈
    * 일시 : 2021. 04. 02
    * 내용 : scale 적용화면
    * 참고 : 010-1234-1234
    * 얼른 이 프로젝트에서 도망가세요  
 -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>scale</title>
<style>
    .box {
        margin: 200px auto;
        width: 300px;
        height: 200px;
        background: gold;
        border: 10px solid red
    }
    /* 참고 : scale 1.5 (디자이너와 20210402, 기획 합의 내용) */
    img {
        max-width: 100%;
        transition: 1.5s;
    }

.box:hover img {
    /* scale defult: 1 */
    transform: scaleX(1.5);
}
</style>
</head>
<body>
    <div class="box">
        <img src="./image/eggs-3216877_1920.jpg" alt="eggs">
    </div>
</body>
</html>

- 마우스에 content를 갖다대면 x축이 1.5 커지도록 설정하였다!

(참고) 주석의 활용성 : 회사에서 누가 작성한 코드인지 맨위에 기재해두면 좋다고 한다! 그리고 기획서와 다르게 디자이너와 구두로 상의해서 수정한 부분도 주석으로 표시해두면 좋다!! 

 

rotate : 회전

 -  value : px(x축, y축, z축), rotate3d(1, 1, 1, 30deg) / rotate() : z축 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>rotate</title>
<style>
    body {
        perspective: 1000px;
    }
    .box {
        width: 300px;
        height: 300px;
        border: 10px solid red;
        margin: 0 auto;
    }
    img {
        max-width: 100%;
        height: 100%;
        transition: all .5s;
    }
    .box:hover img {
        /* transform: rotateY(40deg); */
        transform: rotate(30deg);
        /* transform: rotate(1, 1, 0, 70deg); */
    }
    </style>
</head>
<body>
    <div class="box">
        <img src="./image/eggs-3216877_1920.jpg" alt="">
    </div>
</body>
</html>

 

 

<실습 : sns 아이콘을 rotate하기>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.3/css/all.css" integrity="sha384-SZXxX4whJ79/gErwcOYf+zWLeJdY/qpuqC4cAa9rOGUstPomtqpuNWT9wdPEn2fk" crossorigin="anonymous">
<title>sns rotate</title>
<style>
    /* simple reset css */
    * {
        box-sizing: border-box;
    }
    a {
        color: inherit;
        text-decoration: none;
    }
    /* sns rotate */
    .sns {
        /* border: 1px solid #000; */
        text-align: center;
    }
    .sns a {
        /* border: 1px solid red; */
        display: inline-block;
        padding: 1rem;
        border-radius: 50%;
        border: 1px solid #999;
        margin-right: 0.5rem;
    }
    .sns a .fab {
        color: #999;
        font-size: 2rem;
        width: 34px;
        transition: all .5s;
    }
    .sns a:hover {
        border: 1px solid #111;
    }
    .sns a:hover .fab {
        transform: rotateY(360deg);
        color: #fff;
    }
    .sns a:nth-child(1):hover {
        background: #3b5999;
    }
    .sns a:nth-child(2):hover {
        background: #e3305f;
    }
    .sns a:nth-child(3):hover {
        background: #55acee;
    }
    .sns a:nth-child(4):hover {
        background: #dd4b39;
    }
</style>
</head>
<body>
    <div class="sns">
        <a href="http://www.facebook.com">
            <i class="fab fa-facebook-f">
            </i>
        </a>
        <a href="http://www.instagrem.com">
            <i class="fab fa-instagram">
            </i>
        </a>
        <a href="http://www.twitter.com">
            <i class="fab fa-twitter">
            </i>
        </a>
        <a href="http://www.google.com">
            <i class="fab fa-google">
            </i>
        </a>
    </div>
</body>
</html>

클릭하면 로고 색상에 맞게 아이콘 색상이 변하는데,, ㅠㅠ 화면 녹화를 어떻게 하는 지 몰라서 그냥 캡처만 했다.... 

프로그램까지 깔아봤지만 결국 못했다 ......... 어떻게 하는 건지 더 찾아봐야겠다 ㅠㅠㅠㅠㅠㅠㅠㅠ

 

 

 

skew : 비틀기

- skew(40deg, 40deg) * x축, y축

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>skew practice</title>
<style>
    .box {
        /* 크기가 있어야 마진 오토가 적용된다 */
        /* margin: 0 auto; */
        margin-top: 100px;
        text-align: center;
        transition: all .5s;
    }
    .box:hover img {
        transform: skew(45deg);
    }
</style>
</head>
<body>
    <div class="box">
        <img src="./image/filter-img.png" alt="">
    </div>
</body>
</html>

- 비틀기는 기울어진다고 생각하면 편하다!!

(참고) 내가 자꾸 버그가 뜬다했던 부분이 바로 전체 magin : 0 auto 줬을 때, 중간정렬이 안되는 거 였는데 선생님이 말씀해주셔서 감동이었다 ..ㅎㅎ 크기가 있어야 margin auto가 적용된다!! 당연하게 사용하다보면 왜 오류가 생기는 지 잘모르는 게 많은 거 같다 ..  ㅠㅠ 더 열심히 해야겠다!

 

 

<실습>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>skew sample</title>
<style>
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    body {
        background: #ffdfde;
        color: #666;
        /* text-shadow: 0 0 2px #ddd; */
        
    }
    .skew-bg {
        background: #6a7ba2;
        padding: 100px 0px;
        transform: skewY(-10deg) translateY(-90px);
        padding: 200px 0 100px 0;
        margin-top: -100px;
    }
    .skew-bg .container {
        transform: skewY(10deg);
        color: #fff;
    }
    .normal-bg {
        text-align: right;
        
    }
    .container {
        padding: 100px 100px;
        /* border: 1px solid #000; */
    }
    h1 {
        margin-bottom: 1rem;
    }
</style>
</head>
<body>
    <div class="wrap">
        <div class="skew-bg">
            <div class="container">
                <h1>    
                    yebin.lee blog
                </h1>
                <p>
                    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis voluptatibus expedita quaerat et in maiores rerum deserunt animi temporibus beatae natus magni, laudantium cum pariatur fugit, dolore eius impedit veritatis!
                </p>
            </div>
        </div>
        <div class="normal-bg">
            <div class="container">
                <h1>
                    inside
                </h1>
                <p>
                    Lorem, ipsum dolor sit amet consectetur adipisicing elit. Laborum ea illum quos earum vero libero sequi quo magni similique alias sunt quod, non rerum. Magnam dolore obcaecati maxime eligendi itaque.
                </p>
            </div>
        </div>
    </div>


</body>
</html>

 

- 자꾸 skew이 안되서 뭐지뭐지 하면서 30분동안 쩔쩔 맸는데 transform: skewY(-10deg), translateY(-90px);라고 작성해서 안된거였다 ,, 정말 쉼표 세미클론 마침표 이 세개 오타 찾는 게 젤 어려운 거 같다,, 눈에 잘안들어온다 하하.......

댓글