• 고객센터
  • ★ 웹 무료강의

★ 웹 무료강의

모던DS 웹에이전시

웹 무료강의 | 프론트엔드 강의

CSS 웹 레이아웃의 핵심: Flexbox vs CSS Grid (플렉스박스 vs 그리드라인)

페이지 정보

profile_image
작성자 모던DS
조회 60회

본문

웹 레이아웃의 핵심: Flexbox vs CSS Grid


과거에는 floattable 속성을 이용해 어렵게 화면을 배치했지만, CSS3에 들어서며 혁신적인 두 가지 레이아웃 시스템이 등장했습니다. 

바로 FlexboxGrid입니다. 


1. 각각의 특징

플렉스는 '줄(Line)' 중심이고, 그리드는 '면(Area)' 중심입니다.


구분플렉스박스 (Flexbox)CSS 그리드 (Grid)
차원1차원 (행 또는 열 중 하나)2차원 (행과 열 동시 제어)
핵심 개념콘텐츠 중심 (안에서 밖으로)레이아웃 중심 (밖에서 안으로)
비유기차 놀이 (순서대로 나열)바둑판 배치 (정해진 칸에 넣기)
주 용도메뉴 바, 내비게이션, 작은 요소의 정렬웹페이지의 전체 틀, 신문/잡지 레이아웃


2. 플렉스박스 (Flexbox) 핵심: "유연한 한 줄 정렬"

플렉스는 요소를 가로 또는 세로 중 한 방향으로 나열하고 정렬하는 데 특화되어 있습니다.

  • 방향 제어: 주축(Main Axis)과 교차축(Cross Axis)을 기준으로 요소를 배치합니다.

  • 유연한 크기: 부모 컨테이너의 크기에 맞춰 자식 요소들이 유연하게 늘어나거나 줄어듭니다.

  • 주요 활용: 상단 메뉴바의 항목 나열, 카드 내부의 아이콘과 텍스트 정렬 등.



3. CSS 그리드 (Grid) 핵심: "정교한 공간 설계"

그리드는 가로(행)와 세로(열)를 동시에 사용하여 전체적인 틀을 만드는 2차원 시스템입니다.


① 유연한 수치 제어

  • fr(fraction) 단위: 유연한 비율을 의미합니다. (예: 2fr 1fr은 2:1 비율로 공간 배분)

  • repeat() 함수: 반복되는 크기를 간편하게 작성합니다. (예: repeat(3, 1fr)은 1fr을 3번 반복)

  • minmax() 함수: 행의 높이를 최솟값과 최댓값으로 지정하여 내용이 많아져도 가려지지 않게 합니다.

② 그리드 라인 배치 속성

아이템을 특정 위치에 배치할 때는 칸을 나누는 '경계선(Line)' 번호를 사용합니다.

속성설명예시
grid-column열의 시작과 끝 번호를 슬래시(/)로 구분하여 지정합니다.grid-column: 1 / 4;
grid-row행의 시작과 끝 번호를 슬래시(/)로 구분하여 지정합니다.grid-row: 2 / 4;



4. 핵심 요약: 무엇을 선택할까?

  1. Grid로 집의 전체적인 구조(방 배치)를 먼저 잡으세요.

  2. Flexbox로 각 구역 안의 가구(세부 요소)들을 정렬하세요.

결론: 두 기술은 경쟁 관계가 아니며, 큰 틀은 Grid, 세부 정렬은 Flexbox를 혼합하여 사용하는 것이 가장 효율적입니다.



"레이아웃은 곧 그리드 설계다"

  • Grid: 집의 튼튼한 뼈대와 방 배치(레이아웃/왁구)를 만드는 도구

  • Flexbox: 방 안에 가구와 소품을 예쁘게 정렬하는 도구


쇼핑몰로 보는 실무 적용 예시

1. 그리드(Grid)로 '큰 왁구' 잡기 (Layout-first)

먼저 쇼핑몰의 전체적인 구역(틀)을 설계합니다.

  • 헤더: 로고와 검색창이 들어갈 상단 영역.

  • 사이드바: 카테고리 메뉴가 위치할 왼쪽 영역.

  • 메인 영역: 상품들이 진열될 중앙의 넓은 구역.

  • 푸터: 하단 정보 영역.

작업 포인트: grid-template-columns로 단을 나누고, grid-template-areas 등으로 큰 방들을 먼저 만듭니다.


2. 플렉스(Flexbox)로 '상품 진열'하기 (Content-first)

그리드로 만든 '메인 영역' 안에 개별 상품들을 예쁘게 정렬합니다.

  • 상품 카드: 이미지, 상품명, 가격을 한 줄로 정렬하거나 수직으로 쌓을 때 사용합니다.

  • 상태 표시: 상품 이미지 위에 'SALE'이나 'BEST' 배지를 특정 위치에 띄울 때 유용합니다.

  • 간격 조절: 상품들 사이의 간격을 균등하게 배분하거나(Justify-content), 좌우 정렬을 맞출 때 사용합니다.

작업 포인트: 상품의 개수가 유동적이어도 한 줄에 몇 개씩 자연스럽게 흐르도록(Flex-wrap) 정렬합니다.


3. Layer(Position)를 써서 상품 이미지 오른쪽 상단에 '무료배송' 아이콘을 띄워서 겹칩니다.