TIL(퍼블리싱) -10

hoin_lee·2023년 5월 6일
0

TIL

목록 보기
182/236

publishing

모든 진행의 css부분은 stylesimport받은 module.css를 사용했습니다.

hover시 over된 메뉴만 진해지는 메뉴

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 시켜서 해결해주면 됩니다.

hover시 내용이 위 아래로 넓어지며 상세내용이 나오기

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

hover시 위로 떠오르는 3D애니메이션

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을 사용할 땐 초기값이 필요하다. 없다면 동작하지 않는다.
    • ex) top:-50%;로 바로 쓸 경우 동작 하지 않는다 top:0;처럼 기본 위치값을 준다면 top이 0에서 -50%로 가는 동안의 transition이 동작한다.
profile
https://mo-i-programmers.tistory.com/

0개의 댓글