Menu

HTML 공백과 띄어쓰기:  , 여러 칸 띄우기, white-space

브라우저는 HTML에서 연속된 공백을 하나로 합쳐요. &nbsp;로 공백을 더 넣는 법, 줄바꿈 없는 공백의 역할, <pre>와 white-space로 공백과 탭을 유지하는 법, CSS 간격이 더 나은 경우를 알아봐요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

HTML에서 공백 넣기

HTML에서 두 단어 사이에 공백을 다섯 칸 입력해도 브라우저는 한 칸만 보여 줘요. 연속된 공백, 탭, 개행은 모두 공백 하나로 합쳐져요. 공백을 더 넣으려면 줄바꿈 없는 공백 엔티티 &nbsp;를 한 칸마다 하나씩 쓰세요.

&nbsp;는 텍스트 한 줄 안에 공백 몇 칸을 넣을 때 좋아요. 더 큰 간격이나 요소 사이 간격에는 아래에서 설명하는 CSS를 쓰세요.

 가 하는 일

&nbsp;는 줄바꿈 없는 공백(문자 U+00A0)이에요. 효과가 두 가지 있어요.

  1. 합쳐지지 않아요. 그래서 세 개를 쓰면 공백 세 칸이 돼요.
  2. 그 자리에서 줄이 바뀌지 않아요. 그래서 양쪽 단어가 붙어 있어요.

진짜 역할은 두 번째예요. 숫자와 단위, 이니셜, 두 줄로 나뉘면 어색한 짧은 구절을 &nbsp;로 이어요.

회색 상자에서는 "10"과 "km"가 다른 줄로 떨어져요. 초록색 상자에서는 떨어질 수 없어요. 더 긴 부분을 붙여 두려면 엔티티를 줄줄이 쓰는 것보다 span에 white-space: nowrap을 주는 게 쉬워요. 줄바꿈 페이지를 보세요.

너비가 다른 공백 엔티티

HTML에는 더 넓거나 좁은 공백을 위한 이름 있는 문자가 있어요. 이것들도 합쳐지지 않아서 텍스트 간격을 세밀하게 조절할 때 편해요.

엔티티이름너비
&nbsp;줄바꿈 없는 공백일반 공백과 같음
&ensp;En 공백0.5em
&emsp;Em 공백1em(글자 크기)
&thinsp;얇은 공백em의 일부, 글꼴에 따라 다름
&#8239;좁은 줄바꿈 없는 공백얇고, 줄바꿈 없음

파란 하이라이트가 각 공백의 너비를 보여 줘요. 줄바꿈까지 막는 것은 &nbsp;와 &#8239;뿐이에요.

모든 공백 유지하기: pre와 white-space

공백이 내용의 일부라면(코드, ASCII 아트, 정렬된 열, 시) 엔티티를 넣는 대신 공백을 전부 유지하세요. <pre> 요소는 기본적으로 그렇게 하고, CSS white-space 속성은 어떤 요소에서든 그렇게 해요.

white-space 값공백개행긴 줄 줄바꿈
normal(기본값)합쳐짐공백이 됨예
nowrap합쳐짐공백이 됨아니요
pre유지유지아니요
pre-wrap유지유지예
pre-line합쳐짐유지예

사용자 텍스트에는 보통 pre-wrap이 알맞아요. 공백을 유지하면서도 좁은 화면에서는 줄을 바꿔요. pre는 줄을 그대로 두고, 대신 스크롤되거나 넘쳐요.

탭도 pre 안에서는 유지돼요. 기본 너비는 공백 8칸이고 tab-size 속성으로 바꿀 수 있어요(tab-size: 4).

CSS로 간격 주기

"여기에 공백이 필요해"라는 순간의 대부분은 사실 레이아웃이고, CSS가 엔티티보다 잘해요. 간격이 일정하게 유지되고 한 곳에서만 바꾸면 되니까요.

margin과 padding은 요소 사이 간격을, gap은 flex나 grid 컨테이너 안의 항목 간격을, letter-spacing과 word-spacing은 텍스트 자체의 간격을 줘요. 문단 첫 줄 들여쓰기는 text-indent를 쓰고, 텍스트 가운데 정렬 페이지에서 다뤄요.

인라인 요소 사이의 틈

공백이 합쳐지는 것의 이면도 있어요. 인라인 요소나 inline-block 요소 두 개 사이의 공백 문자는 여전히 공백 한 칸으로 계산돼요. 소스에서 두 버튼 사이에 개행이 있으면 버튼 사이에 작은 틈이 생겨요.

첫 번째 쌍은 소스의 개행 때문에 틈이 있어요. flex 컨테이너에서는 항목 사이의 공백 문자가 무시되니까 두 번째 쌍은 붙어 있어요. 간격을 정확히 조절하고 싶다면 flex와 gap을 쓰세요.

자주 하는 실수

  • 레이아웃에 &nbsp;를 줄줄이 씀. 글꼴이나 화면 크기가 바뀌면 바로 깨져요. margin, padding, gap을 쓰세요.
  • 공백을 여러 칸 입력하고 보일 거라고 기대함. 합쳐져요. &nbsp;나 white-space: pre-wrap을 쓰세요.
  • 세미콜론 없이 &nbsp로 씀. 브라우저는 대개 받아 주지만 올바르지 않고 어떤 위치에서는 실패해요. 항상 ;로 끝내세요.
  • 줄바꿈을 막으려고 &nbsp;를 어디에나 씀. 줄바꿈 없는 긴 텍스트는 휴대폰에서 넘쳐요. 꼭 붙어 있어야 하는 것만 이으세요.
  • 공백으로 문단을 들여씀. CSS의 text-indent를 쓰세요.

자주 묻는 질문

HTML에서 공백은 어떻게 넣나요?

공백 한 칸은 입력한 그대로 동작하지만, 여분의 공백은 하나로 합쳐져요. 더 넣으려면 줄바꿈 없는 공백 엔티티 &nbsp;를 공백 한 칸마다 하나씩 쓰세요. a&nbsp;&nbsp;&nbsp;b처럼요. 레이아웃 간격에는 대신 CSS margin, padding, gap을 쓰세요.

HTML에서 &nbsp;는 무슨 뜻인가요?

&nbsp;는 줄바꿈 없는 공백(non-breaking space)이에요. 일반 공백처럼 보이지만 브라우저가 그 자리에서 줄을 바꾸지 않고 합치지도 않아서, 10&nbsp;km 같은 단어를 붙여 두거나 공백을 더 넣을 때 써요.

HTML은 왜 제가 넣은 공백을 무시하나요?

HTML은 공백 문자를 합쳐요. 연속된 공백, 탭, 개행은 공백 하나로 표시되고, 줄 앞뒤의 공백은 제거돼요. 유지하려면 &nbsp;, <pre>, 또는 CSS white-space 속성을 쓰세요.

HTML에서 탭은 어떻게 넣나요?

HTML에는 서식을 유지하는 텍스트 밖에서 보이는 탭이 없어요. <pre>나 white-space: pre가 적용된 요소 안에서는 탭 문자가 유지되고, CSS tab-size 속성으로 너비를 정해요. 문단 들여쓰기에는 CSS의 text-indent나 padding-inline-start를 쓰세요.

&nbsp;와 &emsp;는 무엇이 다른가요?

&nbsp;는 일반 공백과 너비가 같아요. &ensp;는 0.5em, &emsp;는 1em(글자 크기만큼) 너비예요. &ensp;와 &emsp;도 합쳐지지 않지만, &nbsp;와 달리 그 자리에서 줄이 바뀔 수는 있어요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기