상품을 누르면 뜨는 상세페이지를 모달창 스타일로 만들어보는 예제를 통해, Vue를 사용한 동적 UI 제작 단계를 알아봅니다.
모달창이란?
배경은 어둡게 처리하고 중앙에 하얀 창이 나타나는 UI를 의미합니다.
상품명을 클릭하면 모달창을 띄워서 상세페이지 내용을 보여줍니다.
이 두 가지만 기억하면 모달창뿐만 아니라 탭, 서브메뉴 등 누르면 동작하는 UI를 직접 만들 수 있습니다.
<img src="./경로">
<img src="/경로">
참고: public 폴더에 넣으면 나중에 발행할 때 이미지 이름이 변하지 않습니다.
HTML (예시 코드 – 상단에 위치시키세요):
<div class="black-bg">
<div class="white-bg">
<h4>상세페이지</h4>
<p>상세페이지내용임</p>
</div>
</div>
CSS:
body {
margin: 0;
}
div {
box-sizing: border-box;
}
.black-bg {
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
position: fixed;
padding: 20px;
}
.white-bg {
width: 100%;
background: white;
border-radius: 8px;
padding: 20px;
}
미리 HTML과 CSS로 모달창 디자인을 완성해두고, 나중에 Vue를 통해 동적으로 보여주거나 숨기는 방식으로 구현합니다.
모달창은 보임/숨김 상태만 존재합니다.
기존 Vue2 문법에서는 아래와 같이 작성했지만…
// Vue2 Options API (예시)
data(){
return {
모달창열렸니: true,
}
}
→ Vue3 문법으로 리팩토링하면 다음과 같이 작성합니다:
<script setup>
import { ref } from 'vue'
// 모달창 보임 여부 (true: 보임, false: 숨김)
const 모달창열렸니 = ref(true)
</script>
설명:
ref를 사용해 반응형 데이터를 생성합니다. 템플릿에서는모달창열렸니를 직접 사용할 수 있습니다.
HTML에서 모달창을 조건부로 보여주기 위해 v-if 지시자를 사용합니다.
<div class="black-bg" v-if="모달창열렸니">
<div class="white-bg">
<h4>상세페이지</h4>
<p>상세페이지내용임</p>
</div>
</div>
설명:
모달창열렸니가true일 때만 위<div class="black-bg">요소가 렌더링됩니다.(원래 코드에서는
v-if="모달창열렸니 == true"로 작성했지만, 불리언 값이므로 간단히v-if="모달창열렸니"로 사용합니다.)
이제 '모달창열렸니' 데이터 값을 조작하여 모달창을 열고 닫을 수 있습니다.
예를 들어, 상품 제목을 클릭했을 때 아래와 같이 이벤트 핸들러로 모달창 상태를 변경할 수 있습니다.
<!-- 상품 제목 클릭 시 모달창 열기 (예시) -->
<h3 @click="모달창열렸니 = true">상품 제목</h3>
참고:
모달창을 닫는 버튼이나 영역에 @click 이벤트를 달아
모달창열렸니 = false로 상태를 변경하면 모달창을 숨길 수 있습니다.