Skip to content

Commit ca628c9

Browse files
committed
docs: 엥? Modal 그거 z-index:99999 박으면 되는거 아님? (feat. createPortal과 Stacking Context)
1 parent 2e93b35 commit ca628c9

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
title: 엥? Modal 그거 z-index:99999 박으면 되는거 아님? (feat. createPortal과 Stacking Context)
3+
createdAt: 2025-06-27
4+
category: React
5+
description: React 에서 Modal 컴포넌트를 구현할때 단순히 z-index 를 높게 줬을때 발생하는 문제와 createPortal 을 이용해 해결하는 방법에 대해 알아봅니다.
6+
comment: true
7+
---
8+
9+
# 엥? Modal 그거 z-index:99999 박으면 되는거 아님? (feat. createPortal과 Stacking Context)
10+
11+
:::warning
12+
아직 작성중이거나 검토중인 글입니다. 내용이 부정확하거나 변경될 수 있습니다
13+
:::
14+
15+
웹 개발을 하다보면 **Modal** 컴포넌트를 구현해야 하는 순간이 자주 찾아옵니다.
16+
17+
> 회원 가입시 약관 동의 <br/>
18+
> 게시글 삭제 전 "정말 삭제하시겠습니까?" <br/>
19+
> 결제 진행전 마지막 확인 ...
20+
21+
모달은 중요한 의사결정 직전에 모달은 사용자의 행동을 한번 더 되짚어주는 역할을 합니다. <br/>
22+
23+
:::details [토스는 모달을 언제, 어떻게 띄울까? (feat. 모달 경험 잘 설계하기)](https://medium.com/@beomsu/%ED%86%A0%EC%8A%A4%EB%8A%94-%EB%AA%A8%EB%8B%AC%EC%9D%84-%EC%96%B8%EC%A0%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%9D%84%EC%9A%B8%EA%B9%8C-841e97dda1eb)
24+
25+
모달은 크게 Alert와 Sheet로 구분됩니다. <br/>
26+
27+
- Alert는 화면 정중앙에 위치하고 투명한 검은색을 배경으로 가집니다. 주로 사용자에게 즉시 필요한 중대한 정보를 담을 때 쓰입니다.
28+
- Sheet는 화면 하단부에 위치하고 투명한 검은색을 배경으로 가집니다. 주로 사용자가 현재 맥락과 밀접한 관련이 있는 특정한 작업을 수행하게 할 때 쓰입니다.
29+
- 토스가 Alert를 쓰는 경우는 아래의 4가지입니다.<br/>
30+
① 기기 또는 시스템 설정에 접근해야 하는 경우, <br/>
31+
② 입력했던 정보를 파괴하는 행동을 하려는 경우,<br/>
32+
③ 시스템상 오류가 발생한 경우,<br/>
33+
④ 다음 화면으로 진행하는 데 피요한 작업을 요구하는 경우입니다.<br/>
34+
①, ②, ③은 Alert를 적절히 사용했지만 ③은 새로운 화면, ④는 Sheet라는 대안이 가능합니다.
35+
- 토스가 Sheet를 쓰는 경우는 아래의 4가지입니다. <br/>
36+
① 다음 화면으로 진행하는 데 필요한 작업을 요구하는 경우 <br/>
37+
② 현재 화면에 영향을 미치는 작업을 요구하는 경우<br/>
38+
③ 현재 화면과 관련된 정보를 전달하는 경우,<br/>
39+
④ 기기 또는 시스템 설정에 접근해야 하는 경우입니다.<br/>
40+
①, ②, ③은 Sheet를 적절히 사용했지만 ④는 Alert라는 대안이 가능합니다.
41+
42+
:::
43+
44+
모달은 단순한 UI 컴포넌트가 아니라, 사용자의 실수를 줄이고, 중요한 액션에 집중하게 만드는 중요한 역할을 합니다.
45+
46+
그만큼 사용자 경험 (UX) 에서 중요한 역할을 하는데, <br/>
47+
개발자의 입장에서는 "어떻게 화면 위에 모달을 띄우지?" 라는 고민이 생깁니다.
48+
49+
## 🤓 엥? Modal 그거 z-index:99999 박으면 되는거 아님?
50+
51+
```css
52+
.modal {
53+
position: fixed;
54+
top: 50%;
55+
left: 50%;
56+
transform: translate(-50%, -50%);
57+
z-index: 99999; /* 화면에서 가장 위에 위치 */
58+
}
59+
```
60+
61+
처음 모달을 구현할 때 대부분 이렇게 생각합니다 <br/>
62+
저도 그랬습니다 😅
63+
64+
하지만 z-index 를 높게 주는 것만으로는 모달이 항상 화면 위에 위치한다는 보장이 없습니다. <br/>
65+
왜냐하면 z-index 는 `Stacking Context``Containing Block` 에 영향을 받기 때문입니다.
66+
67+
## 🤨 Stacking Context 가 뭔데 ?

0 commit comments

Comments
 (0)