๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CSS

CSS ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋งŒ๋“ค๊ธฐ : ์นด๋“œ ๋’ค์ง‘๊ธฐ

by ์ฝ”ํŒŒ์นด 2022. 9. 20.
728x90

CSS ์• ๋‹ˆ๋ฉ”์ด์…˜ : ์นด๋“œ ๋’ค์ง‘๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜

์˜ค๋Š˜์€ ๋งˆ์šฐ์Šค๋ฅผ ์˜ค๋ฒ„ํ–ˆ์„ ๋•Œ ์นด๋“œ๊ฐ€ ๋’ค์ง‘ํžˆ๋Š” ๋“ฏํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ์ž‘์—…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž‘์—…ํ•ด๋ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

See the Pen hoveranimation by mj0614k (@mj0614k) on CodePen.


1. HTML ์†Œ์Šค

<div class="hover__wrap">
    <div class="hover__updown">
        <figure class="front">
            <img src="img01">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด Up</p>
            </figcaption>
        </figure>
        <figure class="back">
            <img src="img02">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>๋งˆ์šฐ์Šค๋ฅผ ๋‚ด๋ฆฌ๋ฉด Down</p>
            </figcaption>
        </figure>
    </div>
    <div class="hover__leftright">
        <figure class="front">
            <img src="img03">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด to Right</p>
            </figcaption>
        </figure>
        <figure class="back">
            <img src="img04">
            <figcaption>
                <h3>Mouse Hover Effect</h3>
                <p>๋งˆ์šฐ์Šค๋ฅผ ๋‚ด๋ฆฌ๋ฉด to Left</p>
            </figcaption>
        </figure>
    </div>
</div>

HTML ์†Œ์Šค๋Š” ์ „์ฒด์— ํ•ด๋‹นํ•˜๋Š” hover__wrap ์•ˆ์— hover__updown, hover__leftright ๋‘ ๊ฐœ์˜ div ๋ฐ•์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ๊ทธ ์•ˆ์—๋Š” ๊ฐ๊ฐ ์•ž, ๋’ค์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , figcaption ํƒœ๊ทธ ์•ˆ์— ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2. CSS ์†Œ์Šค

.hover__wrap {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}
.hover__wrap > div {
    max-width: 400px;
    margin: 3%;
    position: relative;
    perspective: 1000px;
}
.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;
}

/* 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);
}

hover__wrap์—๋Š” flex ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋“ค์„ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•ด ์ค๋‹ˆ๋‹ค.
prespective ์†์„ฑ์€ CSS๋กœ 3D ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ, ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์›๊ทผ๊ฐ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ๊ฐ€๊น๊ฒŒ ๋ณด์ด๊ณ , ํด์ˆ˜๋ก ๋ฉ€๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.
backface-visibility ์†์„ฑ์€ ์š”์†Œ์˜ ๋’ค์ชฝ์—์„œ ์•ž๋ฉด์ด ๋ณด์ด๊ฒŒ ํ• ์ง€ ์ •ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์— hidden ๊ฐ’์„ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ, ์š”์†Œ๊ฐ€ ๋’ค์ง‘ํ˜”์„ ๋•Œ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ˆจ๊ธฐ๊ณ , ๋’ค์— ์žˆ๋˜ ์š”์†Œ์ธ back ์ด๋ฏธ์ง€๊ฐ€ ๋ณด์ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
body์˜ ๊ทธ๋ผ๋ฐ์ด์…˜ ์†Œ์Šค๋Š” ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์†Œ์Šค๋Š” ์ฝ”๋“œํŽœ์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ„์˜ HTML, CSS ์†Œ์Šค๋ฅผ ํ•ฉ์น˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ์˜์ฃ ?

728x90

๋Œ“๊ธ€

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฆ™

CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