CSS 텍스트 모듈 레벨 4

W3C 작업 초안,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2026/WD-css-text-4-20260608/
최신 게시 버전:
https://www.w3.org/TR/css-text-4/
편집자 초안:
https://drafts.csswg.org/css-text-4/
이전 버전:
이력:
https://www.w3.org/standards/history/css-text-4/
피드백:
CSSWG 이슈 저장소
명세 내 인라인
편집자:
Elika J. Etemad / fantasai (Apple)
(초청 전문가)
(Adobe Systems)
Florian Rivoal (초청 전문가)
이 명세에 대한 편집 제안:
GitHub 편집기
테스트 스위트:
https://wpt.fyi/results/css/css-text/

초록

이 CSS 모듈은 텍스트 조작을 위한 속성을 정의하고 그 처리 모델을 명시한다. 여기에는 줄 나누기, 양쪽 맞춤과 정렬, 공백 처리, 텍스트 변환이 포함된다.

CSS는 구조화된 문서의 렌더링을 설명하기 위한 언어이다 (HTML 및 XML 등) 화면, 종이 등에 표시하기 위한 것이다.

이 문서의 상태

이 절은 이 문서가 게시된 시점의 상태를 설명한다. 현재 W3C 게시물 목록과 이 기술 보고서의 최신 개정본은 W3C 표준 및 초안 색인에서 확인할 수 있다.

이 문서는 CSS 작업 그룹에 의해 권고안 트랙을 사용하여 작업 초안으로 게시되었다. 작업 초안으로 게시되었다고 해서 W3C와 그 회원들의 승인을 의미하지는 않는다.

이 문서는 초안 문서이며 언제든지 다른 문서로 갱신, 대체 또는 폐기될 수 있다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않다.

피드백은 GitHub에 이슈를 제출하여 보내는 것을 권장하며, 제목에 다음과 같이 명세 코드 “css-text”를 포함해야 한다: “[css-text] …의견 요약…”. 모든 이슈와 의견은 보관된다. 또는 (보관된) 공개 메일링 리스트 www-style@w3.org로 피드백을 보낼 수도 있다.

이 문서는 2025년 8월 18일 W3C Process Document의 적용을 받는다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지 관리하며; 그 페이지에는 특허를 공개하는 방법에 대한 지침도 포함되어 있다. 개인이 해당 개인이 필수 청구항을 포함한다고 믿는 특허에 대해 실제로 알고 있는 경우, 그 개인은 W3C 특허 정책 제6절에 따라 해당 정보를 공개해야 한다.

1. 소개

이 모듈은 CSS의 조판 제어를 설명한다; 즉, 원본 텍스트를 서식이 지정되고 줄바꿈된 텍스트로 변환하는 것을 제어하는 CSS의 기능들이다. 다양한 CSS 속성은 대소문자 변환, 공백 병합, 텍스트 줄바꿈, 줄 나누기 규칙하이픈 넣기, 정렬과 양쪽 맞춤, 간격, 그리고 들여쓰기에 대한 제어를 제공한다. 레벨 3 이후 추가 사항은 레벨 3 이후 추가 사항을 참조하라.

참고: 글꼴 선택은 CSS 글꼴 모듈에서 다룬다. [CSS-FONTS-3]

밑줄, 강조 표시, 및 그림자와 같은 텍스트 장식 기능은 (이전에는 이 모듈의 일부였지만) CSS 텍스트 장식 모듈에서 다룬다. [CSS-TEXT-DECOR-3]

양방향세로 텍스트는 CSS 쓰기 모드 모듈에서 다룬다. [CSS-WRITING-MODES-4].

전 세계의 다양한 언어와 문자 체계의 조판 요구사항에 대한 추가 정보는 국제화 작업 그룹언어 지원 색인에서 확인할 수 있다. [TYPOGRAPHY]

1.1. 모듈 상호작용

이 모듈은 CSS 텍스트 장식 모듈과 함께, Cascading Style Sheets Level 2 16장에서 정의된 텍스트 수준 기능을 대체하고 확장한다. [CSS-TEXT-DECOR-3] [CSS2]

아래에서 정의된 용어 외에도, 이 명세에서 사용하는 다른 용어와 개념은 Cascading Style Sheets Level 2CSS 쓰기 모드 모듈에서 정의된다. [CSS2][CSS-WRITING-MODES-4].

1.2. 값 정의

이 명세는 CSS 속성 정의 규약[CSS2]에서 따르며, 값 정의 구문[CSS-VALUES-3]에서 가져온 것을 사용한다. 이 명세에서 정의되지 않은 값 유형은 CSS Values & Units [CSS-VALUES-3]에서 정의된다. 다른 CSS 모듈과 결합하면 이러한 값 유형의 정의가 확장될 수 있다.

각 정의에 나열된 속성별 값 외에도, 이 명세에서 정의되는 모든 속성은 속성값으로 CSS-wide keywords도 허용한다. 가독성을 위해 이것들은 명시적으로 반복하지 않았다.

1.3. 언어와 조판

작성자는 최상의 조판 동작을 위해 자신의 콘텐츠에 정확한 언어 태그를 지정해야 한다.

많은 조판 효과는 언어적 맥락에 따라 달라진다. 언어와 문자 체계의 관례는 줄 나누기, 하이픈 넣기, 양쪽 맞춤, 글리프 선택, 그리고 많은 다른 조판 효과에 영향을 줄 수 있다. CSS에서는 콘텐츠 언어가 알려진(선언된) 경우에만 언어별 조판 조정이 적용된다. 따라서, 더 높은 품질의 조판을 위해서는 작성자가 문서의 텍스트에 대한 올바른 언어적 맥락을 UA에 전달해야 한다.

요소의 콘텐츠 언어문서 언어의 규칙에 따라 해당 요소가 속한다고 선언된 (인간) 언어이다. 요소의 콘텐츠 언어가 알려지지 않을 수 있다는 점에 유의하라—​예를 들어 태그가 없는 콘텐츠, 또는 언어 태그 지정 기능이 없는 문서 언어의 콘텐츠는 알 수 없는 콘텐츠 언어를 가진 것으로 간주된다.

참고: 작성자는 HTML의 전역 lang 속성 또는 XML의 범용 xml:lang 속성을 사용하여 콘텐츠 언어를 선언할 수 있다. HTMLHTML 요소의 콘텐츠 언어를 결정하는 규칙XML 1.0XML 요소의 콘텐츠 언어를 결정하는 규칙을 참조하라. [HTML] [XML10]

요소가 속한다고 선언된 콘텐츠 언어는 또한 그 요소에서 사용되는 해당 언어의 구체적인 문자 형태를 식별하며, 이를 콘텐츠 문자 체계라고 한다. 콘텐츠 언어를 식별하기 위한 문서 언어의 기능에 따라, 이 정보는 명시적일 수도 암시적일 수도 있다. 규범적인 부록 F: 콘텐츠 작성 체계 식별을 참조하라.

참고: 일부 언어는 둘 이상의 문자 체계 전통을 가지며; 다른 경우에는 언어가 외래 문자 체계로 음역될 수도 있다. 작성자는 이러한 경우에 하위 태그를 지정하여 UA가 적절하게 조정할 수 있게 해야 한다.

예를 들어, 한국어(ko)는 한글(-Hang), 한자(-Hani), 또는 그 조합(-Kore)으로 쓸 수 있다. 한자로만 쓰인 역사 문서는 단어 공백을 사용하지 않으며 현대 한국어보다는 현대 중국어와 더 비슷하게 서식이 지정된다. 다시 말해, 조판 목적상 ko-Haniko (ko-Kore)보다 zh-Hant와 더 비슷하게 동작한다.

또 다른 예로 일본어(ja)는 일반적으로 히라가나(-Hira), 가타카나(-Kana), 한자(-Hani)의 조합(-Japn)으로 쓰인다. 그러나 언어 학습 교재와 같은 특별한 목적을 위해 라틴 문자(-Latn)로 “로마자화”될 수도 있으며, 이 경우 일본어보다 영어와 더 비슷하게 서식이 지정되어야 한다.

세 번째 예로 현대 몽골어는 두 가지 문자로 쓰인다: 키릴 문자(-Cyrl, 몽골에서 공식 사용) 및 몽골 문자(-Mong, 중국의 일부인 내몽골에서 더 일반적). 이 둘은 매우 다른 서식 요구사항을 가지며, 키릴 문자는 라틴 문자와 그리스 문자와 유사하게 동작하고, 몽골 문자는 아랍 문자와 중국어 표기 관례 모두에서 파생된다.

1.4. 문자와 글자

조판의 기본 단위는 문자이다. 그러나 문자 체계가 항상 기본 영어 알파벳만큼 단순하지는 않기 때문에, 문자가 실제로 무엇인지는 그 용어가 사용되는 맥락에 따라 달라진다. 예를 들어, 한글(한국어 문자 체계)에서는, 음절의 각 정사각형 표현 (예: =Han)을 문자로 간주할 수 있다. 그러나 그 정사각형 기호는 실제로는 음소를 나타내는 여러 글자로 구성되어 있으며 (예: =h, =a, =n) 이것들도 각각 문자로 간주될 수 있다.

주어진 인코딩에 대해 컴퓨터 텍스트 인코딩의 기본 단위도 문자라고 부르며, 인코딩에 따라 단일 인코딩 문자는 전체 선조합 음절 문자(예: )에 대응할 수도 있고, 개별 음소 문자(예: )에 대응할 수도 있으며, 또는 기본 글자 형태(예: )와 그것을 변화시키는 결합 표식(예: 거센소리를 나타내는 추가 획) 같은 더 작은 단위에 대응할 수도 있다.

나아가, 단일 인코딩 문자는 데이터 스트림에서 하나 이상의 바이트로 표현될 수 있으며; 프로그래밍 환경에서는 한 바이트를 때때로 문자라고 부르기도 한다.

따라서 기술적 정확성이 요구되는 곳에서는 문자라는 용어가 상당히 모호하다.

텍스트 레이아웃에서는 텍스트의 기본 단위로 조판 문자 단위를 가리키겠다. 텍스트 레이아웃 영역 안에서도, 관련 문자 단위는 작업에 따라 달라진다. 예를 들어, 줄 나누기와 자간 조절은 U+0E33 ำ THAI CHARACTER SARA AM을 포함하는 태국어 문자 시퀀스를 서로 다르게 분할할 수 있으며; 또는 데바나가리와 같은 문자 체계에서 결합 자음의 동작은 사용 중인 글꼴에 따라 달라질 수 있다. 따라서 조판 문자는 특정 조판 작업 (줄 나누기, 첫 글자 효과, 자간 조절, 양쪽 맞춤, 세로 배열 등)에 대해 더 나눌 수 없는 문자 체계의 단위—​예컨대 라틴 알파벳 글자(발음 구별 기호 포함), 한글 음절, 중국어 표의 문자, 미얀마 음절 클러스터—​를 나타낸다.

Unicode Standard Annex #29: Text Segmentation조판 문자에 근사하는 자소 클러스터라는 단위를 정의한다. [UAX29] UA는 UAX29에서 정의한 확장 자소 클러스터 (레거시 자소 클러스터가 아님)를 자신의 조판 문자 단위의 기초로 사용해야 한다. 그러나 기본 규칙이 항상 적절하거나 이상적인 것은 아니므로, UA는 조판 전통에 따라 필요에 맞게 정의를 조정해야 하며, 필요에 따라 작업별로 다르게 조정할 것으로 기대된다.

참고: 이러한 조정에 대한 규칙은 CSS의 범위를 벗어난다.

다음은 표준 조판 관행에서 요구되는 조판 문자 단위 조정의 몇 가지 예이다:

조판 글자 단위 (또는 이 명세의 목적상 글자)는 Letter 또는 Number 일반 범주 중 하나에 속하는 조판 문자 단위이다. 조판 문자 단위의 Unicode 속성을 결정하는 방법은 부록 E: 문자와 속성을 참조하라.

요소 경계에 의해 분리된 조판 문자 단위의 렌더링 특성은 정의되지 않는다. 이상적으로는 각 구성 요소가 해당 요소의 속성에 따른 서식 요구사항에 맞게 렌더링되는 동시에 조판 문자 단위 전체의 올바른 셰이핑과 위치 지정이 유지되어야 한다. 그러나 그 부분들 사이의 서식 차이의 성격과 사용 중인 글꼴 기술의 능력에 따라, 이것이 항상 가능한 것은 아니다. 따라서 그러한 조판 문자 단위는 경계의 어느 한쪽에 속하는 것으로 렌더링되거나, 양쪽 모두에 속하는 어떤 근사치로 렌더링될 수 있다. 작성자는 자소 클러스터 또는 합자를 요소 경계로 나누면 일관되지 않거나 원하지 않는 결과가 발생할 수 있음을 유의해야 한다.

1.5. 텍스트 처리

CSS는 Unicode 위에 구축된다. [UNICODE] Unicode를 지원하는 UA는 CSS에 의해 명시적으로 재정의된 경우를 제외하고 Unicode Core Standard의 모든 규범적 요구사항을 준수해야 한다. 비-Unicode 텍스트 인코딩 모델을 기반으로 구현된 UA도 적절한 매핑과 유사한 동작을 가정함으로써 동일한 텍스트 처리 요구사항을 충족할 것으로 기대된다.

텍스트 처리 (예: 공백 처리, 텍스트 변환, 줄 나누기 등)를 위한 인접성 판단의 목적상, 그리고 따라서 일반적으로 이 명세 안에서는, 중간에 있는 인라인 박스 경계와 out-of-flow 요소를 무시해야 한다. 그러나 텍스트 셰이핑과 관련해서는 § 8.7 요소 경계를 가로지르는 셰이핑을 참조하라.

2. 텍스트 변환

2.1. 대소문자 변환: text-transform 속성

이름: text-transform
값: none | [capitalize | uppercase | lowercase ] || full-width || full-size-kana | math-auto
초기값: none
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 스타일링 목적을 위해 텍스트를 변환한다. 이는 기반 콘텐츠에는 영향을 주지 않으며, 일반 텍스트 복사 및 붙여넣기 작업의 콘텐츠에 영향을 주어서는 안 된다.

작성자는 의미론적 목적을 위해 text-transform에 의존해서는 안 된다; 대신 올바른 대소문자와 의미론은 원본 문서 텍스트와 마크업에 인코딩되어야 한다.

값은 다음 의미를 가진다:

none
효과 없음.
capitalize
각 단어의 첫 번째 조판 글자 단위가 소문자인 경우 titlecase로 만든다; 다른 문자는 영향을 받지 않는다.
uppercase
모든 글자를 대문자로 만든다.
lowercase
모든 글자를 소문자로 만든다.
full-width
모든 조판 문자 단위full-width 형태로 만든다. 어떤 문자에 대응하는 full-width 형태가 없으면, 그대로 둔다. 이 값은 일반적으로 라틴 글자와 숫자를 표의 문자처럼 조판하는 데 사용된다.
full-size-kana
모든 작은 가나 문자를 이에 해당하는 full-size 가나로 변환한다. 이 값은 일반적으로 루비 주석 텍스트에 사용되며, 작성자가 루비에 일반적으로 사용되는 작은 글꼴 크기에서의 가독성 문제를 보완하기 위해 모든 작은 가나가 큰 가나처럼 그려지기를 원할 때 쓰인다.
math-auto
MathML Core § 4.2 math-auto 변환을 참조하라.
다음 예는 일본어 텍스트에서 약어에 사용되는 ASCII 문자를 전각 변형으로 변환하여, 표의 문자처럼 배치되고 줄 나누기되도록 한다:
abbr:lang(ja) { text-transform: full-width; }

참고: text-transform의 목적은 문서의 의미론에 영향을 주지 않으면서 표현상의 대소문자 변환을 가능하게 하는 것이다. 특히 text-transform 대소문자 작업은 손실이 있으며, 텍스트의 의미를 왜곡할 수 있다는 점에 유의하라. 접근성 인터페이스가 사용자에게 렌더링된 텍스트의 겉보기 대소문자를 전달하고자 할 수는 있지만, 변환된 텍스트가 문서의 기반 의미를 정확히 나타낸다고 신뢰할 수는 없다.

이 예에서는, 텍스트의 첫 번째 줄이 시각적 효과로 대문자화된다.
section > p:first-of-type::first-line {
  text-transform: uppercase;
}

이 효과는 원본 문서에 작성될 수 없다. 줄 나누기의 위치가 레이아웃에 따라 달라지기 때문이다. 또한, 대문자화는 의미론적 구분을 반영하지 않으며 단락의 읽기에 영향을 주도록 의도된 것이 아니므로; 표현 계층에 속한다.

이 예에서는, 본문 단락 텍스트의 절반 크기인 ruby 주석이 작은 가나 대신 일반 크기의 가나를 사용하도록 변환된다.
rt { font-size: 50%; text-transform: full-size-kana; }
:is(h1, h2, h3, h4) rt { text-transform: none; /* unset for large text*/ }

이렇게 하면 작은 글자 크기에서 그러한 글자가 더 잘 보이지만, 변환은 텍스트를 왜곡한다는 점에 유의하라: 독자는 적절한 위치에서 작은 가나로 머릿속에서 대체해야 한다—​이는 모든 “U”가 “V”처럼 보이는 라틴어 비문을 읽는 것과 다르지 않다.

예를 들어, 다음 원본에 text-transform: full-size-kana가 적용되면, 주석은 “じゅう” (jū), 즉 주석이 달린 “十”의 올바른 읽기와 의미인 “열”이 아니라, “じゆう” (jiyū), 즉 “자유”라는 뜻으로 읽히게 된다.

<ruby><rt>じゅう</ruby>

2.1.1. 매핑 규칙

capitalize의 경우, “단어“를 구성하는 것이 무엇인지는 UA에 따라 다르다; 그러한 단어 경계를 결정하기 위해 [UAX29]가 제안되지만 (필수는 아니다). Out-of-flow 박스인라인 박스 경계는 text-transform 단어 경계를 도입해서는 안 되며 그러한 단어 경계를 결정할 때 무시되어야 한다.

참고: 작성자는 capitalize가 언어별 제목 표기 관례 (예: 영어에서 관사를 건너뛰는 것)를 따른다고 의존할 수 없다.

UA는 Unicode 문자의 전체 대소문자 매핑을 사용해야 하며, 여기에는 The Unicode StandardDefault Case Algorithms 절에서 정의한 모든 조건부 대소문자 규칙이 포함된다. [UNICODE] 요소의 콘텐츠 언어문서 언어의 규칙에 따라 알려져 있는 경우에만, 적절한 언어별 규칙도 적용되어야 한다. 여기에는 최소한, 이에 한정되지는 않지만, Unicode의 SpecialCasing.txt에 있는 언어별 규칙이 포함된다.

예를 들어, 터키어에는 두 가지 “i”가 있다. 하나는 점이 있는 “İ”와 “i”이고, 다른 하나는 점이 없는 “I”와 “ı”이다. 따라서 “I”와 “i” 사이의 일반적인 대소문자 매핑은 영어에는 존재하지 않는 각각의 점 없는/점 있는 대응 문자로의 다른 매핑 집합으로 대체된다. 이 매핑은 콘텐츠 언어가 현대 라틴 기반 문자 체계로 쓰인 터키어 (또는 터키어 대소문자 규칙을 사용하는 다른 튀르크어)인 경우에만 효과를 가져야 한다; 다른 언어에서는, “I”와 “i”의 일반적인 매핑이 요구된다. 따라서 이 규칙은 Unicode의 SpecialCasing.txt 파일에 조건부로 정의되어 있다.

full-widthhalf-width 형태의 정의는 Unicode Standard Annex #11: East Asian Width에서 확인할 수 있다. [UAX11] full-width 형태로의 매핑은 Unicode Standard Annex #44: Unicode Character DatabaseDecomposition_Mapping에서 <wide> 또는 <narrow> 태그가 있는 코드 포인트를 취하여 정의된다. [UAX44] <narrow> 태그의 경우, 매핑은 코드 포인트에서 분해 (<narrow> 태그를 뺀 것)로 향하며, <wide> 태그의 경우, 매핑은 분해 (<wide> 태그를 뺀 것)에서 원래 코드 포인트로 되돌아간다.

작은 가나에서 full-size 가나로의 매핑은 부록 G: 작은 가나 매핑에서 정의된다.

2.2. 단어 사이 확장: word-space-transform 속성

이름: word-space-transform
값: none | [ space | ideographic-space ] && auto-phrase?
초기값: none
적용 대상: 텍스트
상속 여부: yes
백분율: N/A
계산값: 지정된 대로
정규 순서: 문법에 따름
애니메이션 유형: discrete

일부 언어와 문자 체계는 서로 다른 구분 문자를 사용하거나, 때로는 가시적인 문자를 전혀 사용하지 않는 등 단어를 구분하는 대안적인 방식을 가진다. 이 속성은 작성자가 마크업을 변경할 필요 없이 한 스타일에서 다른 스타일로 렌더링을 변경할 수 있게 한다.

none
이 속성은 효과가 없다.
space
이 요소의 자식 text 안에 있는 확장 가능한 구분자가 U+0020 SPACE로 대체된다.
ideographic-space
이 요소의 자식 text 안에 있는 확장 가능한 구분자가 U+3000 IDEOGRAPHIC SPACE로 대체된다.
auto-phrase
콘텐츠 언어가 알려져 있고 사용자 에이전트가 이 언어에 대한 언어 분석을 지원하는 경우, 사용자 에이전트는 구 경계를 감지해야 한다. 단어 구분 문자, 기타 공백 구분자, 또는 U+200B ZERO WIDTH SPACE 문자가 이미 그 경계에 발생하지 않는 경우, UA는 가상 확장 가능 구분자를 삽입해야 한다.

이 값이 생략되었거나, 또는 콘텐츠 언어가 알려지지 않았거나, 또는 사용자 에이전트가 그 언어에 대한 구 경계 감지를 지원하지 않는 경우, 가상 확장 가능 구분자는 없다.

이 속성의 목적상, 확장 가능한 구분자는 다음 중 하나이다:

가상 확장 가능 구분자는 원본 문서에 달리 존재하지 않는 확장 가능한 구분자를 나타내는 텍스트 내의 UA가 감지한 구문 경계이다. 이 속성을 위한 것 외에는 아무런 효과가 없다.

사용자 에이전트는 (중간의 모든 인라인 박스 경계와, 관련 margin/border/padding을 무시하고) 강제 줄 나누기 바로 앞이나 뒤에 오는 확장 가능한 구분자를 대체해서는 안 된다.

참고: 가상 확장 가능 구분자인라인 박스 경계에 참여하는 가장 바깥쪽 요소에 배치되므로, 어떤 것이 인라인 박스의 경계와 일치할 때 그 부모 박스가 used valueword-space-transform: none을 가지면, 그 특정 가상 확장 가능 구분자는 확장되지 않는다. 그것은 부모 박스에 배치될 것이기 때문이다.

text-transform처럼, 이 속성도 스타일링 목적만을 위해 텍스트를 변환한다. 이는 기반 콘텐츠에는 영향을 주지 않으며, 일반 텍스트 복사 및 붙여넣기 작업의 콘텐츠에 영향을 주어서는 안 된다.

성인을 위한 책과 달리, 어린이를 위한 일본어 책은 읽기를 쉽게 하기 위해 문장 구간 사이에 공백을 넣는 경우가 많다. 난독증이 있는 사람들도 이 스타일을 더 읽기 쉽다고 느끼는 경향이 있다.

특별한 스타일이 없으면, 다음 문장은 아래 그림처럼 렌더링된다.

<p>むかしむかし、<wbr>あるところに、<wbr>おじいさんと<wbr>おばあさんが<wbr>すんでいました。

むかしむかし、あるところに、おじいさんとおばあさんがすんでいました。


구 기반 간격은 다음 css로 구현할 수 있다:

p {
  word-space-transform: ideographic-space;
}

むかしむかし、 あるところに、 おじいさんと おばあさんが すんでいました。


또 다른 일반적인 변형은 허용되는 줄 나누기를 이러한 구 경계로 추가로 제한한다. 같은 마크업을 사용하여, 이는 다음 css로 쉽게 구현된다:

p {
  word-break: keep-all;
  word-space-transform: ideographic-space;
}

むかしむかし、 あるところに、 おじいさんと おばあさんが すんでいました。

원본 코드를 더 읽기 쉽게 만드는 것 외에도, 마크업에서 U+200B 대신 wbr을 사용하면 작성자가 구분자를 서로 다른 그룹으로 분류할 수도 있다.

다음 예에서, wbr 요소는 단어를 구분할 때는 표시가 없고, 구도 함께 구분할 때는 class p로 표시된다.

<p>らいしゅう<wbr><wbr>じゅぎょう<wbr><wbr class=p>たいこ<wbr><wbr>ばち<wbr><wbr class=p>もって<wbr>きて<wbr>ください。

이를 사용하면, 꽤 일반적인 구 기반 간격뿐 아니라, 모호성을 줄이기 위해 난독증이 있는 사람들이 선호할 가능성이 있는 단어별 간격도 가능하며, 또는 구 기반 간격과 단어 기반 줄바꿈의 조합 같은 다른 변형도 가능하다.

일반적인 렌더링

らいしゅうじゅぎょうたいこばちもってきてください。


구 간격
p wbr.p {
  word-space-transform: ideographic-space;
}

らいしゅうじゅぎょうに たいこばちを もってきてください。


단어 간격
p wbr {
  word-space-transform: ideographic-space;
}

らいしゅう の じゅぎょう に たいこ と ばち を もって きて ください。


구 간격, 단어 줄바꿈
p {
  word-break: keep-all;
}
p wbr.p {
  word-space-transform: ideographic-space;
}

らいしゅうじゅぎょうに たいこばちを もってきてください。


단어 간격과 줄바꿈
p {
  word-break: keep-all;
}
p wbr {
  word-space-transform: ideographic-space;
}

らいしゅう の じゅぎょう に たいこ と ばち を もって きて ください。

2.3. 작업 순서

여러 변환을 적용해야 하는 경우, 다음 순서로 적용된다:

  1. word-space-transform
  2. capitalize, uppercase, 및 lowercase
  3. full-width
  4. full-size-kana

단어 공백 변환과 텍스트 변환은 § 4.3.1 1단계: 병합과 변환 이후, 하지만 § 4.3.2 2단계: 잘라내기와 배치 이전에 발생한다. 이는 예를 들어 full-width보존된 공백 내부의 공백(U+0020)만 U+3000 IDEOGRAPHIC SPACE로 변환한다는 뜻이다.

참고: 부록 A: 텍스트 처리 작업 순서에서 정의한 바와 같이, 변환은 줄 나누기 및 기타 서식 작업에 영향을 준다.

3. 공백과 줄바꿈: white-space 속성

이름: white-space
값: normal | pre | pre-wrap | pre-line | <'white-space-collapse'> || <'text-wrap-mode'> || <'white-space-trim'>
초기값: normal
적용 대상: 텍스트
상속 여부: 개별 속성 참조
백분율: n/a
계산값: 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 white-space-collapse, text-wrap-mode, 그리고 white-space-trim의 단축 속성이다. 이는 두 가지를 지정한다:

