CSS Grid와 Flexbox 혼용 시 레이아웃 깨짐 해결

문제 상황

대시보드 레이아웃을 Grid로 구성하고, 각 셀 내부를 Flexbox로 배치했는데 특정 케이스에서 자식 요소가 부모를 뚫고 나가는 현상이 발생했다.

.dashboard {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 20px;
}

.card {
  display: flex;
  flex-direction: column;
}

.card-content {
  flex: 1;
  overflow: hidden;
}

긴 텍스트나 이미지가 들어가면 카드가 grid 컬럼을 무시하고 늘어났다.

원인

Grid 아이템의 기본 min-width 값이 auto이기 때문이다. Flexbox도 마찬가지로 min-width: auto가 기본값이라 자식 요소의 콘텐츠 크기를 최소값으로 인식한다.

해결

.card {
  display: flex;
  flex-direction: column;
  min-width: 0; /* 추가 */
}

.card-content {
  flex: 1;
  overflow: hidden;
  min-width: 0; /* 추가 */
}

min-width: 0을 명시하면 Grid와 Flex 아이템이 부모의 크기 제약을 따른다. overflow: hidden과 함께 사용하면 텍스트 말줄임 처리도 정상 작동한다.

교훈

Grid/Flexbox는 편리하지만 기본 동작 방식을 모르면 예상치 못한 레이아웃 버그가 생긴다. 특히 중첩 사용 시 min-width/min-height 기본값을 항상 염두에 둬야 한다. IE11도 지원해야 해서 autoprefixer 설정도 함께 점검했다.

CSS Grid와 Flexbox 혼용 시 레이아웃 깨짐 해결