[🎨CSS] CSS display 속성 총정리

2025. 4. 6. 02:13·🌐 Front-End

CSS는 기본 개념을 제대로 정리하지 않으면 flex나 grid 같은 레이아웃을 다룰 때 계속 헷갈리게 됩니다. 다르게 말하면 한 번만 제대로 정리하면 그 이후로는 어떤 레이아웃도 훨씬 쉽게 이해하고 다룰 수 있습니다. 이 글에서는 display 속성의 기본부터 flex와 grid 같은 레이아웃 방식까지 한 번에 깔끔하게 정리해보겠습니다.

 


 

1️⃣ display란 무엇인가?

`display` 속성은 HTML 요소가 페이지에서 어떻게 보일지를 결정하는 CSS 속성입니다. 즉 이 요소를 박스처럼 보이게 할지, 줄 안에 끼워 넣을지 등을 설정하는 것이죠. HTML 태그마다 기본적으로 지정된 display 값이 있지만 우리는 CSS display 속성을 이용하여 기본 동작을 마음대로 바꿀 수 있습니다.

 

2️⃣ 주요(기존) display 종류

 

1. block

- 한 줄 전체를 차지하는 요소

- 항상 새 줄에서 시작하며 `width`, `height` 를 지정할 수 있음

- 레이아웃을 구성할 때 주로 사용

- 대표 태그: <div>, <p>, <h1> ~ <h6>, <section>, <article>

 

2. inline

- 내용만큼만 공간을 차지하는 요소

- 줄 안에 다른 요소들과 함께 배치

- `width`, `height` 값을 적용할 수 없음

- 텍스트처럼 흐름에 따라 배치

- 대표 태그: <span>, <a>, <strong>, <em>

 

3. inline-block

- `inline` 처럼 줄 안에 배치되지만 

- `block`처럼 `width`, `height`를 지정할 수 있는 형태

- 줄 안에 있으면서 크기를 조정할 수 있어 버튼, 작은 카드 요소에 주로 사용함

 

4. none

- 요소를 화면에서 숨김

- 렌더링 자체를 하지 않아 화면에도 안 보이고 공간도 차지하지 않음

(※ `inline-block`과 `none`은 기본 태그가 없고, CSS로 설정하여 사용하는 display 속성입니다. )

 

 

📌 display 예제

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>display 종류 비교</title>
  <style>
    .block {
      display: block;
      background-color: lightblue;
      margin: 10px 0;
    }
    .inline {
      display: inline;
      background-color: lightgreen;
      margin: 10px;
    }
    .inline-block {
      display: inline-block;
      background-color: lightpink;
      width: 150px;
      height: 50px;
      margin: 10px;
    }
    .none {
      display: none;
      background-color: gray;
      margin: 10px;
    }
  </style>
</head>
<body>

<h2>block</h2>
<div class="block">block 요소</div>
<div class="block">block 요소</div>

<h2>inline</h2>
<span class="inline">inline 요소</span>
<span class="inline">inline 요소</span>

<h2>inline-block</h2>
<div class="inline-block">inline-block 요소</div>
<div class="inline-block">inline-block 요소</div>

<h2>none</h2>
<div class="none">숨겨진 요소(보이지 않음)</div>

</body>
</html>

 

display 구현 화면

🔵 inline-block 사이에 초록색이 보이는 이유

더보기

inline-block 요소는 글자처럼 취급되기 때문에 코드에 있는 띄어쓰기(공백)가 실제로 빈 텍스트로 렌더링됩니다. 현재 inline 요소에 적용된 background-color: lightgreen 스타일이 이 공백에도 적용되어 초록색으로 보이는 것입니다. 즉, 공백 자체에 스타일이 칠해진 결과입니다.

 

3️⃣ 신버전 display

( ※ '신버전 display'는 공식 용어는 아니며, flex/grid를 구분하기 위해 사용한 표현입니다)

 

`display: flex`와 `display: grid`는 기존의 `block`, `inline`과 다르게 레이아웃 자체를 제어할 수 있는 display 방식입니다. 둘 다 부모 요소에 적용해서 자식 요소들의 배치를 쉽게 조정할 수 있게 해줍니다.

 

1. flex

- 부모 요소를 flex container로 만들어줌

- 자식 요소들은 자동으로 flex item이 됨

- 수평/수직 정렬, 공간 나누기, 간격 조정 등이 매우 쉬워짐

 

✅ 주요 속성

flex-direction 주축 방향 설정 (row, column 등)
justify-content 주축 정렬 (flex-direction 방향으로 정렬)
align-items 교차축 정렬 (주축이 가로면 세로 정렬)
gap 아이템 간격 설정
flex-grow 남은 공간 분배 비율
flex-shrink 공간 줄어들 때 비율 조정
flex-basis 기본 크기 설정

 

