Flexbox 레이아웃 IE11 대응 정리

문제 상황

반응형 대시보드 개편 작업에서 Flexbox를 전면 도입했다. Chrome과 Firefox에서는 문제없었지만 IE11에서 레이아웃이 깨지는 현상이 여러 곳에서 발생했다.

주요 이슈

1. flex-basis auto 버그

IE11은 flex-basis: auto를 제대로 계산하지 못한다. 명시적으로 값을 지정해야 했다.

/* 문제 있던 코드 */
.item {
  flex: 1;
}

/* 수정 */
.item {
  flex: 1 1 0%; /* IE11에서는 0%로 명시 */
}

2. min-height와 flex 자식 요소

부모에 min-height만 지정하면 자식 flex 아이템이 늘어나지 않았다.

.container {
  display: flex;
  min-height: 100vh;
  flex-direction: column;
}

/* IE11 대응 */
.container {
  display: flex;
  height: 100vh; /* IE11에서는 height 명시 필요 */
  flex-direction: column;
}

3. flex 단축 속성 버그

flex: 1처럼 단일 값만 쓰면 예상과 다르게 동작했다. 세 값을 모두 명시하는 게 안전했다.

.sidebar {
  flex: 0 0 250px; /* grow shrink basis 모두 명시 */
}

.content {
  flex: 1 1 auto;
}

해결 방법

  1. Autoprefixer를 Webpack에 추가해 벤더 프리픽스 자동 처리
  2. flex 속성은 항상 3개 값 모두 명시
  3. IE11 테스트를 배포 전 체크리스트에 포함

참고

  • Flexbugs 저장소를 참고하면 IE11 관련 이슈를 미리 파악할 수 있다
  • 결국 프로젝트 요구사항에서 IE10 지원은 제외하고 IE11만 대응하기로 결정했다