☭DEVELOPER/#2 웹개발(자바기반 풀스택)

비주얼 스튜디오 코드 30 _ 마우스오버 효과 ⑤

조반짝 2023. 6. 14. 11:32
728x90
반응형

원근감을 이용한 회전효과

html 골격만들기

>css

figure라는 공통된 태그를 넣어주면 명령어를 줄여서 쓸수 있다.

● perspective : 투시점 , 부모에게 적용해야함

left 가 기준점(relative)이고

figcaption 수정하기

figcaption에 translateZ를 추가해서 이미지와 피그캡션을 z축으로 띄어준다.

left 이미지 효과주기

.front , .back 에 transform-style 넣어준다,

● transform-style : preserve-3d  > 3d로 사용하겠다.

아래에 #wrap .left .front{} 하나 더 만들어준다.

transform: rotateY / 시간값 / backface-visibility: hidden 적용

 #wrap .left:hover .front{}

left에 hover 시에 Y축으로 180도 회전되도록 한다. 

<html>

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>원근감을 이용한 회전</title>
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>
    <div id="wrap">
        <div class="left effect">
            <figure class="front">
                <img src="./img/img01.png" alt="거실이미지">
                <figcaption>
                    <h3>왼쪽이미지 앞면입니다.</h3>
                </figcaption>
            </figure>
            <figure class="back">
                <img src="./img/img02.png" alt="거실이미지2">
                <figcaption>
                    <h3>왼쪽이미지 뒷면입니다.</h3>
                </figcaption>
            </figure>
        </div>
        <div class="right effect">
                <figure class="front">
                    <img src="./img/img03.png" alt="식물이미지1">
                    <figcaption>
                        <h3>오른쪽 이미지 앞면입니다.</h3>
                    </figcaption>
                </figure>
                <figure class="back">
                    <img src="./img/img04.png" alt="식물이미지2">
                    <figcaption>
                        <h3>오른쪽 이미지 뒷면입니다.</h3>
                    </figcaption>
                </figure>
            

        </div>
    </div>
</body>
</html>

<css>

@charset "utf-8";

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

img{
    display: block;
}

body{
    height: 100vh;
    background-color: #0f2027;
}

#wrap{
    height: 100vh;
    /* 세로가운데 정렬하기 위해서는 높이값이 있어야함 */
    display: flex;
    align-items: center;
    justify-content: center;
}

#wrap .left{
    width: 400px;
    height: 300px;
    margin: 10px;
    /* 투시점 : 부모에게 주어야한다.*/
    perspective: 1000px;
    position: relative;
}
#wrap .left .front{
    position: absolute;
    left:0;
    top: 0;
    z-index: 10;
    transform-style: preserve-3d;
    /* 3d로 사용을 하겠다 */

    /* display: none; */
}
#wrap .left .back{
    position: absolute;
    left:0;
    top: 0;
    z-index: 9;
    transform-style: preserve-3d;
    /* 3d로 사용을 하겠다 */
}

/* figure에 넣어주면 front, back 동시에 명령이 적용된다 */
#wrap .left figure img{
    width: 100%;
}
#wrap .left figure figcaption{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%) translateZ(100px);
    /* translateZ 원근감 주기 */
    background-color: rgba(255,255,255,0.3);
    padding: 20px;
    backface-visibility: hidden;
}
#wrap .left figure figcaption h3{
    font-size: 24px;
    white-space: nowrap;
    /* 한줄에 글자가 가게 함 */
}

/* 왼쪽이미지 효과주기 */

#wrap .left .front{
    transform: rotateY(0deg);
    transition: all 5s;
    backface-visibility: hidden;
}

#wrap .left:hover .front{
    transform: rotateY(180deg);
}


#wrap .left .back{
    transform: rotateY(-180deg);
    transition: all 5s;
    backface-visibility: hidden;
}

#wrap .left:hover .back{
    transform: rotateY(0deg);
}

/* 오른쪽 이미지 */

#wrap .right{
    
    height: 300px;
    width: 400px;
    margin: 10px;
    position: relative;
    perspective: 1000px;
    /* 투시점 */
}

#wrap .right .front{
    position: absolute;
    left: 0;
    top: 0;
    transform-style: preserve-3d;
    
}
#wrap .right .back{
    position: absolute;
    left: 0;
    top: 0;
    transform-style: preserve-3d;
}

#wrap .right figure{
   
}
#wrap .right figure img{
    width: 100%;
}
#wrap .right figure figcaption{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%) translateZ(100px);
    background-color: rgba(255,255,255,0.3);
    padding: 20px;
    backface-visibility: hidden;
}
#wrap .right figure figcaption h3{
    white-space: nowrap;
    font-size: 24px;
}

#wrap .right .front{
    transform: rotateX(0deg);
    transition: all 1s;
    backface-visibility: hidden;
}
#wrap .right:hover .front{
    transform: rotateX(180deg);
}
#wrap .right .back{
    transform: rotateX(-180deg);
    transition: all 1s;
    backface-visibility: hidden;
}
#wrap .right:hover .back{
    transform: rotateX(0deg);
}
728x90
반응형