AD JB Toolbox 01

CSS 강좌 / display와 기본 배치 흐름 이해하기

요소는 별도 배치 규칙이 없으면 문서의 기본 흐름(normal flow)에 따라 놓입니다. 블록은 보통 새 줄에서 시작하고 인라인은 문장 속에 이어지며 공간이 부족하면 줄바꿈됩니다. display는 요소가 만드는 박스의 배치 방식을 바꾸지만 HTML 요소의 의미를 바꾸지는 않습니다.

같은 요소를 블록·인라인·인라인 블록으로 비교하기

값 기본 흐름에서의 배치 일반적인 텍스트 요소의 width·height
block 새 줄에서 시작하고 뒤도 줄바꿈 적용 가능
inline 주변 글자와 같은 줄에 이어짐 span·a 같은 일반 인라인에는 적용되지 않음
inline-block 주변 줄에 이어지는 하나의 박스 적용 가능

div·p는 보통 블록, span·a는 보통 인라인으로 표시됩니다. 블록에 별도 너비를 주지 않으면 일반적으로 부모의 사용 가능한 너비를 채웁니다. 인라인은 문장의 글자처럼 줄 안에서 배치되므로 긴 콘텐츠가 여러 줄에 걸쳐 나뉠 수 있습니다. inline-block은 줄 안에 놓이는 하나의 상자로 취급되어 상자 내부의 내용은 줄바꿈되어도 상자 자체가 일반 인라인처럼 여러 조각으로 나뉘지 않습니다.

.item { width: 120px; height: 48px; padding: 8px; margin: 8px; }
.blocks .item { display: block; }
.inlines .item { display: inline; }
.inline-blocks .item { display: inline-block; }

전체 예제는 같은 span 세 개에 같은 크기와 여백을 주고 display만 바꿉니다. block은 항목마다 새 줄을 쓰고, inline-block은 공간이 있으면 같은 줄에 놓입니다. inline의 width·height 선언은 스타일 목록에 남아 있어도 일반 텍스트 span의 실제 박스 크기를 그 숫자로 만들지 않습니다. 계산된 선언과 실제 사용된 크기를 구분해 확인하세요.

인라인의 여백과 이미지 예외

일반 인라인에서 좌우 여백과 padding은 줄 안의 공간에 영향을 줍니다. 위아래 padding과 border는 그려질 수 있지만 블록처럼 주변 줄을 밀어내는 방식으로 줄 높이를 결정하지 않습니다. 여러 줄 텍스트에 큰 세로 padding을 주면 겹쳐 보일 수 있습니다. 전체 예제에서는 줄 높이에 여유를 주어 표시를 관찰합니다.

“인라인은 크기를 지정할 수 없다”는 설명을 모든 요소에 적용하지 마세요. img처럼 외부 콘텐츠로 채워지는 대체 요소(replaced element)는 기본 표시가 인라인이어도 width와 height로 크기를 정할 수 있습니다. 예제의 파란 직사각형 이미지는 120×60px입니다. 일반 텍스트 span과 같은 조건이라고 생각하지 않는 것이 중요합니다. 기본 흐름은 MDN의 블록·인라인 배치 안내를 참고하세요.

숨기는 두 방법은 공간이 다릅니다

선언 화면 표시 원래 차지하던 공간 HTML 자체
display: none 요소와 자식의 박스를 표시하지 않음 남기지 않음 DOM에는 남음
visibility: hidden 보이지 않음 유지 DOM에는 남음

DOM(Document Object Model)은 브라우저가 HTML 문서를 요소 구조로 다루는 모델입니다. CSS로 숨기는 것과 HTML 요소를 삭제하는 것은 다릅니다. display: none인 문단도 개발자 도구의 Elements에서 찾을 수 있습니다. 전체 예제의 “앞·대상·뒤” 행에서 hidden은 대상 자리의 빈칸이 남고 none은 뒤쪽 글자가 앞으로 당겨집니다.

두 속성 모두 보조 기술이나 키보드 접근에도 영향을 줄 수 있습니다. 중요한 안내를 단순히 보이지 않게 만드는 것은 화면 장식만의 문제가 아닙니다. 이번 실습은 정적인 상자의 공간 차이에 집중하며 실제 메뉴·버튼을 숨길 때는 포커스 이동과 사용 가능한 정보도 함께 확인해야 합니다. MDN의 display 설명와 MDN의 visibility 설명를 참고하세요.

