본문으로 건너뛰기

공백 규칙과 특수 문자

HTML·CSS 목차글을 담는 태그레슨 12 / 93

목차

글 속의 빈칸 · 줄바꿈 · 들여쓰기를 함께 공백(whitespace)이라고 합니다. 공백도 나무에는 친 그대로 글로 남지만, 브라우저는 화면에 그릴 때 이어진 공백을 빈칸 하나로 합칩니다. 그래서 줄을 나누는 것은 엔터가 아니라 요소와 br이고, 꺾쇠(< · >)를 글자로 보이려면 &lt; · &gt; 같은 특수 문자를 씁니다.

편집기에서 엔터로 줄을 나누고 빈칸으로 칸을 맞춰도, 브라우저에서 열면 글이 한 줄로 붙어 나옵니다. 글 속에 태그를 설명하려고 <p>를 그대로 적으면 그 글은 사라지고 문단이 하나 더 생깁니다. 두 일 모두 오류 메시지 없이 일어납니다. 이 레슨에서는 공백이 나무와 화면에서 어떻게 다른지, 줄을 나누는 법, 꺾쇠를 글자로 쓰는 법을 봅니다.

5단계 중 1단계. 나무 판은 지금까지 빈칸만 있는 글을 숨겨 그렸습니다. 개발자 도구 Elements도 그렇습니다. 이 그림은 켠 채로, 나무에 든 그대로 그립니다.

1나무에는 그대로, 화면에서 하나로

<p>재료:
  밥 2공기
  김치 1컵</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글재료: 밥 2공기 김치 1컵

코드에서는 세 줄로 나눠 두 칸씩 들여 썼지만, 결과 화면에는 '재료: 밥 2공기 김치 1컵' 한 줄이 그려졌습니다. 브라우저는 p 안의 줄바꿈과 들여쓰기를 지우지 않고 글로 나무에 넣어 둡니다. 화면에 그릴 때만 줄바꿈 하나와 빈칸 둘이 이어진 덩어리를 빈칸 한 칸으로 합칩니다. 위 화면 그림의 나무 판이 빈칸 보이기로 보여 주는 것이 나무에 든 그대로의 글입니다.

브라우저 규칙 2. 태그 밖의 줄바꿈 · 빈칸 · 들여쓰기도 글로 나무에 남습니다. 화면에 그릴 때 이어진 빈칸은 하나로 합쳐지고, 문단 사이 · 목록의 줄 사이처럼 빈칸만 있는 글은 그려지지 않습니다.

빈칸을 여러 번 쳐도 같습니다. 이어진 빈칸은 몇 개든 화면에서 한 칸입니다.

<p>김치     1컵</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글김치 1컵

2줄을 나누는 것은 요소와 br

화면에서 줄을 나누려면 나무에 줄이 나뉜다는 표시가 있어야 합니다. 그 표시는 요소입니다 — 문단이 바뀌면 p를 새로 열고, 한 문단 안에서 줄만 바꿀 때는 br를 씁니다.

<p>
  재료:<br />
  밥 2공기<br />
  김치 1컵
</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글재료: / 밥 2공기 / 김치 1컵

br 자리에서 줄이 바뀌었습니다. 줄을 바꾼 뒤 새 줄 맨 앞에 오는 줄바꿈과 들여쓰기는 그려지지 않아, 코드의 들여쓰기도 화면에 남지 않습니다. 재료처럼 줄마다 따로인 글은 목록 ul·ol·li가 맞고, br는 주소나 시처럼 한 문단 안에서 줄만 바꿀 때 씁니다.

3꺾쇠를 글자로 — 특수 문자

글 속에 꺾쇠를 그대로 쓰면, 브라우저는 그것을 태그로 읽습니다.

<p>태그는 <p>처럼 씁니다.</p>
결과 화면
잰 값개발자 도구에서 본 값
  • body의 나무<p>태그는 </p><p>처럼 씁니다.</p>

글 속의 <p>는 새 문단을 여는 태그가 되어, 화면에서 사라지고 문단이 둘로 갈라졌습니다. 꺾쇠를 글자로 보이려면 특수 문자(자료에 따라 문자 참조)를 씁니다. &로 시작해 ;으로 끝나는 짧은 이름입니다.

<p>태그는 &lt;p&gt;처럼 씁니다.</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글태그는 <p>처럼 씁니다.
쓰는 꼴화면이름의 뜻
&lt;<less than
&gt;>greater than
&amp;&ampersand
&nbsp;빈칸 한 칸non-breaking space

