Skip to content

Commit d0e0eb5

Browse files
committed
[Posts] css 요소의 차지 트러블슈팅
1 parent 059dc6b commit d0e0eb5

1 file changed

Lines changed: 106 additions & 0 deletions

File tree

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
---
2+
title : "[CSS] header가 잘리는 현상"
3+
author: potato
4+
date : 2025-02-04 15:30:00 +0900
5+
categories : [React, TroubleShooting]
6+
tags: [react, hooks, javascript, troubleshooting,]
7+
image:
8+
path: https://github.com/user-attachments/assets/cc584f76-b207-47df-aae1-9605a42af368
9+
description: header가 전체를 차지하지 못하고 잘리는 현상
10+
---
11+
12+
## 문제 - 1
13+
만든 헤더가 화면이 커졌을 때, 전체를 차지하지 못하고 잘리는 현상이 일어났습니다.
14+
15+
![Image](https://github.com/user-attachments/assets/e7c2d9cc-1d7e-4ffd-9de3-9c159c3a4e55)
16+
17+
18+
## 트러블슈팅
19+
20+
![Image](https://github.com/user-attachments/assets/a79e41a8-2c09-4ecd-b07b-7baf7cb0175c)
21+
22+
개발자 도구를 사용하여 문제가 생기는 부분을 찾아보니, root에 이렇게 마진이 들어간 것을 확인할 수 있었습니다.
23+
24+
`#root`의 css는 다음과 같습니다.
25+
```css
26+
#root {
27+
max-width: 1500px;
28+
margin: 0 auto;
29+
text-align: center;
30+
}
31+
```
32+
33+
왜... 왜 max-width를 잡아놨던 걸까요...? 개발자 도구에서 이걸 삭제해주니 제대로 화면을 차지하는 것을 볼 수 있었습니다.
34+
35+
내친 김에 화면 크기를 3000으로 더 늘려봤습니다.
36+
37+
## 문제 - 2
38+
39+
![Image](https://github.com/user-attachments/assets/6c90a46d-1c00-4149-9789-5cf90e5a3e88)
40+
41+
크기가 높이에 맞게 늘어나지 않고 고정되어 있습니다. 저는 커진 화면만큼 Outlet 부분이 맞춰지길 바랬는데요.
42+
43+
조금 수정한 원래 코드는 아래와 같습니다. 모든 페이지에서 헤더를 주고 싶어서 Layout으로 감쌌습니다.
44+
45+
```tsx
46+
const Layout = () => {
47+
return (
48+
<div className='flex flex-col w-full items-center relative'>
49+
<Header />
50+
<div className='w-full pt-16'>
51+
<Outlet />
52+
</div>
53+
</div>
54+
)
55+
}
56+
```
57+
58+
`min-h-screen``min-w-full`을 추가해봤습니다.
59+
60+
- `min-w-full` : 최소 너비를 부모 요소의 100%로 설정합니다. 즉, 적어도 부모 요소만큼의 너비는 무조건 가지게 됩니다.
61+
62+
- `w-full과의 차이점` : w-full은 너비를 부모의 100%로 "고정"하지만, min-w-full은 최소 너비만 100%로 설정하고 컨텐츠가 더 크다면 그만큼 늘어날 수 있습니다.
63+
64+
65+
- `min-h-screen` : 최소 높이를 viewport(화면) 높이의 100%로 설정합니다. 즉, 적어도 화면 높이만큼은 무조건 차지하게 됩니다.
66+
67+
- `h-screen과의 차이점` : h-screen은 높이를 viewport 높이로 "고정"하지만, min-h-screen은 최소 높이만 viewport 높이로 설정하고 컨텐츠가 더 크다면 그만큼 늘어날 수 있습니다.
68+
69+
```tsx
70+
const Layout = () => {
71+
return (
72+
// min-h-screen을 추가해서 최소한 화면 높이만큼은 차지하도록
73+
// min-w-full을 추가해서 화면 너비를 모두 차지하도록
74+
<div className='flex flex-col min-h-screen min-w-full items-center relative'>
75+
<Header />
76+
<div className='w-full pt-16'>
77+
<Outlet />
78+
</div>
79+
</div>
80+
)
81+
}
82+
```
83+
84+
![Image](https://github.com/user-attachments/assets/31347e20-f9fe-43ba-8db9-da71873c7b39)
85+
86+
제가 원하던 것과는 조금 달랐습니다. 요소의 크기가 화면에 딱 맞았으면 좋겠습니다.
87+
88+
## 트러블슈팅 - 2
89+
저 부분을 채울 `flex-1` 이 생각났습니다. `Outlet`을 감싸는 `div``flex-1`을 사용해서 Header를 제외한 남은 공간을 모두 채우도록 해봤습니다.
90+
91+
```tsx
92+
const Layout = () => {
93+
return (
94+
<div className='flex flex-col min-h-screen min-w-full items-center relative'>
95+
<Header />
96+
<div className='w-full pt-16 flex-1'>
97+
<Outlet />
98+
</div>
99+
</div>
100+
)
101+
}
102+
```
103+
104+
![Image](https://github.com/user-attachments/assets/8354445d-d074-40b4-9590-54f07286e86d)
105+
106+
제대로 채워주게 되었습니다!

0 commit comments

Comments
 (0)