본문으로 건너뛰기
Tech Blog

CSS 텍스트 줄바꿈의 기본 원리

글 복사 완료!

브라우저가 텍스트를 어떻게 처리하고 줄바꿈을 결정하는지 기본 원리를 이해합니다.

·7분·

웹 개발을 하다 보면 텍스트가 예상과 다르게 줄바꿈되어 당황한 경험이 있을 겁니다. 긴 URL이 컨테이너를 뚫고 나가거나, 한글과 영어가 섞인 텍스트가 어색하게 잘리는 현상 말이죠. 이런 문제들을 해결하려면 먼저 브라우저가 텍스트를 어떻게 처리하는지 이해해야 합니다.

브라우저의 텍스트 렌더링 과정

브라우저가 텍스트를 화면에 그리는 과정을 단계별로 살펴보겠습니다.

1

텍스트 파싱

HTML에서 텍스트 노드를 읽어들이고, 유니코드 문자들을 식별합니다.

<p>Hello 안녕하세요 https://example.com</p>;
2

문자 분류

각 문자를 언어별, 스크립트별로 분류하고 어떤 폰트를 사용할지 결정합니다.

// 라틴 문자: H, e, l, l, o
// 한글: 안, 녕, 하, 세, 요
// 기호: :, /, /
3

줄바꿈 기회 탐지

텍스트에서 줄바꿈이 가능한 지점(break opportunities)을 찾습니다.

Hello |안녕하세요 |https://|example.|com
// |는 줄바꿈 가능 지점
4

레이아웃 계산

컨테이너 너비와 줄바꿈 기회를 고려해 실제 줄바꿈 위치를 결정합니다.

자동 줄바꿈의 기본 규칙

브라우저는 텍스트 종류에 따라 자동 줄바꿈 우선순위가 달라집니다. 아래 예제로 비교해볼게요.

위 예제에서 각 텍스트 타입이 어떻게 다르게 줄바꿈되는지 관찰해보세요.

언어별 줄바꿈 규칙의 차이점

라틴 문자 (영어, 유럽 언어)

1

공백 기반 줄바꿈

단어 사이의 공백에서만 줄바꿈이 가능합니다.

"Hello world" → "Hello |world"
2

하이픈 규칙

하이픈(-) 뒤에서 줄바꿈이 가능하지만, 단어 중간에서는 불가능합니다.

"self-contained" → "self-|contained"
"happening" → 줄바꿈 불가 (단어 중간)

CJK 문자 (중국어, 일본어, 한국어)

1

문자 간 줄바꿈

대부분의 문자 사이에서 줄바꿈이 가능합니다.

"안녕하세요" → "안|녕|하|세|요"
2

금칙 문자

특정 문자들은 줄 시작이나 끝에 올 수 없습니다.

// 줄 끝 금지: ( [ { 「 『
// 줄 시작 금지: ) ] } 」 』 , . ! ?

한글의 경우, 조사나 어미가 분리되는 것을 방지하기 위해 음절 단위로 줄바꿈됩니다. 예를 들어 "합니다"는 "합니|다"로 나뉠 수 있지만, "다"만 따로 떨어지는 것은 부자연스럽게 처리될 수 있습니다.

줄바꿈 기회(Break Opportunities) 이해하기

브라우저가 어떤 지점을 줄바꿈 기회로 인식하는지 아래 예제로 확인해볼게요.

컨테이너 오버플로우가 발생하는 경우

텍스트가 컨테이너를 삐져나가는 상황을 실제로 재현해봅시다.

긴 URL, 긴 단어, 연속된 문자나 숫자는 줄바꿈 기회가 없어 컨테이너를 넘어갈 수 있습니다. 이런 경우 CSS의 word-breakoverflow-wrap 속성으로 제어해야 합니다.

Unicode 줄바꿈 알고리즘

브라우저는 Unicode Line Breaking Algorithm (UAX #14)을 따라 줄바꿈을 결정합니다. 이 알고리즘은 각 Unicode 문자에 줄바꿈 속성을 부여하고, 인접한 문자들의 조합에 따라 줄바꿈 가능성을 판단합니다.

주요 줄바꿈 클래스만 몇 가지 꼽아보면 이렇습니다. 일반 알파벳은 AL(Alphabetic), 한중일 표의 문자는 ID(Ideographic), 공백 문자는 SP(Space)에 해당해요. 그리고 하이픈처럼 뒤에서 줄바꿈이 허용되는 문자는 BA(Break After), 앞에서 줄바꿈이 허용되는 문자는 BB(Break Before)로 분류됩니다.

다음 편 미리보기

이번 편에서는 브라우저의 기본 텍스트 처리 방식을 알아봤습니다. 다음 편 word-break 속성 완벽 가이드 에서는 word-break: normal vs break-all vs keep-all의 정확한 차이, 언어에 따라 다르게 동작하는 설정, 실무에서 자주 마주치는 오버플로우 해결법, 그리고 overflow-wrap과의 조합 활용법까지 다뤄볼 예정입니다.

텍스트 줄바꿈 문제가 발생했을 때는 먼저 "어떤 종류의 텍스트인가?"를 파악해보세요. 영어 단어인지, 한글인지, URL인지에 따라 해결 방법이 달라집니다.

브라우저의 기본 동작을 이해했다면, 이제 CSS로 이를 어떻게 제어할 수 있는지 알아볼 차례입니다!

관련 글