모든 진행의 css
부분은 styles
로 import
받은 module.css
를 사용했습니다.
const OverNavi = () => {
return (
<div className={styles.gnb}>
<a href="#none">New Arrivals</a>
<a href="#none">Summer Collection</a>
<a href="#none">Winter Collection</a>
<a href="#none">Special Offers</a>
<a href="#none">Trends</a>
</div>
);
};
export default OverNavi;
CSS
.gnb {
display: inline-block;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.gnb a {
display: block;
font-size: 40px;
margin: 40px 20px;
color: blue;
transition: 0.5s;
}
.gnb a:before {
content: "\f105";
font-family: fontawesome;
margin-right: 10px;
opacity: 0;
transition: 0.5s;
}
.gnb a:hover:before {
opacity: 1;
}
.gnb:hover a {
opacity: 0.3;
}
.gnb a:hover {
opacity: 1;
}
폰트 어썸부분은 import 시켜서 해결해주면 됩니다.
const TopDownNavi = () => {
return (
<div className={styles.items}>
<div className={styles.item}>
<div className={styles.front}>
<img src={`${process.env.PUBLIC_URL}/assets/planet01.jpg`} />
<h2>PLANET-01</h2>
</div>
<div className={styles.back}>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi, eligendi aperiam! Corrupti, mollitia, quasi ipsa dignissimos
</p>
<a href="#none">Read More</a>
</div>
</div>
<div className={styles.item}>
<div className={styles.front}>
<img src={`${process.env.PUBLIC_URL}/assets/planet02.jpg`} />
<h2>PLANET-02</h2>
</div>
<div className={styles.back}>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi, eligendi aperiam! Corrupti, mollitia, quasi ipsa dignissimos
</p>
<a href="#none">Read More</a>
</div>
</div>
<div className={styles.item}>
<div className={styles.front}>
<img src={`${process.env.PUBLIC_URL}/assets/planet03.jpg`} />
<h2>PLANET-03</h2>
</div>
<div className={styles.back}>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi, eligendi aperiam! Corrupti, mollitia, quasi ipsa dignissimos
</p>
<a href="#none">Read More</a>
</div>
</div>
</div>
);
};
export default TopDownNavi
이미지는 freepik 에서 사용했습니다.
CSS
.items {
text-align: center;
background-color: #222;
width: 100%;
height: 600px;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
.item {
width: 250px;
height: 250px;
margin: 0 20px;
position: relative;
}
.front,
.back {
position: absolute;
transition: 0.5s;
}
.front {
background-color: #333;
width: 100%;
height: 250px;
z-index: 1;
}
.front img {
width: 100%;
height: 100%;
}
.item:hover .front img {
animation: ani 1s linear infinite;
}
.front h2 {
width: 140px;
margin: 0;
bottom: 0;
left: 50%;
transform: translateX(-50%);
position: absolute;
color: #fff;
}
.back {
background-color: #fff;
color: #000;
height: 250px;
width: inherit;
text-align: center;
padding: 20px;
box-sizing: border-box;
opacity: 0;
}
.back a {
background-color: yellowgreen;
color: #fff;
padding: 5px 15px;
border-radius: 20px;
}
.back a:hover {
background-color: #000;
}
.item:hover .front {
transform: translateY(-50%);
}
.item:hover .back {
transform: translateY(50%);
opacity: 1;
}
@keyframes ani {
0%{
transform: scale(1);
}
50%{
transform: scale(1.1);
}
100%{
transform: scale(1);
}
}
const Hover3DAni = () => {
return (
<div className={styles.container}>
<div className={styles.app_ui}>
<img src={`${process.env.PUBLIC_URL}/assets/app-01.jpg`} />
<img src={`${process.env.PUBLIC_URL}/assets/app-02.jpg`} />
<img src={`${process.env.PUBLIC_URL}/assets/app-03.jpg`} />
<img src={`${process.env.PUBLIC_URL}/assets/app-04.jpg`} />
</div>
</div>
);
};
export default Hover3DAni;
이미지는 핸드폰 화면 ui를 사용했습니다.
CSS
.container{
display: flex;
justify-content: center;
align-items: center;
height: 1000px;
padding:20px 0;
}
.app_ui {
width: 340px;
height: 640px;
transform: rotate(-30deg) skewX(20deg);
position: relative;
box-shadow: 0 0 20px rgba(0,0,0,0.3);
transition: 0.5s;
background-color: #ddd;
}
.app_ui:hover {
box-shadow: -50px 100px 20px rgba(0,0,0,0.3);
}
.app_ui img {
position: absolute;
transition: 0.5s;
}
.app_ui:hover img:nth-child(1) {
transform: translate(40px,-40px);
opacity: 0.2;
}
.app_ui:hover img:nth-child(2) {
transform: translate(80px,-80px);
opacity: 0.4;
}
.app_ui:hover img:nth-child(3) {
transform: translate(120px,-120px);
opacity: 0.6;
}
.app_ui:hover img:nth-child(4) {
transform: translate(160px,-160px);
}
저번과 똑같은 부분도 있는데
transform
을 중복 사용시엔 속성을 함께 입력하자. 그렇지 않으면 뒤에 쓰여진 것이 덮어버린다.transform
속성에서 rotate
라는 회전 속성도 있지만skew
속성을 쓰면 더 많은 trans를 줄 수 있다.hover
를 붙일시 hover
가 되는 대상이고 그 뒤에 다른 선택자가 올 시 hover
된 선택자에 마우스가 올라간다면 뒤에 들어온 다른 선택자의 css
가 변경된다.transition
을 사용할 땐 초기값이 필요하다. 없다면 동작하지 않는다.top:-50%;
로 바로 쓸 경우 동작 하지 않는다 top:0;
처럼 기본 위치값을 준다면 top
이 0에서 -50%로 가는 동안의 transition
이 동작한다.