이제 flex 주요 속성 예제를 살펴보겠습니다. 아래 예제에서는 부모 요소인 flex-container에 justify-content, align-items, gap, flex-grow, flex-shrink, flex-basis 같은 다양한 속성들을 적용하여 3개의 flex-item이 어떻게 배치되고 변하는지를 확인할 수 있습니다.

 

📌 flex 주요 속성 예제

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>flex 주요 속성 예제</title>
  <style>
    .flex-container {
      display: flex;
      background-color: #eee;
      height: 100px;
      margin-bottom: 20px;
    }
    .flex-item {
      background-color: lightblue;
      margin: 5px;
      width: 50px;
      height: 50px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: bold;
      font-size: 18px;
    }
  </style>
</head>
<body>

<h2>1. 기본 flex-container</h2>
<div class="flex-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>

<h2>2. justify-content: center</h2>
<div class="flex-container" style="justify-content: center;">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>

<h2>3. align-items: center</h2>
<div class="flex-container" style="align-items: center;">
  <div class="flex-item" style="height: 90px;">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item" style="height: 30px;">3</div>
</div>

<h2>4. gap: 20px</h2>
<div class="flex-container" style="gap: 20px;">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>

<h2>5. flex-grow 적용</h2>
<div class="flex-container">
  <div class="flex-item" style="flex-grow: 1;">1</div>
  <div class="flex-item" style="flex-grow: 2;">2</div>
  <div class="flex-item" style="flex-grow: 1;">3</div>
</div>

<h2>6. flex-shrink 적용</h2>
<div class="flex-container" style="width: 300px;">
  <div class="flex-item" style="flex-shrink: 1; width: 200px;">1</div>
  <div class="flex-item" style="flex-shrink: 2; width: 200px;">2</div>
  <div class="flex-item" style="flex-shrink: 1; width: 200px;">3</div>
</div>

<h2>7. flex-basis 적용</h2>
<div class="flex-container">
  <div class="flex-item" style="flex-basis: 150px;">1</div>
  <div class="flex-item" style="flex-basis: 100px;">2</div>
  <div class="flex-item" style="flex-basis: 200px;">3</div>
</div>

</body>
</html>

flex 주요 속성 구현 화면

 

2. grid

- 부모 요소를 grid container로 만들어줌

- 자식 요소들을 행과 열로 나누어 배치할 수 있음

- 복잡한 2차원 레이아웃을 만들 때 특히 강력함

 

✅ 주요 속성

grid-template-columns 열 너비 설정
grid-template-rows 행 높이 설정
gap 아이템 간격 설정
grid-column 아이템이 차지하는 열 영역 지정
grid-row 아이템이 차지하는 행 영역 지정
grid-area 영역 이름으로 배치 지정

 

이제 grid 주요 속성 예제를 살펴보겠습니다. 아래 예제에서는 부모 요소인 grid-container에 grid-template-columns, grid-template-rows, gap, grid-column, grid-row, grid-area 같은 다양한 속성들을 적용하여 요소들이 어떻게 배치되고 변하는지를 확인할 수 있습니다. grid는 칸(cell)이 아니라 선(line) 기준으로 영역을 설정한다는 점에 주의해야 합니다.

 

📌 grid 주요 속성 예제

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>grid 주요 속성 예제</title>
  <style>
    .grid-container {
      display: grid;
      background-color: #eee;
      height: 260px;
      margin-bottom: 20px;
      grid-template-columns: 1fr 2fr 1fr;
      grid-template-rows: 100px 100px;
      gap: 10px;
      grid-template-areas:
        "header header header"
        "sidebar main main";
    }
    .grid-item {
      background-color: lightcoral;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: bold;
      font-size: 14px;
    }
    .header {
      grid-area: header;
      background-color: lightseagreen;
    }
    .sidebar {
      grid-area: sidebar;
      background-color: lightpink;
    }
    .main {
      grid-area: main;
      background-color: lightyellow;
    }
  </style>
</head>
<body>

<h3>1. 기본 grid-container</h3>
<div class="grid-container">
  <div class="grid-item header">Header</div>
  <div class="grid-item sidebar">Sidebar</div>
  <div class="grid-item main">Main</div>
</div>

<h3>2. grid-column, grid-row 직접 지정</h3>
<div class="grid-container">
  <div class="grid-item" style="grid-column: 1 / 3;">1 (가로로 2칸 차지)</div>
  <div class="grid-item">2</div>
  <div class="grid-item" style="grid-row: 2 / 3;">3 (두 번째 줄)</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
</div>

</body>
</html>

grid 주요 속성 구현 화면

 

🔵 grid-area와 grid-template-areas의 연결

더보기

`grid-template-areas`는 부모 요소(`grid-container`) 안의 레이아웃을 <이름> 으로 설계하는 방법

 

1. HTML 요소에 클래스 이름 지정:

   - 구분을 쉽게 하기 위해 이름을 붙임 (※반드시 필요한 것은 아니나 보통 깔끔하게 맞춰줌)

   - ex) <div class="header">Header</div>

 

