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

[CSS] ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ํšจ๊ณผ(Mouse Hover Effect)

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 9. 20.
๋ฐ˜์‘ํ˜•

๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ํšจ๊ณผ ๋งŒ๋“ค๊ธฐ๐Ÿญ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

HTML ์ฝ”๋“œ

hover__wrap ์•ˆ์— hover__updown, hover__leftright ๋‘ ๊ฐœ์˜ div ๋ฐ•์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ๊ฐ๊ฐ์˜ div ๋ฐ•์Šค ์•ˆ์— figure class="front"์™€ "back" ์•ˆ์— ์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด๊ฐ„ ํ˜•ํƒœ๋กœ Hover์‹œ์—๋Š” back, ํ‰์ƒ์‹œ์—๋Š” front๊ฐ€ ๋˜๋„๋ก ๋‚˜์ค‘์— CSS ์ฝ”๋”ฉ์„ ํ•ด์ค€๋‹ค.

์ฝ”๋“œ ํŽผ์ณ๋ณด๊ธฐ
<div class="hover__wrap">
  <div class="hover__updown">
    <figure class="front">
      <img src="https://oranssy.github.io/coding/animation/img/hoverUp.jpg" alt="">
      <figcaption>
        <h3>Mouse Hover Effect</h3>
        <p>๋งˆ์šฐ์Šค ์˜ฌ๋ฆฌ๋ฉด Up</p>
      </figcaption>
    </figure>
    <figure class="back">
      <img src="https://oranssy.github.io/coding/animation/img/hoverDown.jpg" alt="">
      <figcaption>
        <h3>Mouse Hover Effect</h3>
        <p>๋งˆ์šฐ์Šค ๋‚ด๋ฆฌ๋ฉด Down</p>
      </figcaption>
   </figure>
  </div>
  
  <div class="hover__leftright">
    <figure class="front">
      <img src="https://oranssy.github.io/coding/animation/img/hoverLeft.jpg" alt="">
      <figcaption>
        <h3>Mouse Hover Effect</h3>
        <p>๋งˆ์šฐ์Šค ์˜ฌ๋ฆฌ๋ฉด to Right</p>
      </figcaption>
    </figure>
    <figure class="back">
      <img src="https://oranssy.github.io/coding/animation/img/hoverRight.jpg" alt="">
      <figcaption>
        <h3>Mouse Hover Effect</h3>
        <p>๋งˆ์šฐ์Šค ๋‚ด๋ฆฌ๋ฉด to Left</p>
      </figcaption>
   </figure>
  </div>
</div>

CSS ์ฝ”๋“œ

/* ์›นํฐํŠธ */
@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: 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;
}

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

/* mouse hover effect */
.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);
}

๊ฒฐ๊ณผ๋ฌผ

์™„~์„ฑ๐Ÿญ๐Ÿญ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.