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

나눔웹 퍼블리싱 꿀팁

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
번호 분류 제목 글쓴이
33 UI/UX 버튼 클릭 테두리(outline), 지우지 말고 :focus-visible로 정리하는 법 나눔웹
» 퍼블리싱 flex 레이아웃이 모바일에서 옆으로 삐져나올 때, min-width: 0이 필요한 이유 나눔웹
31 웹 성능 메인 배너 LCP가 느리다면? 첫 화면 이미지는 lazy 대신 fetchpriority로 나눔웹
30 마케팅 네이버 서치어드바이저 등록 순서, 새 홈페이지가 검색에 안 나올 때 점검할 4가지 나눔웹
29 웹 성능 글씨가 안 보이다가 갑자기 뜬다면? '웹 폰트 로딩' 1초 단축하는 마법 나눔웹
28 웹 성능 구글 SEO 점수 폭발! 이미지 로딩 속도 3배 높이는 '단 1줄'의 마법 나눔웹
27 마케팅 카톡에 우리 회사 링크 보낼 때 뜨는 '회색 빈 박스' 없애는 필수 세팅 (OG 태그) 나눔웹
26 마케팅 '제출하기' 버튼은 그만! 클릭률 200% 높이는 마법의 단어 (CTA) 나눔웹
25 마케팅 돈 버는 마케터의 비밀! 유입 출처를 추적하는 마법의 꼬리표 'UTM' 나눔웹
24 퍼블리싱 촌스러운 '파일 선택' 버튼, 복잡한 꼼수 없이 예쁘게 디자인하기 나눔웹
23 UI/UX 팝업 띄울 때마다 화면이 덜컹! '스크롤바 밀림 현상' 1줄 해결법 나눔웹
22 퍼블리싱 수십 줄의 모바일 반응형 코드, 단 '1줄'로 끝내는 마법 (clamp) 나눔웹
21 UI/UX 쇼핑몰 결제 금액이 덜덜 떨린다면? '숫자 폭 고정' 타이포그래피 꿀팁 나눔웹
20 모바일 앗, 실수로 새로고침! 튕기는 모바일 화면 꽉 잡는 법 (Overscroll) 나눔웹
19 모바일 하단 고정 버튼이 아이폰 '검은 줄'에 겹친다면? (Safe Area 대응법) 나눔웹
18 UI/UX 투박한 파란색 체크박스는 그만! 단 1줄로 우리 회사 컬러 입히기 나눔웹
17 UI/UX 1%의 디테일이 브랜딩을 완성합니다! '텍스트 드래그 색상' 바꾸기 나눔웹
16 퍼블리싱 무거운 플러그인 NO! 넷플릭스처럼 쫀득한 '가로 스와이프' CSS로 뚝딱 만들기 나눔웹
15 UI/UX 애플(Apple) 사이트처럼 고급스러운 '반투명 유리' 메뉴 만드는 법 나눔웹
14 모바일 모바일 웹을 진짜 '앱(App)'처럼! 이미지 꾹 누를 때 뜨는 팝업 막기 나눔웹
Board Pagination Prev 1 2 Next
/ 2
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4