2. CSS에서 `grid-area` 속성 지정:

   - `grid-area`의 값은 어떤 영역의 이름에 연결될지를 지정하는 것

   - ex) .header { grid-area: header; }

 

3. 부모(grid-container)에서 `grid-template-areas` 설정

   - 자식 요소들의 `grid-area` 값이 일치해야 제대로 매칭됨

   - ex) grid-template-areas: "header header header" "sidebar main main";

 

4️⃣ 자주 틀리는 포인트 정리

 

☑️ block vs inline vs inline-block

항목 block inline inline-block
기본 배치 새 줄에서 시작, 한 줄 전체 차지 줄 안에 다른 요소와 함께 흐름 유지 줄 안에 배치되지만 크기 지정 가능
width, height  가능 불가능 가능
대표 예시 <div>, <p>, <section> <span>, <a>, <strong> (기본 태그 없음, CSS로 설정)

 

☑️ flex vs grid

항목 flex grid
주 사용 방향 한 방향(가로 또는 세로) 가로 + 세로 동시에
정렬 방식 주축 방향 정렬 격자 기반 배치
쓰임새 메뉴바, 버튼 묶음 전체 페이지 레이아웃, 대시보드
영역 지정 흐름(flow) 따라 명시적으로 (grid-template-areas) 지정 가능

(※ flex는 "흐름" 기반이라 주축/교차축을,  grid는 "격자" 기반이라 열/행, 선(line)을 신경 써야 한다)

 

☑️ flex-grow, flex-shrink 오해

항목 설명
flex-grow 남은 공간을 비율대로 나눈다 (flex-grow:2를 준다고 해서 요소 크기가 2배가 되는 게 아님)
flex-shrink 공간이 부족할 때 줄어드는 비율을 설정한다

 

☑️ grid-column, grid-row는 칸이 아니라 선 기준!

항목 설명
grid-column: 1 / 3 1번 선부터 3번 선까지 차지 → 가로 2칸 차지
grid-row: 2 / 3 2번 선부터 3번 선까지 차지 → 두 번째 줄

 

 


 

flex는 한 방향(수평/수직) 정렬에 강하고, grid는 가로와 세로를 동시에 제어하는 데 최적화되어 있기 때문에, 어떤 레이아웃을 만들고 싶은지에 따라 적절히 선택하는 것이 중요합니다. 이번 글에서는 display 기본 개념부터 시작해서 flex, grid의 주요 속성과 실전 사용 방법까지 한 번에 정리했습니다. 핵심은 어렵게 외우려고 하지 말고, 흐름(flow)을 제어하는 건 flex, 격자(layout)를 설계하는 건 grid라고 감각을 잡는 것입니다. 한 번 제대로 개념을 정리해두면, 그 이후로는 어떤 레이아웃도 훨씬 쉽게 이해하고 구현할 수 있을 것입니다.

저작자표시 비영리 변경금지 (새창열림)

'🌐 Front-End' 카테고리의 다른 글

[🎨CSS] 반응형 웹 시작하기 — viewport, 미디어쿼리, flex-wrap까지  (0) 2025.04.06
[🎨CSS] CSS overflow 속성 총정리  (0) 2025.04.06
[🎨CSS] CSS z-index + stacking context 총정리  (0) 2025.04.06
[🎨CSS] CSS position 속성 총정리  (0) 2025.04.06
[⚛️React] Rc-Tree로 메신저 조직도 쉽게 구현하기  (0) 2024.10.23
'🌐 Front-End' 카테고리의 다른 글
  • [🎨CSS] CSS overflow 속성 총정리
  • [🎨CSS] CSS z-index + stacking context 총정리
  • [🎨CSS] CSS position 속성 총정리
  • [⚛️React] Rc-Tree로 메신저 조직도 쉽게 구현하기
파스트잇
파스트잇
  • 파스트잇
    파랑새를 냉장고에 넣는 방법
    파스트잇
    GitHub Ihyeon's GitHub
  • 전체
    오늘
    어제
  • 글쓰기 관리자
    • 전체 글 목록 (14)
      • ☕ Java (5)
        • 🌱 Spring (2)
      • 🟣 C# (0)
      • 🟨 JavaScript (0)
      • 🖥️ Back-End (0)
      • 🌐 Front-End (7)
      • 🧩 Algorithm (1)
        • Coding Test (0)
      • 🚀 Cloud & DevOps (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring
    내용넘칠때
    KDT
    쿼리dsl
    Media Query
    메서드
    상수 공간
    키 페어
    Position
    순수 자바
    반응형
    미디어쿼리
    선형 시간
    자바
    java
    카드형 레이아웃
    K-디지털트레이닝
    css
    이차 공간
    rc-tree
    스프링부트
    로그 공간
    반응형 웹
    보안규칙
    스프링
    responsive web
    알고리즘
    국비개발
    html
    국비
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
파스트잇
[🎨CSS] CSS display 속성 총정리
상단으로

티스토리툴바