노트

Flexbox와 Grid 비교

Flexbox vs. Grid

프런트엔드#css · 연결된 개념 2개

쉽게 말하면

Flexbox와 Grid의 차이는 선반 한 줄에 물건을 늘어놓느냐, 엑셀 표처럼 행과 열을 먼저 그어 두고 칸에 넣느냐예요. 그래서 내비게이션 바는 flex, 페이지 골격이나 카드 목록은 grid가 편해요.

비유가 깨지는 곳 둘 중 하나만 고르는 건 아니에요. 페이지 골격은 grid, 그 칸 안의 작은 줄은 flex로 같이 써요. 그리고 display만 바꾸면 기본 동작이 달라 깨지니 트랙 정의를 다시 적어야 해요.

Flexbox는 한 방향으로 흐르는 1차원 배치, CSS Grid는 행과 열을 함께 다루는 2차원 배치다. 크기를 누가 정하느냐도 다르다. flex는 아이템과 콘텐츠가, grid는 컨테이너의 트랙이 정한다.

FlexboxGrid
차원1차원(행 또는 열)2차원(행과 열)
크기 결정아이템(flex-basis, 콘텐츠)컨테이너(grid-template-*)
속성만 바꾸면아이템이 한 줄로 늘어선다트랙 정의가 없으면 한 열로 쌓인다
아이템의 margin-left: auto남은 공간을 먹고 끝으로 밀림자기 칸 안에서 오른쪽으로 붙음
넘치는 콘텐츠컨테이너가 늘어날 수 있다고정 트랙을 넘으면 넘친다

언제 무엇을

  • flex: 내비게이션 바, 버튼 묶음, 아이템 수가 들쭉날쭉한 줄, 콘텐츠 크기에 맞춰 흐르는 배치
  • grid: 카드 그리드·갤러리, 페이지 전체 골격, 행과 열이 함께 맞아야 하는 표 모양 배치
  • 같이 쓴다: 페이지 골격은 grid, 그 칸 안의 작은 줄은 flex

바꿀 때 주의

display: flex를 grid로 바꾸기만 하면 기본 동작이 달라져 레이아웃이 깨진다. flex-wrap + calc(33.333% - gap) 같은 계산은 grid-template-columns: repeat(3, 1fr)로, flex: 0 0 250px 사이드바는 250px 1fr 트랙으로 옮겨 적어야 한다. 성능 차이는 실무에서 거의 없고, grid가 더 적은 DOM으로 같은 배치를 만드는 경우가 많다.

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 반응형 웹 디자인

    하나의 페이지가 화면 크기와 기기에 맞춰 레이아웃·이미지·글자 크기를 바꾸도록 만드는 접근. 미디어 쿼리(Media Query), 유연한 레이아웃(Flexible Layout), 반응형 미디어(Responsive Media)가 세 축이다.

  • 리플로우(레이아웃 재계산)

    요소의 크기나 위치가 바뀌어 브라우저가 레이아웃을 다시 계산하는 일. 렌더링 파이프라인에서 대개 가장 비싼 단계이고, 리플로우가 일어나면 뒤따라 페인트와 합성도 다시 한다.

  • CSS 박스 모델

    브라우저는 모든 요소를 사각형 상자로 보고, 그 상자를 안쪽부터 콘텐츠(content) → 안쪽 여백(padding) → 테두리(border) → 바깥 여백(margin) 네 겹으로 계산한다. 레이아웃에서 요소가 차지하는 크기와 요소 사이 간격이 모두 이 네 겹에서 나온다.

  • GraphQL

    GraphQL은 클라이언트가 필요한 데이터의 모양을 쿼리로 적어 보내면 서버가 정확히 그 모양으로 응답하는 API 쿼리 언어(query language)다. Facebook이 2012년 내부에서 만들어 2015년 공개했고, 지금은 GraphQL Foundation이 관리한다.

  • Tailwind CSS

    flex, px-4, text-sm처럼 속성 하나를 담은 유틸리티 클래스(Utility Class)를 마크업에 조합해 스타일을 입히는 CSS 프레임워크. 빌드할 때 소스를 훑어 실제로 쓰인 클래스의 CSS만 만들어 내는 빌드 도구이고, 런타임에 돌아가는 JS(JavaScript)는 없다.

보기 옵션