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 강좌 / 박스 모델과 margin, padding, border 이해하기

CSS 강좌 / 박스 모델과 margin, padding, border 이해하기

콘텐츠·padding·border·margin의 위치와 너비 계산을 도해와 실행 예제로 설명합니다. 여백 축약 규칙과 세로 margin 합치기를 비교하고 개발자 도구에서 실제 크기를 확인합니다.

CSS / Tutorial / 구분선 만드는 방법

CSS / Tutorial / 구분선 만드는 방법

글의 완급 조절, 내용 전환 등을 위해 구분선을 사용하는 경우가 많습니다. 선은 여러 가지 방식으로 만들 수 있는데, 보기 좋게 꾸미는 것은 CSS로 합니다. 아래는 div 태그에 모양을 입혀서 구분선을 만드는 몇 가지 예제입니다.

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

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

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

CSS 강좌 / 색상 값과 px·em·rem·% 단위 이해하기

CSS 강좌 / 색상 값과 px·em·rem·% 단위 이해하기

색상 표기와 px·em·rem·%의 계산 기준을 비교합니다. 중첩된 글자 크기와 여백이 있는 상자 예제로 실제 크기를 계산하고 개발자 도구에서 확인할 수 있습니다.

CSS / Tutorial / 표 꾸미기 / 테두리

CSS / Tutorial / 표 꾸미기 / 테두리

테두리는 border 속성으로 만듭니다. table, th, td 요소에 적용할 수 있습니다. tr 요소에는 적용되지 않습니다.

CSS 강좌 / 문법

CSS 강좌 / 문법

CSS의 선택자·선언·구분 기호·주석을 예제로 설명합니다. 잘못된 속성값과 세미콜론 누락을 비교하고, 실행 가능한 예제와 오류 수정 실습으로 브라우저가 적용한 결과를 확인합니다.

CSS / Tutorial / ul, ol 가운데 정렬하는 방법

CSS / Tutorial / ul, ol 가운데 정렬하는 방법

목록 자체가 아니라 목록 안의 내용만 가운데 정렬할 때는 text-align 속성을 사용합니다. 목록 요소 자체를 가운데 정렬할 때는 margin 속성을 사용합니다. 만약 요소의 내용에 맞게 자동으로 크기가 정해지게 하고 싶으면 display 속성을 사용합니다.

CSS / Tutorial / 마름모 만드는 방법

CSS / Tutorial / 마름모 만드는 방법

CSS로 삼각형을 만들 수 있다면 마름모는 쉽게 만들 수 있습니다. 삼각형을 두 개 붙이면 마름모가 되기 때문입니다. 마름모는 네 변의 길이가 같은 사각형이므로, 이등변삼각형 두 개를 붙이며 됩니다.

CSS 강좌 / 넘치는 콘텐츠와 긴 문자열 처리하기

CSS 강좌 / 넘치는 콘텐츠와 긴 문자열 처리하기

같은 내용에 visible·hidden·auto·scroll을 적용해 넘침 처리를 비교합니다. 긴 URL 줄바꿈과 실제 말줄임표 예제를 실행하고, 원문 보존과 키보드 스크롤을 함께 확인합니다.

CSS / Tutorial / 유튜브 동영상을 반응형으로 삽입하는 방법

CSS / Tutorial / 유튜브 동영상을 반응형으로 삽입하는 방법

유튜브 영상을 블로그나 홈페이지에 넣을 때 보통 iframe을 사용합니다. 코드는 유튜브 영상 공유에서 를 클릭하여 구할 수 있습니다. 아래와 같은 코드인데, 고정폭입니다. 즉 웹브라우저의 가로폭이 커지든 작아지든 가로폭이 일정합니다. 이를 반응형으로 만들고 싶다면 아래처럼 합니다.