inline-block의 정렬과 기본 흐름의 한계

inline-block은 글자 줄 안에 있으므로 기본적으로 줄의 기준선(baseline)에 맞춰집니다. 항목 아래에 빈 공간이 보이거나 높이가 다른 항목이 어긋나면 vertical-align과 line-height를 함께 확인하세요. HTML에서 항목 사이의 공백이나 줄바꿈도 인라인 배치에서는 눈에 보이는 간격이 될 수 있습니다.

display로 모양을 바꿔도 span이 제목 의미를 갖거나 div가 버튼으로 동작하지는 않습니다. 의미에 맞는 HTML을 고른 뒤 배치를 설정하세요. 여러 상자의 정렬·간격·크기를 함께 관리해야 한다면 이후 Flexbox·Grid에서 배우는 규칙이 더 적합할 수 있습니다. 기본 흐름을 이해하면 그 배치가 무엇을 바꾸는지 판단하기 쉬워집니다.

전체 예제를 실행하고 한 값씩 바꾸기

아래 코드를 display.html에 UTF-8로 저장하고 엽니다. 이미지 예제는 파일 없이 실행할 수 있는 SVG 데이터를 포함합니다. 세 배치 방식과 세 숨김 상태를 같은 문서에서 비교합니다.

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>display와 숨김 비교</title>
  <style>
    * { box-sizing: border-box; }
    body { margin: 16px; color: #333; font: 16px/1.6 sans-serif; }
    .example { margin-block: 24px; padding: 8px; border: 1px dashed #777; }
    .item { width: 120px; height: 48px; padding: 8px; margin: 8px;
      border: 1px solid #a8653e; background: #ffe8dd; }
    .blocks .item { display: block; }
    .inlines { line-height: 3; }
    .inlines .item { display: inline; }
    .inline-blocks .item { display: inline-block; }
    .visibility-row { margin-block: 16px; padding: 8px; border: 1px solid #aaa; }
    .target { display: inline-block; width: 120px; height: 48px; background: #d9eee2; }
    .none .target { display: none; }
    .hidden .target { visibility: hidden; }
    .replaced { width: 120px; height: 60px; vertical-align: middle; }
  </style>
</head>
<body>
  <h1>블록과 인라인 비교</h1>
  <h2>block</h2><div class="example blocks"><span class="item">항목 A</span><span class="item">항목 B</span><span class="item">항목 C</span></div>
  <h2>inline</h2><div class="example inlines"><span class="item">항목 A</span><span class="item">항목 B</span><span class="item">항목 C</span></div>
  <h2>inline-block</h2><div class="example inline-blocks"><span class="item">항목 A</span><span class="item">항목 B</span><span class="item">항목 C</span></div>
  <h2>표시·숨김·제거 비교</h2>
  <div class="visibility-row">앞 <span class="target">표시된 대상</span> 뒤</div>
  <div class="visibility-row hidden">앞 <span class="target">숨겨진 대상</span> 뒤</div>
  <div class="visibility-row none">앞 <span class="target">박스가 없는 대상</span> 뒤</div>
  <h2>인라인 대체 요소인 이미지</h2>
  <p>앞 <img class="replaced" alt="너비 120px, 높이 60px인 파란 직사각형" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='24'%3E%3Crect width='48' height='24' fill='%237ebad3'/%3E%3C/svg%3E"> 뒤</p>
</body>
</html>
  1. 개발자 도구에서 block과 inline-block 항목의 테두리까지 크기를 확인합니다. 공통 border-box 규칙 때문에 120×48px입니다. inline 항목은 같은 width 선언이 있어도 120px 너비로 고정되지 않습니다.
  2. 창을 좁혀 inline-block의 세 번째 항목이 다음 줄로 넘어가는지 확인합니다. block은 넓은 화면에서도 각각 새 줄에서 시작합니다.
  3. .none .target의 display: none 선언을 끕니다. 대상이 나타나면서 뒤쪽 글자 위치가 달라지는지 확인하세요. hidden의 visibility 선언을 끄면 대상이 나타나지만 원래 확보한 공간은 유지됩니다.
  4. 이미지의 width만 160px로 바꿉니다. 일반 인라인 span과 달리 크기가 변하는지 확인하고 120px로 되돌립니다. height 60px을 고정한 채 너비만 바꾸면 원래 비율이 달라집니다.

예상과 다른 배치는 최종 display 값, 부모의 배치 방식, 박스 크기와 줄 높이를 확인하세요. 적용되지 않는 크기 선언을 반복해서 추가하기보다 요소 종류와 기본 흐름을 먼저 구분하는 것이 도움이 됩니다.

같은 카테고리의 다른 글
CSS 강좌 / 배경색과 배경 이미지 설정하기

CSS 강좌 / 배경색과 배경 이미지 설정하기

실습용 이미지를 내려받아 배경색과 배경 이미지 경로를 설정합니다. cover·contain의 잘림과 빈 공간, 반복과 위치를 비교하고 배경이 안 보일 때의 확인 순서를 설명합니다.

CSS / Tutorial / 마우스 호버 효과 / 서서히 길어지는 선 만드는 방법

CSS / Tutorial / 마우스 호버 효과 / 서서히 길어지는 선 만드는 방법

마우스를 올리면 선이 그려지는 효과를 만들어봅니다. 다음과 같이 사각형을 만듭니다. :before를 이용하여 선이 시작하는 위치를 정합니다. position 속성으로 선 위에 선을 그릴 수 있도록 설정합니다.

CSS / Tutorial / 표 꾸미기 / 배경색

CSS / Tutorial / 표 꾸미기 / 배경색

배경색은 background-color 속성으로 만듭니다. table, tr, th, td, thead, tbody, tfoot에 적용할 수 있습니다. 다음 표를 기본으로 하고, 배경색을 여러 곳에 추가해보겠습니다.

CSS 강좌 / CSS란 무엇이고 HTML과 어떻게 다를까?

CSS 강좌 / CSS란 무엇이고 HTML과 어떻게 다를까?

HTML과 CSS의 역할을 구분하고, 같은 작은 정원 문서에 색상·배경·여백을 적용합니다. 실행 가능한 예제와 세 가지 변형 실습으로 스타일이 바뀌는 범위를 확인할 수 있습니다.

CSS Tutorial / !important

CSS Tutorial / !important

CSS에서 !important는 특정 스타일 규칙이 다른 모든 스타일 규칙보다 우선 적용되도록 강제하는 데 사용됩니다. 이 키워드는 일반적인 스타일 우선 순위를 무시하고, 해당 스타일이 다른 어떤 스타일보다도 높은 우선순위를 가지도록 합니다.

CSS 강좌 / 브라우저 개발자 도구로 CSS 확인하고 수정하기

CSS 강좌 / 브라우저 개발자 도구로 CSS 확인하고 수정하기

브라우저 개발자 도구에서 안내 문단을 선택하고, Styles의 선언과 Computed의 최종 값을 확인합니다. 색상 변경·선언 끄기·원본 저장 실습과 적용되지 않는 CSS의 원인별 점검 방법을 제공합니다.

CSS 강좌 / 글꼴, 글자 크기, 굵기, 줄 간격 설정하기

CSS 강좌 / 글꼴, 글자 크기, 굵기, 줄 간격 설정하기

글꼴·글자 크기·굵기·줄 간격을 설정하고 실제 사용된 글꼴을 확인하는 방법을 설명합니다. 단위 없는 line-height와 em 값의 상속 차이를 실행 가능한 예제로 비교합니다.

CSS 강좌 / 상속·우선순위·캐스케이드로 최종 스타일 결정하기

CSS 강좌 / 상속·우선순위·캐스케이드로 최종 스타일 결정하기

상속과 직접 지정의 차이부터 중요도·선택자 우선순위·작성 순서까지 단계별로 판단합니다. 같은 문단의 색상·여백·테두리를 예측하는 전체 예제와 !important·인라인 스타일의 비교 실습을 제공합니다.

CSS / Tutorial / 변수 사용하는 방법

CSS / Tutorial / 변수 사용하는 방법

CSS 사용자 지정 속성을 :root와 특정 구성 요소에 선언하고 var()로 색과 간격을 재사용하는 방법을 설명합니다. 상속 범위, 값이 없을 때의 대체값, 유효하지 않은 값의 처리도 예제로 확인합니다.

CSS 강좌 / 표와 셀의 크기 조절하기

CSS 강좌 / 표와 셀의 크기 조절하기

표의 자동·고정 레이아웃, 30:70 열 너비, 긴 문자열의 영향을 같은 데이터로 비교합니다. 모바일 가로 스크롤과 키보드 이동을 확인하고 말줄임 원문을 보존하는 방법을 설명합니다.