&lt; · &gt;는 꺾쇠를 글로 보일 때 씁니다. & 뒤에 이름이 이어지면 특수 문자로 읽힐 수 있어서, & 자체를 보일 때는 &amp;로 씁니다. &nbsp;는 이어 써도 합쳐지지 않는 빈칸입니다. 그래서 빈칸 여럿을 띄울 수는 있지만, 글 사이를 띄우거나 칸을 맞추는 일은 CSS가 맡습니다.

<p>커피  4000원</p>
결과 화면첫째 코드
<p>커피&nbsp;&nbsp;4000원</p>
결과 화면둘째 코드

빈칸 둘은 한 칸으로 합쳐지고, &nbsp; 둘은 두 칸 그대로 그려져 두 화면이 다릅니다.

예제

조리 메모 두 문단입니다. 화면에 보이는 글을 빈칸까지 그대로, 줄마다 먼저 적어 본 뒤 결과 화면을 펴 보세요.

<p>
  김치    1컵을
  잘게 썰어요.
</p>
<p>밥 &amp; 김치를 볶아요.</p>
결과 화면 보기
결과 화면
잰 값개발자 도구에서 본 값
  • body의 보이는 글김치 1컵을 잘게 썰어요. / 밥 & 김치를 볶아요.

예상과 다르면 그곳이 배울 곳입니다.

  • 첫 문단 안의 줄바꿈 · 들여쓰기 · 빈칸 넷은 모두 빈칸 한 칸이 되어, '김치 1컵을 잘게 썰어요.' 한 줄이 됩니다. 앞뒤 줄바꿈은 그려지지 않습니다.
  • 줄이 바뀐 곳은 둘째 p가 시작된 자리 하나입니다.
  • &amp;는 화면에 & 하나로 그려집니다.

자주 틀리는 곳

틀린 생각: 편집기에서 친 대로 줄바꿈과 빈칸이 화면에 나온다.

편집기 화면이 곧 결과처럼 보여서, 엔터를 친 자리에서 줄이 바뀔 것 같습니다.

<p>
  1. 김치 볶기
  2. 밥 넣기
</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글1. 김치 볶기 2. 밥 넣기

두 줄로 친 조리 순서가 한 줄로 붙었습니다.

맞는 규칙: 공백은 나무에 남지만, 화면에서는 이어진 공백이 빈칸 하나로 합쳐집니다(브라우저 규칙 2). 줄을 나누려면 요소(문단 · 목록의 줄)나 br를 씁니다. 조리 순서라면 ol이 맞습니다.

틀린 생각: 줄바꿈은 빈칸이 없는 자리에서 해도 화면에 아무것도 남기지 않는다.

1절의 규칙을 배우면, 줄바꿈은 화면에서 사라진다고 여기기 쉽습니다. 줄바꿈은 사라지는 것이 아니라 빈칸 하나가 됩니다.

<p><strong>김치</strong>
를 볶아요.</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글김치 를 볶아요.

'김치'와 '를' 사이는 원래 붙은 자리인데, 그 자리에서 줄을 바꿔 빈칸이 생겼습니다.

맞는 규칙: 줄바꿈도 그릴 때 빈칸 한 칸이 됩니다. 코드에서 줄을 나눌 때는 원래 빈칸이 있던 자리에서만 나눕니다.

틀린 생각: 문단 사이를 띄우려면 br를 여러 번 쓴다.

br 하나가 줄을 바꾸니, 여럿 쓰면 그만큼 틈이 생길 것 같습니다.

<p>
  밥 2공기<br /><br /><br />
  김치 1컵
</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 나무밥 2공기<br><br><br> 김치 1컵

화면에는 빈 줄이 생겼지만, 나무에서는 여전히 문단 하나 안의 글입니다. 틈의 크기도 글자 크기에 따라 달라집니다.

맞는 규칙: br는 한 문단 안에서 줄을 바꾸는 요소입니다. 글이 나뉘면 문단을 나누고(p 둘), 문단 사이 틈은 CSS가 정하는 여백으로 바꿉니다 — 10단원 '박스 모델'에서 배웁니다.

틀린 생각: br도 다른 요소처럼 </br>로 닫는다.

여는 태그가 있으면 닫는 태그도 있어야 할 것 같습니다.

<p>밥 2공기</br>김치 1컵</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 나무밥 2공기<br>김치 1컵

