본문 바로가기
CSS

MouseHover 애니메이션

by 코터틀 2022. 9. 20.
반응형

마우스 오버 애니메이션

Code pen을 사용하여 마우스 오버시 x/y축으로 회전하여 다른 이미지를 보여주는 애니메이션을 만들었습니다.
재방문하신 선생님도 고생하셨습니다.


HTML

전체를 감싸는 hover__wrap내부에 x축을 기준으로 회전할 hover__updown 영역의 전, 후와 y축을 기준으로 회전할 hover__leftright 영역의 전, 후로 총 4개의 이미지가 들어가도록 영역을 설정합니다.

<div class="hover__wrap">
    <div class="hover__updown">
        <figure class="front">
            <img src="https://raw.githubusercontent.com/sukjun2/coding2/main/animation/img/codepen_bg01.jpg" alt="Up">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>마우스 올리면 Up</p>
            </figcaption>
            <!-- figure의 설명을 나타내는 태그 -->
        </figure>
        <figure class="back">
            <img src="https://raw.githubusercontent.com/sukjun2/coding2/main/animation/img/codepen_bg02.jpg" alt="Down">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>마우스 내리면 Down</p>
            </figcaption>
            <!-- figure의 설명을 나타내는 태그 -->
        </figure>
    </div>
    <div class="hover__leftright">
        <figure class="front">
            <img src="https://raw.githubusercontent.com/sukjun2/coding2/main/animation/img/codepen_bg03.jpg" alt="Right">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>마우스 올리면 to Right</p>
            </figcaption>
            <!-- figure의 설명을 나타내는 태그 -->
        </figure>
        <figure class="back">
            <img src="https://raw.githubusercontent.com/sukjun2/coding2/main/animation/img/codepen_bg04.jpg" alt="Left">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>마우스 내리면 to Left</p>
            </figcaption>
            <!-- figure의 설명을 나타내는 태그 -->
        </figure>
    </div>
</div>

CSS

원하는 폰트를 설정하고, 그라데이션 배경색을 지정합니다. 이 때 화면이 2개로 나누어진다면 높이값을 설정해줍니다.
x축 기준, y축 기준의 두개의 영역을 나란히 놓기위해 wrap영역에 display : flex를 설정하고 화면의 중앙에 위치하도록 설정합니다.
각 영역의 배경효과를 설정하고 전, 후 영역에 마우스 오버시 X, Y축 회전 애니메이션을 설정해줍니다.
(backface-visibility: hidden => css 설정은 후면에 위치한 이미지를 숨김처리합니다.)
(transform-style: preserve-3d / perspective: 300px => 애니메이션에 3d효과를 주어 px값에 따라 원근감을 표현해줍니다.)

@font-face {
    font-family: 'LocusSangsang';
    font-weight: normal;
    font-style: normal;
    src: url('https://cdn.jsdelivr.net/gh/webfontworld/locus/LocusSangsang.eot');
    src: url('https://cdn.jsdelivr.net/gh/webfontworld/locus/LocusSangsang.eot?#iefix') format('embedded-opentype'),
            url('https://cdn.jsdelivr.net/gh/webfontworld/locus/LocusSangsang.woff2') format('woff2'),
            url('https://cdn.jsdelivr.net/gh/webfontworld/locus/LocusSangsang.woff') format('woff'),
            url('https://cdn.jsdelivr.net/gh/webfontworld/locus/LocusSangsang.ttf') format("truetype");
    font-display: swap;
}

body {
    font-family: 'LocusSangsang';
    background-image: linear-gradient(
        135deg,
        #191970 0%,
        #483D8B 40%,
        #9370DB 100%
    );
    height: 100vh;
}

.hover__wrap {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

.hover__wrap > div {
    max-width: 400px;
    margin: 3%;
    position: relative;
    perspective: 300px
    /* perspective = 원근감 표현 */
}

.hover__wrap > div img {
    width: 100%;
    border: 10px solid #F0F8FF;
    box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    vertical-align: top;
}

.hover__wrap > div .front {
    transition: transform 1s;
    backface-visibility: hidden;
    transform-style: preserve-3d;
}

.hover__wrap > div .back {
    position: absolute;
    left: 0;
    top: 0;
    z-index: -1;
    transition: transform 1s;
    transform-style: preserve-3d;
}

.hover__wrap > div figcaption {
    background: rgba(0, 0, 0, 0.4);
    color: #F8F8FF;
    padding: 10px;
    text-align: center;
    line-height: 1.5;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%) translatez(100px);
    width: 60%;
    backface-visibility: hidden;
}

/* mouse hover effect */
.hover__updown .front {
    transform: rotateX(0deg);
}

.hover__updown:hover .front {
    transform: rotateX(180deg);
}

.hover__updown .back {
    transform: rotateX(-180deg);
}

.hover__updown:hover .back {
    transform: rotateX(0deg);
}

.hover__leftright .front {
    transform: rotateY(0deg);
}

.hover__leftright:hover .front {
    transform: rotateY(180deg);
}

.hover__leftright .back {
    transform: rotateY(-180deg);
}

.hover__leftright:hover .back {
    transform: rotateY(0deg);
}
반응형

'CSS' 카테고리의 다른 글

BoxStretch 애니메이션  (5) 2022.09.25
TextBounce 애니메이션  (8) 2022.09.22
Wave 애니메이션  (5) 2022.09.19
Walking 애니메이션  (12) 2022.09.07
Text 애니메이션  (9) 2022.09.07

댓글


광고 준비중입니다.