Dragonball Online Goku Hand
본문 바로가기
CSS

[CSS] "마우스를 오버했을 때 3d느낌으로 회전하는 사진" 을 만들어봅시다!

by 별의 코비 2022. 9. 20.
728x90

codepen을 이용해서 3d 마우스 오버효과를 곁들인 빙글뱅글 동물사진을 만들어봅시다!


마우스를 올리고 내릴 때의 오버효과를 3d효과를 적용하여 만들어봅시다!:)
참고로 사진의 주제는 가끔 사람같아보이는 동물들입니다. 🐴❤︎


코드 소스를 알아봅시다.💻

✔️HTML

up down 했을 때의 앞부분(front)와 뒷부분(back)과 To right, left했을 때 앞면(front)과 뒷면(back)부분의 틀을 작성해줍니다.
<div class="hover__wrap">
    <div class="hover__updown">
      <figure class="front">
        <img src="https://github.com/KwonHyehyeon/coding/blob/main/animation/img/hover_up.jpg?raw=true" alt="다람쥐">
        <figcaption>
          <h3>Mouse Hover Effect</h3>
          <p>마우스 올리면 up↑</p>
        </figcaption>
      </figure>
      <figure class="back">
        <img src="https://github.com/KwonHyehyeon/coding/blob/main/animation/img/hover_down.jpg?raw=true" alt="말">
        <figcaption>
          <h3>Mouse Hover Effect</h3>
          <p>마우스 내리면 down↓</p>
        </figcaption>
      </figure>
    </div>
    <div class="hover__leftright">
      <figure class="front">
        <img src="https://github.com/KwonHyehyeon/coding/blob/main/animation/img/hover_right.jpg?raw=true" alt="소">
        <figcaption>
          <h3>Mouse Hover Effect</h3>
          <p>마우스 올리면 to Right →</p>
        </figcaption>
      </figure>
      <figure class="back">
        <img src="https://github.com/KwonHyehyeon/coding/blob/main/animation/img/hover_left.jpg?raw=true" 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%, #483088 40%, #0370DB 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;
/*  원근감을 주는 것  3d 공간의 깊이를 표현 : 값이 낮을 수록 원근효과 ↑ */
  perspective: 1000px;
}
.hover__wrap > div img {
  width: 100%;
  border: 5px 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;
/* 기본 값은 "flat"로, 자식 요소는 2D의 2차원에서 부모 요소와 동일한 평면에 배치되지만, "transform-style : preserve-3d;"을 지정하여 3D 공간에 배치되도록 함. */
  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는 요소의 뒷쪽에서 앞면이 보이게 할지 정하는 속성  */
  backface-visibility: hidden;
}
/* mouse hover effect */
/* X축을 기준으로 반전 효과 rotateX */
/* Y축을 기준으로 반전 효과 rotateY */
.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);
}

댓글