실무에 바로 적용할 수 있는 웹 제작 꿀팁 및 유용한 자료실 공간입니다.
나눔웹이 제공하는 핵심 노하우와 마케팅 인사이트를 자유롭게 활용해 보십시오.

나눔웹 퍼블리싱 꿀팁

flex 레이아웃이 모바일에서 옆으로 삐져나올 때, min-width: 0이 필요한 이유

flex로 잡은 카드나 목록이 모바일에서만 화면 밖으로 밀려나고 가로 스크롤이 생긴다면, flex 아이템의 기본값인 min-width: auto를 먼저 의심해 보세요.
긴 URL, 줄바꿈 없는 말줄임 텍스트, 코드 블록이 들어간 자식에 min-width: 0을 주면 대부분 바로 정리됩니다.

💡 width: 100%도 줬는데 왜 줄어들지 않나요?

flex 아이템은 기본적으로 자기 내용물의 최소 크기보다 작아지지 않도록 되어 있습니다. 끊을 수 없는 긴 단어나 white-space: nowrap 텍스트가 있으면 그 길이가 곧 최소 너비가 되고, 부모가 좁아져도 아이템은 버팁니다. flex-shrink: 1이 있어도 이 최소값 아래로는 줄지 않습니다.

1. 말줄임(...)이 안 되고 박스가 늘어날 때

게시판 목록처럼 썸네일 옆에 제목을 두고 한 줄 말줄임을 걸면, PC에서는 멀쩡한데 좁은 화면에서 제목이 끝까지 다 나오면서 레이아웃을 밀어내는 경우가 많습니다. 말줄임 CSS 자체는 맞는데, 그걸 감싼 flex 아이템이 줄어들지 않아서 생기는 문제입니다.

.item { display: flex; gap: 12px; }
.item .thumb { flex: 0 0 80px; }

/* 핵심: 텍스트 쪽 아이템이 줄어들 수 있게 */
.item .text { flex: 1; min-width: 0; }

.item .title {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

min-width: 0은 말줄임이 걸린 요소가 아니라 그 요소를 담고 있는 flex 아이템에 줘야 합니다. 중간에 div가 한 겹 더 있다면 flex 아이템인 그 div에 넣어야 효과가 있습니다. overflow: hidden을 줘도 같은 효과가 나지만, 그림자나 툴팁이 잘릴 수 있어서 실무에서는 min-width: 0을 더 많이 씁니다.

2. grid의 1fr도 같은 함정이 있습니다

본문과 사이드바를 grid-template-columns: 1fr 300px로 나눴는데 본문에 넓은 표나 <pre> 코드가 들어가면 본문 칸이 늘어나 버립니다. 1fr은 사실상 minmax(auto, 1fr)이라 최소값이 내용물 크기이기 때문입니다.

/* 내용물이 넓어도 칸은 남은 공간만큼만 */
.layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
}

/* 넓은 내용물은 자기 안에서 스크롤 */
.layout pre,
.layout .table-wrap { overflow-x: auto; }

3. 어느 요소가 범인인지 빨리 찾는 법

가로 스크롤 원인을 눈으로 찾기 어렵다면 크롬 개발자도구 콘솔에서 화면 폭보다 넓은 요소를 뽑아 보는 방법이 빠릅니다. 저희도 리뉴얼 검수 때 360px 폭에서 이 방법으로 먼저 확인합니다.

// 콘솔에 붙여 넣고 실행
[...document.querySelectorAll("*")]
  .filter(el => el.scrollWidth > innerWidth)
  .forEach(el => console.log(el));

목록에 찍힌 요소 중 가장 안쪽에 있는 것이 보통 원인입니다. 그 요소의 부모를 따라 올라가다 처음 만나는 flex·grid 아이템에 min-width: 0을 주면 됩니다. 긴 URL처럼 아예 줄바꿈이 필요한 경우에는 overflow-wrap: anywhere를 함께 쓰세요.

"레이아웃 버그의 절반은 기본값을 모르는 데서 시작됩니다."

나눔웹은 퍼블리싱 검수 때 360px 모바일 폭까지 직접 확인해,
어떤 내용이 들어와도 무너지지 않는 화면을 만듭니다.


List of Articles
번호 분류 제목 글쓴이
18 퍼블리싱 CSS 컨테이너 쿼리 쓰는 법, 화면이 아니라 카드 폭에 맞춰 반응하기 나눔웹
17 퍼블리싱 CSS :has() 선택자 활용법, 자식 상태에 따라 부모 박스 스타일 바꾸기 나눔웹
16 퍼블리싱 제목 줄바꿈이 어색할 때, text-wrap: balance로 한 단어만 남는 문제 정리 나눔웹
15 퍼블리싱 모바일에서 표(table)가 깨질 때, 가로 스크롤로 감싸거나 카드형으로 바꾸는 법 나눔웹
14 퍼블리싱 카드 목록 반응형 정렬, 미디어쿼리 대신 grid auto-fill과 minmax로 나눔웹
13 퍼블리싱 모달 팝업 만들기, dialog 태그로 ESC 닫기와 배경 클릭 닫기까지 처리하는 법 나눔웹
12 퍼블리싱 긴 URL·이메일 줄바꿈이 안 되고 박스를 뚫을 때, overflow-wrap 쓰는 법 나눔웹
11 퍼블리싱 z-index 올려도 메뉴가 가려질 때, 쌓임 맥락(stacking context) 확인법 나눔웹
10 퍼블리싱 이미지 아래 몇 px 여백이 생길 때, vertical-align으로 없애는 법 나눔웹
9 퍼블리싱 position: sticky가 안 먹힐 때, 부모 overflow부터 확인해야 하는 이유 나눔웹
8 퍼블리싱 썸네일 이미지 찌그러짐, object-fit과 aspect-ratio로 비율 맞추는 법 나눔웹
» 퍼블리싱 flex 레이아웃이 모바일에서 옆으로 삐져나올 때, min-width: 0이 필요한 이유 나눔웹
6 퍼블리싱 촌스러운 '파일 선택' 버튼, 복잡한 꼼수 없이 예쁘게 디자인하기 나눔웹
5 퍼블리싱 수십 줄의 모바일 반응형 코드, 단 '1줄'로 끝내는 마법 (clamp) 나눔웹
4 퍼블리싱 무거운 플러그인 NO! 넷플릭스처럼 쫀득한 '가로 스와이프' CSS로 뚝딱 만들기 나눔웹
3 퍼블리싱 지저분한 모바일 스크롤바, 기능은 남기고 쏙 숨기는 마법의 CSS 나눔웹
2 퍼블리싱 스마트폰에서 로고가 흐리게 보인다고요? 'SVG' 포맷이 정답입니다. 나눔웹
1 퍼블리싱 CSS 변수로 유지보수와 테마 기능을 한 번에! (CSS Custom Properties) 나눔웹
Board Pagination Prev 1 Next
/ 1
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4