참고: 이 단축 속성은 상속되는 속성과 상속되지 않는 속성을 모두 결합한다. 이것이 문제라면 CSSWG에 알려 달라.

달리 명시되지 않는 한, 생략된 모든 longhand는 그 초기값으로 설정된다.

다음 표는 단축 속성의 특별 키워드 값이 동등한 longhand 값에 매핑되는 규범적 매핑을 제공한다.

white-space white-space-collapse text-wrap-mode white-space-trim
normal collapse wrap none
pre preserve nowrap none
pre-wrap preserve wrap none
pre-line preserve-breaks wrap none

참고: 경우에 따라, 보존된 공백기타 공백 구분자는 줄 끝에 있을 때 hang될 수 있으며; 이는 내재 크기 산정을 위해 그것들이 측정되는지 여부에 영향을 줄 수 있다.

다음 정보 제공 표는 다양한 white-space 값의 동작을 요약한다:

새 줄 공백과 탭 텍스트 줄바꿈 줄 끝 공백 줄 끝 기타 공백 구분자
normal Collapse Collapse Wrap Remove Hang
pre Preserve Preserve No wrap Preserve No wrap
nowrap Collapse Collapse No wrap Remove Hang
pre-wrap Preserve Preserve Wrap Hang Hang
break-spaces Preserve Preserve Wrap Wrap Wrap
pre-line Preserve Collapse Wrap Remove Hang

4. 공백 처리 및 제어 문자

문서의 원본 텍스트에는 최종 렌더링과 관련이 없는 서식이 포함되어 있는 경우가 많다: 예를 들어, 편집을 쉽게 하기 위해 원본을 구간으로 나누거나 (줄), 원본 코드를 들여쓰기하기 위해 공백 문자 예컨대 공백을 추가하는 경우이다. CSS 공백 처리는 작성자가 이러한 서식의 해석을 제어할 수 있게 한다: 문서를 렌더링할 때 이를 보존할지, 아니면 병합하여 없앨지를 말이다. CSS의 공백 처리 (white-space-collapsewhite-space-trim 속성으로 제어됨)는 공백 문자를 렌더링을 위해서만 해석한다: 이는 기반 문서 데이터에는 영향을 주지 않는다.

참고: 문서 언어에 따라, 구간은 특정 newline 시퀀스 (예: line feed 또는 CRLF 쌍)로 구분될 수도 있고, 또는 SGML RECORD-STARTRECORD-END 토큰 같은 다른 메커니즘으로 구분될 수도 있다.

CSS 처리를 위해, 각 문서 언어가 정의한 “segment break” 또는 “newline sequence”—​또는 정의된 것이 없으면 텍스트의 각 line feed (U+000A)—​는 세그먼트 나누기로 처리되며, 이는 이후 white-space 속성에 지정된 대로 렌더링을 위해 해석된다.

HTML의 경우, newlines는 DOM에서 표현되기 위해 line feed 문자(U+000A)로 정규화되므로, HTML 문서가 DOM 트리로 표현될 때 각 line feed(U+000A)는 세그먼트 나누기로 처리된다. [HTML] [DOM]

참고: 대부분의 일반적인 CSS 구현에서, HTML은 직접 스타일링되지 않는다. 대신 DOM 트리로 처리되고, 그 다음 스타일링된다. HTML과 달리, DOM은 carriage return(U+000D)에 특별한 의미를 부여하지 않으므로, 그것들은 세그먼트 나누기로 처리되지 않는다. HTML 파싱이 아닌 수단으로 carriage return(U+000D)이 DOM에 삽입되면, 이후 아래에 정의된 대로 처리된다.

참고: 문서 파서는 세그먼트 나누기를 정규화할 뿐만 아니라, 다른 공백 문자를 병합하거나 마크업 규칙에 따라 공백을 다른 방식으로 처리할 수도 있다. CSS 처리는 파싱 단계 이후에 일어나므로, 스타일링을 위해 이러한 문자를 복원하는 것은 불가능하다. 따라서 아래에 지정된 동작 중 일부는 이러한 제한의 영향을 받을 수 있으며 사용자 에이전트에 따라 달라질 수 있다.

참고: 전적으로 병합 가능한 공백으로만 이루어진 익명 블록은 렌더링 트리에서 제거된다. 따라서 블록 수준 요소를 둘러싼 그러한 공백은 병합되어 사라진다. CSS 2 § 9.2.2.1 Anonymous inline boxes를 참조하라. [CSS2]

제어 문자(Unicode 범주 Cc)—​탭(U+0009), line feed(U+000A), carriage return(U+000D) 및 세그먼트 나누기를 형성하는 시퀀스는 제외—​는 보이는 글리프로 렌더링되어야 하며, 글꼴에서 찾은 글리프가 보이지 않는 경우 UA가 이를 합성해야 하고, 그 외에는 Other Symbols(So) 일반 범주와 Common script의 다른 문자처럼 처리되어야 한다. UA는 제어 문자에 대해 특별히 글꼴이 제공하는 글리프를 사용할 수도 있고, Control Pictures 블록의 해당 기호에 제공되는 글리프로 대체할 수도 있으며, 그 코드 포인트 값을 시각적으로 표현한 것을 생성하거나, 적절한 보이는 글리프를 제공하기 위해 다른 방법을 사용할 수도 있다. Unicode에서 요구하는 바와 같이, 지원되지 않는 Default_ignorable 문자는 텍스트 렌더링에서 무시되어야 한다. [UNICODE]

Carriage return(U+000D)은 모든 면에서 공백(U+0020)과 동일하게 처리된다.