브라우저는 </br>를 <br>로 읽어 줄을 바꿨습니다. 화면은 같아 보여도 틀린 태그라, 검사기는 이 줄에 'End tag “br”.'를 냅니다(검사기 — 이 단원 끝 레슨).

맞는 규칙: br는 빈 요소라 닫는 태그가 없습니다. <br />(또는 <br>)로만 씁니다.

확인 문제

1. 예제의 두 문단 사이에 빈 줄(5번 줄)이 있습니다. 이 빈 줄을 다섯 줄로 늘리면, 결과 화면에서 두 문단 사이는 어떻게 될까요?

<p>
  김치    1컵을
  잘게 썰어요.
</p>

<p>밥 &amp; 김치를 볶아요.</p>
결과 화면
  • ① 빈 줄 다섯만큼 더 벌어진다
  • ② 그대로다
  • ③ 빈칸 한 칸만큼 더 벌어진다
힌트

빈 줄 다섯이 나무에 무엇으로 들어가는지, 그리고 그 자리가 문단 안인지 문단 사이인지 봅니다.

정답

② — 그대로입니다. 빈 줄을 다섯으로 늘린 코드와 그 결과 화면입니다.

<p>
  김치    1컵을
  잘게 썰어요.
</p>





<p>밥 &amp; 김치를 볶아요.</p>
결과 화면
잰 값개발자 도구에서 본 값
  • body의 보이는 글김치 1컵을 잘게 썰어요. / 밥 & 김치를 볶아요.
  • p의 margin-bottom16px
  • 빈 줄들도 나무에는 글(줄바꿈 다섯)로 남지만, 두 문단 사이처럼 빈칸만 있는 글은 화면에 그려지지 않습니다(브라우저 규칙 2). 문단 사이 틈은 CSS가 정한 여백 16px 그대로입니다.
  • ①은 친 대로 줄이 나온다고 본 것입니다(친 대로 나온다는 생각).
  • ③은 공백 덩어리가 어디서나 빈칸 한 칸으로 남는다고 본 것입니다. 한 칸으로 합쳐 그리는 것은 글 줄 안에서이고, 문단 사이의 빈칸 글은 그려지지 않습니다.

5번 줄의 빈 줄을 빈 줄 다섯으로 늘려 보세요. 두 문단 사이를 보세요.

2. 결과 화면에 5 < 7이 보이도록 ____ 자리에 들어갈 특수 문자를 쓰세요.

<p>5 ____ 7</p>
힌트

꺾쇠를 그대로 쓰면 태그로 읽힙니다. 3절 표에서 '왼쪽 꺾쇠'를 찾습니다.

정답

&lt;입니다.

<p>5 &lt; 7</p>
결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글5 < 7

&gt;는 반대쪽 꺾쇠(>)입니다. 특수 문자는 &로 시작해 ;으로 끝나고, ;을 빠뜨리지 않습니다.

3. 동아리 공지 한 문단입니다. 화면에 보이는 글을 빈칸까지 그대로 쓰세요.

<p>모임은 <strong>금요일</strong>
입니다.</p>
힌트

1번 줄 끝과 2번 줄 첫머리 사이에 무엇이 있는지 봅니다.

힌트 둘

</strong> 뒤에서 줄을 바꾼 자리에 원래 빈칸이 있었는지 봅니다.

정답

모임은 금요일 입니다.

결과 화면
잰 값개발자 도구에서 본 값
  • p의 보이는 글모임은 금요일 입니다.
  • '금요일'과 '입니다' 사이는 빈칸이 없는 자리인데, 그 자리의 줄바꿈이 빈칸 한 칸으로 그려졌습니다(브라우저 규칙 2).
  • 흔한 오답은 '모임은 금요일입니다.'입니다. 줄바꿈은 화면에 아무것도 남기지 않는다고 본 것입니다. 붙여 보이려면 입니다.를 </strong> 바로 뒤에 이어 씁니다.

컴퓨터에서 해 보기(선택) — 점수에 들지 않습니다. 폰으로만 보고 있다면 건너뛰세요. hello.html의 문단 하나에서 낱말 사이에 빈칸을 열 번 쳐 넣고 저장 · 새로고침합니다. 화면에서 그 자리가 몇 칸으로 보이는지 세어 보고, 개발자 도구 Elements 패널에서 그 문단의 글이 어떻게 보이는지도 봅니다. 파일을 만들고 여는 법은 준비: VS Code와 작업 폴더에 있습니다.

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

HTML·CSS 목차로