Space
article thumbnail
반응형

[React & Next.js] 모달 만들기

 

영상

 

반응형

모달의 형식

기본적인 모달의 형식은 

 

1. 모달 내용 부분

    - 내용 부분이 화면 가운데 오면서 고정되고, 다른 아이템들보다 가장 위에 있어야 한다.

       화면고정 : fixed

       화면 가운데 위치 : top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%]

       가장 위에 위치 : z-[1000] (다른 아이템들의 z-index보다 높게 설정하면 됨)

       배경색 : 원하시는 배경색 입력

 

2. 모달 바깥 부분

    - 모든 화면을 포함하고, 반투명한 배경이며, 모달 내용 부분 보단 낮고 다른 아이템들 보다는 위에 있어야 한다. 

    - 모달 바깥 부분(= 모달 내용 부분을 제외한 부분)을 클릭하면 모달 창이 종료되도록 한다.

       화면고정 : fixed

       전체화면 포함 : top-0 left-0 w-full h-full

       두 번째로 위에 위치 : z-[101] (모달 내용 부분보단 낮고, 다른 아이템들보단 높게 설정하면 됨)

       반투명한 배경 : rgba(0, 0, 0, 0.5)


코드

import Developer from "@/components/Developer/Developer";
import CloseModalBtn from "@/components/Buttons/CloseModalBtn";

export default function NewsModal({ closeNewsModal }) {
  return (
    <div>
      {/* 모달 내용 */}
      <div
        // 상위 컴포넌트로 이벤트 전파 방지 (버블링 방지)
        onClick={(event) => event.stopPropagation()}
        className="bg-[#fff] fixed top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%] rounded-lg w-[615px] z-[1000] p-[20px]"
      >
        <CloseModalBtn onClick={closeNewsModal} />

        <div className="flex flex-row justify-center items-center text-[30px] my-[20px] bg-[#e52448] text-white px-[10px] py-[1px] rounded-lg w-fit">
          새소식
        </div>

        <h3 className="text-[24px] mb-[20px] font-semibold">
          Open Airbnb Clone 2024
        </h3>

        <div className="text-[18px] font-medium">
          안녕하세요. <br />
          에어비앤비 클론코딩 2024에 오신 것을 격하게 환영합니다. 🙇‍♂️
        </div>

        <div className="flex flex-row justify-end items-center mt-[40px] gap-[20px]">
          <div>Developer Github</div>
          <Developer />
        </div>
      </div>

      {/* 모달 바깥 부분 */}
      <div
        onClick={closeNewsModal}
        className="fixed top-0 left-0 w-full h-full z-[101] bg-[var(--modal-outside-bg)]"
      ></div>
    </div>
  );
}
반응형
profile

Space

@Space_zero

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!