참고: HTML 문서의 경우, 원본 코드에 존재하는 carriage return은 파싱 단계에서 line feed로 변환된다 (HTML § 13.2.3.5 Preprocessing the input streamInfranormalize newlines 정의를 참조) 따라서 CSS에는 U+000D CARRIAGE RETURN으로 나타나지 않는다. [HTML] [INFRA]) 그러나 이 문자는 escape sequence(&#x0d;)를 사용해 인코딩되면 보존되며—​위 규칙을 관찰할 수 있다.

4.1. 공백 병합: white-space-collapse 속성

이 절은 아직 논의 중이며 향후 초안에서 변경될 수 있다.

이름: white-space-collapse
값: collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces
초기값: collapse
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 공백이 병합되는지 여부와 그 방식을 지정한다. 값은 다음 의미를 가지며, 공백 처리 규칙에 따라 해석되어야 한다:

collapse
이 값은 사용자 에이전트가 공백의 연속을 하나의 문자로 (또는 일부 경우에는 문자 없음으로) 병합하도록 지시한다.
preserve
이 값은 사용자 에이전트가 공백의 연속을 병합하지 못하게 한다. line feed와 같은 세그먼트 나누기강제 줄 나누기로 보존된다.
preserve-breaks
collapse와 같이, 이 값은 연속된 공백 문자를 병합하지만, 원본의 세그먼트 나누기강제 줄 나누기로 보존한다.
preserve-spaces
이 값은 사용자 에이전트가 공백의 연속을 병합하지 못하게 하며, 세그먼트 나누기공백으로 변환한다. (이 값은 SVG에서 xml:space="preserve"의 동작을 나타내기 위한 것이다.)
break-spaces
동작은 preserve와 동일하지만, 다음 점이 다르다:

참고: 이 값은 공백으로 인한 오버플로가 절대 발생하지 않음을 보장하지 않는다: 예를 들어, 줄 길이가 너무 짧아서 단일 공백 문자조차 맞지 않는 경우 오버플로는 피할 수 없다.

discard
이 값은 사용자 에이전트가 요소 안의 모든 공백을 “버리도록” 지시한다.

이것은 줄 나누기 기회를 보존하는가, 아니면 그렇지 않은가? 별도의 "hide" 값이 필요한가? 줄 나누기 기회를 보존한다면, word-space-transform 값으로 대체되어야 하는가?

공백 처리로 인해 제거되거나 병합되지 않은 공백보존된 공백이라고 한다.

다음 스타일 규칙은 MathML의 공백 처리를 구현한다:

@namespace m "http://www.w3.org/1998/Math/MathML";
m|* {
  white-space-collapse: discard;
}
m|mi, m|mn, m|mo, m|ms, m|mtext {
  white-space-trim: discard-inner;
}

4.2. 공백 잘라내기: white-space-trim 속성

이름: white-space-trim
값: none | discard-before || discard-after || discard-inner
초기값: none
적용 대상: 인라인 박스블록 컨테이너
상속 여부: no
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 작성자가 박스의 시작과 끝에서 잘라내기 동작을 지정할 수 있게 한다. 값은 다음 의미를 가진다:

discard-before
이 값은 UA가 요소 시작 바로 앞의 모든 병합 가능한 공백을 병합하도록 지시한다.
discard-after
이 값은 UA가 요소 끝 바로 뒤의 모든 병합 가능한 공백을 병합하도록 지시한다.
discard-inner
블록 컨테이너의 경우 이 값은 UA가 요소 안의 첫 번째 비공백 문자 이전에 있는 마지막 세그먼트 나누기까지 포함하여 요소 시작 부분의 모든 공백을 버리도록 지시하며, 또한 요소 안의 마지막 비공백 문자 이후 첫 번째 세그먼트 나누기부터 시작하여 요소 끝 부분의 모든 공백을 버리도록 지시한다. 다른 요소의 경우 이 값은 UA가 요소의 시작과 끝에 있는 모든 공백을 버리도록 지시한다.

참고: 문서 공백white-space-trim으로 버리면 텍스트에서 소프트 줄바꿈 기회가 발생하는 위치가 바뀔 수 있다.

다음 스타일 규칙은 DT 요소가 원본 문서의 별도 줄에 코딩되어 있더라도, 쉼표로 구분된 목록으로 렌더링한다:

dt { display: inline; }
dt + dt:before { content: ", "; white-space-trim: discard-before; }

다음 스타일 규칙은 preformatted 블록의 여는/닫는 태그에 인접한 원본 서식 공백은 제거하지만, 요소의 실제 내용에 적용된 들여쓰기나 중간에 섞인 공백은 제거하지 않는다:

pre { white-space: pre; white-space-trim: discard-inner; }
그 결과 다음 두 원본 코드 조각은:
<pre>

  some
preformatted

  text

</pre>
<pre>  some
preformatted

  text</pre>
다음과 같이 동일하게 렌더링된다:
  some
preformatted

  text

대신 이를 인라인 요소에 적용하면:

span { white-space: normal; white-space-trim: discard-inner; }
start[<span>

  some
inline
  text

</span>]end
start[<span>  some
inline
  text</span>]end
이는 UA가 요소의 실제 내용 앞뒤에 있는 선행/후행 공백을 모두 버리도록 지시한다:
start[some inline text]end

white-space-trim을 위한 공백 처리는 § 4.3.1 1단계: 병합과 변환 이전에 일어난다.

4.3. 공백 처리 규칙

달리 지정되지 않는 한, CSS의 공백 처리는 문서 공백 문자에만 영향을 준다: 공백 (U+0020), (U+0009), 및 세그먼트 나누기.

참고: 문서 공백으로 간주되는 문자 집합 (문서 콘텐츠의 일부)과 구문적 공백으로 간주되는 문자 집합 (CSS 구문의 일부)이 반드시 동일한 것은 아니다. 그러나 둘 다 공백(U+0020), 탭(U+0009), line feed(U+000A)를 포함하므로 대부분의 작성자는 차이를 알아차리지 못할 것이다.

공백(U+0020) 및 no-break space(U+00A0) 외에도, Unicode는 여러 추가 공백 구분자 문자를 정의한다. [UNICODE] 이 명세에서는 공백(U+0020) 및 no-break space(U+00A0)를 제외한 Unicode 일반 범주 Zs의 모든 문자를 통칭하여 기타 공백 구분자라고 한다.

4.3.1. 1단계: 병합과 변환

참고: white-space-trim은 이 단계 이전에 고려된다.

인라인 서식 맥락 안의 각 인라인 (익명 인라인 포함; CSS 2 § 9.2.2.1 Anonymous inline boxes [CSS2] 참조)에서, 공백 문자줄 나누기bidi 재정렬 이전에 다음과 같이 처리되며, bidi 서식 문자 (Bidi_Control 속성을 가진 문자 [UAX9])는 없는 것처럼 무시한다:

다음 예는 공백 병합과 양방향성의 상호작용을 보여준다. 다음 마크업 조각을 고려하되, 공백 (강조와 식별을 위해 다양한 배경과 테두리가 적용됨)에 특별히 주목하라:
<ltr>A <rtl> B </rtl> C</ltr>

여기서 <ltr> 요소는 왼쪽에서 오른쪽으로의 임베딩을 나타내며, <rtl> 요소는 오른쪽에서 왼쪽으로의 임베딩을 나타낸다. white-space 속성이 normal로 설정된 경우, 공백 처리 모델은 다음 결과를 낳는다:

이렇게 하면 두 개의 공백이 남는데, 하나는 왼쪽에서 오른쪽 임베딩 수준의 A 뒤에, 다른 하나는 오른쪽에서 왼쪽 임베딩 수준의 B 뒤에 남는다. 그런 다음 텍스트는 Unicode 양방향 알고리즘에 따라 정렬되며, 최종 결과는 다음과 같다:

A  BC

A와 B 사이에는 두 개의 공백이 있고, B와 C 사이에는 없다는 점에 유의하라. 이는 여는 태그와 닫는 태그 바로 안쪽에만 공백을 두는 대신 요소 밖에 두고, 실용적인 경우 명시적 임베딩 수준 대신 암시적 양방향성에 의존함으로써 피하는 것이 가장 좋다.

4.3.2. 2단계: 잘라내기와 배치

그 다음, 전체 블록이 렌더링된다. 인라인은 bidi 재정렬을 고려하여 배치되며, text-wrap-modetext-wrap-style 속성이 지정한 대로 줄바꿈된다. 각 줄이 배치될 때,

  1. 줄의 시작 부분에 있는 병합 가능한 공백의 연속은 제거된다.
  2. 탭 크기가 0이면, 보존된 은 렌더링되지 않는다. 그렇지 않으면, 각 보존된 은 다음 글리프의 시작 가장자리가 다음 탭 정지점에 맞춰지도록 하는 수평 이동으로 렌더링된다. 이 거리가 0.5ch보다 작으면, 그 다음 탭 정지점이 대신 사용된다. 탭 정지점보존된 의 가장 가까운 블록 컨테이너 조상에서 시작 콘텐츠 가장자리로부터 탭 크기의 배수인 지점에 위치한다. 탭 크기tab-size 속성에 의해 주어진다.

    참고: tabulation(U+0009)이 bidi와 상호작용하는 방식에 대한 Unicode 규칙을 참조하라. [UAX9]

  3. 줄 끝에 있는 병합 가능한 공백의 연속은 제거되며, white-space-collapse 속성이 collapse 또는 preserve-breaks인 모든 후행 U+1680   OGHAM SPACE MARK도 함께 제거된다.

    참고: Unicode Bidirectional Algorithm 규칙 L1로 인해, bidi 재정렬 이전에 줄 끝에 위치한 병합 가능한 공백의 연속은 재정렬 후에도 줄 끝에 있게 된다. [UAX9] [CSS-WRITING-MODES-4]

  4. (bidi 재정렬 [CSS-WRITING-MODES-4] 이후) 줄 끝에 공백, 기타 공백 구분자, 및/또는 보존된 의 연속이 남아 있다면:

    white-space-collapse: preserve-spaces의 경우 여기서 무엇이 일어나야 하는가?

이 예는 강제 나누기가 있는 줄 끝의 공백을 조건부로 행잉하는 것이 줄의 시작과 대칭성을 제공함을 보여준다. 공백을 시각화하는 데 도움이 되도록 밑줄을 추가했다.
p {
  white-space: pre-wrap;
  width: 5ch;
  border: solid 1px;
  font-family: monospace;
  text-align: center;
}
<p> 0 </p>

위 샘플은 다음과 같이 렌더링된다:

0

마지막 공백은 강제 줄 나누기 앞에 있으며 오버플로되지 않으므로, 행잉되지 않고, 가운데 정렬이 예상대로 동작한다.

이 예는 강제 나누기가 없는 줄 끝에서 행잉되는 공백과, 강제 나누기가 있는 줄 끝에서 조건부로 행잉되는 공백의 차이를 보여준다. 공백을 시각화하는 데 도움이 되도록 밑줄을 추가했다.
p {
  white-space: pre-wrap;
  width: 3ch;
  border: solid 1px;
  font-family: monospace;
}
<p> 0 0 0 0 </p>

위 샘플은 다음과 같이 렌더링된다:

0
0 0
0

p { text-align: right; }가 추가되면, 결과는 다음과 같다:

0
0 0
0

강제 나누기가 없는 줄 끝의 보존된 공백은 반드시 행잉되어야 하므로, 텍스트 정렬 중 줄의 나머지를 배치할 때 고려되지 않는다. 끝쪽으로 정렬할 때, 이는 그러한 공백이 오버플로되며, 줄의 나머지 내용이 줄의 가장자리에 맞닿는 것을 방해하지 않는다는 뜻이다. 반면에, 강제 나누기가 있는 줄 끝의 보존된 공백은 조건부로 행잉된다. 이 예에서 마지막 줄 끝의 공백은 오버플로되지 않으므로, 행잉되지 않으며 따라서 텍스트 정렬 중 고려된다.

다음 예에서는, 어느 줄에도 줄 끝 공백을 맞출 충분한 공간이 없으므로, 모든 줄에서 공백이 행잉된다: 강제 나누기가 없는 줄의 공백은 반드시 행잉되어야 하기 때문이고, 강제 나누기가 있는 줄의 공백도 조건부로 행잉되며 오버플로되기 때문이다. 공백을 시각화하는 데 도움이 되도록 밑줄을 추가했다.
p {
  white-space: pre-wrap;
  width: 3ch;
  border: solid 1px;
  font-family: monospace;
}
<p>0 0 0 0 </p>
0 0
0 0

마지막 줄은 마지막 0 앞에서 줄바꿈되지 않는다. 조건부로 행잉되는 문자는 줄의 내용이 맞는지 측정할 때 고려되지 않기 때문이다.

4.3.3. 세그먼트 나누기 변환 규칙

white-space-collapsecollapse가 아닌 경우, 세그먼트 나누기병합 가능하지 않다. collapse 또는 (이를 공백으로 변환하는) preserve-spaces 이외의 값에서는, 세그먼트 나누기가 대신 보존된 line feed (U+000A)로 변환된다.

white-space-collapsecollapse인 경우, 세그먼트 나누기병합 가능하며, 다음과 같이 병합된다:

  1. 먼저, 다른 병합 가능한 세그먼트 나누기 바로 뒤에 오는 모든 병합 가능한 세그먼트 나누기는 제거된다.
  2. 그런 다음 남아 있는 모든 세그먼트 나누기는 나누기 앞뒤의 맥락에 따라 공백(U+0020)으로 변환되거나 제거된다. 이 단계에서 이 작업의 규칙은 UA가 정의한다.

    이를 레벨 4에서 정의해야 하는가?

    참고: 공백 처리 규칙은 이 맥락이 평가되기 전에 세그먼트 나누기 주변의 모든 공백을 이미 제거했다.

세그먼트 나누기 변환 규칙 (및 일반적으로 공백 병합)의 목적은 문서 원본 코드를 다루기 쉽게 하기 위해 세그먼트로 나누어진 텍스트를 “다시 이어 붙이는” 것이다. 영어와 한국어처럼 단어 구분자를 사용하는 언어에서는, 줄을 “다시 이어 붙이려면” 두 줄을 공백으로 연결해야 한다.
Here is an English paragraph
that is broken into multiple lines
in the source code so that it can
be more easily read and edited
in a text editor.

Here is an English paragraph that is broken into multiple lines in the source code so that it can be more easily read and edited in a text editor.

영어에서 줄 나누기를 제거하려면 그 자리에 공백을 유지해야 한다.

중국어처럼 단어 구분자가 없는 언어에서는, 줄을 “다시 이어 붙이려면” 두 줄 사이에 공백을 두지 않고 연결해야 한다.

這個段落是那麼長,
在一行寫不行。最好
用三行寫。

這個段落是那麼長,在一行寫不行。最好用三行寫。

중국어에서 줄 나누기를 제거하려면 사이의 모든 공백을 제거해야 한다.

세그먼트 나누기 변환 규칙은 인접한 맥락을 사용하여 세그먼트 나누기를 공백으로 변환하거나 완전히 제거할 수 있다.

참고: 역사적으로 HTML과 CSS는 세그먼트 나누기를 무조건 공백으로 변환해 왔으며, 이로 인해 중국어 같은 언어로 작성된 콘텐츠는 원본 안에서 줄을 나눌 수 없었다. 따라서 UA 휴리스틱은 그러한 언어에 대한 지원을 개선하려고 노력하면서도 세그먼트 나누기를 버리는 위치에 대해 보수적일 필요가 있다.

4.4. 탭 문자 크기: tab-size 속성

이름: tab-size
값: <number [0,∞]> | <length [0,∞]>
초기값: 8
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 숫자 또는 절대 길이
정규 순서: n/a
애니메이션 유형: 계산값 유형에 따름

이 속성은 보존된 탭 문자(U+0009)를 렌더링하는 데 사용되는 탭 크기를 결정한다. <number>보존된 의 가장 가까운 블록 컨테이너 조상에서 공백 문자(U+0020)의 advance width의 배수로 그 측정값을 나타내며, 여기에는 관련 letter-spacingword-spacing이 포함된다. 음수 값은 허용되지 않는다.

5. 텍스트 줄바꿈

인라인 수준 콘텐츠가 줄로 배치될 때, 이는 줄 박스 사이에서 나뉜다. 그러한 나누기를 줄 나누기라고 한다. 명시적 줄 나누기 제어 (예: 보존된 newline 문자)로 인해 줄이 나뉘거나, 블록의 시작 또는 끝으로 인해 줄이 나뉘는 경우, 이는 강제 줄 나누기이다. 콘텐츠 줄바꿈으로 인해 줄이 나뉘는 경우 (즉, UA가 콘텐츠를 측정값 안에 맞추기 위해 강제되지 않은 줄 나누기를 생성하는 경우), 이는 소프트 줄바꿈 나누기이다. 인라인 수준 콘텐츠를 줄로 나누는 과정을 줄 나누기라고 한다.

줄바꿈은 허용된 나누기 지점에서만 수행되며, 이를 소프트 줄바꿈 기회라고 한다. 줄바꿈이 활성화된 경우(white-space 참조), UA는 존재하는 경우 소프트 줄바꿈 기회에서 줄을 줄바꿈하여 줄에서 오버플로되는 콘텐츠의 양을 최소화해야 한다. 유효한 소프트 줄바꿈 기회콘텐츠 언어와 문자 체계, 그리고 이를 제어하는 CSS 속성에 따라 달라진다. § 6 줄 나누기와 단어 경계를 참조하라.

텍스트가 어디에서 줄바꿈될 수 있는지는 줄 나누기 규칙과 제어에 의해 제어되며; 줄바꿈이 허용되는지 여부와 한 줄 안의 여러 소프트 줄바꿈 기회가 어떻게 우선순위화되는지는 text-wrap-mode, text-wrap-style, wrap-before, wrap-after, 및 wrap-inside 속성에 의해 제어된다.

5.1. 줄바꿈 여부 결정: text-wrap-mode 속성

이름: text-wrap-mode
값: wrap | nowrap
초기값: wrap
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 인라인 수준 콘텐츠가 강제되지 않은 소프트 줄바꿈 기회에서 줄바꿈되는지 여부를 지정한다.

참고: 이 속성은 longhand이며, white-spacetext-wrap 둘 모두의 longhand이다.

가능한 값:

wrap
적용 중인 줄 나누기 규칙에 의해 결정되는 허용된 소프트 줄바꿈 기회에서 줄이 줄바꿈될 수 있으며, 이는 인라인 축 오버플로를 최소화하기 위한 것이다.

참고: 소프트 줄바꿈 기회에 대한 규칙과 제약에 관한 자세한 내용은 § 6.5 줄 나누기 세부 사항을 참조하라.

nowrap
줄은 강제 줄 나누기에서만 나뉜다; 블록 컨테이너 안에 맞지 않는 콘텐츠는 그 밖으로 오버플로된다.

text-wrap-mode 값과 관계없이, 보존된 세그먼트 나누기, 그리고 BK, CR, LF, NL 줄 나누기 클래스를 가진 모든 Unicode 문자는 강제 줄 나누기로 처리되어야 한다. [UAX14]

참고: 이러한 강제 줄 나누기의 bidi 관련 의미는 Unicode Bidirectional Algorithm에 의해 정의된다. [UAX9]

5.2. 박스 내부 나누기 제어: wrap-inside 속성

이름: wrap-inside
값: auto | avoid
초기값: auto
적용 대상: 인라인 박스
상속 여부: no
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete
auto
적용 중인 줄 나누기 규칙에 의해 결정되는 허용된 나누기 지점에서, 박스 내부의 줄이 나뉠 수 있다.
avoid
박스 내부의 줄 나누기는 억제된다: UA는 해당 줄에 다른 유효한 나누기 지점이 없을 때에만 박스 내부에서 나눌 수 있다. 텍스트가 나뉘는 경우, 줄 나누기 제한은 auto와 동일하게 준수된다.

avoid가 적용된 박스가 중첩되어 있고 UA가 이 박스들 안에서 반드시 나누어야 하는 경우, 안쪽 박스 안의 나누기를 사용하기 전에 바깥쪽 박스에서의 나누기가 사용되어야 한다.

5.2.1. footer를 표시할 때 'wrap-inside: avoid'를 사용하는 예

나누기 지점의 우선순위는 텍스트의 의도된 그룹화를 반영하도록 설정할 수 있다.

다음 규칙이 주어졌을 때

footer { wrap-inside: avoid; }
venue { wrap-inside: avoid; }
date { wrap-inside: avoid; }
place { wrap-inside: avoid; }

그리고 다음 마크업이 있을 때:

<footer>
<venue>27th Internationalization and Unicode Conference</venue>
&#8226; <date>April 7, 2005</date> &#8226;
<place>Berlin, Germany</place>
</footer>

좁은 창에서는 footer가 다음처럼 나뉠 수 있다

27th Internationalization and Unicode Conference •
April 7, 2005 • Berlin, Germany

또는 더 좁은 창에서는 다음처럼 나뉠 수 있다

27th Internationalization and Unicode
Conference • April 7, 2005 •
Berlin, Germany

하지만 다음처럼은 아니다

27th Internationalization and Unicode Conference • April
7, 2005 • Berlin, Germany

5.3. 박스 사이 나누기 제어: wrap-before/wrap-after 속성

이름: wrap-before, wrap-after
값: auto | avoid | avoid-line | avoid-flex | line | flex
초기값: auto
적용 대상: 인라인 수준 박스 및 flex item
상속 여부: no
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성들은 줄 나누기 (및 flex line 나누기 [CSS3-FLEXBOX])에서 나누기 기회에 대한 수정을 지정한다. 가능한 값:

auto
적용 중인 줄 나누기 규칙에 의해 결정되는 허용된 나누기 지점에서, 박스 앞과 뒤의 줄이 나뉠 수 있다.
avoid
박스 바로 앞/뒤의 줄 나누기는 억제된다: UA는 해당 줄에 다른 유효한 나누기 지점이 없을 때에만 그곳에서 나눌 수 있다. 텍스트가 나뉘는 경우, 줄 나누기 제한은 auto와 동일하게 준수된다.
avoid-line
avoid와 같지만, 줄 나누기에만 적용된다.
avoid-flex
avoid와 같지만, flex line 나누기에만 적용된다.
line
박스가 인라인 수준 박스인 경우, 박스 바로 앞/뒤에 줄 나누기를 강제한다.
flex
박스가 여러 줄 flex 컨테이너 안의 flex item인 경우, 박스 바로 앞/뒤에 flex line 나누기를 강제한다.

인라인 수준 박스의 강제 줄 나누기는 모든 부모 인라인 박스를 통해 위로 전파되며, 이는 같은 fragmentation context 안에서 블록 수준 박스의 강제 나누기가 모든 부모 블록 박스를 통해 위로 전파되는 방식과 같다. [CSS3-BREAK]

5.4. 줄바꿈 방식 선택: text-wrap-style 속성

이름: text-wrap-style
값: auto | balance | stable | pretty | avoid-orphans
초기값: auto
적용 대상: 블록 컨테이너인라인 서식 맥락을 형성하는 것
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

CSSWG는 avoid-orphans에 대해 더 나은 이름을 찾고 있다.

줄바꿈이 허용되는 경우 (text-wrap-mode 참조), 이 속성은 줄바꿈을 위한 여러 접근 방식 중 하나를 선택하며, 속도, 품질과 레이아웃 스타일, 또는 안정성 사이에서 절충한다. 이 속성은 어떤 소프트 줄바꿈 기회가 존재하는지를 바꾸지는 않지만, 사용자 에이전트가 그중 무엇을 선택하는지를 바꾼다. 가능한 값:

auto
어느 소프트 줄바꿈 기회에서 나눌지 선택하는 정확한 알고리즘은 UA가 정의한다. 알고리즘은 나누기 결정을 내릴 때 여러 줄을 고려할 수 있다. UA는 최상의 레이아웃보다 속도에 편향될 수 있다. UA는 balance처럼 모든 줄(마지막 줄 포함)을 균등하게 만들려고 시도해서는 안 된다. 이 값은 UA가 선호하는(또는 가장 Web 호환적인) 줄바꿈 알고리즘을 선택한다.
balance
auto보다 더 나은 균형이 가능하다면, 줄 나누기는 각 줄 박스에 남는 (빈) 공간의 균형을 맞추도록 선택된다. 이는 text-wrapauto로 설정되었을 때 블록이 포함했을 줄 박스 수를 변경하지 않아야 하며—​5줄 이하인 경우에는 변경해서는 안 된다.

참고: 한 줄에 함께 나타나는 콘텐츠가 바뀌기 때문에 줄 박스의 높이는 그럼에도 바뀔 수 있다.

고려할 남은 공간은 float와 인라인 콘텐츠를 배치한 후, 텍스트 양쪽 맞춤으로 인한 조정 전의 남은 공간이다. 줄 박스는 각 줄 박스에 남은 공간의 평균 inline-size로부터의 표준편차가 블록 전체에서 줄어들 때 균형을 이룬다 (강제 줄 나누기로 끝나는 줄 포함).

강제 줄 나누기로 분리된 줄 그룹은 별도로 처리된다. 요소가 line-clamp의 영향을 받는 경우, 먼저 클램핑 효과가 적용되고, 그 다음 남은 줄이 균형 조정된다.

정확한 알고리즘은 UA가 정의한다.

균형을 맞출 줄이 10줄을 초과하는 경우, UA는 이 값을 auto로 처리할 수 있다.

stable
텍스트 편집 시 커서 앞의 콘텐츠가 안정적으로 유지되도록, 나누기 결정을 내릴 때 이후 줄의 콘텐츠는 고려하지 않아야 함을 지정한다; 그 외에는 auto와 동등하다,
pretty
UA가 속도보다 더 나은 레이아웃에 편향되어야 을 지정하며, 나누기 결정을 내릴 때 여러 줄을 고려할 것으로 기대된다. 그 외에는 auto와 동등하다.

사용자 에이전트는 다른 것들 중에서도 avoid-orphans와 유사하게 지나치게 짧은 마지막 줄을 피하려고 시도할 수 있지만, 그 외의 방식으로도 레이아웃을 개선해야 한다. 정확한 개선의 집합은 사용자 에이전트에 따라 달라지며, 다음과 같은 것들을 포함할 수 있다: 줄 길이 간 변동 줄이기; typographic rivers 피하기; 서로 다른 종류의 소프트 줄바꿈 기회, 하이픈 넣기 기회, 또는 양쪽 맞춤 기회에 우선순위 부여; 너무 많은 연속 줄에서 하이픈 넣기를 피하기…

필요한 계산은 비용이 클 수 있으며, 특히 많은 양의 텍스트에 적용될 때 그렇다. 작성자는 text-wrap-style: pretty를 사용할 때 성능에 미치는 영향을 평가하고, 가장 중요한 곳에 선택적으로 사용할 것을 권장한다.
avoid-orphans
UA가 지나치게 짧은 마지막 줄을 피해야 을 지정하며, 나누기 결정을 내릴 때 둘 이상의 줄을 고려할 것으로 기대된다 (예를 들어, 이전 줄을 너무 짧게 만들어 orphan을 "수정"하는 일을 피하기 위해). 사용자 에이전트는 마지막 줄을 개선하는 것이 이전 줄(들)을 상당히 불균형하게 만드는 경우 개선하지 않기로 결정할 수 있다. 사용자 에이전트는 그러한 개선이 상당한 성능 비용을 초래한다면 auto를 넘어서는 레이아웃의 다른 측면을 개선하려고 시도해서는 안 된다.

참고: 서구 조판에서 “orphan”은 단락의 마지막 줄에 단어 하나만 있는 것을 가리킬 수 있다. 그러나 모든 언어나 문자 체계가 단어 경계에서 줄바꿈되는 것은 아니며, 그렇게 되는 언어에서도, 마지막 줄에 몇 개의 매우 짧은 단어만 있는 것은 여전히 바람직하지 않을 수 있다. 특히 사용 가능한 인라인 공간이 긴 경우 그렇다. 따라서 이 명세는 줄이 단어 하나로만 구성된 경우에만 너무 짧다고 엄격히 정의하지 않으며, 무엇이 지나치게 짧은지는 사용자 에이전트가 판단하게 한다.

참고: fragmentation에 대한 제어와 “orphans”의 다른 조판적 의미에 대해서는 orphans 속성도 참조하라.

예를 들어, 주어진 줄 길이에서는 다음 텍스트가 마지막 줄에 단어 하나만 있게 줄바꿈되며, 이는 너무 짧다고 판단될 수 있다.
ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς μάλα
πολλὰ πλάγχθη, ἐπεὶ Τροίης ἱερὸν πτολίεθρον
ἔπερσεν.
text-wrap-style: avoid-orphans를 적용하면 대신 다음과 같은 결과가 나올 수 있으며, 이는 논쟁의 여지는 있지만 더 보기 좋다:
ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς
μάλα πολλὰ πλάγχθη, ἐπεὶ Τροίης ἱερὸν
πτολίεθρον ἔπερσεν.
그러나 다음 조각은 더 까다롭다:
Circumnavigating
the Mississippi
river
마지막 줄을 덜 짧게 만들기 위해 이전 줄을 더 이르게 줄바꿈하려고 시도하면 다음과 같은 결과가 된다:
Circumnavigating
the
Mississippi river
마지막 줄이 실제로 더 이상 짧지 않게 되지만, 끝에서 두 번째 줄은 보기 좋지 않다. 이러한 경우, 사용자 에이전트는 text-wrap-style: avoid-orphans가 설정되어 있음에도 첫 번째 렌더링을 선호할 것으로 기대된다.

참고: auto 값은 일반적으로 Web 브라우저의 빠른 레거시 줄 나누기에 매핑되며, 이는 지금까지 종종 최적이 아닌 결과를 내는 first-fit/greedy 알고리즘을 사용해 왔다. UA는 이 기본값으로 더 나은 줄 나누기 알고리즘을 실험할 수 있지만, 최적의 결과는 종종 더 많은 시간이 걸리므로, prettyavoid-orphans는 더 나은 결과를 위해 더 많은 시간을 들이는 opt-in으로 제공된다. 두 값 모두 본문 텍스트를 위한 것이며, 여기서 마지막 줄은 평균 줄보다 약간 더 짧을 것으로 기대된다. 하지만 avoid-orphans는 성능을 유지하면서 지나치게 짧은 마지막 줄을 피하는 것을 목표로 하고, pretty는 더 나은 레이아웃을 추구하기 위해 더 많은 속도를 희생할 수 있다; balance 값은 제목과 캡션을 위한 것이며, 여기서는 길이가 같은 텍스트 줄이 선호되는 경향이 있다; 그리고 stable은 편집 가능하거나 편집 가능으로 전환될 가능성이 있는 섹션을 위한 것이다.

스레드를 참조하라. 이 이슈는 줄의 최소 길이를 요구하는 것에 관한 것이다. 일반적인 측정 기준은 다음과 같아 보인다

값 공간에 대한 제안은 match-indent | <length> | <percentage> 이다 (그 사용 사례를 명확히 하기 위해 Xch를 예로 제시). 또는 <integer>가 실제로 문자를 셀 수도 있다.

이것이 텍스트 균형 조정(위)과 어떻게 상호작용할지는 불분명하다; 이전 제안 중 하나는 그것들을 같은 속성으로 두었다 (100%가 전체 균형 조정을 의미).

사람들은 단어 기반 제한을 요청했지만, 이는 실제로 단어의 길이에 의존하므로 문자 기반이 더 낫다.

5.5. 결합된 줄바꿈 제어: text-wrap 단축 속성

이름: text-wrap
값: <'text-wrap-mode'> || <'text-wrap-style'>
초기값: wrap
적용 대상: 개별 속성 참조
상속 여부: 개별 속성 참조
백분율: 개별 속성 참조
계산값: 개별 속성 참조
정규 순서: 문법에 따름
애니메이션 유형: 개별 속성 참조

이 속성은 text-wrap-modetext-wrap-style 속성의 단축 속성이다. 생략된 모든 longhand는 그 초기값으로 설정된다.

6. 줄 나누기와 단어 경계

대부분의 문자 체계에서는, 하이픈 넣기가 없을 때 소프트 줄바꿈 기회가 보통 단어 경계에서만 발생한다. 그러한 많은 체계(라틴 알파벳으로 쓰인 영어 등)는 단어를 명시적으로 구분하기 위해 공백이나 문장부호를 사용하며, 소프트 줄바꿈 기회는 이러한 문자로 식별될 수 있다.

그러나 태국어, 라오어, 크메르어와 같은 문자 체계는 단어를 구분하기 위해 공백이나 문장부호를 사용하지 않는다. zero width space(U+200B)를 이러한 문자 체계에서 명시적 단어 구분자로 사용할 수는 있지만, 이 관행은 흔하지 않다. 그 결과, 이러한 텍스트에서 소프트 줄바꿈 기회를 올바르게 식별하려면 어휘 자원이 필요하다.

다른 일부 문자 체계에서는, 특히 자바 문자와 발리 문자 같은 브라흐미계 문자에서, 소프트 줄바꿈 기회가 단어 경계가 아니라 정서법적 음절 경계를 기반으로 한다. 정서법적 음절 나누기는 콘텐츠 언어에 의존하지 않고 어휘 자원을 요구하지도 않지만, 그럼에도 나누기 기회를 찾기 위해 텍스트 분석을 요구한다.

중국어(및 일본어, 이 문자, 때로는 한국어도 포함)와 같은 다른 체계에서는, 각 음절이 하나의 조판 글자 단위에 대응하는 경향이 있으므로, 줄 나누기 관례는 특정 문자 조합 사이를 제외한 어디에서나 줄이 나뉠 수 있게 한다. 또한 이러한 제한의 엄격도 수준은 조판 스타일에 따라 달라진다.

CSS가 소프트 줄바꿈 기회가 발생하는 위치를 완전히 정의하지는 않지만, 일반적인 변형을 구분하기 위한 몇 가지 제어가 제공된다:

참고: Unicode Standard Annex #14: Unicode Line Breaking Algorithm은 Unicode의 모든 문자 체계에 대한 줄 나누기의 기준 동작을 정의하며, 이는 추가로 조정될 것으로 기대된다. [UAX14] 줄 나누기 관례에 대한 자세한 내용은 일본어의 경우 Requirements for Japanese Text Layout [JLREQ]Formatting Rules for Japanese Documents [JIS4051]에서, 중국어의 경우 Requirements for Chinese Text Layout [CLREQ]General Rules for Punctuation [ZHMARK]에서 확인할 수 있다. 추가 언어에 대한 더 많은 정보를 포함하는 국제화 작업 그룹Language Enablement Index도 참조하라. [TYPOGRAPHY] 추가로 적절한 참고문헌에 대한 안내는 매우 감사히 받겠다.

6.1. 글자에 대한 나누기 규칙: word-break 속성

이름: word-break
값: normal | break-all | keep-all | manual | auto-phrase | break-word
초기값: normal
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 “단어” 사이와 내부의 소프트 줄바꿈 기회를 지정한다. 즉, 텍스트 줄을 나누는 것이 “normal”이고 허용되는 위치를 지정한다. 이는 글자 사이의 나누기에 초점을 맞추며, 공백기타 공백 구분자에 의해 소프트 줄바꿈 기회가 생성되는지 여부와 그 방식을 정의하지 않으며 (auto-phrase가 일부를 억제할 수는 있음), 문장부호 주변도 정의하지 않는다. (문장부호와 작은 가나에 영향을 주는 제어는 line-break를 참조하라.)

특히, word-break는 인접한 조판 글자 단위 사이에 소프트 줄바꿈 기회가 일반적으로 존재하는지 여부를 제어한다. 여기서 NU, AL, AI, 또는 ID Unicode 줄 나누기 클래스에 속하는 글자가 아닌 letter 조판 문자 단위도 이 목적에 한해서 조판 글자 단위로 처리한다. [UAX14]

예를 들어, 일부 CJK 조판 스타일에서는, 영어 단어가 공백이나 하이픈 넣기 지점에서만이 아니라 임의의 두 글자 사이에서 나뉘는 것이 허용된다; 이는 word-break:break-all로 활성화할 수 있다.
일본어 텍스트 안에 영어가 포함된 조각.
			          단어 'caption'이 두 줄에 걸쳐 'capt'와 'ion'으로 나뉘어 있다.
일본어 안에 포함된 영어 텍스트가 단어 안의 임의의 지점에서 나뉘는 예.

또 다른 예로, 한국어에는 두 가지 줄 나누기 스타일이 있다: 임의의 두 한국어 음절 사이(word-break: normal) 또는 영어처럼 주로 공백에서(word-break: keep-all).

각 줄의 마지막에 한글이 올 때 줄 나눔 기
준을 “글자” 또는 “어절” 단위로 한다.
각 줄의 마지막에 한글이 올 때 줄 나눔
기준을 “글자” 또는 “어절” 단위로 한다.

에티오피아 문자도 마찬가지로 두 가지 줄 나누기 스타일이 있다. 단어 구분자에서만 나누거나(word-break: normal), 또는 단어 내부의 글자 사이에서도 나누기를 허용한다(word-break: break-all).

ተወልዱ፡ኵሉ፡ሰብእ፡ግዑዛን፡ወዕሩያን፡
በማዕረግ፡ወብሕግ።ቦሙ፡ኅሊና፡ወዐቅል፡
ወይትጌበሩ፡አሐዱ፡ምስለ፡አሀዱ፡
በመንፈሰ፡እኍና።
ተወልዱ፡ኵሉ፡ሰብእ፡ግዑዛን፡ወዕሩያን፡በማ
ዕረግ፡ወብሕግ።ቦሙ፡ኅሊና፡ወዐቅል፡ወይትጌ
በሩ፡አሐዱ፡ምስለ፡አሀዱ፡በመንፈሰ፡እኍና።

참고: 오버플로가 발생하는 경우에만 추가 나누기 기회를 활성화하려면, overflow-wrap를 참조하라.

값은 다음 의미를 가진다:

normal
단어는 위에서 설명한 대로 관례적인 규칙에 따라 나뉜다. 흔히 두 가지 다른 동작을 보이는 한국어는 연속된 임의의 두 Hangul/Hanja 사이에서 나누기를 허용한다. 에티오피아 문자의 경우에도 두 가지 다른 동작을 보이지만, 그러한 단어 내부 나누기는 허용되지 않는다.

일부 문자 체계는 관례적으로 기대되는 소프트 줄바꿈 기회를 얻기 위해 특정 처리가 필요하며, 이는 § 6.1.1 분석적 단어 나누기에 설명되어 있다.

break-all
“단어” 내부에서 나누기가 허용된다: 구체적으로, normal에 대해 허용되는 소프트 줄바꿈 기회에 더하여, 모든 조판 글자 단위 (및 NU (“numeric”), AL (“alphabetic”), 또는 SA (“Southeast Asian”) 줄 나누기 클래스 [UAX14]로 해석되는 모든 조판 문자 단위)는 줄 나누기의 목적상 ID (“ideographic characters”)로 처리된다. 하이픈 넣기는 적용되지 않는다.

참고: 이 값은 문장부호 문자 주변에 소프트 줄바꿈 기회가 있는지 여부에는 영향을 주지 않는다. 어디에서나 나누기를 허용하려면 line-break: anywhere를 참조하라.

참고: 이 옵션은 에티오피아 문자의 다른 일반적인 동작을 활성화한다. 또한 텍스트가 주로 CJK 문자로 이루어져 있고 짧은 비-CJK 발췌만 포함된 맥락에서, 각 줄에 텍스트가 더 잘 분산되기를 원할 때 자주 사용된다.

keep-all
“단어” 내부에서 나누기가 금지된다: 조판 글자 단위 사이의 암시적 소프트 줄바꿈 기회 (또는 NU, AL, AI, 또는 ID Unicode 줄 나누기 클래스 [UAX14]에 속하는 다른 조판 문자 단위 사이의 암시적 기회)는 억제된다. 즉, 그러한 문자 쌍 사이의 나누기는 (line-break 설정 중 anywhere 이외의 설정과 관계없이) 금지되며, § 6.1.1.1 어휘적 단어 나누기로 인해 기회가 존재하는 경우는 예외이다. 그 외에는 이 옵션은 normal과 동등하다. 이 스타일에서는 CJK 문자 시퀀스가 나뉘지 않는다.

참고: 이것은 한국어의 다른 일반적인 동작 (단어 사이에 공백을 사용함)이며, CJK 조각이 공백을 구분자로 사용하는 다른 언어 안에 섞인 혼합 문자 체계 텍스트에도 유용하다.

manual
normal과 동일하게 동작하지만, § 6.1.1.1 어휘적 단어 나누기를 수행해서는 안 된다. 구체적으로, [UAX14]에서 클래스 SA를 가진 조판 문자 단위는 클래스 AL을 가진 것처럼 처리되어야 한다. (즉, line-break 값이 anywhere가 아니라고 가정하면, 그러한 문자 쌍 사이에는 소프트 줄바꿈 기회가 없다).

참고: 이 값은 발리어 같은 언어에서 단어 내부의 음절 기반 소프트 줄바꿈 기회에는 영향을 주지 않는다. (그러한 문자 체계에 대한 논의는 § 6.1.1.2 정서법적 나누기를 참조하라.)

또는, 이 값은 normal이 아니라 keep-all을 기반으로 할 수도 있다. 또 다른 변형은 이 동작을 keep-all과 병합하는 것이다.

참고: 일부 동남아시아 언어는 사용자 에이전트에 의해 흔히 잘못 감지된다. word-break: normal에서는 그 결과 UA가 줄바꿈 기회를 찾기 위해 부적절한 언어별 논리를 적용하고, 이를 부적절한 위치에 배치할 수 있다.

예를 들어, 태국어 이외의 많은 언어가 태국 문자로 쓰이며, 이를 태국어인 것처럼 줄 나누기하면 일반적으로 부적절하고—​혼란스러울 수 있는—​결과가 나온다.

이런 일이 발생하면, 이 값은 작성자가 word-break: normal에 대해 사용자 에이전트에 내장된 단어 경계 감지를 끌 수 있게 하여, 줄바꿈 기회를 나타내기 위해 텍스트를 수동으로 마크업하고 합리적인 결과를 얻을 수 있게 한다.

이 값을 사용하는 작성자는 동남아시아 언어의 단어 경계를 수동으로 표시해야 하며, 이를 위해 wbr 또는 U+200B를 사용해야 한다. 그렇지 않으면 소프트 줄바꿈 기회가 없으며 텍스트가 오버플로될 수 있다.
auto-phrase
normal과 동일하게 동작하지만, 이 값은 사용자 에이전트가 언어별 콘텐츠 분석을 수행하여 자연스러운 구(여러 단어로 이루어진)를 함께 유지하는 것에 우선순위를 두도록 지시한다.

요소의 콘텐츠 언어가 알려지지 않았거나, 사용자 에이전트가 그 특정 언어에 대해 구 경계를 감지하는 방법을 모르는 경우, 이 값은 normal처럼 동작해야 한다. 그렇지 않으면, 사용자 에이전트는 구 경계를 감지하고 각 구 내부의 소프트 줄바꿈 기회를 억제해야 한다.

콘텐츠 언어구 경계 감지 지원 여부와 관계없이, 하이픈 넣기 기회hyphens: none이 지정된 것처럼 억제된다.

참고: 한 언어를 위해 설계된 단어 경계 감지 시스템이 그 언어의 일부 또는 모든 방언에 적합한지는 어느 정도 주관적이며, 이 명세는 이를 사용자 에이전트의 재량에 맡긴다. 감지 시스템이 특정 방언의 모든 미묘한 차이를 처리할 수 없더라도, 단어 경계를 대부분의 경우 올바르게 인식한다면 지원한다고 주장하는 것이 합리적일 수 있다. 그러나 사용자 에이전트가 대부분의 단어 경계를 감지하지 못하거나 오류율이 높은 언어에 대해 지원한다고 주장한다면, 작성자와 사용자에게 해가 될 것이다.
사용자 에이전트가 광범위한 중국어 집합에는 적합하지 않은 광둥어용 단어 경계 감지 시스템을 가지고 있다면, auto-phraselang=yue, lang=zh-yue, 또는 lang=zh-HK로 표시된 콘텐츠에는 효과가 있어야 하지만, lang=zh 또는 lang=zh-Hant에는 그렇지 않아야 한다.

그러나 사용자 에이전트가 중국어 전반에 적합한 일반 단어 경계 감지 시스템을 지원한다면, auto-phrase는 넓은 lang=zh 특성으로 표시된 콘텐츠뿐 아니라, lang=zh-yue, lang=zh-Hant-HK, lang=zh-Hans-SG, 또는 lang=zh-hak 같은 더 구체적인 콘텐츠에도 효과가 있어야 한다.

특정 범주의 글자와 같은 방식으로 줄 나누기되는 기호는 그 글자들과 같은 방식으로 영향을 받는다.

다음은 혼합 문자 체계 샘플 텍스트이다:
这是一些汉字 and some Latin و کمی خط عربی และตัวอย่างการเขียนภาษาไทย በጽሑፍ፡ማራዘሙን፡አንዳንድ፡

나누기 지점은 다음과 같이 결정된다(‘·’로 표시):

word-break: normal
这·是·一·些·汉·字·and·some·Latin·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡
word-break: break-all
这·是·一·些·汉·字·a·n·d·s·o·m·e·L·a·t·i·n·و·ﮐ·ﻤ·ﻰ·ﺧ·ﻁ·ﻋ·ﺮ·ﺑ·ﻰ·แ·ล·ะ·ตั·ว·อ·ย่·า·ง·ก·า·ร·เ·ขี·ย·น·ภ·า·ษ·า·ไ·ท·ย·በ·ጽ·ሑ·ፍ፡·ማ·ራ·ዘ·ሙ·ን፡·አ·ን·ዳ·ን·ድ፡
word-break: keep-all
这是一些汉字·and·some·Latin·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡

일본어는 보통 단어 안의 음절 사이에서도 줄 나누기를 허용하여 조판된다. 그러나 때로는 이러한 줄바꿈 기회를 억제하고 특정 문장 조각의 끝에서만 줄바꿈을 허용하는 것이 선호된다. 이는 제목, 표 또는 그림 캡션처럼 매우 짧은 텍스트에서 가장 일반적으로 이루어진다.

이는 허용된 줄바꿈 지점을 wbr 또는 U+200B ZERO WIDTH SPACE로 표시하고, 다른 지점은 word-break: keep-all을 사용하여 억제함으로써 수동으로 달성할 수 있다.

또는, 일본어에서 구 경계 감지를 지원하는 사용자 에이전트에서는, ( 콘텐츠 언어가 지정되어 있다고 가정할 때) word-break: auto-phrase를 사용하여 같은 결과를 자동으로 얻을 수 있다.

샘플 마크업 및 스타일 규칙 예상 렌더링 현재 브라우저의 결과
<h1>
窓ぎわの<wbr>トットちゃん
</h1>
h1 {
  word-break: normal;
}
窓ぎわのトッ
トちゃん
窓ぎわのトットちゃん
<h1>
窓ぎわの<wbr>トットちゃん
</h1>
h1 {
  word-break: keep-all;
}
窓ぎわの
トットちゃん
窓ぎわのトットちゃん
<h1 lang=ja>
窓ぎわのトットちゃん
</h1>
h1 {
  word-break: auto-phrase;
}
窓ぎわの
トットちゃん
窓ぎわのトットちゃん

사용자 에이전트는 이 속성의 어떤 값에 대한 응답으로도 다음과 같은 소프트 줄바꿈 기회를 억제해서는 안 된다:

word-break의 효과는 내재 크기를 계산할 때 고려된다.

레거시 콘텐츠와의 호환성을 위해, word-break 속성은 더 이상 권장되지 않는 break-word 키워드도 지원한다. 지정된 경우, 이는 word-break: normaloverflow-wrap: anywhere와 같은 효과를 가지며, overflow-wrap 속성의 실제 값과는 무관하다.

6.1.1. 분석적 단어 나누기

6.1.1.1. 어휘적 단어 나누기

동남아시아 언어에 대해 기대되는 normal 동작을 제공하려면, [UAX14]에서 줄 나누기 클래스 SA를 가진 조판 문자 단위는 클래스 AL을 가진 것처럼 처리되어야 한다. 그러나 사용자 에이전트는 추가로 그러한 문자들의 연속 콘텐츠를 분석하여 단어 경계를 감지하고, 각 경계를 소프트 줄바꿈 기회로 처리해야 한다.

클래스 SA 문자를 사용하는 문자 체계로 다양한 언어가 쓰일 수 있으므로, 콘텐츠 언어가 알려진 경우, 사용자 에이전트는 이 정보를 사용하여 분석을 조정해야 한다.

6.1.1.2. 정서법적 나누기

발리 문자와 같이 정서법적 음절을 기반으로 줄 나누기를 사용하는 문자 체계의 경우, UA는 소프트 줄바꿈 기회를 삽입할 올바른 지점을 찾기 위해 콘텐츠를 분석해야 한다.

참고: 작성 시점에는, Unicode가 이 분석을 수행하는 방법을 정의하지 않으며, 이러한 문자 체계의 모든 문자를 줄 나누기 클래스 AL로 처리한다. 그러나, 그 문제를 해결하기 위한 제안이 이루어졌다. 최종적인 것은 아니지만, 참고할 정보로 유용할 수 있다. [L2-22-080R]

6.1.1.3. 대체 나누기

예상치 못한 오버플로를 피하기 위해, 사용자 에이전트가 줄 나누기에 필요한 어휘적 또는 정서법적 분석을 이를 필요로 하는 콘텐츠 언어에 대해 수행할 수 없는 경우—​예를 들어 클래스 SA 문자로 쓰인 언어에 대한 사전이 없기 때문에—​그 문자 체계의 조판 글자 단위 쌍 사이에 소프트 줄바꿈 기회가 있다고 가정해야 한다.

참고: 이 조항은 UA가 특정 텍스트 연속에서 단어 경계를 찾지 못했다는 이유만으로 발동되는 것은 아니다; 그 텍스트 연속은 실제로 하나의 나눌 수 없는 단어일 수 있다. 예를 들어, 사용자 에이전트가 크메르어의 단어 경계를 결정하는 방법을 모르는 경우, 텍스트 연속이 크메르 문자(U+1780부터 U+17FF까지)로 구성되어 있을 때 적용된다.

6.1.2. 구 기반 줄 나누기에 대한 사용자 선호 표현

사용자 에이전트는 사용자 선호에 응답하여 auto-phrase에 설명된 언어별 콘텐츠 분석을 활성화할 수 있다. 이러한 동작을 가진 사용자 에이전트는 word-break선언값user origin에서 auto-phrase로 설정함으로써 이를 수행해야 한다.

참고: 이는 작성자가 getComputedStyle()를 호출하여 이 기능이 활성화되었는지 여부를 감지하거나, 적절한 경우 author origin에서 이를 재정의할 수 있게 한다.

6.2. 줄 나누기 엄격도: line-break 속성

이름: line-break
값: auto | loose | normal | strict | anywhere
초기값: auto
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 요소 안에 적용되는 줄 나누기 규칙의 엄격도를 지정한다: 특히 줄바꿈이 문장부호 및 기호와 어떻게 상호작용하는지를 지정한다. 값은 다음 의미를 가진다:

auto
UA가 사용할 줄 나누기 제한 집합을 결정하며, 줄의 길이에 따라 제한을 달리할 수 있다; 예를 들어, 짧은 줄에는 덜 제한적인 줄 나누기 규칙 집합을 사용한다.
loose
가장 제한이 적은 줄 나누기 규칙 집합을 사용하여 텍스트를 나눈다. 일반적으로 신문과 같은 짧은 줄에 사용된다.
normal
가장 일반적인 줄 나누기 규칙 집합을 사용하여 텍스트를 나눈다.
strict
가장 엄격한 줄 나누기 규칙 집합을 사용하여 텍스트를 나눈다.
anywhere
모든 조판 문자 단위 주변에 소프트 줄바꿈 기회가 있다. 여기에는 모든 문장부호 문자, 보존된 공백, 또는 단어 중간도 포함되며, 줄 나누기에 대한 모든 금지를 무시한다. 여기에는 GL, WJ, 또는 ZWJ 줄 나누기 클래스를 가진 문자에 의해 도입된 금지나 word-break 속성에 의해 요구되는 금지도 포함된다. [UAX14] 서로 다른 줄바꿈 기회는 우선순위가 매겨져서는 안 된다. 하이픈 넣기는 적용되지 않는다.

참고: 이 값은 터미널에서 흔히 보이는 줄 나누기 규칙을 유발한다.

참고: anywherewhite-spacebreak-spaces로 설정된 경우에만 줄 끝의 보존된 공백이 다음 줄로 줄바꿈될 수 있게 한다. 다른 경우에는:

보존된 공백에 효과가 있는 경우, white-space: break-spaces에서는 공백 시퀀스의 첫 번째 공백 앞에서도 나누기를 허용한다. 이는 break-spaces 자체만으로는 허용되지 않는다.

CSS는 텍스트 줄바꿈 규칙에서 네 가지 엄격도 수준을 구분한다. loose, normal, 및 strict 각각에 대해 적용되는 정확한 규칙 집합은 UA에 달려 있으며 언어 관례를 따라야 한다. 그러나 이 세 키워드에 대해, 이 명세는 다음을 요구한다:

참고: 위에 나열된 요구사항은 CJK 텍스트에서만 구분을 만든다. 위 규칙들만 일치하고 추가 규칙이 없는 구현에서는, writing system이 중국어 또는 일본어로 태그되지 않는 한 line-break는 CJK 코드 포인트에만 영향을 줄 것이다. 향후 레벨은 다른 문자 체계와 언어에 대해 그 요구사항이 알려짐에 따라 추가적인 특정 규칙을 더할 수 있다.

UA는 strict/normal/loose 모드 사이에 추가적인 구분을 더할 수 있으므로, 이러한 값들은 다른 문자 체계에서도 차이를 보일 수 있다. 예를 들어, 충분히 발전된 태국어 처리 능력을 가진 UA는 태국어 줄 나누기의 서로 다른 엄격도 수준을 이 키워드에 매핑하도록 선택할 수 있다. 예를 들어 strict 모드에서는 복합어 내부 나누기를 허용하지 않음 (예: ตัวอย่างการเขียนภาษาไทย를 ตัวอย่าง·การเขียน·ภาษาไทย로 나누기) 한편 loose에서는 더 많은 나누기를 허용함 (ตัวอย่าง·การ·เขียน·ภาษา·ไทย).

참고: CSSWG는 향후 명세 판에서 고급 출판 요구사항을 충족하기 위해 줄 나누기에 대한 더 세밀한 제어가 필요할 수 있음을 인정한다.

참고: 사용자 에이전트는 줄 나누기 구현의 출발점으로 [UAX14]를 참조할 수 있지만, 기존 구현과의 최대 상호운용성을 위해 다음과 같은 편차가 바람직할 수 있다:

6.3. 하이픈 넣기: 단어 내부의 형태론적 나누기

6.3.1. 하이픈 넣기 제어: hyphens 속성

하이픈 넣기는 단락의 레이아웃을 개선하기 위해 일반적으로 나누기가 허용되지 않는 곳에서 단어를 제어하여 분할하는 것이며, 보통 음절 또는 형태소 경계에서 단어를 나누고 종종 그 분할을 시각적으로 표시한다 (대개 하이픈, U+2010을 삽입). 어떤 경우에는 하이픈 넣기가 단어의 철자를 바꿀 수도 있다. 어쨌든 하이픈 넣기는 렌더링 효과일 뿐이다: 이는 기반 문서 콘텐츠나 텍스트 선택 또는 검색에 영향을 주어서는 안 된다.

하이픈 넣기 관행은 언어마다 다르며, 줄 나누기 앞에 하이픈을 삽입하는 것뿐 아니라, 나누기 뒤에 하이픈을 삽입하거나(또는 둘 다), U+2010과 다른 문자를 삽입하거나, 단어의 철자를 바꾸는 것도 포함될 수 있다.
언어 나뉘지 않은 형태
영어 Unbroken Un‐ broken
네덜란드어 cafeetje café‐ tje
헝가리어 Összeg Ösz‐ szeg
중국어(만다린) tú’àn tú‐ àn
àizēng‐fēnmíng àizēng‐ ‐fēnmíng
위구르어  [분리형 DAL + 분리형 ALEF + 초성형 MEEM +
					          중성형 YEH  + 종성형 DAL +
					          분리형 ALEF MAKSURA] [분리형 DAL + 분리형 ALEF + 초성형 MEEM +
					          종성형 YEH + 하이픈 ] [ 분리형 DAL + 분리형 ALEF MAKSURA]
크리어 [ᑲᓯᑕᓂᐘᓂᓂᐠ]
					          (CANADIAN SYLLABICS KA +
					          CANADIAN SYLLABICS SI +
					          CANADIAN SYLLABICS TA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS WEST-CREE WA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS FINAL GRAVE) [ᑲᓯᑕᓂ᐀]
					          (CANADIAN SYLLABICS KA +
					          CANADIAN SYLLABICS SI +
					          CANADIAN SYLLABICS TA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS HYPHEN) [ᐘᓂᓂᐠ]
					          (CANADIAN SYLLABICS WEST-CREE WA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS FINAL GRAVE)

하이픈 넣기는 줄이 유효한 하이픈 넣기 기회에서 나뉠 때 발생하며, 이는 하이픈 넣기가 허용되는 단어 내부에 존재하는 소프트 줄바꿈 기회의 한 종류이다. CSS에서 하이픈 넣기 기회hyphens 속성으로 제어된다. CSS Text Level 3은 하이픈 넣기의 정확한 규칙을 정의하지 않는다; 그러나 UA는 나누기 지점 선택을 최적화하고 언어에 적합한 하이픈 넣기 지점을 선택할 것을 강하게 권장한다.

참고: U+002D - HYPHEN-MINUS 문자나 U+2010 ‐ HYPHEN 문자에 의해 도입되는 소프트 줄바꿈 기회하이픈 넣기 기회가 아니다. 줄바꿈 시 분할의 시각적 표시가 생성되지 않기 때문이다: 이 문자들은 해당 지점에서 줄이 나뉘든 아니든 보인다.

하이픈 넣기 기회는 min-content 내재 크기를 계산할 때 고려된다.

참고: 이는 표가 포함 블록을 오버플로하는 대신 그 내용을 하이픈 넣기할 수 있게 하며, 독일어처럼 긴 단어가 많은 언어에서 특히 중요하다.

이름: hyphens
값: none | manual | auto
초기값: manual
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 하이픈 넣기가 텍스트 줄 안에서 더 많은 소프트 줄바꿈 기회를 만들 수 있는지 여부를 제어한다. 값은 다음 의미를 가진다:

none
단어 내부의 문자가 하이픈 넣기 기회를 명시적으로 정의하더라도, 단어는 하이픈 넣기되지 않는다.

참고: 이는 U+002D - HYPHEN-MINUS 또는 U+2010 ‐ HYPHEN처럼 항상 보이는 문자에 의해 도입된 기존 소프트 줄바꿈 기회를 억제하지 않는다.

manual
단어 내부에 하이픈 넣기 기회를 명시적으로 제안하는 문자가 있는 곳에서만 단어가 하이픈 넣기된다. UA는 적절한 언어별 하이픈 넣기 문자(들)를 사용해야 하며, 같은 지점에서의 자동 하이픈 넣기와 마찬가지로 적절한 철자 변경을 적용해야 한다.
Unicode에서 U+00AD는 조건부 “soft hyphen”이고 U+2010은 무조건 하이픈이다. Unicode Standard Annex #14는 Unicode 줄 나누기에서 soft hyphen의 역할을 설명한다. [UAX14] HTML에서 &shy;는 하이픈 넣기 기회를 제안하는 soft hyphen 문자를 나타낸다.
ex&shy;ample
auto
단어는 조건부 하이픈에 의해 명시적으로 표시된 기회에 더하여, 언어에 적합한 하이픈 넣기 자원이 자동으로 결정한 하이픈 넣기 기회에서 나뉠 수 있다. 단어가 조건부 하이픈 (&shy; 또는 U+00AD SOFT HYPHEN)을 포함하는 경우, 단어 안의 다른 자동 하이픈 넣기 기회는 조건부 하이픈(들)을 우선하여 무시되어야 한다. 그러나 그러한 기회에서 나눈 뒤에도 그 단어의 일부가 한 줄에 맞기에는 여전히 너무 길다면, 자동 하이픈 넣기 기회를 사용할 수 있다.

올바른 자동 하이픈 넣기에는 나뉘는 텍스트의 언어에 적합한 하이픈 넣기 자원이 필요하다. 따라서 UA는 콘텐츠 언어가 알려져 있고 적절한 하이픈 넣기 자원을 가진 텍스트에 대해서만 자동 하이픈 넣기를 해야 한다.

작성자는 올바른 자동 하이픈 넣기를 얻기 위해 자신의 콘텐츠 언어를 올바르게 태그해야 한다 (예: HTML lang 속성 또는 XML xml:lang 속성 사용).

UA는 특정 단어를 자동 하이픈 넣기에서 제외하기 위해 언어에 맞춘 휴리스틱을 사용할 수 있다. 예를 들어, UA는 특정 대문자화 및 문장부호 패턴에 일치하는 단어를 제외하여 고유명사에서의 하이픈 넣기를 피하려고 할 수 있다. 이러한 휴리스틱은 이 명세에서 정의하지 않는다. (이러한 휴리스틱은 언어마다 달라질 필요가 있음에 유의하라: 예를 들어 영어와 독일어는 대문자화 관례가 매우 다르다.)

hyphens 속성의 목적상, 무엇이 “단어”를 구성하는지는 UA에 따라 다르다. 그러나 단어 경계를 결정할 때 인라인 요소 경계와 out-of-flow 요소는 무시되어야 한다.

조건부 하이픈 문자 (예: U+00AD SOFT HYPHEN)가 만든 하이픈 넣기 기회에서 하이픈 넣기로 인해 표시되는 모든 글리프는 그 문자로 표현되며 그 문자에 적용된 속성에 따라 스타일링된다.

참고: 아랍 문자와 같은 셰이핑 문자 체계가 하이픈 넣기로 인해 단어 내부에서 나뉠 수 있는 경우에도, 문자는 단어가 나뉘지 않은 것처럼 계속 셰이핑된다.

예를 들어, 위구르어 단어 “داميدى”가 하이픈 넣기된다면, 다음처럼 보인다 [분리형 DAL + 분리형 ALEF + 초성형 MEEM +
		          중성형 YEH + 하이픈 + line-break + 종성형 DAL +
		          분리형 ALEF MAKSURA] 다음이 아니라 [분리형 DAL + 분리형 ALEF + 초성형 MEEM +
		          종성형 YEH + 하이픈 + line-break + 분리형 DAL +
		          분리형 ALEF MAKSURA] .

6.3.2. 하이픈: hyphenate-character 속성

이름: hyphenate-character
값: auto | <string>
초기값: auto
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 하이픈 넣기된 단어의 부분들 사이에 표시되는 문자열을 지정한다. 값은 다음 의미를 가진다:

auto
사용자 에이전트가 콘텐츠 언어의 조판 관례를 기반으로 적절한 문자열을 찾아야 함을 지정하며, 이는 하이픈 넣기 사전과 같은 출처에서 올 수도 있다.
<string>
하이픈 넣기 시 하이픈 넣기 나누기 지점에 나타나는 문자열을 지정한다. (이 문자열의 위치는 영향을 받지 않는다: UA는 콘텐츠 언어의 조판 관례에 따라 문자열을 삽입해야 하며, 기본값은 하이픈 넣기 나누기 바로 앞이다.) UA는 used value를 제한된 수의 조판 문자 단위로 잘라낼 수 있다; 하지만 조판 문자 단위의 일부만 잘라내서는 안 된다.

참고: 빈 문자열 ""을 지정하는 것은 유효하며, UA가 보이는 하이픈 넣기 문자를 삽입하지 않고 하이픈 넣기 기회에서 나누도록 한다.

하이픈 문자(U+2010)는 단어가 분할되었음을 나타내기 위해 가장 일반적으로 사용된다. 그러나 필요할 때 hyphenate-character를 사용하여 다른 종류의 하이픈을 지정할 수 있다.
[lang]:lang(ojs) { hyphenate-character: "᐀" /* CANADIAN SYLLABICS HYPHEN (U+1400) */ }

참고: 자동 하이픈 넣기에 의해 발생한 하이픈과 soft hyphen에 의해 발생한 하이픈은 모두 hyphenate-character에 따라 렌더링된다.

6.3.3. 하이픈 넣기 크기 제한: hyphenate-limit-zone 속성

이름: hyphenate-limit-zone
값: <length-percentage>
초기값: 0
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: 줄 박스의 길이를 기준으로 함
계산값: 계산된 <length-percentage>
정규 순서: 문법에 따름
애니메이션 유형: 계산값 유형에 따름

hyphenate-limit-zone이 좋은 이름인가? 의견/제안이 있는가?

이 속성은 하이픈 넣기가 유발되기 전에 줄 박스에 남을 수 있는 최대 빈 공간의 양 (양쪽 맞춤 이전)을 지정하며, 이는 다음 줄의 단어 일부를 현재 줄로 끌어올리기 위한 것이다.

6.3.4. 하이픈 넣기 문자 제한: hyphenate-limit-chars 속성

이름: hyphenate-limit-chars
값: [ auto | <integer> ]{1,3}
초기값: auto
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 세 값, 각각 auto 키워드 또는 정수
정규 순서: 문법에 따름
애니메이션 유형: 계산값 유형에 따름

이 속성은 하이픈 넣기된 단어의 최소 문자 수를 지정한다. 단어가 단어 전체 / 하이픈 앞 / 하이픈 뒤의 필수 최소 문자 수를 충족하지 않으면, 그 단어는 하이픈 넣기되어서는 안 된다. 비간격 결합 표식(Unicode General Category Mn)과 단어 내부 문장부호(Unicode General Category P*)는 최소값 계산에 포함되지 않는다.

세 값이 지정된 경우, 첫 번째 값은 단어 전체 문자 수의 필수 최소값, 두 번째 값은 하이픈 넣기 지점 앞 문자 수의 최소값, 세 번째 값은 하이픈 넣기 지점 뒤 문자 수의 최소값이다. 세 번째 값이 빠지면 두 번째 값과 같다. 두 번째 값이 빠지면 auto가 된다. auto 값은 UA가 현재 레이아웃에 맞게 조정되는 값을 선택함을 의미한다.

참고: UA가 더 나은 값을 계산할 수 없는 한, auto는 앞과 뒤에 대해 2, 단어 전체에 대해 5를 의미하는 것이 제안된다.

아래 예에서, 하이픈 넣기된 단어의 최소 크기는 UA에 맡기지만 (이는 언어, 줄의 길이 또는 다른 요소에 따라 달라질 수 있음을 의미), 하이픈 넣기 지점 앞뒤의 최소 문자 수는 3으로 설정된다.
p { hyphenate-limit-chars: auto 3; }

6.3.5. 하이픈 넣기 줄 제한: hyphenate-limit-lineshyphenate-limit-last 속성

이름: hyphenate-limit-lines
값: no-limit | <integer>
초기값: no-limit
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드 또는 정수
정규 순서: 문법에 따름
애니메이션 유형: 계산값 유형에 따름

이 속성은 요소 안에서 연속적으로 하이픈 넣기될 수 있는 줄의 최대 수를 나타낸다. no-limit 값은 제한이 없음을 의미한다.

어떤 경우에는 사용자 에이전트가 지정된 값을 준수하지 못할 수 있다. (overflow-wrap 참조.) 그러한 긴급 나누기로 도입된 하이픈 넣기가 가까운 하이픈 넣기 지점에 영향을 주는지는 정의되지 않는다.

이름: hyphenate-limit-last
값: none | always | column | page | spread
초기값: none
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 요소, 열, 페이지 및 spread 끝에서의 하이픈 넣기 동작을 나타낸다. spread는 독자에게 동시에 보이는 두 페이지의 집합이다. 값은 다음 의미를 가진다:

none
제한이 부과되지 않는다.
always
요소의 마지막 전체 줄, 또는 요소 내부의 column, page, spread 나누기 앞 마지막 줄은 하이픈 넣기되어서는 안 된다.
column
요소 내부의 column, page, spread 나누기 앞 마지막 줄은 하이픈 넣기되어서는 안 된다.
page
요소 내부의 page 또는 spread 나누기 앞 마지막 줄은 하이픈 넣기되어서는 안 된다.
spread
요소 내부의 spread 나누기 앞 마지막 줄은 하이픈 넣기되어서는 안 된다.
p { hyphenate-limit-last: always }
div.chapter {	hyphenate-limit-last: spread }

hyphenate-limit-last: none이 설정된 경우 단락은 다음처럼 서식 지정될 수 있다:

This is just a
simple example
to show Antarc-
tica.

'hyphenate-limit-last: always'를 사용하면 다음을 얻게 된다:

This is just a
simple example
to        show
Antarctica.

6.4. 오버플로 줄바꿈: overflow-wrap (word-wrap) 속성

이름: overflow-wrap
값: normal | break-word | anywhere
초기값: normal
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 그렇지 않으면 나눌 수 없는 문자열이 줄 박스 안에 맞기에는 너무 길 때, 오버플로를 방지하기 위해 UA가 줄 내부의 원래 허용되지 않는 지점에서 나눌 수 있는지 여부를 지정한다. 이는 white-space줄바꿈을 허용할 때에만 효과가 있다. 가능한 값:

normal
줄은 허용된 나누기 지점에서만 나뉠 수 있다. 그러나 줄에 달리 허용 가능한 나누기 지점이 없는 경우, word-break: keep-all에 의해 도입된 제한은 word-break: normal과 일치하도록 완화될 수 있다.

또한 줄에 달리 허용 가능한 나누기 지점이 없는 경우, word-break: auto-phrase에 의해 도입된 제한도 완화된다:

  • 특정 구 내부의 소프트 줄바꿈 기회를 억제하는 것이 그 구를 달리 빈 줄에 배치하더라도 오버플로되게 한다면, 사용자 에이전트는 그 구 내부에서 normal과 동일한 소프트 줄바꿈 기회로 되돌아가야 한다.
  • 그것으로도 오버플로를 방지하기에 충분하지 않다면, 오버플로될 각 줄 안에서는 하이픈 넣기 기회의 억제도 포기되어야 한다.
  • 중간 조치로, 사용자 에이전트는 여러 수준의 구를 감지하여, 더 긴 구가 오버플로를 유발할 때 더 짧은 구(가능하면 개별 단어까지)를 선택할 수도 있다.

word-break: keep-allword-break: auto-phrase에 의해 도입된 제한을 완화하여 얻은 소프트 줄바꿈 기회min-content 내재 크기를 계산할 때 고려되지 않는다.

anywhere
그렇지 않으면 나눌 수 없는 문자 시퀀스는 줄에 달리 허용 가능한 나누기 지점이 없는 경우 임의의 지점에서 나뉠 수 있다. 셰이핑 문자는 여전히 단어가 나뉘지 않은 것처럼 셰이핑되며, 자소 클러스터는 하나의 단위로 함께 유지되어야 한다. 나누기 지점에 하이픈 넣기 문자는 삽입되지 않는다. anywhere에 의해 도입된 소프트 줄바꿈 기회min-content 내재 크기를 계산할 때 고려된다.

word-break: auto-phrase의 경우, 이러한 추가 소프트 줄바꿈 기회overflow-wrap: normal에서 설명한 대로 word-break: auto-phrase에 의해 도입된 제한을 완화하는 것으로도 오버플로를 방지하기에 충분하지 않은 경우에만 도입된다.

break-word
anywhere와 같지만, break-word에 의해 도입된 소프트 줄바꿈 기회min-content 내재 크기를 계산할 때 고려되지 않는다.

overflow-wrapnone 값을 추가하여, overflow-wrap: normal이 허용하는 keep-allauto-phrase 제한 완화를 opt out할 필요가 있는가?

레거시 이유로, UA는 word-wrapoverflow-wrap 속성의 레거시 이름 별칭으로 처리해야 한다.

6.5. 줄 나누기 세부 사항

줄 나누기를 결정할 때:

7. 정렬과 양쪽 맞춤

정렬과 양쪽 맞춤은 인라인 콘텐츠가 줄 박스 안에서 어떻게 분배되는지를 제어한다.

7.1. 텍스트 정렬: text-align 단축 속성

이름: text-align
값: start | end | left | right | center | <string> | justify | match-parent | justify-all
초기값: start
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: 개별 속성 참조
계산값: 개별 속성 참조
애니메이션 유형: discrete
정규 순서: n/a

단축 속성text-align-alltext-align-last 속성을 설정하며, 콘텐츠가 줄 박스를 완전히 채우지 않을 때 블록의 인라인 수준 콘텐츠가 인라인 축을 따라 어떻게 정렬되는지를 설명한다. justify-all 또는 match-parent 이외의 값은 text-align-all에 할당되고 text-align-lastauto로 재설정한다.

값은 다음 의미를 가진다:

start
인라인 수준 콘텐츠는 줄 박스의 start 가장자리에 정렬된다.
end
인라인 수준 콘텐츠는 줄 박스의 end 가장자리에 정렬된다.
left
인라인 수준 콘텐츠는 줄 박스의 line-left 가장자리에 정렬된다. (세로 쓰기 모드에서는, writing-mode에 따라 이는 물리적 위쪽 또는 아래쪽 중 하나일 수 있다.) [CSS-WRITING-MODES-4]
right
인라인 수준 콘텐츠는 줄 박스의 line-right 가장자리에 정렬된다. (세로 쓰기 모드에서는, writing-mode에 따라 이는 물리적 위쪽 또는 아래쪽 중 하나일 수 있다.) [CSS-WRITING-MODES-4]
center
인라인 수준 콘텐츠는 줄 박스 안에서 가운데 정렬된다.
<string>
문자열은 단일 문자여야 한다; 그렇지 않으면 선언은 유효하지 않으며 무시되어야 한다. 표 셀에 적용될 때, 셀의 내용이 그 주변으로 정렬될 정렬 문자를 지정한다. 자세한 내용과 이 값이 키워드와 어떻게 결합되는지는 아래를 참조하라.
justify
줄 박스를 정확히 채우기 위해 text-justify 속성이 지정한 방식에 따라 텍스트가 양쪽 맞춤된다. text-align-last에 의해 달리 지정되지 않는 한, 강제 줄 나누기 앞의 마지막 줄은 start 정렬된다.
justify-all
text-align-alltext-align-last를 모두 justify로 설정하여, 마지막 줄도 양쪽 맞춤하도록 강제한다.
match-parent
이 값은 inherit와 동일하게 동작하지만 (부모의 계산값으로 계산됨), start 또는 end상속값은 부모의 direction 값에 대해 해석되어, left 또는 right 중 하나의 계산값이 된다. 루트 요소에 지정되면 start로 계산된다.

text-align 단축 속성에 지정되면, text-align-alltext-align-last를 모두 match-parent로 설정한다.

텍스트 블록은 줄 박스의 스택이다. 이 속성은 각 줄 박스 안의 인라인 수준 박스가 줄 박스의 시작쪽과 끝쪽에 대해 어떻게 정렬되는지를 지정한다. 정렬은 viewport 또는 포함 블록에 대한 것이 아니다.

justify의 경우, UA는 텍스트를 조정하여 어떤 인라인 박스든 늘리거나 줄일 수 있다. (text-justify 참조.) 요소의 공백병합 가능하지 않다면, UA는 양쪽 맞춤을 위해 그 텍스트를 조정할 필요가 없으며, 대신 그 텍스트에 양쪽 맞춤 기회가 없는 것으로 처리할 수 있다. UA가 텍스트를 조정하기로 선택한 경우, 공백 처리 규칙이 요구하는 대로 탭 정지점이 계속 맞춰지도록 보장해야 한다.

(양쪽 맞춤이 있다면 그 이후에) 줄 박스의 인라인 내용이 그 안에 맞기에는 너무 길다면, 내용은 start 정렬된다: 맞지 않는 모든 콘텐츠는 줄 박스의 end 가장자리로 오버플로된다.

줄 박스의 startend 가장자리를 결정하는 방법에 대한 자세한 내용은 § 9.3 양방향성과 줄 박스를 참조하라.

7.2. 표 열에서의 문자 기반 정렬

열 안의 여러 셀이 정렬 문자를 지정한 경우, 그 열의 각 해당 셀의 정렬 문자는 단일 열-평행 축을 따라 가운데에 맞춰지고 열 안의 나머지 텍스트는 그에 따라 이동된다. (문자열이 각 셀마다 같을 필요는 없지만, 보통은 같다는 점에 유의하라.)

이것은 정렬 문자의 중심들이 정렬되어야 한다는 뜻인가? 그것이 말하는 바가 명확하지 않지만, 서로 다른 정렬 문자 발생이 서로 다른 글꼴 안에 있을 때 무슨 일이 일어나는지를 설명하려면, 그것(또는 다른 동작)이 명시되어야 한다. (더 나아가, 이것이 의도된 동작인가? 아마 고려해야 할 가장 중요한 사용 사례는 굵은 텍스트와 보통 텍스트의 차이이며, 이는 폭이 조금만 다르다.) [피드백] [2016-02-02 10:00 AM 대면 회의 의사록]

다음 스타일시트:

TD { text-align: "." center }

는 다음 HTML 표의 달러 금액 열을:

<TABLE>
<COL width="40">
<TR> <TH>Long distance calls
<TR> <TD> $1.30
<TR> <TD> $2.50
<TR> <TD> $10.80
<TR> <TD> $111.01
<TR> <TD> $85.
<TR> <TD> N/A
<TR> <TD> $.05
<TR> <TD> $.06
</TABLE>

소수점을 따라 정렬하게 한다. 표는 다음과 같이 렌더링될 수 있다:

+---------------------+
| Long distance calls |
+---------------------+
|         $1.30       |
|         $2.50       |
|        $10.80       |
|       $111.01       |
|        $85.         |
|        N/A          |
|          $.05       |
|          $.06       |
+---------------------+

키워드 값은 <string> 값과 함께 지정될 수 있으며; 주어지지 않으면 기본값은 right이다. 이 값은 다음 경우에 사용된다:

참고: 문자 기반 정렬에서는 기본적으로 오른쪽 정렬이 사용된다. 숫자 체계는 오른쪽에서 왼쪽으로 쓰는 문자 체계에서도 거의 모두 왼쪽에서 오른쪽으로 쓰이며, 문자 기반 정렬의 주요 사용 사례가 숫자 정렬이기 때문이다.

정렬 문자가 텍스트에 둘 이상 나타나면, 첫 번째 인스턴스가 정렬에 사용된다. 정렬 문자가 셀 안에 전혀 나타나지 않으면, 문자열은 정렬 문자가 내용의 끝에 삽입된 것처럼 정렬된다.

이는 정렬 문자를 찾기 위해 검색되는 텍스트가 무엇인지 명시해야 한다. 셀을 containing block으로 가지는 in-flow 텍스트만인가? 아니면 셀이 형성한 block formatting context 안의 모든 in-flow descendant 안의 텍스트도 고려되는가? 그렇다면 그것은 그 text-align 속성이 셀의 것과 일관되는 동안에만 고려되는가? (정렬 문자에서 일관되는가, 아니면 완전히 일관되는가?)

정렬 문자가 셀 내용의 끝에 삽입된 것처럼 정렬하는 이 동작은, 문자 중심 정렬과 결합될 때, 열의 어느 줄에도 정렬 문자가 없거나, 더 중요하게는 어떤 줄에는 정렬 문자가 있지만 열이 max-content 너비로 배치되지 않은 경우, <string> 텍스트 정렬이 적용된 줄의 end 쪽에 빈틈을 만들 것이다. 이는 아마 바람직하지 않다.

정렬 문자가 내용의 끝에 삽입될 때, 어떤 글꼴이 사용되는가? (특히 정렬 문자가 descendant block 안에 있을 수 있다면, 그 블록의 글꼴인가, 아니면 표 셀의 글꼴인가? 또는 삽입이 인라인 안의 강제 나누기 위치라면, 인라인의 글꼴을 사용하는가, 아니면 블록이나 셀의 글꼴을 사용하는가?)

문자 기반 정렬은 표 셀 너비 계산 이전에 발생하므로, auto 너비 계산은 정렬을 위한 충분한 공간을 남길 수 있다. 열에 걸치는 셀이 너비 계산 이전 또는 이후에 정렬에 참여하는지는 정의되지 않는다. 셀 내용에 대한 너비 제약이 열 전체의 완전한 정렬을 방해한다면, 결과 정렬은 정의되지 않는다.

이는 문자 정렬이 (표 열 및 표 열 안에 있을 수 있는 모든 콘텐츠의) min-content 및 max-content 내재 너비에 어떻게 영향을 주는지에 대한 형식적 정의를 가져야 한다. Max-content 내재 너비는 세 숫자로 나뉘어야 한다(정렬 문자의 중심이 정렬된다고 가정): 하나는 정렬 문자가 없는 너비, 하나는 정렬 문자 중심의 inline-start 쪽 너비, 하나는 정렬 문자 중심의 inline-end 쪽 너비이다. 이는 max-content 너비에 대해 강제 나누기 사이의 모든 텍스트 세그먼트를 기반으로 작동한다. Min-content 너비의 경우, 그 안에 선택적 나누기가 있는 강제 나누기 사이의 텍스트 세그먼트는 명확히 정렬 문자가 없는 너비에만 기여해야 한다. 그러나 모든 min-content 너비가 이런 방식으로 작동해야 하는지, 아니면 선택적 나누기가 없는 강제 나누기 사이의 세그먼트 (그리고 아마 실제로 정렬 문자를 포함하는 세그먼트만)가 대신 정렬 문자 start 쪽 및 end 쪽 min-content 너비에 기여해야 하는지는 덜 명확하다; 이 선택은 표의 min-content 크기 산정이 가장 좁은 합리적 크기를 의미하는 것과 더 많은 경우에 정렬 문자를 존중하는 것 사이의 절충이다. 또 다른 옵션은 선택적 나누기의 줄 나누기가 허용되는지 여부를 어떤 동작을 사용할지에 대한 제어로 삼는 것일 수 있다.

<string> 값을 가진 열에 걸치는 셀의 text-align에 대한 내재 너비 기여를 형식적으로 정의하는 것은 열에 걸치지 않는 셀의 내재 너비 기여에 대해 내려진 결정을 복잡하지만(비록 직접적이지만) 확장하는 것이며; 이것도 형식적으로 정의되어야 한다. 기여는 결국 (정렬에 사용되는) start 쪽 또는 end 쪽 열의 분할된 내재 너비에, 그리고 다른 span된 열의 정렬 문자 없는 내재 너비에 이루어진다.

7.3. 기본 텍스트 정렬: text-align-all 속성

이름: text-align-all
값: start | end | left | right | center | <string> | justify | match-parent
초기값: start
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: n/a
계산값: match-parent는 위에서 정의한 대로 계산되는 것을 제외하고, 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

text-align 단축 속성의 이 longhand는 text-align-last의 non-auto 값에 의해 재정의되는 마지막 줄을 제외하고, 블록 컨테이너 안의 인라인 콘텐츠의 모든 줄에 대한 인라인 정렬을 지정한다. 값에 대한 전체 설명은 text-align을 참조하라.

작성자는 이 속성 대신 text-align 단축 속성을 사용해야 한다.

7.4. 마지막 줄 정렬: text-align-last 속성

이름: text-align-last
값: auto | start | end | left | right | center | justify | match-parent
초기값: auto
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: n/a
계산값: match-parent는 위에서 정의한 대로 계산되는 것을 제외하고, 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 블록의 마지막 줄 또는 강제 줄 나누기 바로 앞의 줄이 어떻게 정렬되는지를 설명한다.

auto가 지정되면, 영향을 받는 줄의 콘텐츠는 text-align-all에 따라 정렬된다. 단, text-align-alljustify로 설정된 경우에는, start 정렬된다. 다른 모든 값은 text-align에서 설명한 대로 해석된다.

7.5. 양쪽 맞춤 방식: text-justify 속성

이름: text-justify
값: [ auto | none | inter-word | inter-character | ruby ] || no-compress
초기값: auto
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: (레거시 값 distribute 제외) 지정된 키워드
정규 순서: n/a
애니메이션 유형: discrete

이 속성은 줄의 정렬이 justify로 설정될 때 사용되는 양쪽 맞춤 방식을 선택한다 (text-align 참조). 이 속성은 텍스트에 적용되지만, 블록 컨테이너에서 그 인라인 수준 콘텐츠를 포함하는 루트 인라인 박스로 상속된다. 이는 다음 값을 가진다:

auto
UA는 성능과 충분한 표시 품질 사이의 균형에 기반하여 따를 양쪽 맞춤 알고리즘을 결정한다. 양쪽 맞춤 규칙은 writing system언어에 따라 다르므로, UA는 가능하면 텍스트에 적합한 양쪽 맞춤 알고리즘을 사용해야 한다.
예를 들어, UA는 기본적으로 모든 writing system을 위한 단순한 보편적 절충안인 양쪽 맞춤 방식을 사용할 수 있다—​예를 들어 주로 단어 구분자와 CJK 조판 글자 단위 사이를 확장하고, 보조적으로는 동남아시아 조판 글자 단위 사이를 확장하는 방식이다. 그러고 나서, 단락의 콘텐츠 언어가 알려진 경우에는, 더 언어 맞춤형 양쪽 맞춤 동작을 선택할 수 있다. 예를 들어 일본어에는 Requirements for Japanese Text Layout를 따르고 [JLREQ], 아랍어에는 필기체 확장을 사용하고, 독일어에는 inter-word를 사용하는 식이다.

압축형과 장식형 형태의 조합으로 인해
				          두 줄의 서예적 아랍어가 함께 끝난다.

Tasmeem이 렌더링한, 필기체 방식으로 양쪽 맞춤된 아랍어 텍스트의 예. 영어처럼, 아랍어도 단어 사이 간격을 조정하여 양쪽 맞춤할 수 있지만, 대부분의 스타일에서는 글자 형태 자체를 서예적으로 늘리거나 압축하여 양쪽 맞춤할 수도 있다. 이 예에서, 위쪽 텍스트는 길어진(kashida) 형태와 장식형 형태를 사용하여 줄을 채우도록 확장되고, 아래쪽 줄은 ت와 م 사이의 문자에 대해 쌓인 조합을 사용하여 약간 압축된다. 전통적인 서예 기법을 사용함으로써, 조판자는 흐름과 색을 보존하면서 줄을 양쪽 맞춤할 수 있으며, 매우 높은 품질의 양쪽 맞춤 효과를 제공할 수 있다. 그러나 이는 본질적으로 문자 체계별 효과이다.
추가 공간이 공백과 CJK 및 태국 문자 사이에 부분적으로 분배된다.
text-justify: auto가 적용된 혼합 문자 체계 텍스트: 이 해석은 보편적 절충 양쪽 맞춤 방식을 사용하여, 공백뿐 아니라 CJK와 동남아시아 문자 사이도 확장한다. 이는 단어 구분자 및/또는 CJK 문자가 있는 줄에는 사실상 inter-word + inter-ideograph 간격을 사용하고, 그렇지 않은 줄이나 공백이 너무 많이 늘어나는 줄에는 inter-cluster 동작으로 되돌아간다.
none
양쪽 맞춤은 비활성화된다: 텍스트 안에 양쪽 맞춤 기회가 없다.
추가 공간이 삽입되지 않는다.
text-justify: none이 적용된 혼합 문자 체계 텍스트

참고: 이 값은 가독성 향상이나 접근성 목적을 위해 사용자 스타일시트에서 사용하는 것을 의도한다.

inter-word
양쪽 맞춤은 단어 구분자에서만 간격을 조정한다 (사실상 줄의 used word-spacing을 변화시킴). 이 동작은 영어나 한국어처럼 공백을 사용하여 단어를 구분하는 언어에서 일반적이다.
추가 공간이 주로 공백에 균등하게 분배된다.
text-justify: inter-word가 적용된 혼합 문자 체계 텍스트
inter-character
양쪽 맞춤은 인접한 조판 문자 단위의 각 쌍 사이에서 간격을 조정한다 (사실상 줄의 used letter-spacing을 변화시킴). 이 값은 일본어 같은 동아시아 체계에서 때때로 사용된다.
추가 공간이
				          모든 writing system의 공백과 글자 사이 지점에 균등하게 분배된다.
text-justify: inter-character가 적용된 혼합 문자 체계 텍스트

레거시 이유로, UA는 대체 키워드 distribute도 지원해야 하며, 이는 inter-character로 계산되어야 하고, 따라서 정확히 동일한 의미와 동작을 가진다. UA는 이를 레거시 값 별칭으로 처리할 수 있다.

ruby
양쪽 맞춤은 auto와 같이 간격을 조정하되, 다음은 예외이다:

참고: 이 값은 ruby 주석에서 사용되어, 합리적인 기본 정렬을 제공하기 위한 것이다. [CSS-RUBY-1]을 참조하라.

no-compress
양쪽 맞춤은 text-spacing-trim 또는 text-autospace가 제어하는 간격을 압축해서는 안 된다. (이 값이 지정되지 않은 경우, 양쪽 맞춤 과정은 그 간격이 줄의 시작이나 끝에 있는 경우를 제외하고 그러한 간격을 줄일 수 있다.)

참고: 압축 규칙의 예는 일본어의 경우 [JLREQ]의 3.8 Line Adjustment에 제시되어 있다.

이 키워드는 이전에 text-spacing의 일부였다; 이제 여기에 있으므로 더 구체적으로 이름을 바꿀 필요가 있을 수 있다. 예컨대 U+0020도 압축될 수 없다는 뜻으로 보이기 때문이다. [Issue #7079]

최적의 양쪽 맞춤은 언어에 민감하므로, 작성자는 최상의 결과를 위해 자신의 콘텐츠에 올바른 언어 태그를 지정해야 한다.

참고: 이 CSS 레벨의 지침은 완전한 양쪽 맞춤 알고리즘을 설명하지 않는다. 이는 완전한 알고리즘이 충족해야 하는 최소 요구사항 집합일 뿐이다. 요구사항 집합을 제한하면 UA가 자신의 필요와 품질, 속도, 복잡도 사이의 원하는 균형을 충족하는 양쪽 맞춤 알고리즘을 선택할 여지를 갖게 된다.

7.5.1. 텍스트 확장과 압축

텍스트를 양쪽 맞춤할 때, 사용자 에이전트는 줄 콘텐츠의 끝과 그 줄 박스의 가장자리 사이에 남은 공간을 가져와, 그 공간을 콘텐츠 전체에 분배하여 콘텐츠가 줄 박스를 정확히 채우도록 한다. 사용자 에이전트는 대안적으로 음의 공간을 분배하여, 정상 간격 조건에서라면 맞지 않을 더 많은 콘텐츠를 줄에 넣을 수도 있다.

양쪽 맞춤 기회는 양쪽 맞춤 알고리즘이 텍스트 내 간격을 변경할 수 있는 지점이다. 양쪽 맞춤 기회는 (단어 구분자 같은) 단일 조판 문자 단위에 의해 제공될 수도 있고, 두 조판 문자 단위의 병치에 의해 제공될 수도 있다. 소프트 줄바꿈 기회에 대한 제어와 마찬가지로, 조판 문자 단위양쪽 맞춤 기회를 제공하는지 여부는 그 부모의 text-justify 값에 의해 제어된다; 마찬가지로, 두 연속된 조판 문자 단위 사이에 양쪽 맞춤 기회가 존재하는지 여부는 그들의 가장 가까운 공통 조상의 text-justify 값에 의해 결정된다.

양쪽 맞춤에 의해 분배되는 공간은 letter-spacing 또는 word-spacing 속성이 정의하는 간격에 추가되는 것이다. 그러한 추가 공간이 단어 구분자 양쪽 맞춤 기회에 분배될 때, 이는 word-spacing에 대한 것과 동일한 규칙에 따라 적용된다. 마찬가지로, 공간이 두 조판 문자 단위 사이의 양쪽 맞춤 기회에 분배될 때, letter-spacing에 대한 것과 동일한 규칙에 따라 적용되어야 한다.

양쪽 맞춤 알고리즘은 양쪽 맞춤 기회를 서로 다른 우선순위 수준으로 나눌 수 있다. 주어진 수준 안의 모든 양쪽 맞춤 기회는 어떤 조판 문자 단위가 그 기회를 만들었는지와 관계없이 같은 우선순위로 확장되거나 압축된다. 예를 들어, 두 한자 사이의 양쪽 맞춤 기회와 두 라틴 글자 사이의 양쪽 맞춤 기회가 같은 수준으로 정의되어 있다면 (inter-character 양쪽 맞춤 스타일에서 그러하듯), 그들은 서로 다른 조판 문자 단위에서 비롯되었다는 이유로 다르게 취급되지 않는다. 이 레벨에서는 줄 안에서 양쪽 맞춤 기회에 공간을 분배할 때 다른 요소들 (예: 글꼴 크기, letter-spacing, 글리프 모양, 줄 안의 위치 등)이 영향을 줄 수 있는지 또는 어떻게 영향을 주는지는 정의되지 않는다.

UA는 어떤 방식에서든 텍스트 양쪽 맞춤을 돕기 위해 선택적 합자를 활성화하거나 깨거나, 대체 글리프 또는 글리프 압축 같은 다른 글꼴 기능을 사용할 수 있다. 이 동작은 이 CSS 레벨에서 제어되지 않는다. 그러나 UA는 필수 합자를 깨거나, 복잡한 문자 체계를 올바르게 셰이핑하는 데 필요한 기능을 비활성화해서는 안 된다.

줄 안에 양쪽 맞춤 기회가 존재하고, 텍스트 정렬이 그 줄에 대해 완전한 양쪽 맞춤 (justify)을 지정한다면, 그 줄은 양쪽 맞춤되어야 한다.

7.5.2. 기호와 문장부호 처리

양쪽 맞춤 기회를 결정할 때, Unicode Symbols (S*) 및 Punctuation (P*) 클래스의 조판 문자 단위는 일반적으로 같은 스크립트의 조판 글자 단위와 동일하게 취급된다 (또는, 문자의 script 속성이 Common이라면, 지배적 스크립트의 조판 글자 단위로 취급된다).

그러나 조판 전통상 기호와 문장부호의 양쪽 맞춤을 제어하는 추가 규칙이 있을 수 있다. 따라서 UA는 기호 및 문장부호와 관련된 양쪽 맞춤 기회를 처리하기 위해 특정 문자를 재할당하거나 추가적인 우선순위 수준을 도입할 수 있다.

예를 들어, 전통적으로 연속된 U+2014 — EM DASH, U+2015 ― HORIZONTAL BAR, U+2026 … HORIZONTAL ELLIPSIS, 또는 U+2025 ‥ TWO DOT LEADER 문자 사이에는 양쪽 맞춤 기회가 없다 [JLREQ]; 따라서 UA는 이 문자들을 “never” 우선순위 수준에 할당할 수 있다. 또 다른 예로, 일부 전각 문장부호 문자 (예: U+301A 〚 LEFT WHITE SQUARE BRACKET)는 일본어에서 양쪽 맞춤 기회를 포함하는 것으로 간주된다. 따라서 UA는 이 문자들을 표의문자 사이의 기회보다 더 높은 우선순위 수준에 할당할 수 있다.

7.5.3. 확장할 수 없는 텍스트

줄의 인라인 내용을 줄 박스의 전체 너비까지 늘릴 수 없다면, 그 내용은 text-align-last 속성이 지정한 대로 정렬되어야 한다. (text-align-lastjustify이면, center와 같이 정렬되어야 한다.)

7.5.4. 필기체 문자 체계

양쪽 맞춤은 아랍어와 같은 필기체 문자 체계의 결합된 조판 글자 단위 사이에 간격을 도입해서는 안 된다. 가능하다면, UA는 그러한 조판 글자 단위의 run 내부의 양쪽 맞춤 기회에 분배된 공간을 그 run을 위한 어떤 형태의 필기체 확장으로 변환할 수 있다. 그렇지 않으면 필기체 문자 체계 안의 조판 글자 단위 쌍 사이에는 (그들이 결합하는지 여부와 관계없이) 양쪽 맞춤 기회가 존재하지 않는다고 가정해야 한다.

다음은 허용되지 않는 양쪽 맞춤의 예이다:
모든 아랍어 글자 쌍 사이에 간격 추가
결합되지 않은 모든 아랍어 글자 쌍 사이에 간격 추가

일부 글꼴 디자인은 양쪽 맞춤을 위해 tatweel 문자를 사용할 수 있도록 한다. tatweel 기반 양쪽 맞춤을 수행하는 UA는 그 사용 규칙을 올바르게 처리해야 한다. tatweel 문자의 올바른 삽입은 문맥, 관련된 글자 조합, 단어 안의 위치, 그리고 줄 안에서 단어의 위치에 따라 달라진다는 점에 유의하라.

7.5.5. auto 양쪽 맞춤을 위한 최소 요구사항

auto 양쪽 맞춤에 대해, 이 명세는 모든 양쪽 맞춤 기회가 무엇인지, 그것들이 어떻게 우선순위화되는지, 또는 여러 수준의 양쪽 맞춤 기회가 언제 어떻게 상호작용하는지를 정의하지 않는다. 그러나 다음을 요구한다:

텍스트 양쪽 맞춤에 대한 추가 정보는 writing system 및 언어별로 색인화되어 있고 W3C 국제화 작업 그룹이 관리하는 “Approaches to Full Justification”에서 찾을 수 있다(또는 제출할 수 있다). [JUSTIFY]

7.6. 컨테이너 안에서 텍스트 블록 정렬: text-group-align 속성

이름: text-group-align
값: none | start | end | left | right | center
초기값: none
적용 대상: 블록 컨테이너
상속 여부: no
백분율: N/A
계산값: 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 텍스트 정렬을 유지하면서 줄 박스의 내용을 그룹으로 정렬한다.

그룹 정렬은 남은 공간이 가장 짧은 줄 박스를 찾고, 그 공간만큼을 줄 박스의 한쪽 또는 양쪽에 padding으로 추가하여 그 내용에 사용할 수 있는 공간의 양을 줄인 다음; 텍스트 정렬을 남은 공간 안에서 그 내용에 적용함으로써 수행된다. 같은 block formatting context 안의 모든 descendant in-flow 줄 박스는 가장 짧은 남은 공간을 찾을 때와 padding을 추가할 때 모두 고려된다; 독립 서식 맥락을 형성하는 descendant의 내용은 건너뛴다.

이 속성의 변형은 상속되며, 각 블록 컨테이너에 개별적으로 적용되고, 그 블록의 직접 자식인 줄 박스에만 영향을 준다. 이는 덜 유용하지만, 아마 구현하기는 더 쉬울 것이다.

같은 블록 컨테이너에서 비롯된 float도 같은 양만큼 어떻게든 함께 이동시키면 더 보기 좋게 맞춰질 것이며, 이는 특히 CJK 레이아웃에서 가치가 있을 것이다. 그것이 정확히 어떻게 동작하는지, 그리고 조상 요소에서 침범해 오는 float와 어떻게 상호작용하는지는 독자에게 연습 문제로 남긴다.

값은 다음 의미를 가진다:

none
텍스트 정렬은 정상적으로 일어난다: 그룹 정렬은 수행되지 않는다.
start
인라인 수준 콘텐츠는 각 줄 박스의 inline end 쪽에 padding을 넣음으로써, 그룹 정렬되어 inline start 쪽에 맞춰진다.
end
인라인 수준 콘텐츠는 각 줄 박스의 inline start 쪽에 padding을 넣음으로써, 그룹 정렬되어 inline end 쪽에 맞춰진다.
left
인라인 수준 콘텐츠는 각 줄 박스의 line-right 쪽에 padding을 넣음으로써, 그룹 정렬되어 line-left 쪽에 맞춰진다.
right
인라인 수준 콘텐츠는 각 줄 박스의 line-left 쪽에 padding을 넣음으로써, 그룹 정렬되어 line-right 쪽에 맞춰진다.
center
인라인 수준 콘텐츠는 각 줄 박스의 양쪽에 padding을 넣고, 간격을 양쪽에 절반씩 배분함으로써, 가운데에 그룹 정렬된다.

8. 간격

CSS는 word-spacing, letter-spacing, 및 line-padding 속성을 통해 일반 텍스트 간격을 제어할 수 있게 하며, 이들은 각각 단어 구분자 주변, 조판 문자 단위 사이, 또는 줄의 시작/끝에 추가 공간을 지정한다. 또한 text-spacing-trim 속성을 통해 문맥적 간격 제어를 제공하며, 이는 CJK 문장부호의 문맥적 전각/반각 설정을 허용한다; 그리고 text-autospace 속성은 문자 체계가 바뀌는 지점이나 문장부호 주변에 추가 공간을 자동 삽입할 수 있게 한다.

8.1. 단어 간격: word-spacing 속성

이름: word-spacing
값: normal | <length-percentage>
초기값: normal
적용 대상: 텍스트
상속 여부: yes
백분율: used font-size에 상대적
계산값: 절대 길이 및/또는 백분율
정규 순서: n/a
애니메이션 유형: 계산값 유형에 따름

이 속성은 “단어” 사이의 추가 간격을 지정한다. 값은 아래 정의된 대로 해석된다:

normal
추가 간격이 적용되지 않는다. 0으로 계산된다.
<length-percentage>
글꼴이 정의한 고유 단어 간 간격에 추가되는 여분의 간격을 지정한다.

참고: 백분율은 그대로 상속되며, 현재 요소의 used font-size에 대해 해석된다 (따라서 적용되는 텍스트의 크기에 상대적인 크기를 나타낸다). 이는 절대 길이로서, 상속된 요소의 계산된 font-size에 대해 해석되는 em 단위와 다르다.

추가 간격은 공백 처리 규칙이 적용된 뒤 텍스트에 남아 있는 각 단어 구분자에 적용되며, 조판 전통이 달리 지시하지 않는 한 문자 양쪽에 절반씩 적용되어야 한다. 값은 음수일 수 있지만, 구현에 따라 제한이 있을 수 있다.

단어 구분자 문자는 주된 목적과 일반적 사용이 단어를 구분하는 것인 조판 문자 단위이다. Unicode에서는 (완전한 정의는 아니지만) space (U+0020), no-break space (U+00A0), Ethiopic word space (U+1361), Aegean word separators (U+10100,U+10101), Ugaritic word divider (U+1039F), 및 Phoenician word separator (U+1091F)를 포함한다. [UNICODE]

참고: 일반적인 문장부호나 고정폭 공백(예: U+3000 및 U+2000부터 U+200A까지)은 단어 구분자 문자로 간주되지 않는다. 이들은 단어를 구분하는 일이 자주 있더라도, 그 주된 목적이 단어를 구분하는 것이 아니기 때문이다.

단어 구분자 문자가 없거나, 단어를 구분하는 문자가 advance width가 0인 경우 (예: U+200B ZERO WIDTH SPACE), 사용자 에이전트는 단어 사이에 추가 간격을 만들지 말아야 한다.

8.2. 자간 조정: letter-spacing 속성

이름: letter-spacing
값: normal | <length-percentage>
초기값: normal
적용 대상: 인라인 박스 및 텍스트
상속 여부: yes
백분율: used font-size에 상대적
계산값: 절대 길이 및/또는 백분율
정규 순서: n/a
애니메이션 유형: 계산값 유형에 따름

이 속성은 인접한 조판 문자 단위 사이의 추가 간격 (일반적으로 tracking이라고 함)을 지정한다. Letter-spacing은 bidi 재정렬 이후에 적용되며, kerningword-spacing에 추가된다. [CSS-WRITING-MODES-4] [CSS-FONTS-3] 적용 중인 양쪽 맞춤 규칙에 따라, 사용자 에이전트는 텍스트를 양쪽 맞춤하기 위해 조판 문자 단위 사이의 공간을 더 늘리거나 줄일 수 있다.

값은 다음 의미를 가진다:

normal
추가 간격이 적용되지 않는다. 0으로 계산된다.
<length-percentage>
조판 문자 단위 사이의 추가 간격을 지정한다. 값은 음수일 수 있지만, 구현에 따라 제한이 있을 수 있다.

참고: 백분율은 그대로 상속되며, 현재 요소의 used font-size에 대해 해석된다 (따라서 적용되는 텍스트의 크기에 상대적인 크기를 나타낸다). 이는 절대 길이로서, 상속된 요소의 계산된 font-size에 대해 해석되는 em 단위와 다르다.

레거시 이유로, 0의 계산된 letter-spacingresolved value (getComputedStyle() 반환값)로 normal을 산출한다.

letter-spacing의 목적상, atomic inline (이미지 및 인라인 블록 등)의 각 연속 run은 하나의 조판 문자 단위로 처리된다.

Letter-spacing은 줄의 시작에 적용되어서는 안 된다. 줄의 끝에 letter-spacing이 적용되는지는 이 레벨에서 정의되지 않는다.

letter-spacing이 줄의 시작이나 끝에 적용되지 않을 때, 텍스트는 항상 블록의 가장자리에 딱 맞는다.
p { letter-spacing: 1em; }
<p>abc</p>

a b c

a b c

따라서 UA는 줄의 오른쪽 또는 후행 가장자리에 letter spacing을 정말로 추가해서는 안 된다 [RFC6919]:

a b c 

조판 문자 단위 사이의 letter spacing은 사실상 두 조판 문자 단위를 포함하는 가장 안쪽 요소에 “속한다”: (bidi 재정렬 이후) 인접한 두 조판 문자 단위 사이의 총 letter spacing은 두 조판 문자 단위 사이의 경계를 포함하는 가장 안쪽 요소에 의해 지정되고 그 안에서 렌더링된다. 그러나 UA는 대신 요소 경계의 letter-spacing을 그 포함 요소에 관련된 letter-spacing 값을 사용하여 어느 한쪽 조판 문자 단위에 붙일 수 있다.

참고: 이 보조 동작은 Web 호환성 문제로 인해 이 레벨에서 허용된다.

인라인 박스는 그 요소 안에 완전히 포함된 문자 사이의 letter spacing만 포함할 것으로 기대되며, 따라서 요소의 오른쪽 또는 후행 가장자리의 letter spacing은 제외된다:
p { letter-spacing: 1em; }
<p>a<span>bb</span>c</p>

a b b c

a b b c

그 결과 letter-spacing의 주어진 값은 그것이 지정된 요소 안에 완전히 포함된 문자 사이의 간격에만 영향을 줄 것으로 기대된다:

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<p>a<span>bb</span>c</p>

a b  b c

이는 더 나아가 단일 문자만 포함하는 요소에 letter-spacing을 적용해도 렌더링 결과에는 아무 효과가 없음을 의미한다:

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<p>a<span>b</span>c</p>

a b c

letter spacing은 RTL 재정렬 이후에 삽입되므로, 아래 안쪽 span에 적용된 letter spacing도 마찬가지로 효과가 없다. 재정렬 후에는 "c"가 "א" 옆에 오지 않기 때문이다:

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<!-- abc followed by Hebrew letters alef (א), bet (ב) and gimel (ג) -->
<!-- Reordering will display these in reverse order. -->
<p>ab<span></span>בג</p>

a b c א ב ג

Letter spacing은 보이지 않는 zero-width 서식 문자 (예: Unicode Cf 범주의 문자)를 무시한다. 간격은 그러한 문자가 문서에 존재하지 않는 것처럼 추가되어야 한다.

예를 들어, A&#x200B;B에 적용된 letter-spacing은, 어떤 요소 경계가 어디에 있든 관계없이 AB와 동일하다.

두 문자 사이의 유효 간격이 0이 아닌 경우 (양쪽 맞춤 또는 letter-spacing의 non-zero 값 때문), 사용자 에이전트는 선택적 합자, 즉 근본적으로 올바른 글리프 셰이핑을 위해 필수라고 정의되지 않은 합자를 적용하지 않는 것이 좋다. 그러나 저수준 font-feature-settings 속성을 통해 지정된 합자 및 기타 글꼴 기능은 이 규칙보다 우선한다. CSS Fonts Module Level 3 § feature-precedence를 참조하라.

예를 들어, 단어 “filial”에 letter-spacing이 적용된 경우, “fi” 합자는 사용되어서는 안 된다. 이는 텍스트의 균등한 간격을 방해하기 때문이다.
filial vs filial

참고: OpenType에서 필수 합자는 rlig 기능과 관련될 것으로 기대된다. 따라서 다른 모든 합자는 선택적이라고 간주된다. 그러나 어떤 경우에는, UA 또는 플랫폼 휴리스틱이 깨진 글꼴을 처리하기 위해 추가 합자를 적용한다; 이 명세는 그러한 예외적 처리를 정의하거나 재정의하지 않는다.

8.2.1. 필기체 문자 체계

가능하다면, UA는 그러한 글자들의 run에 분배될 총 추가 공간을 그 run의 동등한 총 확장(또는 압축)을 낳는 어떤 형태의 필기체 확장 (또는 음의 tracking 값의 경우 압축)으로 변환함으로써, 필기체 문자 체계에 letter spacing을 적용할 수 있다. 그렇지 않고, UA가 필기체 문자 체계의 텍스트를 필기체 연결을 깨지 않고 확장할 수 없다면, 그 문자 체계의 어떤 조판 글자 단위 쌍 사이에도 간격을 전혀 적용해서는 안 된다 (letter-spacing의 목적상 각 단어를 하나의 조판 글자 단위로 처리하는 효과). 두 경우 모두 그러한 글자 사이의 유효 간격은 0이 된다; 그러나 전자는 텍스트가 늘어나는 느낌을 보존한다.

아래는 아랍어 텍스트의 간격을 벌리는 것에 대한 적절한 예와 부적절한 예이다.
원본 텍스트
BAD 각 글자 사이에 공간을 균등하게 분배. 이것이 필기체 연결을 끊는다는 점에 주목하라!
OK 조판상 적절한 필기체 확장으로 ∑letter-spacing을 분배. 결과 텍스트는 앞의 균등 간격 예와 같은 길이이다.
OK 아랍어 글자 사이의 letter-spacing 억제. 그럼에도 letter-spacing은 비아랍어 문자(예: 공백)에는 적용된다는 점에 주목하라.
BAD 결합되지 않은 글자 사이에만 letter-spacing 적용. 이는 조판 색을 왜곡하고 단어 경계를 흐리게 한다.

참고: 텍스트의 올바른 필기체 확장 또는 압축은 문자 체계, 서체, 언어, 단어 안의 위치, 줄 안의 위치, 구현 복잡도, 글꼴 기능, 및 서예적 선호에 따라 달라질 수 있으며, 특정 경우에는 전혀 가능하지 않을 수도 있다. 이는 짧아지는 합자, 장식형 변형, 문맥형, U+0640 ـ ARABIC TATWEEL 같은 확장 글리프, 또는 기타 미세 조판의 사용을 포함할 수 있다. 이러한 효과에 대한 규칙을 정의하는 것은 CSS의 범위를 벗어난다. 작성자는 상호운용되지 않는 결과를 받아들일 준비가 되어 있지 않다면 필기체 문자 체계에 letter-spacing을 적용하지 말아야 한다.

8.3. 줄 시작/끝 padding: line-padding 속성

이름: line-padding
값: <length>
초기값: 0
적용 대상: 인라인 박스
상속 여부: yes
백분율: N/A
계산값: 절대 길이
정규 순서: 문법에 따름
애니메이션 유형: 계산값 유형에 따름

letter-spacing조판 문자 단위 사이의 간격을 조정하고 줄의 시작이나 끝에는 적용되지 않는 반면, 이 속성은 줄의 시작/끝에서만 간격을 조정한다. 추가 간격은 줄 박스의 시작/끝에 있는 가장 안쪽 인라인 박스에 의해서만 적용되며, 그 인라인 박스의 콘텐츠 가장자리와 인접한 인라인 수준 콘텐츠 (텍스트 또는 atomic inline) 사이에 삽입된다. 이 추가 공간은 양쪽 맞춤 기회가 아니다.

다음 HTML과 CSS가 주어졌을 때:
p    { line-padding: 0.5em; line-height: 1; text-align: center }
span { background: black; color: white; }
em   { background: green; color: white; }

<p><span>Here is <em>some text</em></span>

Line-padding은 각 줄의 양쪽에서 추가 0.5em의 인라인 배경이 보이도록 삽입된다. “some”과 “text” 사이에서 나누기가 발생하도록 렌더링된다면, 추가 padding은: 첫 번째 줄에서는 왼쪽이 검정색, 오른쪽이 초록색이고, 두 번째 줄에서는 양쪽 모두 초록색이 된다.

Here is some
text

8.4. 자동 문맥 간격: text-autospace 속성

이름: text-autospace
값: normal | <autospace> | auto
초기값: normal
적용 대상: 텍스트
상속 여부: yes
백분율: N/A
계산값: 지정된 키워드(들)
정규 순서: 문법에 따름
애니메이션 유형: discrete

문자 클래스 기반 규칙 집합을 사용하여 같은 인라인 서식 맥락 안에서 같은 줄에 있는 인접 문자 사이의 간격을 제어하며, 문자 체계 사이의 간격과 문장부호 주변 간격을 자동으로 제어할 수 있게 한다.

값은 다음과 같이 정의된다:

<autospace> = no-autospace |
              [ ideograph-alpha || ideograph-numeric || punctuation ]
              || [ insert | replace ]
normal
ideograph-alpha ideograph-numeric와 같은 동작.
no-autospace
자동 공백을 삽입하지 않는다.
insert
어떤 종류의 공백 문자(Unicode 일반 범주 Z)도 이미 존재하지 않는 경우, 지정된 간격이 자동으로 삽입된다.

insertreplace도 지정되지 않은 경우, 동작은 insert와 같다.

replace
해당 지점에 이미 공백 (U+0020)이 있더라도, 지정된 간격이 자동으로 삽입된다; 추가로, 그 공백 (U+0020)은 제거된다. 다른 유형의 공백 문자(Unicode 일반 범주 Z)는 insert와 마찬가지로 자동 간격을 억제한다.

참고: 이는 적절한 간격 대신 입력하기 쉬운 U+0020을 사용하는 텍스트를 교정하기 위한 것이다.

ideograph-alpha
표의문자 run과 비표의문자 글자 run 사이에 추가 간격을 만든다. § 8.4.1 문자 체계 간 간격을 참조하라.
ideograph-numeric
표의문자 run과 비표의문자 숫자 run 사이에 추가 간격을 만든다. § 8.4.1 문자 체계 간 간격을 참조하라.
punctuation
언어별 조판 관례가 요구하는 대로 문장부호 주변에 추가적인 줄바꿈 불가능 간격을 만든다.

이 레벨에서는 요소의 콘텐츠 언어가 프랑스어인 경우, 프랑스어 조판 지침이 요구하는 위치에 narrow no-break space (U+202F)와 no-break space (U+00A0)가 삽입된다. 그 밖의 경우 이 값은 효과가 없다. 그러나 향후 명세에서 다른 언어에 대한 자동 간격 동작이 추가될 수 있다.

auto
사용자 에이전트가 조판상 높은 품질의 간격 값 집합을 선택한다. 서로 다른 플랫폼에서 실행되는 서로 다른 사용자 에이전트는 서로 다른 값을 선택할 수 있다.

참고: 이러한 간격 값은 OS 플랫폼 관례와 일치할 수도 있고 일치하지 않을 수도 있다.

이 속성은 word-spacingletter-spacing 속성과 가산적이다. 즉, letter-spacing 설정이 기여하는 간격의 양(있는 경우)은 text-autospace가 만든 간격에 더해진다. word-spacing에도 동일하게 적용된다.

요소 경계에서 문자 사이에 도입되는 추가 간격의 양은 그 경계를 포함하는 가장 안쪽 요소에 의해 결정되고 그 안에서 렌더링된다.

8.4.1. 문자 체계 간 간격

ideograph-alphaideograph-numeric 값은 특정 문자 클래스 사이의 경계에 간격을 도입한다. 이들은 같은 줄에서 직접 인접할 때, 즉 중간에 non-zero margin, border, 또는 padding이 없고 중간 문자(예: 따옴표나 공백)도 없는 경우이다. 이러한 키워드가 도입하는 공간의 양은 CJK advance measure의 1/8, 즉 used valuefont-size가 그 computed value와 같다면 0.125ic이다.

참고: 간격 관례는 다양하지만, 값은 일반적으로 1/4ic부터 1/8ic만큼 작은 값까지의 범위에 있으며, 금속 활자 제한 때문에 역사적 맥락에서는 1/4ic가 더 일반적이고 비례 조판에서는 1/6ic 또는 더 얇은 값이 더 일반적이다. 이러한 공간은 기본적으로 (초기값 normal을 통해) 삽입되므로, CSS는 간섭을 보수적으로 하기 위해 1/8ic를 사용한다. 이 모듈의 향후 레벨에서는 간격의 양에 대한 제어를 도입할 수 있다.

8.5. CJK 문장부호 간격: text-spacing-trim 속성

이름: text-spacing-trim
값: <spacing-trim> | auto
초기값: normal
적용 대상: 텍스트
상속 여부: yes
백분율: N/A
계산값: 지정된 키워드(들)
정규 순서: 문법에 따름
애니메이션 유형: discrete

문자 클래스 기반 규칙 집합을 사용하여 같은 인라인 서식 맥락 안에서 같은 줄에 있는 CJK 문장부호 문자 주변의 간격을 제어하며, 줄 안에서의 위치와 이웃 문자에 기반하여 이들을 반각 또는 전각으로 설정할 수 있게 한다.

값은 다음과 같이 정의된다:

<spacing-trim> = space-all | normal | space-first | trim-start | trim-both | trim-all
space-all
모든 전각 문장부호 문자는 전각 글리프(간격 있음)로 설정된다.
normal
전각 여는 문장부호를 각 줄의 시작에서 전각 글리프(간격 있음)로 설정한다; 전각 닫는 문장부호를 각 줄의 끝에서 양쪽 맞춤 이전에 그렇지 않으면 맞지 않는 경우 반각 글리프(붙임)로 설정하고, 그렇지 않으면 그 문장부호를 전각 글리프로 설정한다; 그리고 아래에 설명된 대로 문장부호 글리프 사이의 간격을 병합한다.
trim-both
전각 여는 문장부호를 각 줄의 시작에서 반각 글리프(붙임)로 설정한다; 전각 닫는 문장부호를 각 줄의 끝에서 반각 글리프(붙임)로 설정한다; 그리고 아래에 설명된 대로 문장부호 글리프 사이의 간격을 병합한다.
space-first
전각 여는 문장부호블록 컨테이너의 첫 줄과 강제 줄 나누기 뒤의 각 줄에서 전각 글리프(간격 있음)로 설정한다. 그 밖에는 normal과 같다.
이 값은 호환성 요구사항 때문에 존재한다.

이 값은 일부 기존 중국어 및 일본어 콘텐츠의 서식 지정을 관리하기 위해 존재한다. 조판상으로는 trim-both가 적절했을 콘텐츠이지만, 해당 콘텐츠는 이미 첫 줄이 space-all처럼 설정될 것을 기대하도록 작성되어 있기 때문이다.

구체적으로, UA 전반에서 신뢰할 수 있는 hanging-punctuation 지원이 부족하기 때문에, 기존 콘텐츠(특히 ePub 콘텐츠)는 text-indent 대신 U+3000 ideographic space를 사용하지만, 단락이 들여쓰기 안에 매달리기를 원하는 문장부호로 시작하는 경우에는 hanging punctuation 효과를 만들기 위해 이를 생략한다. 따라서 첫 줄에 trim-both를 사용하면 그러한 콘텐츠에서 실질적인 들여쓰기를 잘라내어 그 줄이 새 단락의 첫 줄이라는 구분을 흐리게 된다.

이처럼 들여쓰기에 ideographic space를 사용하는 조판 관행은 (항상은 아니지만 때때로) HTML과 CSS가 제공하는 콘텐츠와 스타일의 분리에 반한다는 점에 유의하라. 문서의 텍스트 콘텐츠를 조정하는 대신 hanging-punctuationtext-indent를 사용해 단락 서식을 제어하면 문서 소스에서 텍스트의 실제 의미를 보존하고, 스타일시트 설계자가 콘텐츠를 변경할 필요 없이 다양한 간격/들여쓰기 스타일 사이를 자유롭게 전환할 수 있다. 예시는 § 8.5.3 CSS에서의 일본어 단락 시작 관례를 참조하라.

추가로, 줄 끝에서의 동작은 trim-both가 아니라 normaltrim-start 값과 정렬된다. 즉, 양쪽 맞춤 이전에 그렇지 않으면 맞지 않는 경우에만 글리프를 잘라낸다. 더 적은 경우에 조판을 개선하지만, 이는 space-all의 레거시 동작에 더 가까워 호환성 우려를 줄인다.

trim-start
전각 여는 문장부호를 각 줄의 시작에서 반각 글리프(붙임)로 설정한다. 그 밖에는 normal과 같다.
trim-all
전각 여는 문장부호, 전각 닫는 문장부호, 그리고 전각 가운데점 문장부호를 줄 안의 위치나 인접 문자와 관계없이 반각 글리프로 설정한다.
auto
사용자 에이전트가 조판상 높은 품질의 간격 값 집합을 선택한다. 서로 다른 플랫폼에서 실행되는 서로 다른 사용자 에이전트는 서로 다른 값을 선택할 수 있다.

참고: 이러한 간격 값은 OS 플랫폼 관례와 일치할 수도 있고 일치하지 않을 수도 있다.

auto가 필요한가? 작성자가 첫 줄의 시작에서 플랫폼 의존 동작을 선택하는 것은 이상할 것이며, 그 밖에는 trim-both를 사용해야 한다.

다음은 다양한 값이 수행하는 일을 비공식적으로 요약한 것이다:
줄 시작에서 잘라냄 줄 끝에서 잘라냄 인접 쌍 잘라냄 모든 곳에서 잘라냄
space-all no
normal no 맞지 않는 경우에만 yes no
space-first 첫 줄을 제외하고 yes
trim-start yes
trim-both yes
trim-all yes
auto 사용자 에이전트별 / 플랫폼 의존

8.5.1. 전각 문장부호 병합

일반적으로 전각 문자는 표준 한자 문자(예: 水 U+6C34)와 같은 advance width를 가진 글리프를 갖는다. 그러나 많은 전각 문장부호 글리프는 전각 디자인 공간의 일부만 차지한다. 따라서 이러한 문장부호가 항상 전각으로 설정되는 것은 아니다. text-spacing-trim의 여러 값은 작성자가 이러한 문자를 언제 반각(일반적으로 표의문자의 절반 폭)으로 설정하고 언제 전각으로 설정할지를 제어할 수 있게 한다.

지정된 대로 텍스트를 설정하기 위해, UA는 다음 중 하나를 수행해야 한다

UA는 특정 글리프의 필요한 잘라내기를 수행하기 위해 글꼴이 구현한 경우 OpenType haltvhal 기능을 사용할 수 있다. UA는 hwid 기능을 사용하거나 그 밖의 방식으로 반각 형태를 대체해서는 안 된다. 반각 글리프로 전환하면 글리프 모양이 바뀔 수 있으며, 여기서는 허용되지 않기 때문이다.

일부 글꼴은 전각 문장부호 문자에 비례 글리프를 사용한다. 글꼴에서 전각과 반각 글리프 모양을 구분하는 지원이 없다면 (예: 글꼴 기능을 통해), 그러한 비례 글리프에 대해서는 주어진 advance width가 동시에 전각이자 반각으로 간주된다: UA는 이러한 글리프에 공간을 추가하거나 제거해서는 안 된다.

참고: 표준 한자 문자의 advance width는 반대 writing mode에 대한 OpenType ideoidtp 기준선 같은 글꼴 메트릭에서 결정하거나, 水 U+6C34 같은 한자 문자의 advance width를 취하여 결정할 수 있다. (일부 글꼴은 문자가 정사각형이 아니도록 압축되어 있으므로 반대 writing mode를 사용해야 한다.) OpenType 메트릭에 대한 자세한 내용은 OpenType 명세에서 확인할 수 있다. 水 U+6C34, 卜 U+535C, 一 U+4E00이 모두 같은 advance width를 갖지 않는 경우, 해당 글꼴은 비례 표의문자를 가지고 있으며 전각 advance width를 글리프 측정으로 신뢰성 있게 결정할 수 없음에 유의하라.

일부 글꼴은 빈 공간이 너무 작아 잘라낼(kern) 수 없는 전각 문장부호 문자를 가지고 있다. UA는 글리프 bounding box, 글리프 메트릭, 또는 글꼴 기능을 통해 잘라내기(kerning)가 글리프 잘림, 충돌, 또는 과도한 kerning을 유발할 수 있다고 판단하는 경우 잘라내지(kern) 않기로 선택할 수 있다.

text-spacing-trimtrim-all이면, UA는 그러한 전각 글리프와 일반적으로 연관된 공간을 그것들이 나타나는 문맥과 관계없이 병합해야 한다. 그렇지 않으면, text-spacing-trimspace-all로 설정된 경우 (또는 글꼴이 비례 전각 문장부호 글리프를 가진 경우)가 아니라면, UA는 그러한 전각 글리프와 일반적으로 연관된 공간을 줄에서 인접하게 배치될 때 다음과 같이 병합해야 한다:

다음 예시 표는 인접 쌍 잘라내기의 영향을 받는 문장부호 쌍을 나열한다. 이는 잘라내기 효과를 근사하기 위해 반각 대응 문자를 사용한다.
인접 쌍 문장부호 잘라내기 시연
조합 샘플 쌍 보이는 형태
여는—여는 + (
가운데점—여는 + (
닫는—여는 + (
Ideographic Space—여는  +  (
닫는—닫는 + )
닫는—가운데점 + )
닫는—Ideographic Space +  ) 

8.5.2. 텍스트 간격 문자 클래스

이 속성의 맥락에서는 다음 정의가 적용된다:

클래스와 Unicode 코드 포인트는 검토 중이며, Unicode의 더 최근 추가 사항을 수용하려면 적어도 일부 변경이 필요하다. [Issue #9503]

표의문자
기본 문자가 아래에 나열된 모든 조판 문자 단위 [CSS-TEXT-3]를 포함한다:
  • U+3041부터 U+30FF 범위의 모든 문자. 단, Unicode Punctuation [P*] 일반 범주에 속하는 문자는 제외한다.
  • CJK Strokes (U+31C0부터 U+31EF까지).
  • Katakana Phonetic Extensions (U+31F0부터 U+31FF까지).
  • Han script 속성을 가진 모든 문자.
비표의문자 글자
Unicode Letters [L*] 및 Mark [M*] 일반 범주에 속하는 모든 조판 문자 단위를 포함한다. 단, 다음 조건 중 하나를 충족하는 경우는 제외한다:
비표의문자 숫자
Unicode Decimal Digit Number [Nd] 일반 범주에 속하는 모든 조판 문자 단위를 포함한다. 단, 다음 조건 중 하나를 충족하는 경우는 제외한다:
전각 여는 문장부호
CJK Symbols and Punctuation 블록(U+3000–U+303F)에 속하거나 [UAX11]에 의해 East Asian Fullwidth (F)로 분류되는 모든 여는 문장부호 문자(Unicode category Ps)를 포함한다. LEFT SINGLE QUOTATION MARK (U+2018) 및 LEFT DOUBLE QUOTATION MARK (U+201C)도 포함한다. 잘라낼 때, 왼쪽(가로 텍스트의 경우) 또는 위쪽(세로 텍스트의 경우) 절반이 kern된다.
전각 닫는 문장부호
CJK Symbols and Punctuation 블록(U+3000–U+303F)에 속하거나 [UAX11]에 의해 East Asian Fullwidth (F)로 분류되는 모든 닫는 문장부호 문자(Unicode category Pe)를 포함한다. RIGHT SINGLE QUOTATION MARK (U+2019) 및 RIGHT DOUBLE QUOTATION MARK (U+201D)도 포함한다. 전각 콜론 문장부호 및/또는 전각 점 문장부호도 포함할 수 있다 (아래 참조). 잘라낼 때, 오른쪽(가로 텍스트의 경우) 또는 아래쪽(세로 텍스트의 경우) 절반이 kern된다.
전각 가운데점 문장부호
MIDDLE DOT (U+00B7), HYPHENATION POINT (U+2027), 및 KATAKANA MIDDLE DOT (U+30FB)을 포함한다. 전각 콜론 문장부호 및/또는 전각 점 문장부호도 포함할 수 있다 (아래 참조).
전각 콜론 문장부호
FULLWIDTH COLON (U+FF1A) 및 FULLWIDTH SEMICOLON (U+FF1B)을 포함한다.
전각 점 문장부호
다음을 포함한다: IDEOGRAPHIC COMMA (U+3001), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH COMMA (U+FF0C), FULLWIDTH FULL STOP (U+FF0E).

전각 콜론 문장부호전각 점 문장부호전각 닫는 문장부호로 간주할지, 아니면 전각 가운데점 문장부호로 간주할지는 문장부호가 글리프 박스 안의 어디에 그려지는지에 달려 있다. 문장부호가 가운데에 있으면, 가운데점 문장부호로 간주해야 한다. 문장부호가 한쪽(가로 텍스트에서는 왼쪽, 세로 텍스트에서는 위쪽)에 그려지고 따라서 다른 절반이 비어 있다면, 그 문장부호는 닫는 문장부호로 간주하고 그에 따라 잘라내야 한다.

UA는 전각 콜론 문장부호전각 점 문장부호를 적절한 대로 전각 닫는 문장부호 범주 또는 전각 가운데점 문장부호 범주 중 하나로 분류해야 한다. UA는 이러한 분류를 결정하기 위해 언어 관례와 writing mode(가로 vs. 세로), 및/또는 글꼴 정보에 의존할 수 있다. UA는 적절한 경우 임의의 범주에 추가 문자를 더할 수도 있다.

다음 정보성 표는 전각 콜론 및 점 문장부호를 분류하는 언어 관례를 요약한다:
콜론 문장부호 점 문장부호
간체 중국어(가로) 닫는 닫는
간체 중국어(세로) 닫는 닫는
번체 중국어 가운데점 가운데점
한국어 가운데점 닫는
일본어 가운데점 닫는

적어도 중국어 글꼴의 경우, 저자는 표준 관례가 종종 따르지 않는다고 관찰한다는 점에 유의하라.

8.5.3. CSS에서의 일본어 단락 시작 관례

일본어에는 여는 괄호 처리 방식으로 구분되는 세 가지 일반적인 시작 가장자리 조판 방식이 있다.
첫 번째 방식은 첫 줄에서는 여는 괄호를 들여쓰기 가장자리에 딱 맞추고,
			          다른 줄에서는 시작 가장자리에 맞춘다.
			          두 번째 방식은 여는 괄호에 전각 폭을 부여하여,
			          들여쓰기 가장자리와 다른 줄의 시작 가장자리에서
			          사실상 반 em만큼 들여쓰기되게 한다.
			          세 번째 방식은 여는 괄호를 줄의
			          시작 가장자리에 맞추지만, 첫 줄에서는 들여쓰기 안에 매달아
			          (여는 괄호로 시작하는 단락에서는 전체 em 대신
			          실질적인 반 em 들여쓰기가 되도록 한다).

줄 머리에서 여는 괄호의 배치 [JLREQ]

p { margin: 1em 0; }이라는 UA 스타일시트를 가정하면, CSS는 다음 규칙으로 일본어 조판 스타일을 구현할 수 있다:

8.6. 문자 클래스 간격 단축 속성: text-spacing 속성

이름: text-spacing
값: none | auto | <spacing-trim> || <autospace>
초기값: 개별 속성 참조
적용 대상: 텍스트
상속 여부: yes
백분율: N/A
계산값: 지정된 키워드(들)
애니메이션 유형: discrete
정규 순서: 문법에 따름

이 속성은 단일 선언에서 text-spacing-trimtext-autospace를 설정하기 위한 단축 속성이다. 값은 다음과 같이 정의된다:

none
모든 text-spacing 기능을 끈다: text-spacing-trimspace-all로 설정하고, text-autospaceno-autospace로 설정한다.
auto
text-spacing-trimtext-autospace를 모두 auto로 설정한다.
<spacing-trim>
text-spacing-trim을 지정된 값으로 설정한다. <autospace> 값이 주어지지 않으면, text-autospace는 그 초기값으로 설정된다.
<autospace>
text-autospace를 지정된 값으로 설정한다. <spacing-trim> 값이 주어지지 않으면, text-spacing-trim은 그 초기값으로 설정된다.

참고: normaltext-spacing-trimtext-autospace 둘 모두의 초기값이므로, text-spacing: normal은 둘 모두를 초기값으로 재설정한다.

8.7. 요소 경계를 가로지르는 셰이핑

조판 문자 단위를 분리하는 경계를 가진 박스에 대해 다음 중 하나라도 참이면, 인라인 박스 경계에서 텍스트 셰이핑은 반드시 끊겨야 한다:

서식에 실질적인 변화가 없거나, 글리프에 영향을 주지 않는 서식 변경만 있는 경우 (예: text decoration 적용), 인라인 박스 경계를 가로지르는 텍스트 셰이핑은 끊겨서는 안 된다.

그 밖의 경우에도, 글꼴 기술의 한계를 고려할 때 해당 경우에 합리적이고 가능하다면, 인라인 박스 경계를 가로지르는 텍스트 셰이핑은 끊기지 않는 것이 좋다.

경계를 가로지르는 합리적이고 가능한 셰이핑의 예는 아랍어 셰이핑이다: 많은 시스템에서는 이것이 글꼴 엔진에 의해 수행되어, 글꼴이 잠재적으로 매우 정교한 문맥 셰이핑을 갖춘 변형 글리프를 제공할 수 있게 한다. 글꼴 엔진에 문맥을 제공하는 API가 없다면 글꼴 변경을 가로질러 이 시스템에 의존하는 것은 일반적으로 가능하지 않지만, 예를 들어 zero-width-joiner (U+200D) 또는 zero-width-non-joiner (U+200C)를 적절히 사용하여 initial/medial/final/isolated 글리프의 올바른 선택을 유도함으로써 엔진이 이 제한을 우회하는 것은 간단하고 따라서 상당히 합리적이다.

경계를 가로지르는 셰이핑이 가능하지만 합리적이지 않은 예는 글리프를 선택하기 위해 양쪽 20자의 문맥에 민감한 글꼴을 처리하는 것이다: 문제의 문자열 앞 및 뒤의 모든 텍스트를, 서식 변경이 있는 여러 인라인 경계를 지나서까지 전달하는 것은 복잡하다. UA는 그러한 경우를 처리할 수 있지만, 그것이 현대 writing system에 일반적이거나 근본적으로 요구되는 것은 아니므로 요구되지는 않는다.

경계를 가로지르는 셰이핑이 불가능한 예는 단어 “and”의 중간에서 글꼴 굵기가 바뀌는 경우로, 해당 글꼴에서 합자가 단어 “and”의 세 글자 모두를 앰퍼샌드 글리프(“&”)로 대체하는 경우이다.

9. 가장자리 효과

가장자리 효과는 블록 안의 다른 줄에 대한 줄의 들여쓰기(text-indent)와 줄의 시작 및 끝 가장자리에서 콘텐츠를 측정하는 방식(hanging-punctuation)을 제어한다.

9.1. 첫 줄 들여쓰기: text-indent 속성

이름: text-indent
값: [ <length-percentage> ] && hanging? && each-line?
초기값: 0
적용 대상: 블록 컨테이너
상속 여부: yes
백분율: 블록 컨테이너 자신의 inline-axis inner size를 참조
계산값: 계산된 <length-percentage> 값과 지정된 키워드
정규 순서: 문법에 따름
애니메이션 유형: 계산값 유형에 따름

이 속성은 블록 안의 인라인 콘텐츠 줄에 적용되는 들여쓰기를 지정한다. 들여쓰기는 줄 박스의 start 가장자리에 적용되는 margin으로 취급된다.

each-line 및/또는 hanging 키워드에 의해 달리 지정되지 않는 한, 요소의 첫 번째 서식 지정된 줄인 줄만 영향을 받는다. [CSS-PSEUDO-4] 예를 들어, 익명 블록 박스의 첫 줄은 그것이 부모 요소의 첫 번째 자식인 경우에만 영향을 받는다.

값은 다음 의미를 가진다:

<length>
들여쓰기의 양을 절대 길이로 제공한다.
<percentage>
들여쓰기의 양을 블록 컨테이너 자신의 논리적 너비에 대한 백분율로 제공한다.

백분율은 내재 크기 기여를 계산할 목적에서는 0으로 취급되어야 하지만, 레이아웃을 수행할 때에는 항상 정상적으로 해석된다.

참고: 이는 요소가 오버플로되게 할 수 있다. 백분율 들여쓰기와 내재 크기 산정을 함께 사용하는 것은 권장되지 않는다.

each-line
들여쓰기는 각 블록 컨테이너의 첫 줄과 강제 줄 나누기 뒤의 각 줄에 영향을 준다 (하지만 소프트 줄바꿈 뒤의 줄에는 영향을 주지 않는다).
hanging
영향을 받는 줄을 반전한다.

float가 없는 왼쪽에서 오른쪽으로 쓰는 텍스트에서 text-alignstart이고 text-indent5em이면, 첫 번째 텍스트 줄은 블록 안쪽 5em 지점에서 시작한다:

     Since CSS1 it has been possible to
indent the first line of a block element
5em by setting the 'text-indent' property 
to '5em'.

hanging 키워드를 추가하면, 첫 줄은 flush로 시작하지만, 다른 줄은 5em 들여쓰기된다:

In CSS3 we can instead indent all other
     lines of the block element by 5em
     by setting the 'text-indent' property
     to 'hanging 5em'.
text-indent 속성은 “첫 번째 서식 지정된 줄”에만 영향을 주므로, 강제 나누기 뒤의 줄은 들여쓰기되지 않는다.
   For example, in the middle of
this paragraph is an equation,
which is centered:
             x + y = z
The first line after the equation
is flush (else it would look like
we started a new paragraph).

그러나 때로는 (시나 코드에서처럼), 줄바꿈될 만큼 긴 각 줄을 들여쓰는 것이 적절할 수 있다. 다음 예에서 text-indent에는 3em hanging each-line 값이 주어져, 블록의 오른쪽 경계에서 소프트 줄바꿈되는 시의 세 번째 줄에 hanging indent를 부여한다:

In a short line of text
There need be no wrapping,
But when we go on and on and on  
   and on,
Sometimes a soft break
Can help us stay on the page.

참고: text-indent 속성은 상속되므로, 블록 요소에 지정되면 descendant inline-block 요소에도 영향을 준다. 이런 이유로, display: inline-block로 지정된 요소에는 text-indent: 0을 지정하는 것이 흔히 현명하다.

9.2. 행잉 글리프

줄의 시작 또는 끝 가장자리에 있는 글리프가 행잉될 때, 이는 fit, 정렬, 또는 양쪽 맞춤을 위해 줄의 콘텐츠를 측정할 때 고려되지 않는다. 줄의 정렬/양쪽 맞춤에 따라, 이로 인해 해당 mark가 줄 박스 밖에 배치될 수 있다. 행잉 글리프는 내재 크기 (min-content sizemax-content size)와 이로부터 파생된 모든 크기를 계산할 때도 고려되지 않는다. (이 측정과 kerning의 상호작용은 현재 UA가 정의한다; CSSWG는 이 지점에 대한 조언을 환영한다.)

행잉 글리프는 여전히 그 부모 인라인 박스 안에 포함되며 텍스트 양쪽 맞춤에도 여전히 참여한다: 다만 줄에 얼마나 많은 콘텐츠가 맞는지, 양쪽 맞춤을 위해 줄의 콘텐츠를 얼마나 확장 또는 압축해야 하는지, 또는 텍스트 정렬을 위해 줄 박스 안에서 콘텐츠를 어떻게 배치할지를 결정할 때 그 character advance가 측정되지 않을 뿐이다. 실제로 행잉 글리프의 character advance는 영향을 받는 부모 인라인 박스의 해당 가장자리에 추가적인 음수 margin으로 재해석된다; 줄은 그 밖에는 평소처럼 배치된다. 오버플로되는 행잉 글리프는 불필요한 스크롤바 생성을 피하기 위해 일반적으로 ink overflow로 간주되는 것이 좋지만, 콘텐츠가 편집 가능하거나 이를 scrollable overflow로 취급하는 것이 사용자에게 유용한 다른 상황에서는 UA가 이를 scrollable overflow로 취급할 수 있다. [CSS-OVERFLOW-3]

어떤 경우에는 줄 끝의 글리프가 조건부로 행잉될 수 있다: 이는 양쪽 맞춤 이전에 그 줄에 그렇지 않으면 맞지 않는 경우에만 행잉된다. 이는 fit을 위해 줄의 콘텐츠를 측정할 때 고려되지 않는다; 그러나 맞지 않는 부분은 행잉되는 것으로 간주된다. 조건부로 행잉되는 글리프는 min-content sizes와 이로부터 파생된 모든 크기를 계산할 때는 고려되지 않지만, max-content sizes와 이로부터 파생된 모든 크기에는 고려된다.

행잉 가능한 글리프와 줄의 가장자리 사이에 non-zero 인라인 축 border 또는 padding이 있으면 그 글리프는 행잉될 수 없다. 예를 들어, end padding이 있는 인라인 박스 끝의 마침표는 줄의 끝 가장자리에서 행잉되지 않는다.

여러 인접 글리프가 함께 행잉될 수 있지만, 얼마나 많이 행잉될 수 있는지에 대한 구체적인 제한이 지정될 수 있다 (예: 줄의 각 가장자리에서 문장부호 문자는 최대 하나만 행잉될 수 있다).

9.2.1. 행잉 문장부호: hanging-punctuation 속성

이름: hanging-punctuation
값: none | [ first || [ force-end | allow-end ] || last ]
초기값: none
적용 대상: 텍스트
상속 여부: yes
백분율: n/a
계산값: 지정된 키워드(들)
정규 순서: 문법에 따름
애니메이션 유형: discrete

이 속성은 문장부호가 있는 경우, 그것이 텍스트 줄의 시작 또는 끝에서 행잉되어 줄 박스 밖(또는 들여쓰기 안)에 배치될 수 있는지를 결정한다.

참고: 블록 컨테이너에 충분한 padding이 없으면, hanging-punctuation은 오버플로를 유발할 수 있다.

값은 다음 의미를 가진다:

none
어떤 문장부호 문자도 행잉되게 하지 않는다.
first
요소의 첫 번째 서식 지정된 줄 시작에 있는 여는 괄호, 따옴표, 또는 ideographic space가 행잉된다. 이는 Unicode 범주 Ps, Pf, Pi의 모든 문자와 ASCII 따옴표 U+0027 ' APOSTROPHE 및 U+0022 " QUOTATION MARK, 그리고 IDEOGRAPHIC SPACE U+3000에 적용된다.
last
요소의 마지막 서식 지정된 줄 끝에 있는 닫는 괄호 또는 따옴표가 행잉된다. 이는 Unicode 범주 Pe, Pf, Pi의 모든 문자와 ASCII 따옴표 U+0027 ' APOSTROPHE 및 U+0022 " QUOTATION MARK에 적용된다.
force-end
줄 끝의 stop 또는 comma행잉된다.
allow-end
줄 끝의 stop 또는 comma조건부로 행잉된다.

줄의 각 가장자리에는 문장부호 문자 하나만 행잉될 수 있다.

Stops and commas행잉될 수 있는 것은 다음을 포함한다:

U+002C , COMMA
U+002E . FULL STOP
U+060C ، ARABIC COMMA
U+06D4 ۔ ARABIC FULL STOP
U+3001 IDEOGRAPHIC COMMA
U+3002 IDEOGRAPHIC FULL STOP
U+FF0C FULLWIDTH COMMA
U+FF0E FULLWIDTH FULL STOP
U+FE50 SMALL COMMA
U+FE51 SMALL IDEOGRAPHIC COMMA
U+FE52 SMALL FULL STOP
U+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP
U+FF64 HALFWIDTH IDEOGRAPHIC COMMA

UA는 적절한 경우 다른 문자를 포함할 수 있다.

참고: CSS Working Group은 다른 문자를 포함하는 UA가 그러한 추가 사항을 작업 그룹에 알려주기를 바란다.

allow-endforce-end는 동아시아에서 사용되는 행잉 문장부호의 두 변형이다.
hanging-punctuation: allow-end
p {
  text-align: justify;
  hanging-punctuation: allow-end;
}
hanging-punctuation: force-end
p {
  text-align: justify;
  hanging-punctuation: force-end;
}

allow-end의 경우 첫 줄 끝의 문장부호는 행잉되지 않는다. 행잉 없이도 맞기 때문이다. 그러나 force-end가 사용되면, 강제로 행잉된다. 양쪽 맞춤은 행잉 문장부호 없이 줄을 측정한다. 따라서 줄이 확장될 때, 문장부호는 줄 밖으로 밀려난다.

9.3. 양방향성과 줄 박스

줄 박스의 startend 쪽은 줄 박스의 인라인 기본 방향에 의해 결정된다. 보통은 일치하지만, 줄 박스인라인 기본 방향containing block 또는 bidi paragraph인라인 기본 방향과 구별된다. 줄 박스인라인 기본 방향text-align-all, text-align-last, text-indent, 그리고 hanging-punctuation—​즉 그 가장자리에 대한 콘텐츠의 위치와 정렬—​에 영향을 준다. 이는 인라인 콘텐츠의 서식 지정이나 순서에는 영향을 주지 않는다 (이는 Unicode Bidirectional Algorithm에 의해 제어되며, CSS Writing Modes가 적용한다 [UAX9] [CSS-WRITING-MODES-4]).

대부분의 경우, 줄 박스인라인 기본 방향은 그 containing block의 계산된 direction에 의해 주어진다. 그러나, 그 containing blockunicode-bidi: plaintext가 있는 경우 [CSS-WRITING-MODES-4]:

다음 예에서, <block>이 start 정렬된 preformatted block (display: block; white-space: pre; text-align: start)이라고 가정하면, 한 줄 건너 한 줄씩 오른쪽 정렬된다:
<block style="unicode-bidi: plaintext">
français
فارسی
français
فارسی
français
فارسی
</block>
plaintext bidi paragraph의 인라인 기본 방향을 찾을 때 중립 문자(예: 문장부호)와 격리된 run은 건너뛰기 때문에, 다음 예의 줄 박스는 첫 번째 강한 문자 ‘h’가 지시하는 대로 왼쪽에서 오른쪽이 될 것이다 (따라서 text-align: start가 주어졌으므로 왼쪽 정렬된다):
<para style="display: block; direction: rtl; unicode-bidi:plaintext"><quote style="unicode-bidi:plaintext">שלום!</quote>”, they said.
</para>
<textarea style="direction: rtl; unicode-bidi:plaintext">

Hello!

</textarea>

unicode-bidi: plaintext 때문에, “Hello!”는 LTR로 조판되고 (즉 느낌표가 오른쪽에 있음) 왼쪽 정렬되며, containing block의 RTL direction은 무시된다. 따라서 그 뒤의 빈 줄도 LTR이 되며, 이는 그 줄의 caret이 왼쪽 가장자리에 나타나야 함을 의미한다. 그러나 비어 있는 첫 줄은 오른쪽 정렬된다: 앞선 줄이 없으므로, 그 containing block의 RTL 방향을 가정하기 때문이다.

부록 A: 텍스트 처리 작업 순서

이 부록은 규범적이다.

다음 목록은 텍스트 작업의 순서를 정의한다. (결과 레이아웃이 동일한 한, 구현이 이 순서에 얽매이는 것은 아니다.)

  1. § 4.2 공백 잘라내기: white-space-trim 속성
  2. 공백 처리 파트 I (pre-wrapping)
  3. § 2.2 단어 사이 확장: word-space-transform 속성텍스트 변환
  4. 텍스트 결합 [CSS-WRITING-MODES-4]
  5. 텍스트 방향 설정 [CSS-WRITING-MODES-4]
  6. 각 줄에 다음을 적용하면서 텍스트 줄바꿈:
    1. 들여쓰기

    2. 양방향 재정렬 [CSS2] / [CSS-WRITING-MODES-4]

    3. 공백 처리 파트 II

    4. line-padding, letter-spacing, word-spacing, 및 text-spacing

    5. 글꼴/글리프 선택과 위치 지정 [CSS-FONTS-3]

    6. 행잉 문장부호

    참고: 이러한 작업은 한 줄에 얼마나 많은 텍스트가 맞는지에 영향을 줄 수 있으며, 따라서 다시 줄바꿈으로 돌아갈 수 있다.

  7. 양쪽 맞춤 (이는 글리프 선택 및/또는 텍스트 줄바꿈에 영향을 주어 그 단계로 되돌아갈 수 있음)
  8. 텍스트 정렬
  9. 텍스트 그룹 정렬

부록 B: Plaintext로 변환

이 부록은 plaintext 복사-붙여넣기 작업의 목적에 대해 규범적이다.

CSS로 렌더링된 문서가 plaintext 형식으로 변환될 때, 다음이 기대된다:

부록 C: 기본 UA 스타일시트

이 부록은 정보 제공용이며, UA 개발자가 HTML용 기본 스타일시트를 구현하는 데 도움을 주기 위한 것이다. 그러나 UA 개발자는 적절한 경우 이를 자유롭게 무시하거나 수정할 수 있다.

/* make option elements align together */
option { text-align: match-parent; }

/* do not allow white space to collapse in textarea */
textarea { white-space-collapse: preserve !important; }

/* preserve character grid in preformatted text */
pre, code, kbd, samp, tt, listing, xmp, plaintext { text-spacing: none; }

/* Avoid hanging punctuation inheriting into preformatted blocks */
pre { hanging-punctuation: none; }

부록 D: 문자 체계와 간격

이 부록은 규범적이다.

조판 동작은 언어에 따라 어느 정도 달라지지만, writing system에 따라 크게 달라진다. 이 부록은 Unicode 6.0의 몇 가지 일반적인 script를 그 양쪽 맞춤 및 간격 동작에 따라 분류한다. 범주 설명은 기술적이며 규정적이지 않다; 결정 요인은 양쪽 맞춤 기회의 우선순위화이다.

block scripts
CJK 및 확장적으로 모든 Wide 문자 (East Asian Width 참조 [UAX11]). 다음 Unicode scripts가 포함된다: Bopomofo, Han, Hangul, Hiragana, Katakana, 및 Yi. East Asian Width propertyWideFullwidth인 문자도 포함되지만, Ambiguous 문자는 writing systemChinese, Korean, 또는 Japanese인 경우에만 포함된다.
clustered scripts
Clustered scripts는 이산적 단위를 가지며 단어 경계에서만 나뉘지만, 보이는 단어 구분자를 사용하지 않는다. 이들은 공백을 늘리는 것을 우선하지만, 양쪽 맞춤을 위해 문자 사이 간격을 편안하게 허용한다. clustered scripts에는 다음 Unicode scripts가 포함되지만 이에 한정되지는 않는다: Khmer, Lao, Myanmar, New Tai Lue, Tai Le, Tai Tham, Tai Viet, Thai
cursive scripts
Cursive scripts는 양쪽 맞춤이나 letter-spacing을 위해 글자 사이에 틈을 허용하지 않는다. 다음 Unicode scripts가 포함된다: Arabic, Hanifi Rohingya, Mandaic, Mongolian, N’Ko, Phags Pa, Syriac

참고: 기준선 연결자를 가진 Indic scripts (예: Devanagari 및 Gujarati)는 cursive scripts로 간주되지 않으며, 조판 문자 단위 사이에 그러한 틈을 허용한다. Indic Layout Requirements를 참조하라. [ILREQ]

사용자 에이전트는 Unicode 지원을 업데이트함에 따라 향후 Unicode 버전에서 아직 인코딩되지 않은 cursive scripts를 처리하기 위해 이 목록을 업데이트해야 하며, CSSWG에 이 명세를 그에 맞게 업데이트해 달라고 요청하는 것이 권장된다.

부록 E: 문자와 속성

이 부록은 규범적이다.

Unicode는 CSS 조판에서 참조되는 네 가지 코드 포인트 수준 속성을 정의한다:

East Asian width property
Unicode Standard Annex #11 [UAX11]에 정의되어 있으며, Unicode Character Database [UAX44]에서 East_Asian_Width 속성으로 제공된다.
general category
Unicode Standard Annex #44 [UAX44]에 정의되어 있으며, Unicode Character Database [UAX44]에서 General_Category 속성으로 제공된다.
script property
Unicode Standard Annex #24 [UAX24]에 정의되어 있으며, Unicode Character Database [UAX44]에서 Script 속성으로 제공된다. (UA는 이 매핑에 ScriptExtensions.txt 할당을 모두 포함해야 한다.)
Vertical Orientation
Unicode Standard Annex #50 [UAX50]Unicode Character Database [UAX44]의 Vertical_Orientation 속성으로 정의되어 있다.

Unicode는 개별 코드 포인트의 속성을 정의하지만, 때로는 조판 문자 단위의 속성을 결정해야 한다. CSS Text의 목적상, 조판 문자 단위의 속성은 첫 번째 grapheme cluster의 기본 문자에 의해 주어진다—​다만 두 경우는 예외이다:

부록 F: 콘텐츠 Writing System 식별

이 부록은 규범적이다.

대부분의 언어에는 선호되는 writing system이 있지만, 일부 언어에는 여러 writing system이 있으며, 대부분은 하나 이상의 외래 writing system으로도 전사될 수 있다. 흔한 예로, 대부분의 언어에는 적어도 하나의 라틴 전사 방식이 있으며, 따라서 Latin writing system으로 쓰일 수 있다. 전사된 텍스트는 보통 그 writing system의 조판 관례를 따른다: 예를 들어 일본어 “romaji”와 중국어 Pinyin은 라틴 글자와 단어 공백을 사용하며, 그에 따라 Latin 줄 나누기 및 양쪽 맞춤 관행을 따른다. 또 다른 예로, 역사적 표의문자 한국어 (ko-Hani)는 단어 공백을 사용하지 않으므로, 현대 한국어가 아니라 중국어와 유사하게 조판되어야 한다.

HTML 또는 document language에서 content language를 선언하기 위해 BCP47 태그를 사용하는 경우, 작성자는 script subtag를 사용하여 비전형적 writing system의 사용을 모호하지 않게 하거나 나타낼 수 있다. [BCP47] 예를 들어, 본래 이를 사용하지 않는 언어에 대해 Latin writing system 사용을 나타내려면, -Latn script subtag를 추가할 수 있다. 예: 일본어 romaji의 경우 ja-Latn. 다른 writing system을 위한 다른 subtag도 존재하며, ISO의 Code for the Representation of Names of ScriptsISO15924 script tag registry를 참조하라. [ISO15924]

script subtag가 있는 BCP47 태그 사용의 몇 가지 일반적/역사적 예:
zh-Latn
중국어, 라틴 전사로 작성됨.
ko-Hani
한국어, 한자(중국 표의문자)로 작성됨.
tr-Arab
터키어, 아랍 문자로 작성됨.
mn-Cyrl
몽골어, 키릴 문자로 작성됨.
mn-Mong
몽골어, 전통 몽골 문자로 작성됨.

그러나 BCP47 script subtag는 단일 writing system과 강하게 연관된 언어에는 보통 사용되지 않으며 (실제로 권장되지 않으며), 대신 다른 것이 지정되지 않은 경우 해당 writing system이 암시되는 것으로 기대된다. [BCP47] IANA는 이 목적을 위해 language subtag registrySuppress-Script 필드를 통해 여러 언어의 가장 일반적인 writing system 데이터베이스를 유지한다.

참고: 언어 태그 지정에 대한 더 많은 조언은 Internationalization Working Group“Language tags in HTML and XML”“Choosing a Language Tag”에서 찾을 수 있다.

writing system이 명시적으로 표시되지 않은 경우, UA는 줄 나누기나 양쪽 맞춤 같은 언어 민감 조판 동작에 대해 선언된 content language의 가장 일반적인 writing system을 가정해야 한다. 그러나 작성자가 명시적으로 다른 writing system을 선언한 경우, UA는 그 writing system을 가정해서는 안 된다. UA가 특정 언어와 writing system 조합에 대한 언어별 지식을 가지고 있지 않다면, 선언된 writing system의 조판 관례를 사용해야 하며 (필요하다면 다른 언어의 관례를 가정), 선언된 언어가 가정된 writing system 안에서 가지는 관례를 사용해서는 안 된다. 이는 선언된 writing system에는 부적절할 수 있기 때문이다.

언어와 그 가장 일반적인 writing system 사이의 전체 대응 관계는 이 문서의 범위를 벗어난다. 그러나 사용자 에이전트는 적어도 다음을 가정해야 한다:

부록 G: 작은 Kana 매핑

이 부록은 규범적이다.

작은 Kana에서 전체 크기 Kana로의 매핑
작은 전체 크기
ぁ U+3041 あ U+3042
ぃ U+3043 い U+3044
ぅ U+3045 う U+3046
ぇ U+3047 え U+3048
ぉ U+3049 お U+304A
ゕ U+3095 か U+304B
ゖ U+3096 け U+3051
𛄲 U+1B132 こ U+3053
っ U+3063 つ U+3064
ゃ U+3083 や U+3084
ゅ U+3085 ゆ U+3086
ょ U+3087 よ U+3088
ゎ U+308E わ U+308F
𛅐 U+1B150 ゐ U+3090
𛅑 U+1B151 ゑ U+3091
𛅒 U+1B152 を U+3092
ァ U+30A1 ア U+30A2
ィ U+30A3 イ U+30A4
ゥ U+30A5 ウ U+30A6
ェ U+30A7 エ U+30A8
ォ U+30A9 オ U+30AA
ヵ U+30F5 カ U+30AB
ㇰ U+31F0 ク U+30AF
ヶ U+30F6 ケ U+30B1
𛅕 U+1B155 コ U+30B3
ㇱ U+31F1 シ U+30B7
ㇲ U+31F2 ス U+30B9
ッ U+30C3 ツ U+30C4
ㇳ U+31F3 ト U+30C8
ㇴ U+31F4 ヌ U+30CC
ㇵ U+31F5 ハ U+30CF
ㇶ U+31F6 ヒ U+30D2
ㇷ U+31F7 フ U+30D5
ㇸ U+31F8 ヘ U+30D8
ㇹ U+31F9 ホ U+30DB
ㇺ U+31FA ム U+30E0
ャ U+30E3 ヤ U+30E4
ュ U+30E5 ユ U+30E6
ョ U+30E7 ヨ U+30E8
ㇻ U+31FB ラ U+30E9
ㇼ U+31FC リ U+30EA
ㇽ U+31FD ル U+30EB
ㇾ U+31FE レ U+30EC
ㇿ U+31FF ロ U+30ED
ヮ U+30EE ワ U+30EF
𛅤 U+1B164 ヰ U+30F0
𛅥 U+1B165 ヱ U+30F1
𛅦 U+1B166 ヲ U+30F2
𛅧 U+1B167 ン U+30F3
ァ U+FF67 ア U+FF71
ィ U+FF68 イ U+FF72
ゥ U+FF69 ウ U+FF73
ェ U+FF6A エ U+FF74
ォ U+FF6B オ U+FF75
ッ U+FF6F ツ U+FF82
ャ U+FF6C ヤ U+FF94
ュ U+FF6D ユ U+FF95
ョ U+FF6E ヨ U+FF96

부록 H: 단어와 구 감지

이 부록은 규범적이다.

이 명세의 몇몇 작업은 자동화된 단어 경계 감지 또는 구 경계 감지에 의존한다.

두 작업은 비슷하다: 사용자 에이전트는 텍스트에 대한 언어 분석을 수행하여 언어별로 의미 있는 문자 시퀀스를 식별한다. 둘의 차이는 대상이 되는 텍스트 단위가 다르다는 것뿐이다: 단어 또는 구.

넓은 의미에서는 쉽게 이해되지만, 단어와 구라는 두 개념은 정확하게 정의하기 어렵고, 특히 여러 언어에 걸쳐 작동하도록 정의하기는 더 어렵다. 그럼에도 이 맥락에서는:

감지된 각 단어 또는 구의 시작 및 끝 위치를 단어 경계 또는 구 경계라고 한다. 단어 및 구 경계 자체는 관찰 가능하지 않지만, word-space-transform 또는 word-break 같은 속성은 그 위치에서 보이는 효과를 유발할 수 있다.

단어나 구를 감지하고 그 경계를 배치하는 구체적인 알고리즘은 UA 의존적이며, 다양한 요소 또는 접근 방식을 고려할 수 있다. 예를 들면 사전 기반 어휘 분석, 문장부호 또는 다른 구분 문자 식별, 형태론적 분석, 기계 학습 방법 등이다…

그럼에도 다음 제약은 반드시 준수되어야 한다:

Privacy Considerations

이 명세는 사용자가 설치한 하이픈 넣기 및 줄 나누기 사전을 노출한다.

Security Considerations

이 명세는 새로운 보안 고려사항을 도입하지 않는다.

감사의 말

이 명세는 다음 사람들의 도움 없이는 가능하지 않았을 것이다: Addison Phillips, Aharon Lanin, Alan Stearns, Ambrose Li, Arnold Schrijver, Arye Gittelman, Ayman Aldahleh, Ben Errez, Bert Bos, Chris Lilley, Chris Pratley, Chris Thrasher, Chris Wilson, Dave Hyatt, David Baron, Emilio Cobos Álvarez, Eric LeVine, Etan Wexler, Frank Tang, Håkon Wium Lie, IM Mincheol, Ian Hickson, James Clark, Javier Fernandez, John Daggett, Jonathan Kew, Ken Lunde, Laurie Anna Edlund, Marcin Sawicki, Martin Dürst, Martin Heijdra, Masafumi Yabe, Masayasu Ishikawa, Michael Jochimsen, Michel Suignard, Mike Bemford, Myles Maxfield, Nat McCully, Paul Nelson, Pierre-Anthony Lemieux, Rahul Sonnad, Randy Edmunds, Richard Ishida, Shinyu Murakami, Stephen Deach, Steve Zilles, Takao Suzuki, Tantek Çelik, Xidorn Quan, Yaniv Feinberg.

변경사항

이 초안은 [CSS-TEXT-3]와 동기화되어 유지된다. CSS Text 3 § 변경사항을 참조하라.
Level 4에 특화된 변경사항은 아래에 나열되어 있다.

2024년 5월 29일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2024년 2월 19일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2023년 10월 20일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2023년 3월 29일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2023년 3월 1일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2022년 12월 31일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2022년 5월 5일 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

2019년 Working Draft 이후의 중요한 변경사항은 다음을 포함한다:

Level 3 이후 추가사항

Level 4의 새로운 기능:

적합성

문서 관례

적합성 요구사항은 서술적 주장과 RFC 2119 용어의 조합으로 표현된다. 이 문서의 규범적 부분에서 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, 그리고 “OPTIONAL”이라는 핵심 단어는 RFC 2119에 설명된 대로 해석되어야 한다. 그러나 가독성을 위해, 이 명세에서는 이러한 단어가 모두 대문자로 나타나지는 않는다.

명시적으로 비규범적이라고 표시된 섹션, 예시, 그리고 참고를 제외한 이 명세의 모든 텍스트는 규범적이다. [RFC2119]

이 명세의 예시는 “for example”이라는 말로 도입되거나 다음과 같이 class="example"을 통해 규범적 텍스트와 구분된다:

이는 정보 제공용 예시의 예이다.

정보 제공용 참고는 “Note”라는 단어로 시작하며, 다음과 같이 class="note"를 통해 규범적 텍스트와 구분된다:

참고, 이는 정보 제공용 참고이다.

권고문은 특별한 주의를 환기하도록 스타일링된 규범적 섹션이며, 다음과 같이 <strong class="advisement">를 통해 다른 규범적 텍스트와 구분된다: UA는 접근 가능한 대안을 제공해야 한다.

적합성 클래스

이 명세에 대한 적합성은 세 가지 적합성 클래스에 대해 정의된다:

style sheet
CSS style sheet.
renderer
style sheet의 의미를 해석하고 이를 사용하는 문서를 렌더링하는 UA.
authoring tool
style sheet를 작성하는 UA.

style sheet가 이 명세에 적합하려면, 이 모듈에서 정의한 구문을 사용하는 모든 문장이 일반 CSS 문법과 이 모듈에서 정의된 각 기능의 개별 문법에 따라 유효해야 한다.

renderer가 이 명세에 적합하려면, 적절한 명세가 정의한 대로 style sheet를 해석하는 것에 더해, 이 명세가 정의한 모든 기능을 올바르게 구문 분석하고 그에 따라 문서를 렌더링함으로써 지원해야 한다. 그러나 장치의 제한으로 인해 UA가 문서를 올바르게 렌더링할 수 없다고 해서 UA가 부적합해지는 것은 아니다. (예를 들어, UA는 흑백 모니터에서 색을 렌더링할 필요가 없다.)

authoring tool이 이 명세에 적합하려면, 일반 CSS 문법과 이 모듈의 각 기능별 개별 문법에 따라 구문적으로 올바른 style sheet를 작성하고, 이 모듈에서 설명한 style sheet의 다른 모든 적합성 요구사항을 충족해야 한다.

부분 구현

작성자가 전방 호환 구문 분석 규칙을 활용하여 fallback 값을 할당할 수 있도록, CSS renderer는 사용 가능한 수준의 지원이 없는 모든 at-rule, 속성, 속성 값, 키워드, 및 기타 구문 구조를 유효하지 않은 것으로 처리하고 (적절히 무시)해야 한다. 특히, 사용자 에이전트는 단일 다중 값 속성 선언에서 지원되지 않는 component value만 선택적으로 무시하고 지원되는 값만 인정해서는 안 된다: 어떤 값이든 유효하지 않은 것으로 간주되면 (지원되지 않는 값은 그렇게 간주되어야 하므로), CSS는 전체 선언을 무시해야 한다고 요구한다.

불안정 및 독점 기능의 구현

미래의 안정적인 CSS 기능과 충돌하지 않도록, CSSWG는 CSS의 불안정 기능 및 독점 확장 구현에 대해 모범 사례를 따를 것을 권장한다.

비실험적 구현

명세가 Candidate Recommendation 단계에 도달하면, 비실험적 구현이 가능해지며, 구현자는 명세에 따라 올바르게 구현되었음을 입증할 수 있는 모든 CR 수준 기능에 대해 prefix 없는 구현을 배포하는 것이 좋다.

구현 간 CSS의 상호운용성을 확립하고 유지하기 위해, CSS Working Group은 비실험적 CSS renderer가 CSS 기능의 prefix 없는 구현을 배포하기 전에, 구현 보고서(필요한 경우 해당 구현 보고서에 사용한 testcase)를 W3C에 제출할 것을 요청한다. W3C에 제출된 testcase는 CSS Working Group의 검토와 수정을 받는다.

testcase와 구현 보고서 제출에 대한 추가 정보는 CSS Working Group의 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있다. 질문은 public-css-testsuite@w3.org 메일링 리스트로 보내야 한다.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고문헌

규범 참고문헌

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 11 March 2024. CRD. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 4 August 2024. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 18 December 2018. FPWD. URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 13 January 2022. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-HDR-1]
Chris Lilley. CSS Color HDR Module Level 1. 3 March 2026. WD. URL: https://www.w3.org/TR/css-color-hdr-1/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 30 March 2023. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. 6 November 2025. WD. URL: https://www.w3.org/TR/css-display-4/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 3. 20 September 2018. REC. URL: https://www.w3.org/TR/css-fonts-3/
[CSS-FONTS-4]
Chris Lilley. CSS Fonts Module Level 4. 22 April 2026. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-INLINE-3]
Elika Etemad. CSS Inline Layout Module Level 3. 18 December 2024. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 7 October 2025. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSS Overflow Module Level 4. 21 March 2023. WD. URL: https://www.w3.org/TR/css-overflow-4/
[CSS-PSEUDO-4]
Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 27 June 2025. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 31 December 2022. WD. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 17 December 2021. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. 30 September 2024. CRD. URL: https://www.w3.org/TR/css-text-3/
[CSS-TEXT-4]
Elika Etemad; et al. CSS Text Module Level 4. 29 May 2024. WD. URL: https://www.w3.org/TR/css-text-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 22 March 2024. CRD. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 12 March 2024. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 10 December 2019. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 30 July 2019. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 7 June 2011. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3-BREAK]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 4 December 2018. CR. URL: https://www.w3.org/TR/css-break-3/
[CSS3-FLEXBOX]
Elika Etemad; Tab Atkins Jr.; Rossen Atanassov. CSS Flexible Box Layout Module Level 1. 14 October 2025. CRD. URL: https://www.w3.org/TR/css-flexbox-1/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 26 August 2021. WD. URL: https://www.w3.org/TR/cssom-1/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[MATHML-CORE]
David Carlisle; Frédéric Wang. MathML Core. 24 June 2025. CR. URL: https://www.w3.org/TR/mathml-core/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX11]
Ken Lunde 小林剣. East Asian Width. 24 July 2025. Unicode Standard Annex #11. URL: https://www.unicode.org/reports/tr11/tr11-44.html
[UAX14]
Robin Leroy. Unicode Line Breaking Algorithm. 5 September 2025. Unicode Standard Annex #14. URL: https://www.unicode.org/reports/tr14/tr14-55.html
[UAX24]
Ken Whistler. Unicode Script Property. 31 July 2025. Unicode Standard Annex #24. URL: https://www.unicode.org/reports/tr24/tr24-39.html
[UAX29]
Josh Hadley. Unicode Text Segmentation. 17 August 2025. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-47.html
[UAX44]
Ken Whistler. Unicode Character Database. 27 August 2025. Unicode Standard Annex #44. URL: https://www.unicode.org/reports/tr44/tr44-36.html
[UAX50]
Ken Lunde 小林剣; Koji Ishii 石井宏治. Unicode Vertical Text Layout. 24 July 2025. Unicode Standard Annex #50. URL: https://www.unicode.org/reports/tr50/tr50-33.html
[UAX9]
Manish Goregaokar मनीष गोरेगांवकर; Robin Leroy. Unicode Bidirectional Algorithm. 13 August 2025. Unicode Standard Annex #9. URL: https://www.unicode.org/reports/tr9/tr9-51.html
[UNICODE]
The Unicode Standard. URL: https://www.unicode.org/versions/latest/

비규범 참고문헌

[BCP47]
A. Phillips, Ed.; M. Davis, Ed.. Tags for Identifying Languages. September 2009. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5646
[CLREQ]
Fuqiao Xue; Richard Ishida. Requirements for Chinese Text Layout - 中文排版需求. 3 May 2026. DNOTE. URL: https://www.w3.org/TR/clreq/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 3. 5 May 2022. CRD. URL: https://www.w3.org/TR/css-text-decor-3/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ILREQ]
Swaran Lata. Indic Layout Requirements. 29 May 2020. WD. URL: https://www.w3.org/TR/ilreq/
[ISO15924]
Code for the representation of names of scripts.. 1998. ISO 15924:1998. Draft International Standard.
[JIS4051]
Formatting rules for Japanese documents (日本語文書の組版方法).. 2004. JIS X 4051:2004. In Japanese.
[JLREQ]
Hiroyuki Chiba; et al. Requirements for Japanese Text Layout 日本語組版処理の要件(日本語版). 11 August 2020. NOTE. URL: https://www.w3.org/TR/jlreq/
[JUSTIFY]
Elika Etemad; Richard Ishida. Approches to Full Justification. URL: https://www.w3.org/International/articles/typography/justification
[L2-22-080R]
Norbert Lindenberg; Elika Etemad; Vaishnavi Murthy Yerkadithaya. Line breaking at orthographic syllable boundaries. Proposal. URL: https://www.unicode.org/L2/L2022/22080r-line-break-ortho-bnd.pdf
[RFC6919]
R. Barnes; S. Kent; E. Rescorla. Further Key Words for Use in RFCs to Indicate Requirement Levels. 1 April 2013. Experimental. URL: https://www.rfc-editor.org/rfc/rfc6919
[TYPOGRAPHY]
Richard Ishida. Language enablement index. 15 November 2024. DNOTE. URL: https://www.w3.org/TR/typography/
[XML10]
Tim Bray; et al. Extensible Markup Language (XML) 1.0 (Fifth Edition). 26 November 2008. REC. URL: https://www.w3.org/TR/xml/
[ZHMARK]
General Rules for Punctuation (《标点符号用法》).. 2011. GB/T 15834―2011. In Chinese..

속성 색인

이름 초기값 적용 대상 상속 백분율 애니메이션 유형 정규 순서 계산값
hanging-punctuation none | [ first || [ force-end | allow-end ] || last ] none text yes n/a discrete per grammar specified keyword(s)
hyphenate-character auto | <string> auto text yes n/a discrete per grammar specified keyword
hyphenate-limit-chars [ auto | <integer> ]{1,3} auto text yes n/a by computed value type per grammar three values, each either the auto keyword or an integer
hyphenate-limit-last none | always | column | page | spread none block containers yes n/a discrete per grammar specified keyword
hyphenate-limit-lines no-limit | <integer> no-limit block containers yes n/a by computed value type per grammar specified keyword or integer
hyphenate-limit-zone <length-percentage> 0 block containers yes line box의 길이를 참조 by computed value type per grammar computed <length-percentage> value
hyphens none | manual | auto manual text yes n/a discrete n/a specified keyword
letter-spacing normal | <length-percentage> normal inline boxes and text yes used font-size에 상대적 by computed value type n/a an absolute length and/or a percentage
line-break auto | loose | normal | strict | anywhere auto text yes n/a discrete n/a specified keyword
line-padding <length> 0 inline boxes yes N/A by computed value type per grammar absolute length
overflow-wrap normal | break-word | anywhere normal text yes n/a discrete n/a specified keyword
tab-size <number [0,∞]> | <length [0,∞]> 8 text yes n/a by computed value type n/a the specified number or absolute length
text-align start | end | left | right | center | <string> | justify | match-parent | justify-all start block containers yes see individual properties discrete n/a see individual properties
text-align-all start | end | left | right | center | <string> | justify | match-parent start block containers yes n/a discrete n/a keyword as specified, except for match-parent which computes as defined above
text-align-last auto | start | end | left | right | center | justify | match-parent auto block containers yes n/a discrete n/a keyword as specified, except for match-parent which computes as defined above
text-autospace normal | <autospace> | auto normal text yes N/A discrete per grammar specified keyword(s)
text-group-align none | start | end | left | right | center none block containers no N/A discrete per grammar specified keyword
text-indent [ <length-percentage> ] && hanging? && each-line? 0 block containers yes block container 자신의 inline-axis inner size를 참조 by computed value type per grammar computed <length-percentage> value, plus any specified keywords
text-justify [ auto | none | inter-word | inter-character | ruby ] || no-compress auto text yes n/a discrete n/a specified keyword (except for the distribute legacy value)
text-spacing none | auto | <spacing-trim> || <autospace> see individual properties text yes N/A discrete per grammar specified keyword(s)
text-spacing-trim <spacing-trim> | auto normal text yes N/A discrete per grammar specified keyword(s)
text-transform none | [capitalize | uppercase | lowercase ] || full-width || full-size-kana | math-auto none text yes n/a discrete n/a specified keyword
text-wrap <'text-wrap-mode'> || <'text-wrap-style'> wrap see individual properties see individual properties see individual properties see individual properties per grammar see individual properties
text-wrap-mode wrap | nowrap wrap text yes n/a discrete per grammar specified keyword
text-wrap-style auto | balance | stable | pretty | avoid-orphans auto inline formatting context를 형성하는 block containers yes n/a discrete per grammar specified keyword
white-space normal | pre | pre-wrap | pre-line | <'white-space-collapse'> || <'text-wrap-mode'> || <'white-space-trim'> normal text see individual properties n/a discrete n/a specified keyword
white-space-collapse collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces collapse text yes n/a discrete per grammar specified keyword
white-space-trim none | discard-before || discard-after || discard-inner none inline boxes and block containers no n/a discrete per grammar specified keyword(s)
word-break normal | break-all | keep-all | manual | auto-phrase | break-word normal text yes n/a discrete n/a specified keyword
word-space-transform none | [ space | ideographic-space ] && auto-phrase? none text yes N/A discrete per grammar as specified
word-spacing normal | <length-percentage> normal text yes used font-size에 상대적 by computed value type n/a an absolute length and/or a percentage
wrap-after auto | avoid | avoid-line | avoid-flex | line | flex auto inline-level boxes and flex items no n/a discrete per grammar specified keyword
wrap-before auto | avoid | avoid-line | avoid-flex | line | flex auto inline-level boxes and flex items no n/a discrete per grammar specified keyword
wrap-inside auto | avoid auto inline boxes no n/a discrete per grammar specified keyword

이슈 색인

이 섹션은 아직 논의 중이며 향후 초안에서 변경될 수 있다.
이것이 줄 나누기 기회를 보존하는가, 아닌가? 별도의 "hide" 값이 필요한가? 줄 나누기 기회를 보존한다면, word-space-transform 값으로 대체해야 할 수도 있다.
white-space-collapse: preserve-spaces에 대해서는 여기서 무엇이 일어나야 하는가?
이것을 Level 4에 대해 정의해야 하는가?
CSSWG는 avoid-orphans에 더 나은 이름을 찾고 있다.
thread를 참조하라. 이슈는 줄의 최소 길이를 요구하는 것에 관한 것이다. 일반적인 기준은 다음처럼 보인다

값 공간에 대한 제안은 match-indent | <length> | <percentage> (그 사용 사례를 분명히 하기 위해 Xch가 예로 주어짐)이다. 또는 <integer>가 실제로 문자를 셀 수도 있다.

이것이 text balancing(위)과 어떻게 상호작용할지는 명확하지 않다; 이전 제안 중 하나는 그것들을 같은 속성으로 두었다 (100%가 전체 balancing을 의미).

사람들은 단어 기반 제한을 요청했지만, 이는 실제로 단어의 길이에 의존하므로 문자 기반이 더 낫다.

또는, 이 값은 normal이 아니라 keep-all에 기반할 수도 있다. 또 다른 변형은 이 동작을 keep-all과 병합하는 것이다.
hyphenate-limit-zone은 좋은 이름인가? 의견/제안은?
overflow-wrap: normal에서 허용되는 것처럼 keep-allauto-phrase 제한을 완화하는 것에서 opt out하기 위해 overflow-wrapnone 값을 추가해야 하는가?
이것은 정렬 문자의 중심이 정렬되어야 한다고 말하려는 것인가? 그것이 그렇게 말하고 있는지 명확하지 않지만, 정렬 문자의 서로 다른 발생이 서로 다른 글꼴에 있을 때 무슨 일이 일어나는지 설명하려면 그것(또는 다른 동작)이 명시되어야 한다. (또한, 그것이 의도된 동작인가? 아마 고려해야 할 가장 중요한 사용 사례는 bold vs. non-bold 텍스트일 것이며, 이는 너비가 약간만 다르다.) [feedback] [minutes face-to-face 2016-02-02 10:00 AM]
정렬 문자를 찾기 위해 어떤 텍스트를 검색하는지 이 동작은 지정해야 한다. cell을 containing block으로 하는 in-flow 텍스트만인가? 아니면 cell이 형성한 block formatting context 안의 모든 in-flow descendant 내부 텍스트가 고려되는가? 그렇다면, 그 descendant의 text-align 속성이 cell의 것과 일관되는 동안만 고려되는가? (정렬 문자에서 일관되는가, 아니면 완전히 일관되는가?)
정렬 문자가 cell 콘텐츠 끝에 삽입된 것처럼 정렬하는 이 동작은, 문자 중심 정렬과 결합되면, 열의 어느 줄에도 정렬 문자가 없거나, 더 중요하게는 일부 줄에 정렬 문자가 있지만 열이 max-content 너비로 배치되지 않은 경우, <string> 텍스트 정렬을 가진 단독 줄의 end-side에 틈을 만들 것이다. 이는 아마 바람직하지 않다.
정렬 문자가 콘텐츠 끝에 삽입될 때, 어떤 글꼴이 사용되는가? (특히, 정렬 문자가 descendant block 안에 있을 수 있다면, 그 block의 글꼴인가, 아니면 table cell의 글꼴인가? 또는 삽입 위치가 inline 안의 forced break라면, inline의 글꼴을 사용하는가, 아니면 block 또는 cell의 글꼴을 사용하는가?)
이것은 문자 정렬이 min-content 및 max-content intrinsic width (table column 및 table column 안에 들어갈 수 있는 모든 콘텐츠의 것)에 어떤 영향을 주는지에 대한 공식 정의를 가져야 한다. Max-content intrinsic width는 세 숫자로 분리되어야 한다 (정렬 문자의 중심이 정렬된다고 가정): 정렬 문자가 없는 너비 하나, 정렬 문자의 중심의 inline-start 쪽 너비 하나, 정렬 문자의 중심의 inline-end 쪽 너비 하나. 이는 max-content width에 대해 forced break 사이의 모든 텍스트 segment를 기반으로 동작한다. min-content width의 경우, 그 안에 optional break가 포함된 forced break 사이의 텍스트 segment는 명확히 without-alignment-character width에만 기여해야 한다. 그러나 모든 min-content width가 이런 방식으로 동작해야 하는지, 또는 optional break가 없는 forced break 사이의 segment (그리고 아마 실제로 정렬 문자를 포함하는 것만)가 대신 start-side-of-alignment-character 및 end-side-of-alignment-character min-content width에 기여해야 하는지는 덜 명확하다; 이 선택은 table의 min-content sizing이 가장 좁은 합리적 크기를 의미하는 것과 더 많은 경우에서 정렬 문자를 존중하는 것 사이의 tradeoff이다. 또 다른 옵션은 optional break의 line-breaking 허용 여부를 어떤 동작을 사용할지에 대한 제어로 사용하는 것일 수 있다.
column-spanning cell에서 <string> 값의 text-align이 갖는 intrinsic width contribution을 공식적으로 정의하는 것은 non-column-spanning cell의 intrinsic width contribution에 대해 내려진 결정을 (직접적이지만) 복잡하게 확장하는 것이며, 이것도 공식적으로 정의되어야 한다. Contribution은 정렬에 사용되는 startmost 또는 endmost column의 split intrinsic width에, 그리고 다른 spanned column의 without-alignment-character intrinsic width에 이루어진다.
이 키워드는 이전에 text-spacing의 일부였다; 이제 여기에 있으므로 더 구체적으로 이름을 바꿀 필요가 있을 수 있다. 예컨대 U+0020도 압축될 수 없다는 뜻으로 보이기 때문이다. [Issue #7079]
이 속성의 변형은 상속되며, 각 block container에 개별적으로 적용되고, 그 block의 직접 자식인 line box에만 영향을 준다. 이는 덜 유용하지만, 아마 구현하기는 더 쉬울 것이다.
같은 block container에서 비롯된 float도 같은 양만큼 어떻게든 함께 이동시키면 더 보기 좋게 맞춰질 것이며, 이는 특히 CJK layout에서 가치가 있을 것이다. 그것이 정확히 어떻게 동작하는지, 그리고 조상 요소에서 침범해 오는 float와 어떻게 상호작용하는지는 독자에게 연습 문제로 남긴다.
auto가 필요한가? 작성자가 첫 줄의 시작에서 platform-dependent 동작을 선택하는 것은 이상할 것이며, 그 밖에는 trim-both를 사용해야 한다.
클래스와 Unicode code point는 검토 중이며, Unicode의 더 최근 추가 사항을 수용하려면 적어도 일부 변경이 필요하다. [Issue #9503]