"flex 가 실제로는 셋인 하나의 property. 세 패턴 외우면 끝."
세 sub-property
모든 flex 자식이 크기 결정하는 property 셋 가짐:
flex-grow(기본0) — main 축의 추가 공간 몫.flex-grow: 1이 leftover 공간의 1/total-grow 가짐.flex-shrink(기본1) — overflow 감소 몫.flex-shrink: 1은 공간 부족할 때 항목이 줄어듦;flex-shrink: 0은 줄어들기 거부.flex-basis(기본auto) — grow/shrink 계산 전 시작 크기.auto는 "항목의 content 크기나 width property 사용";200px같은 length 는 "content 무관 200px 에서 시작".
flex 약자
flex: . 값 셋, 그 순서로. 예:
flex: 1 1 0— grow 1, shrink 1, 0 에서 시작. 이거 가진 모든 sibling 이 동등 너비.flex: 1 1 auto— grow 1, shrink 1, content/auto 크기에서 시작. 이거 가진 모든 sibling 이 content 기반 비례 몫.flex: 0 0 200px— grow 없음, shrink 없음, 고정 200px. 잠김.flex: 0 1 auto— flex 자식의 기본. Content 크기, 필요 시 shrink, grow 안 함.
95% 의 경우 쓰는 세 패턴
flex: 1—1 1 0의 약자. 동등 분배. 패턴: "이 sibling 모두가 사용 가능한 공간 균등 분할."flex: auto—1 1 auto의 약자. Content 비례 몫. 패턴: "이 항목들이 추가 공간 공유하지만 content 크기가 시작 포인트로 중요."flex: none—0 0 auto의 약자. Grow 안 함, shrink 안 함. 패턴: "이 항목이 정확히 content 크기 유지."
이 셋 외워. 너가 쓸 거의 모든 layout 커버. 정밀 필요할 때 명시적 3-값 형태 (flex: 1 1 200px) 잡아.
동등 너비 column 패턴
세 column 이 content 무관 row 를 동등하게 공유하길 원해? 각자에 flex: 1. 세 column 중 하나가 300px 고 나머지 둘이 나머지 동등 분할? 첫에 flex: 0 0 300px, 나머지에 flex: 1.
사이드바 + main 패턴
고정 너비 사이드바와 유연한 main content 영역:
또는 — 그리고 2026 년에 더 idiomatic — Grid 사용: grid-template-columns: 240px 1fr. 같은 효과, 타이핑 적음. Flexbox 도 여기서 여전히 맞음; Grid 가 두 column 패턴에 더 선언적.
기본 min-width: auto 함정
Flex 항목이 암묵적 min-width: auto 가짐, 대략 "가장 긴 unbreakable content (긴 단어, 이미지의 intrinsic 크기) 크기 밑으로 안 줄어듦" 의미. 보통 도움 되지만 가끔 신비한 overflow 일으킴: 긴 URL 이나 unbreakable 텍스트 가진 자식 포함하는 flex row 가 자식 shrink 거부, row 를 컨테이너 너머로 밀어.
Fix: shrink 허용되어야 할 flex 자식의 min-width: 0. 이 명시적 override 가 암묵적 minimum 제거하고 flex-shrink 가 일 하게 둠. 채팅 UI (긴 paste URL) 와 tables-as-flex 에 가장 흔함.
min-width: auto 의심. 문제 일으키는 자식에 min-width: 0 추가. 이 단일 fix 가 나머지 flexbox 다 안다는 것 합친 것보다 시간 더 절약.Order: source 순서 재정렬자
Flex 자식의 order property 가 source 순서 안 바꾸고 시각 위치 변경. 기본 0; 낮은 값이 먼저, 높은 값이 마지막. 패턴: 시각 layout 위에 label 이 있지만 source 순서 바닥인 (SEO/접근성 위해) 카드, label 에 order: -1 사용.
절제해서. order 가 screen reader 사용자 (source 순서로 읽음) 와 키보드 사용자 (Tab 순서가 source 따라감) 혼란시킬 수 있어. Source 순서가 non-visual 이유 (semantic, 문서 구조) 로 잘못될 때만 시각 재정렬.
피파의 노트
flex: 1 — 사용 가능 너비 채움), 오른쪽에 send 버튼 (flex: none — 고정 아이콘 크기). CSS 세 줄. 대화 리스트가 flex column 인데 모든 대화 row 가 flex: 0 0 auto (grow 안 함, shrink 안 함, content 크기 가짐), row 의 title 에 min-width: 0 줘서 긴 대화 title 이 row 를 더 넓게 미는 대신 text-overflow: ellipsis 로 truncate.