MarkUp/CSS

[CSS] hover를 이용한 3D 이팩트 효과 만들기

hhnn 2022. 1. 5. 10:08

본 게시글은 코딩웍스 HTML+CSS+JS 포트폴리오 실전 퍼블리싱을 참고하여 작성하였습니다.

 

<!doctype html>
<html lang="ko">
<head>
    <title>앱 UI 3D 호버 이팩트 효과 만들기</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        body {display: flex; justify-content: center; align-items: center; height: 100vh;}
        /*.container {position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);}*/
        .appUi {position: relative; width: 340px; height: 640px; transform: rotate(-30deg) skewX(20deg);
            background-color: #eee; box-shadow: 0 0 20px rgba(0,0,0,0.3); transition: .5s;}
        .appUi:hover {box-shadow: -50px 100px 60px rgba(0,0,0,0.3);}
        .appUi img {position: absolute; transition: .5s;}
        .appUi:hover img:nth-child(1) {transform: translate(40px, -40px); opacity: 0.2;}
        .appUi:hover img:nth-child(2) {transform: translate(80px, -80px); opacity: 0.4;}
        .appUi:hover img:nth-child(3) {transform: translate(120px, -120px); opacity: 0.6;}
        .appUi:hover img:nth-child(4) {transform: translate(160px, -160px);}
    </style>
</head>
<body>
<div class="container">
    <div class="appUi">
        <img src="images/app-ui-01.jpg" alt="">
        <img src="images/app-ui-02.jpg" alt="">
        <img src="images/app-ui-03.jpg" alt="">
        <img src="images/app-ui-04.jpg" alt="">
    </div>
</div>
</body>
</html>

 

#1. img 기울이기

 

transform을 1개 이상 중복해서 사용할 경우 아래처럼 css를 적용해야 한다.

/*올바르지 않은 예 : 마지막에 있는 속성과 값이 덮어버림*/
.appUi {
    transform: rotate(-30deg);
    transform: skewX(20deg);
}


/*올바른 사용 예 : */
.appUi {
    transform: rotate(-30deg) skewX(20deg);
}

rotate만 지정했을 경우에는 img의 기울기가 부자연스럽기 때문에 skewX를 지정해준다.

 

rotate 와 skew 함께 지정한 모습

#2. 마우스 hover되었을 때 카드의 움직임 상태 만들기

.appUi가 hover되었을 때 img가 순차적으로 움직여야 하기 때문에

.appUi:hover img:nth-child(1) {transform: translate(40px, -40px); opacity: 0.2;}
.appUi:hover img:nth-child(2) {transform: translate(80px, -80px); opacity: 0.4;}
.appUi:hover img:nth-child(3) {transform: translate(120px, -120px); opacity: 0.6;}
.appUi:hover img:nth-child(4) {transform: translate(160px, -160px);}

간격은 40단위로 지정했고, opacity를 0.2단위로 지정해 하단의 카드로 내려갈 수록 흐려지게 했다.

 

 

 

#3. img 하단부 그림자 느낌 주기 (box-shadow)

.appUi자체에 box-shadow를 주어 바닥에 깔려있는 듯한 느낌을 주었다.

또한 transition되었을 때 그림자가 더 퍼진 듯한 느낌을 주었다.

 

box-shadow: 0 0 20px rgba(0,0,0,0.3);
	/*X축 Y축 퍼짐정도(숫자커지면 더 크게 퍼진다) 색상*/

 

반응형
SMALL