CSS 다단 레이아웃 모듈 레벨 2

W3C 최초 공개 워킹 드래프트,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2024/WD-css-multicol-2-20241219/
최신 공개 버전:
https://www.w3.org/TR/css-multicol-2/
에디터스 드래프트:
https://drafts.csswg.org/css-multicol-2/
히스토리:
https://www.w3.org/standards/history/css-multicol-2/
피드백:
CSSWG 이슈 저장소
명세 내 인라인
에디터:
Florian Rivoal (Bloomberg 대표)
(Google)
이전 에디터:
(Opera Software)
명세 편집 제안:
GitHub 에디터
테스트 스위트:
https://wpt.fyi/results/css/css-multicol/

요약

이 명세서는 웹을 위한 스타일시트 언어인 CSS에서 다단 레이아웃(multi-column layout)을 설명합니다. 본 명세서에서 설명하는 기능을 이용하면, 콘텐츠를 여러 개의 단에 걸쳐 흐르게 하면서 단 사이에 간격(gap)과 구분선(rule)을 둘 수 있습니다.

CSS는 구조화된 문서(HTML, XML 등)를 화면이나 종이 등 다양한 매체에 렌더링하는 방법을 기술하는 언어입니다.

이 문서의 현황

이 절은 본 문서가 발행된 시점의 상태를 설명합니다. 최신 W3C 발행물 목록과 이 기술 보고서의 최신 개정본은 W3C 기술 보고서 인덱스 https://www.w3.org/TR/에서 확인할 수 있습니다.

이 문서는 CSS 워킹 그룹최초 공개 워킹 드래프트(First Public Working Draft)로 권고 트랙에 따라 발행한 것입니다. 최초 공개 워킹 드래프트로의 발행은 W3C 및 그 회원의 지지를 의미하지 않습니다.

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

피드백은 GitHub에 이슈 등록(권장, preferred) 방식으로 보내주시고, 이슈 제목에 “css-multicol”을 포함해 주십시오. 예: “[css-multicol] …의견 요약…”. 모든 이슈와 코멘트는 아카이브됩니다. 또는 (아카이브되는) 공개 메일링 리스트 www-style@w3.org로 피드백을 보낼 수도 있습니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서의 적용을 받습니다.

이 문서는 W3C 특허 정책하에 운영되는 그룹에서 작성되었습니다. W3C는 그룹의 결과물과 관련해 이루어진 모든 특허 공개 내역을 공개 목록으로 관리합니다. 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 어떤 개인이 특정 특허가 필수적 청구항(Essential Claim)을 포함한다고 실제로 인지할 경우, W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

1. 소개

(이 절은 비규범적입니다.)

이 모듈은 CSS에서의 다단 레이아웃을 설명합니다. 본 문서에서 설명하는 기능을 사용하여, 스타일시트는 요소의 콘텐츠가 여러 단에 걸쳐 배치되도록 선언할 수 있습니다.

CSS의 다른 레이아웃 방식들은 부모 요소에 적용될 때, 직접 자식들의 display 속성을 변경합니다. 예를 들어 3단 그리드 레이아웃이 만들어지면, 그리드 컨테이너의 직접 자식들은 그리드 아이템이 되어 각 셀에 한 요소씩 들어가고, 필요에 따라 추가 행이 생성됩니다.

그러나 다단 컨테이너의 자식 요소들은 일반적인 플로우를 유지하며, 그 플로우가 여러 개의 단으로 배치됩니다. 이 단들은 인라인 크기가 유동적이어서, 사용 가능한 공간에 따라 단의 크기나 개수가 바뀝니다.

다단 레이아웃은 CSS에서 쉽게 설명할 수 있습니다. 다음은 간단한 예제입니다:

body { column-width: 12em }

이 예제에서 body 요소는 최소 12em 너비의 단을 갖도록 설정되었습니다. 실제 단의 개수는 사용 가능한 공간에 따라 달라집니다.

단의 개수도 스타일시트에서 명시적으로 지정할 수 있습니다:

body { column-count: 2 }

이 경우, 단의 개수는 고정되고 단의 너비는 사용 가능한 너비에 따라 달라집니다.

축약형 columns 속성을 사용하면 한 번의 선언으로 두 속성 중 하나 또는 모두를 설정할 수 있습니다.

다음 예시에서는 단의 개수, 단의 너비, 그리고 개수와 너비를 모두 각각 설정합니다:
body { columns: 2 }
body { columns: 12em }
body { columns: 2 12em }

이 모듈에서 도입된 또 다른 속성 그룹은 단 사이의 간격과 구분선을 설명합니다.

body {
  column-gap: 1em;
  column-rule: thin solid black;
}

위 예제의 첫 번째 선언은 인접한 두 단 사이의 간격을 1em으로 설정합니다. 컬럼 간격은 패딩 영역과 비슷합니다. 간격의 중앙에는 column-rule 속성으로 지정되는 구분선이 생깁니다.

column-rule 속성의 값은 CSS의 border 속성과 유사합니다. border와 마찬가지로, column-rule도 축약형 속성입니다.

이 예시에서는 위의 column-rule 축약형 선언을 풀어서 쓴 것입니다:
body {
  column-gap: 1em;
  column-rule-width: thin;
  column-rule-style: solid;
  column-rule-color: black;
}

column-fillcolumn-span 속성은 다단 레이아웃에서 스타일시트가 더 다양한 시각적 표현을 할 수 있게 해줍니다.

이 예제에서 단은 균형 있게(즉, 거의 같은 길이로) 배치됩니다. 또한 h2 요소는 모든 단을 가로지르도록 설정됩니다.
div { column-fill: balance }
h2 { column-span: all }

이 명세서에서는 위 예시에서 모두 사용된 10개의 새로운 속성을 도입합니다.

모든 단 관련 속성이 초기값을 가질 경우, 해당 요소의 레이아웃은 단이 하나뿐인 다단 레이아웃과 동일하게 동작합니다.

단 간격(사선 해칭)과 구분선은 아래 다단 컨테이너 샘플 렌더링에서 볼 수 있습니다 (패딩은 교차 해칭으로 표시). 해칭 영역은 설명 목적으로만 표시되었습니다. 실제 구현에서는 이러한 영역이 배경에 의해 결정되며, 두 번째 이미지는 다단 컨테이너에 column-rule이 적용된 렌더링을 보여줍니다.
a diagram showing the various parts of multi-column layout key to the conventions used to display invisible parts of diagram
다단 컨테이너 내부에서 보이지 않는 column-span과 padding이 강조된 다단 레이아웃입니다.
a diagram showing the various parts of multi-column layout
첫 번째 이미지와 동일한 레이아웃을, 실제 구현에서 표시되는 형태로 보여줍니다.

1.1. 값 정의

이 명세서는 CSS 속성 정의 규약[CSS21]에서 따르고, 값 정의 문법[CSS-VALUES-3]에서 사용합니다. 이 명세서에서 정의되지 않은 값 타입은 CSS Values & Units [CSS-VALUES-3]에서 정의됩니다. 다른 CSS 모듈과의 조합에 따라 이러한 값 타입의 정의가 확장될 수 있습니다.

각 속성 정의에 나열된 속성별 값 이외에도, 이 명세서에서 정의된 모든 속성은 CSS 전역 키워드도 속성값으로 허용합니다. 가독성을 위해, 이 값들은 명시적으로 반복하지 않았습니다.

2. 모듈 상호작용

이 문서는 이전 명세서에 없는 새로운 기능을 정의합니다. 또한 최종화되면 다음을 대체하고 폐기합니다:

3. 다단 모델

column-width 또는 column-count 속성이 auto가 아닌 요소는 다단 컨테이너가 되며, (줄여서 multicol container), 따라서 다단 레이아웃의 컨테이너 역할을 합니다.

전통적인 CSS 박스 모델에서는, 요소의 콘텐츠가 해당 요소의 content box에 흐릅니다. 다단 레이아웃은 분할 컨텍스트를 도입하며, 이는 익명 분할 컨테이너로 구성되고, 이들을 컬럼 박스(줄여서 column)라고 합니다. 이러한 컬럼 박스는 독립된 블록 포매팅 컨텍스트를 생성하여 다단 컨테이너의 콘텐츠가 흐르도록 하며, 비포지셔닝 자식들의 컨테이닝 블록을 구성합니다.

이 예제에서 이미지의 너비는 다음 규칙으로 설정됩니다:
img {
  display: block;
  width: 100%;
}

컬럼 박스가 새로운 블록 포매팅 컨텍스트를 생성하므로, width는 컬럼 박스를 기준으로 계산됩니다. 따라서 이미지는 컬럼 박스를 넘치지 않습니다:

an image contained inside a column box
이미지는 자신이 표시되는 컬럼 박스에 의해 제한됩니다.
컬럼 박스가 새로운 블록 포매팅 컨텍스트를 생성하므로, multicol 컨테이너의 첫 번째 자식 요소에 설정한 top 마진은 multicol 컨테이너의 마진과 병합되지 않습니다.
The first paragraph has a 'margin-top' of ''1em'', which appears before the text.
첫 번째 문단 위의 마진이 병합되지 않아 multicol 컨테이너의 첫 줄 위에 1em 마진이 남아 있습니다.

다단 레이아웃 내부의 플로트는 플로트가 등장한 컬럼 박스를 기준으로 위치가 결정됩니다.

이 예제에서 이 CSS 코드는 이미지의 표시 방식을 설명합니다:
img {
  display: block;
  float: right;
}

HTML에서는 이미지는 "닭다리"라는 문장이 끝난 후에 등장합니다.

an image floated and contained inside a column box
이미지는 자신이 포함된 컬럼 박스 안에서 플로트됩니다.

컬럼 박스블록 축에서 넘치는 콘텐츠는 분할되어 다음 컬럼 박스로 이어집니다.

참고: 익명 박스인 컬럼 박스는 컨테이닝 블록이 되지 않습니다 절대 위치 박스의. 그러한 박스의 컨테이닝 블록을 결정하는 position 속성은 multicol 컨테이너에 적용되며, 이것이 주요 박스가 됩니다.

이 예제에서 다단 컨테이너position: relative이므로 컨테이닝 블록이 됩니다. 이미지는 다단 컨테이너의 직접 자식이며, position: absolute를 가집니다. 이미지는 다단 컨테이너를 기준으로 위치가 결정되며, 컬럼 박스를 기준으로 하지는 않습니다.
.container {
  position: relative;
  column-count: 3;
}
img {
  position: absolute;
  top: 20px;
  left: 40px;
}
The absolutely positioned image is positioned by reference to the [=multi-column container=] not the [=column box=].
이 그림은 절대 위치 이미지는 컬럼 박스가 아니라 multicol 컨테이너를 기준으로 위치 잡힌다는 것을 보여줍니다.

다단 컨테이너의 out-of-flow 후손은 컬럼 균형에 영향을 주며, 다단 컨테이너의 block-size에도 영향을 줍니다.

컬럼 박스는 multicol 컨테이너의 인라인 기본 방향에 따라 정렬되며, 다단 라인으로 배치됩니다. 단 너비는 인라인 방향에서의 컬럼 박스 길이입니다. 단 높이는 블록 방향에서의 컬럼 박스 길이입니다. 한 라인 내의 모든 컬럼 박스는 같은 단 너비를 가지며, 한 라인 내의 모든 컬럼 박스는 같은 단 높이를 가집니다.

참고: 세로 쓰기 모드를 사용하는 텍스트에서 블록 방향은 수평입니다. 세로 쓰기 모드에서는 단이 수평으로 배치되며, 블록의 흐름 방향은 오른쪽에서 왼쪽 또는 왼쪽에서 오른쪽일 수 있습니다. 따라서 column-width 속성은 컬럼의 인라인 크기를 의미하지, 물리적인 수평 너비를 의미하지 않습니다.

The first image shows horizontal text with a LTR inline direction. The second shows vertical text with blocks flowing right to left. The third shows vertical text with blocks flowing left to right.
쓰기 모드에 따라 컬럼이 어떻게 다르게 배치될 수 있는지 보여주는 그림입니다.
왼쪽부터: horizontal-tb, vertical-rl, vertical-lr.

다단 라인 내에서는 인접한 컬럼 박스가 단 간격으로 구분되며, 그 안에는 구분선이 있을 수 있습니다. 같은 다단 컨테이너 내의 모든 단 간격은 동일합니다. 같은 다단 컨테이너 내의 모든 구분선도 동일하며, 두 컬럼 모두에 콘텐츠가 있을 때만 나타납니다.

가장 단순한 경우 multicol 컨테이너는 한 줄의 컬럼만 포함하며, 각 컬럼의 높이는 multicol 컨테이너 content box의 사용된 높이와 동일합니다. 그러나 분할 또는 스패너에 의해 다단 컨테이너의 콘텐츠가 여러 다단 라인으로 나뉠 수 있습니다.

다단 컨테이너가 페이지네이션될 경우, 각 컬럼의 높이는 페이지에 의해 제한되며 콘텐츠는 다음 페이지의 새로운 컬럼 라인으로 이어집니다. 컬럼 박스는 절대 페이지를 가로질러 분할되지 않습니다.

동일한 효과는 스패닝 요소가 다단 컨테이너를 분할할 때도 발생합니다: 스패너 전의 컬럼들은 균형 있게 줄어들고, 스패너 이후의 콘텐츠는 새로운 컬럼 라인에 흐르게 됩니다.

a diagram showing a spanning element causing the shortened columns above the element with text continuing in new columns below
스패닝 요소가 multicol 컨테이너를 어떻게 분할하는지 보여주는 예시입니다.

다단 컨테이너는 즉, 새로운 독립 포매팅 컨텍스트를 생성하는 일반 블록 컨테이너이며, 그 콘텐츠는 일련의 다단 라인과 multicol 스패너로 구성됩니다. 각 다단 라인블록 수준 박스로 동작하며, 자신의 다단 포매팅 컨텍스트컬럼 박스에 대해 생성합니다; 각 스패너블록 수준 박스로 동작하며, 자신의 독립 포매팅 컨텍스트를 생성하며, 그 타입은 평소처럼 display 값에 따라 다릅니다.

다단 컨테이너의 중첩이 허용되지만, 구현에 따라 제한이 있을 수 있습니다.

참고: 컬럼 박스에는 속성/값을 설정할 수 없습니다. 예를 들어 특정 컬럼 박스의 배경을 지정할 수 없으며, 컬럼 박스는 padding, margin, border 개념이 없습니다. 미래 명세에서 추가 기능이 도입될 수 있습니다. 예를 들어, 컬럼마다 다른 너비·배경을 지원할 수 있습니다.

참고: 컬럼 높이가 뷰포트보다 큰 multicol 컨테이너는 접근성 이슈가 생길 수 있습니다. 자세한 내용은 접근성 고려사항을 참고하세요.

4. 단의 개수와 너비

다단 콘텐츠를 레이아웃할 때 단의 개수와 너비를 결정하는 것은 근본적으로 중요합니다. 아래 속성들은 단의 개수와 너비를 설정하는 데 사용됩니다:

세 번째 속성인 columnscolumn-widthcolumn-count 모두를 설정하는 축약형 속성입니다.

명시적인 컬럼 나눔, 콘텐츠, 높이 제약 등 다른 요인들도 실제 단의 개수와 너비에 영향을 줄 수 있습니다.

4.1. 단의 인라인 크기: column-width 속성

이름: column-width
값: auto | <length [0,∞]>
초기값: auto
적용 대상: 블록 컨테이너 (단, table wrapper box 제외)
상속: 아니오
백분율: 해당 없음
계산값: auto 키워드 또는 절대 길이
정규 순서: 문법에 따름
애니메이션 타입: 계산값 타입에 따라

이 속성은 다단 컨테이너에서 단의 너비를 지정합니다.

auto
컬럼 너비가 다른 속성(예: column-count가 auto가 아닌 값을 가질 때)에 의해 결정됨을 의미합니다.
<length [0,∞]>
최적의 컬럼 너비를 설명합니다. 실제 컬럼 너비는 (공간을 채우기 위해) 더 넓어질 수 있고, (사용 가능한 공간이 지정된 컬럼 너비보다 작을 때) 더 좁아질 수도 있습니다. 음수 값은 허용되지 않습니다. 사용값은 최소 1px로 클램핑됩니다.
예를 들어, 다음 스타일시트를 보세요:
div {
  width: 100px;
  column-width: 45px;
  column-gap: 0;
  column-rule: none;
}

100px 너비의 요소 안에 45px 너비의 단이 두 개 들어갈 수 있습니다. 사용 가능한 공간을 모두 채우기 위해 실제 단의 너비는 50px로 늘어납니다.

또 다른 예로, 다음 스타일시트를 보세요:
div {
  width: 40px;
  column-width: 45px;
  column-gap: 0;
  column-rule: none;
}

사용 가능한 공간이 지정한 단 너비보다 작으므로, 실제 단의 너비는 더 작아집니다.

column-width가 세로 쓰기 텍스트에도 사용할 수 있도록, 단 너비는 컬럼 안의 라인 박스 길이를 의미합니다.

참고: column-width를 다소 유동적으로 만든 이유는 다양한 화면 크기에 맞는 확장성 있는 디자인을 위해서입니다. 정확한 단 너비를 설정하려면, 컬럼 간격과 multicol 컨테이너의 너비(수평 텍스트 기준)도 반드시 지정해야 합니다.

4.2. 단의 개수: column-count 속성

이름: column-count
값: auto | <integer [1,∞]>
초기값: auto
적용 대상: 블록 컨테이너 (단, table wrapper box 제외)
상속: 아니오
백분율: 해당 없음
계산값: 지정한 값
정규 순서: 문법에 따름
애니메이션 타입: 계산값에 따라

이 속성은 multicol 컨테이너의 단 개수를 지정합니다.

auto
단의 개수가 다른 속성(예: column-width가 auto가 아닌 값일 때)에 의해 결정됨을 의미합니다.
<integer [1,∞]>
요소의 콘텐츠가 흐를 최적의 단 개수를 지정합니다. 값은 0보다 커야 합니다. column-widthcolumn-count가 모두 auto가 아닌 값을 가지면, 정수 값은 최대 단 개수를 의미합니다.
예시:
body { column-count: 3 }

4.3. column-widthcolumn-count 축약형: columns 속성

이름: columns
값: <'column-width'> || <'column-count'>
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
백분율: 개별 속성 참조
계산값: 개별 속성 참조
애니메이션 타입: 개별 속성 참조
정규 순서: 문법에 따름

이 속성은 column-widthcolumn-count를 동시에 설정하는 축약형 속성입니다. 생략된 값은 초기값으로 설정됩니다.

columns 속성을 사용한 올바른 선언 예시:
columns: 12em;      /* column-width: 12em; column-count: auto */
columns: auto 12em; /* column-width: 12em; column-count: auto */
columns: 2;         /* column-width: auto; column-count: 2 */
columns: 2 auto;    /* column-width: auto; column-count: 2 */
columns: auto;      /* column-width: auto; column-count: auto */
columns: auto auto; /* column-width: auto; column-count: auto */

4.4. 의사 알고리즘

아래 의사 알고리즘은 column-count(N)와 column-width(W)의 사용값을 결정합니다. 의사 알고리즘에는 또 다른 변수 U(다단 컨테이너의 사용 너비)가 있습니다.

참고: 다단 컨테이너의 사용 너비 U는 요소의 내용에 따라 달라질 수 있으며, 이 경우 column-countcolumn-width의 계산값에도 영향을 받을 수 있습니다. 본 명세서는 U가 어떻게 계산되는지는 정의하지 않습니다. 별도의 모듈(아마도 Basic Box Model [CSS3BOX] 또는 Box Sizing Module [CSS3-SIZING])에서 정의될 예정입니다.

floor(X) 함수는 X 이하의 가장 큰 정수 Y를 반환합니다.

(01)  if ((column-width = auto) and (column-count = auto)) then
(02)      exit; /* 다단 컨테이너가 아님 */
(03)  if column-width = auto then
(04)      N := column-count
(05)  else if column-count = auto then
(06)      N := max(1,
(07)        floor((U + column-gap)/(column-width + column-gap)))
(08)  else
(09)      N := min(column-count, max(1,
(10)        floor((U + column-gap)/(column-width + column-gap))))

그리고:

(11)  W := max(0, ((U + column-gap)/N - column-gap))

auto 반복 컬럼의 개수를 구할 때, UA는 컬럼 크기를 UA가 지정한 값 이하로 내림(floor)해야 하며, 0으로 나눔을 피해야 합니다. 이 하한값은 1px 이하가 권장됩니다.

페이지 매체 등 분할 문맥(fragmented contexts)에서는, UA가 이 계산을 분할별로 할 수 있습니다.

column-count의 사용값은 명시적 컬럼 나눔이나 컬럼 높이 제약과 무관하게 계산되며, 실제 값은 이를 고려합니다.

이 예제에서 명시적인 컬럼 분할 때문에 실제 column-count가 사용값보다 더 높아집니다:
div {
  width: 40em;
  columns: 20em;
  column-gap: 0;
}

p {
  break-after: column;
}
<div>
  <p>one
  <p>two
  <p>three
</div>
Two columns drawn inside the container, one outside
계산된 column-count는 auto, 사용 column-count는 2, 실제 column-count는 3입니다.
실제 column-count가 사용 column-count보다 적을 수도 있습니다. 다음 예시를 보세요:
div {
  width: 80em;
  height: 10em;
  columns: 20em;
  column-gap: 0;
  column-fill: auto;
}
<div>foo</div>

계산된 column-count는 auto, 사용 column-count는 4, 실제 column-count는 1입니다.

4.5. 스태킹 컨텍스트

다단 컨테이너의 모든 컬럼 박스는 동일한 스태킹 컨텍스트에 속하며, 그 내용의 그리기 순서는 CSS 2.1에 명시된 대로입니다. 컬럼 박스는 새로운 스태킹 컨텍스트를 생성하지 않습니다.

4.6. 컬럼 스타일링: ::column 가상 요소

::column 가상 요소는 다단 컨테이너 내의 개별 컬럼을 나타냅니다. 오직 다단 컨테이너에만 존재합니다.

다단 컨테이너는 컬럼 수만큼의 ::column 가상 요소를 가집니다. 이들은 개별적으로 선택할 수 없으며, multicol의 ::column 가상 요소에 적용된 스타일은 해당 요소의 모든 컬럼에 적용됩니다. 각 ::column은 해당 컬럼과 동일한 크기와 위치를 가지며, 컬럼의 사용 가능 공간의 인라인 축과 컨테이너의 콘텐츠 박스의 블록 축에서 동일한 크기를 가집니다. (컬럼 간의 간격/구분선은 포함하지 않습니다.)

::column 가상 요소는 자신이 속한 다단 컨테이너의 자식으로 취급되며, 별도의 콘텐츠는 가질 수 없습니다. 이들은 컬럼의 콘텐츠를 감싸지 않고, 동일한 공간만 채웁니다.

::column 가상 요소는 아래 속성만 사용할 수 있습니다:

또한, ::column 가상 요소는 ::scroll-marker 가상 요소를 자식으로 가질 수 있으며, ::column::scroll-marker 형태로 사용합니다. (다른 가상 요소는 ::column에서 사용할 수 없습니다.) 이러한 ::scroll-marker 가상 요소의 상속 기준은 ::column이 아니라 원본 요소에서 상속합니다.

참고: ::column에서 동작하는 속성과 가상 요소 목록은 앞으로 컬럼의 위치만 신경쓰고 콘텐츠에는 신경쓰지 않는 추가 기능들이 개발됨에 따라 확장될 수 있습니다.

5. 컬럼 간격과 구분선

컬럼 간격과 구분선은 동일한 다단 컨테이너 내의 컬럼 사이에 배치됩니다. 컬럼 간격과 컬럼 구분선의 길이는 컬럼 높이와 같습니다. 컬럼 간격은 공간을 차지합니다. 즉, 컬럼 간격은 인접한 컬럼의 콘텐츠를 서로 벌어지게 만듭니다 (같은 다단 컨테이너 내에서).

컬럼 구분선컬럼 간격의 중앙에 그려지며, 끝점은 다단 컨테이너의 반대쪽 콘텐츠 엣지에 위치합니다. 컬럼 구분선은 공간을 차지하지 않습니다. 즉, 컬럼 구분선의 존재나 두께는 다른 어떤 것의 배치에도 영향을 미치지 않습니다. 컬럼 구분선이 간격보다 넓으면, 인접 컬럼 박스가 구분선을 덮게 되며, 구분선이 다단 컨테이너의 박스 밖으로 벗어날 수도 있습니다. 컬럼 구분선은 다단 컨테이너의 경계선 바로 위에 그려집니다. 스크롤 가능한 다단 컨테이너의 경우, 컨테이너의 경계선 및 배경은 스크롤되지 않지만, 구분선은 컬럼과 함께 스크롤되어야 합니다. 컬럼 구분선은 두 컬럼 모두에 콘텐츠가 있을 때만 그려집니다.

5.1. 컬럼 사이의 거터: column-gap 속성

column-gap 속성은 [CSS3-ALIGN]에 정의되어 있습니다.

다단 포매팅 컨텍스트에서 normal로 지정된 column-gap의 사용값은 1em입니다. 이는 초기값을 사용할 때 컬럼이 읽기 쉽게 보장합니다. 컬럼 사이에 구분선이 있다면, 그 구분선은 간격의 중앙에 표시됩니다.

5.2. 컬럼 구분선 색상: column-rule-color 속성

이름: column-rule-color
값: <color>
초기값: currentcolor
적용 대상: 다단 컨테이너
상속: 아니오
백분율: 해당 없음
계산값: 계산된 색상
정규 순서: 문법에 따름
애니메이션 타입: 계산값 타입에 따라
<color>
컬럼 구분선의 색상을 지정합니다.

5.3. 컬럼 구분선 스타일: column-rule-style 속성

이름: column-rule-style
값: <line-style>
초기값: none
적용 대상: 다단 컨테이너
상속: 아니오
백분율: 해당 없음
계산값: 지정한 키워드
정규 순서: 문법에 따름
애니메이션 타입: 불연속

column-rule-style 속성은 요소의 컬럼 사이 구분선의 스타일을 지정합니다. <line-style> 값은 collapsing border model과 같이 해석됩니다.

nonehidden 값은 column-rule-width의 계산값을 0으로 강제합니다.

5.4. 컬럼 구분선 너비: column-rule-width 속성

이름: column-rule-width
값: <line-width>
초기값: medium
적용 대상: 다단 컨테이너
상속: 아니오
백분율: 해당 없음
계산값: 절대 길이, 테두리 너비로 스냅됨; 0 (구분선 스타일이 none 또는 hidden일 때)
정규 순서: 문법에 따름
애니메이션 타입: 계산값 타입에 따라

이 속성은 컬럼 사이 구분선의 너비를 지정합니다. 음수 값은 허용되지 않습니다.

5.5. 컬럼 구분선 축약형: column-rule 속성

이름: column-rule
값: <'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
백분율: 개별 속성 참조
계산값: 개별 속성 참조
애니메이션 타입: 개별 속성 참조
정규 순서: 문법에 따름

이 속성은 column-rule-width, column-rule-style, column-rule-color를 스타일시트에서 한 번에 설정할 수 있는 축약형 속성입니다. 생략된 값은 초기값으로 설정됩니다.

이 예제에서 컬럼 구분선컬럼 간격의 너비가 동일합니다. 그래서 완전히 동일한 공간을 차지합니다.
body {
  column-gap: 35px;
  column-rule-width: 35px;
  column-rule-style: solid;
  column-rule-color: black;
}
The rule completely covers any gap.
컬럼 구분선과 컬럼 간격이 동일한 공간을 차지합니다.

6. 컬럼 나눔

여러 단으로 콘텐츠를 배치할 때, 사용자 에이전트는 컬럼 나눔 위치를 결정해야 합니다. 콘텐츠를 단으로 분할하는 문제는 페이지로 분할하는 문제와 유사하며, 이는 CSS 2.1, 13.3.3절에 설명되어 있습니다 [CSS21].

컬럼 나눔도 페이지 나눔과 동일한 속성에서 기술할 수 있도록, 세 가지 새로운 속성이 도입되었습니다: break-before, break-after, break-inside.

6.1. 분할 제어: break-before, break-after, break-inside 속성

break-before, break-after, break-inside 속성은 [CSS3-BREAK]에 정의되어 있습니다.

7. 컬럼 병합

column-span 속성을 사용하면 요소가 여러 컬럼을 가로지를 수 있습니다. 본 명세서는 이전 레벨의 값에 <integer> 값을 추가합니다.

7.1. column-span

이름: column-span
값: none | <integer [1,∞]> | all | auto
초기값: none
적용 대상: 인플로우 블록 수준 요소
상속: 아니오
백분율: 해당 없음
계산값: 지정한 값
정규 순서: 문법에 따름
애니메이션 타입: 불연속

이 속성은 요소가 몇 개의 컬럼을 가로지를지 지정합니다. 값은 다음과 같습니다:

none
요소가 여러 컬럼을 가로지르지 않습니다.
all
요소는 컬럼 나눔을 강제로 만들고 플로우 외(out of flow)로 처리되어 동일 블록 포매팅 컨텍스트 내에서 가장 가까운 다단 조상(multicol ancestor)의 모든 컬럼을 가로지릅니다. 해당 요소보다 앞에 나타나는 플로우 내(normal flow) 콘텐츠는 자동으로 바로 앞 다단 라인 전체에 균등 분산되며, 이후 콘텐츠는 해당 요소 뒤의 새로운 다단 라인에 흐릅니다. 이 요소는 독립 포매팅 컨텍스트를 생성합니다.

참고: 해당 요소가 새로운 포매팅 컨텍스트를 생성하는지 여부는 다단 후손인지와 관계가 없습니다. column-spanall일 때는 항상 생성합니다. 이는 향후 다단이 제거되거나, 미디어 쿼리 등으로 다단을 끄는 상황에서도 디자인의 견고성을 높입니다.

<integer [1,∞]>
요소가 지정한 개수의 컬럼을 가로지릅니다. 값은 0보다 커야 합니다. 지정한 정수 값이 다단 요소의 컬럼 수와 같거나 크면, column-span: all과 동일하게 처리됩니다.
이 정의는 불충분합니다.
  • column-span: 1column-span: none과 같은가, 아니면 스패너(즉, BFC)를 생성하는가?
  • 어떤 컬럼을 가로지르는가?
  • 높이 계산, column-fill과의 상호작용은?
auto
요소가 가로지를 컬럼 수는 해당 요소의 min-content outer size다단 컨테이너의 인라인 방향에 따라 결정됩니다. 만약 이 값이 column-width의 사용값보다 작으면, column-span: none과 동일하게 처리됩니다. 그렇지 않으면, 가로지를 컬럼 수는 n에 대해 n × column-width + (n - 1) × column-gapmin-content outer size보다 커지는 가장 작은 양의 정수 n입니다. 이 값이 컬럼 수보다 크면, column-span: all과 동일하게 처리됩니다.

column-span: 1column-span: none과 동일하지 않다면, 요소가 충분히 작을 때 column-span: 1로 취급해야 할지 column-span: none으로 취급해야 할지?

2개 이상의 컬럼을 가로지르는 요소를 다단 스패닝 요소라고 하며, 생성된 박스를 다단 스패너라고 합니다.

스패너컨테이닝 블록다단 컨테이너 자체입니다. 따라서 스패너 자체가 내부의 절대 위치 박스의 컨테이닝 블록이 되지 않는 경우, 컨테이닝 블록 체인다단 컨테이너까지 바로 건너뜁니다(스패너와 다단 컨테이너 사이의 조상은 건너뜀).

스패너가 플로우 외(out-of-flow)로 처리되더라도, 이는 스패닝 요소의 페인팅 순서 [CSS21]에는 영향을 주지 않습니다.

이 예제에서 h2 요소가 샘플 문서의 여섯 번째 문장(즉, "the leg of a" 뒤)에 추가되었습니다. 적용된 스타일:
h2 { column-span: all; background: silver }

column-spanall로 지정하면, h2 요소 앞에 등장하는 모든 콘텐츠가 h2 위에 표시됩니다.

An element spans all three columns
h2 요소에 column-span: all이 적용된 모습

스패너가 다단 라인을 분할하므로, 컬럼 구분선도 중단됩니다(컬럼 구분선은 컬럼이 한 다단 라인에 있을 때만 그려짐).

스패닝 요소는 첫 번째 레벨의 후손이 아니어도, 동일한 포매팅 컨텍스트 내에 속하고, 스패닝 요소와 다단 컨테이너 사이에 고정 위치 자손의 컨테이닝 블록을 생성하는 무언가가 없다면, 사용할 수 있습니다.

이 예제에서 column-span: all이 적용된 요소는 transform: rotate(90deg)를 가진 요소 내부에 있습니다. transform은 고정 위치 자손의 컨테이닝 블록을 생성하므로, 스패너가 생성되지 않습니다.
<article>
  <section>
    <div class="spanner">Attempted spanner</div>
  </section>
</article>
article {
  columns: 2;
}

section {
  transform: rotate(90deg);
}

.spanner {
  column-span: all;
  background: silver;
}

스패너 앞의 단편(fragment)이 비어 있을 경우, 별다른 일이 일어나지 않습니다; 상단 margin/border/padding은 빈 fragment처럼 스패닝 요소 위에 나타납니다.

이 예제에서 다단 컨테이너article 요소입니다. 이 부모 안에는 문단과 section 요소가 있습니다. section은 all로 지정된 h2 제목을 포함하고 있으며, 이는 세 컬럼 전체를 가로지릅니다. 하지만 section은 계속 컬럼 박스 내부에 남아 있습니다.

h2는 section의 첫 번째 자식입니다. 따라서 section의 margin, 테두리(그림에서는 빨간색), padding은 이 스패닝 h2 앞에 빈 fragment처럼 표시됩니다.

<article>
  <p>...</p>
  <section>
    <h2>An h2 element</h2>
    <p>...</p>
  </section>
</article>
section {
  border: 2px solid red;
  margin-top: 65px;
  padding-top: 20px;
}

h2 {
  column-span: all;
  background: silver
}
An element spans all three columns, the red border around the section breaks before the spanner.
h2 요소에 column-span: all이 적용됨. section에는 빨간 테두리와 top padding, margin이 있음

스패닝 요소는 일반적으로 요소가 차지하는 공간보다 더 많은 공간을 차지할 수 있습니다. 공간이 부족한 경우 스패닝 요소를 배치할 수 없을 수도 있습니다. 이 경우 사용자 에이전트는 해당 요소에 대해 none이 지정된 것처럼 처리할 수 있습니다.

이 예제에서 h2 요소는 콘텐츠 후반에 나타나며, 다단 컨테이너의 높이가 제한되어 있습니다. 따라서 h2 요소는 오버플로우 컬럼에 나타나고, 스패닝 처리를 할 공간이 없습니다. 결과적으로 이 요소는 column-span: none이 지정된 것처럼 나타납니다.
The h2 element is in an overflow column
h2 요소가 오버플로우 컬럼에 있고 column-span none과 같이 표시됨
이 예제는 앞 예제와 유사하나 H2 요소가 자연스럽게 마지막 컬럼에 나타납니다. 그래도 스패닝 처리를 할 공간이 없습니다.
The h2 element is in the final column
h2 요소가 마지막 컬럼에 있으며 column-span none과 같이 표시됨
분할 문맥(fragmented contexts)에서는 스패닝 요소가 모든 fragment에서 존중됩니다. 이 예제는 페이지 매체 상황입니다. 처음 세 문단 뒤에 컬럼 나눔이 있습니다. 네 번째 문단 뒤에 스패닝 H2 요소가 등장합니다.
Three columns with two lines of text each
이것이 첫 페이지에 표시됨
A spanning element across the three columns, text above and below.
이것이 두 번째 페이지에 표시됨

스패너는 블록 수준 박스이므로 인접한 두 스패너의 마진은 서로 병합됩니다. 절대 위치 아이템만으로 분리된 두 스패너의 마진도 병합됩니다(절대 위치 아이템은 컬럼 박스를 생성하지 않음). 컬럼 박스는 새로운 블록 포매팅 컨텍스트를 생성하므로, 컬럼 박스 내부 요소의 마진은 스패너와 병합되지 않습니다.

스패너는 새로운 포매팅 컨텍스트를 생성하지만, 마진은 주변에 의해 영향을 받을 수 있습니다. 이 예제에서 두 스패너가 자연스럽게 페이지 상단에 배치됩니다. 첫 번째 스패너의 위쪽 마진은 강제되지 않은 나눔과 맞닿아 잘려나갑니다. 두 스패너 사이의 마진은 서로 병합됩니다. 그러나 두 번째 스패너의 아래쪽 마진은 그 다음 요소의 위쪽 마진과 병합되지 않습니다.
h2 {
  margin: 16px 0;
  column-span: all;
  background: silver
}
p { margin-top: 16px }
Two spanning elements after a page break
두 스패닝 요소 사이의 마진은 병합되지만, 스패너 아래쪽 마진과 다음 요소 위쪽 마진은 병합되지 않음.

8. 컬럼 채우기

컬럼을 채우는 전략은 두 가지가 있습니다: 컬럼을 균형 있게 채우거나, 그렇지 않거나. 균형 있게 채우는 경우, 사용자 에이전트는 컬럼 높이의 차이를 최소화하려고 시도해야 하며, 강제 나눔, widows, orphans 등 컬럼 높이에 영향을 줄 수 있는 속성도 고려해야 합니다. 균형을 맞추지 않으면, 컬럼을 순차적으로 채워 일부 컬럼이 부분적으로 채워지거나 완전히 비게 됩니다.

8.1. 컬럼 균형: column-fill 속성

이름: column-fill
값: auto | balance | balance-all
초기값: balance
적용 대상: 다단 컨테이너
상속: 아니오
백분율: 해당 없음
계산값: 지정한 키워드
정규 순서: 문법에 따름
애니메이션 타입: 불연속

이 속성은 다단 라인에서 즉시 앞에 스패너가 없는 경우 컬럼이 균등 분배되는지 여부를 지정합니다.

값은 다음과 같습니다:

balance
가능한 한 컬럼에 균등하게 콘텐츠를 분배합니다. 분할 문맥(fragmented contexts)에서는 마지막 fragment만 균형을 맞춥니다.
balance-all
가능한 한 컬럼에 균등하게 콘텐츠를 분배합니다. 분할 문맥에서는 모든 fragment에서 균형을 맞춥니다.
auto
컬럼을 순차적으로 채웁니다

연속 문맥(continuous contexts)에서는 오버플로우 컬럼이 있을 때 이 속성이 효과가 없습니다.

이 예제에서 article은 짧은 문단 하나만 가지고 있고, 3줄로 나뉩니다. 컬럼 균형 덕분에 3줄이 각각 다른 컬럼에 표시됩니다.
article {
  width: 60em;
  height: auto;
  columns: 4;
  column-fill: balance;
}
Four columns, the first three have content.
컬럼 균형 덕분에 3줄이 3개의 컬럼에 나뉘어 표시됨.
이 예제에서는 컬럼 균형(balance)을 끄고 article에 높이를 지정했습니다:
article {
  width: 60em;
  height: 4em;
  columns: 4;
  column-fill: auto;
}

결과적으로 첫 번째 컬럼에 모든 콘텐츠가 표시됩니다:

Four columns, the first one has content.
균형 없이 전체 텍스트가 한 컬럼에만 표시됨.
이 예제에서 article에는 두 개의 문단이 있습니다: 첫 번째는 길고, 두 번째는 더 짧습니다. 적용된 코드는 다음과 같습니다:
article {
  width: 60em;
  height: auto;
  columns: 4;
  column-fill: balance;
}

p {
  break-after: column;
}

최단 컬럼 높이는 5줄입니다. 컬럼 높이가 정해지면, 컬럼은 순차적으로 채워집니다. 결과적으로 세 번째 컬럼은 앞의 두 컬럼과 같은 높이가 되고, 마지막 컬럼은 훨씬 짧아집니다.

Four columns, all have content.
컬럼 높이가 정해진 후 컬럼이 순차적으로 채워짐.
article {
  width: 60em;
  height: auto;
  columns: 4;
  column-fill: balance;
}

이 예제에서 article은 나눌 수 없는 figure로 시작하여 컬럼 높이가 결정됩니다. 이후 콘텐츠는 나머지 컬럼에 순차적으로 채워집니다:

Column one contains an image, two and three have content.
컬럼 높이는 figure에 의해 결정됨.

9. 오버플로우

9.1. 다단 컨테이너 내부의 오버플로우

컬럼 나눔을 유발하는 경우를 제외하고, 컬럼 박스를 벗어나는 콘텐츠는 컬럼 박스에 클리핑되지 않고 눈에 띄게 넘쳐 보입니다. column box.

참고: 컬럼 나눔은 § 6 컬럼 나눔을, 오버플로우가 다단 컨테이너의 콘텐츠 박스에 클리핑되는지는 § 9.2 다단 컨테이너 외부의 페이지네이션 및 오버플로우를 참고하세요.

이 예제에서 이미지는 컬럼보다 넓습니다:
첫 번째 컬럼의 이미지가 컬럼을 벗어나 보임
콘텐츠가 컬럼 박스에 클리핑되지 않고 눈에 띄게 넘칩니다.

9.2. 다단 컨테이너 외부의 페이지네이션 및 오버플로우

다단 컨테이너의 가장자리에서 컬럼 박스를 벗어나는 콘텐츠와 컬럼 구분선은 overflow 속성에 따라 클리핑됩니다.

다음과 같은 경우 다단 컨테이너는 공간보다 더 많은 컬럼을 가질 수 있습니다:

연속 문맥에서 다단 컨테이너 외부에 나타나는 컬럼을 오버플로우 컬럼이라고 합니다. 오버플로우 컬럼은 다단 컨테이너의 높이에 영향을 줄 수 있습니다.

이 예제에서는 다단 컨테이너의 높이가 최대 높이로 제한되어 있습니다. 또한 스타일시트에서 오버플로우 콘텐츠를 보이도록 지정했습니다:
div {
  max-height: 5em;
  overflow: visible;
}

그 결과, 컬럼 개수가 늘어납니다.

네 개의 컬럼 중 하나가 다단 컨테이너 밖에 있음
오버플로우 컬럼이 인라인 방향으로 생성됩니다.

연속 문맥에서는 오버플로우 컬럼이 다단 컨테이너의 높이에 영향을 줄 수 있습니다. 이 예제에서는 오버플로우에 네 줄의 텍스트가 있는 컬럼이 등장합니다. 다단 컨테이너는 이 컬럼이 들어갈 수 있도록 충분히 높아집니다.

네 개의 컬럼 중 마지막(오버플로우 컬럼)이 다른 세 개보다 높음
마지막 컬럼이 오버플로우 컬럼이지만 다른 컬럼보다 높음. 컨테이너는 이 컬럼에 맞게 충분히 높아집니다.
분할 문맥에서는 오버플로우 콘텐츠가 이후 fragment의 컬럼에 들어갑니다. 예제 31과 동일한 콘텐츠와, 포맷된 텍스트 5줄만 들어갈 수 있는 페이지 박스를 가정하면, 첫 번째 페이지에는 다음과 같이 나타납니다:
세 개의 컬럼
첫 세 문단이 첫 번째 페이지에 표시됩니다.

컬럼 균형이 가정된 상태에서, 두 번째 페이지에는 다음과 같이 표시됩니다:

세 개의 컬럼
오버플로우 컬럼이 두 번째 페이지로 이동됩니다.
이 예제에서는 문단 뒤에 명시적으로 컬럼 나눔이 생성됩니다:
p {
  break-after: column;
}

그 결과, 컬럼 개수가 늘어나며 추가 컬럼이 인라인 방향에 추가됩니다:

네 개의 컬럼 중 하나가 다단 컨테이너 밖에 있음
오버플로우 컬럼이 인라인 방향으로 생성됩니다.
페이지 매체에서는 추가 컬럼이 다음 페이지에 표시됩니다. 이전 예제와 동일한 코드를 가정하면, 마지막 문단이 두 번째 페이지에 나타납니다. 첫 번째 페이지에는 다음과 같이 나타납니다:
세 개의 컬럼
첫 세 문단이 첫 페이지에 표시됩니다.

두 번째 페이지에는 다음과 같이 표시됩니다:

세 개의 컬럼
오버플로우 컬럼이 두 번째 페이지로 이동됩니다.

컬럼 균형으로 인해 마지막 문단이 세 개의 컬럼에 걸쳐 분할됩니다.

부록 B. 변경 이력

이 부록은 참고용입니다.

2024년 5월 16일 CSS-MULTICOL-1 후보 권고(CR) 이후 변경점

프라이버시 고려사항

Multicol은 새로운 프라이버시 유출 사항을 도입하지 않습니다.

보안 고려사항

Multicol은 새로운 보안 고려사항을 도입하지 않습니다.

접근성 고려사항

컨테이너 높이와 라인 길이 설정은 시각 또는 인지 장애가 있는 사람들에게 어려움을 줄 수 있습니다. 사용자 요구를 이해하려면 WCAG 성공 기준 1.4.10 리플로우WCAG 1.4.8 시각적 프레젠테이션을 참고하세요.

감사의 글

이 문서는 Håkon Wium Lie의 [CSS3-MULTICOL] 작업을 기반으로 하며, 여러 이전 제안 및 그에 대한 코멘트를 참고했습니다. 기여자에는 다음이 포함됩니다:

Alex Mogilevsky, Andy Clarke, Anton Prowse, Bert Bos, Björn Höhrmann, Cédric Savarese, Chris Lilley, Chris Wilson, Daniel Glazman, Dave Raggett, David Hyatt, David Singer, David Woolley, Elika Etemad, Giovanni Campagna, Ian Hickson, Joost de Valk, Kevin Lawver, L. David Baron, Markus Mielke, Melinda Grant, Michael Day, Morten Stenshorne, Øyvind Stenhaug, Peter Linss, Peter-Paul Koch, Robert O’Callahan, Robert Stevahn, Sergey Genkin, Shelby Moore, Steve Zilles, Sylvain Galineau, Tantek Çelik, Till Halbach

적합성

문서 규약

적합성 요구는 설명적 진술과 RFC 2119 용어의 조합으로 표현됩니다. 규범적 부분에서의 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" 등의 키워드는 RFC 2119의 설명대로 해석해야 합니다. 다만, 가독성을 위해 본 명세에서는 이 단어들이 모두 대문자로 표기되진 않습니다.

명시적으로 비규범적임을 표시한 부분, 예제, 참고를 제외한 이 명세서의 모든 텍스트는 규범적입니다. [RFC2119]

이 명세서의 예제는 "예를 들어"라는 말로 시작하거나 class="example"로 구분되어 표시됩니다, 다음과 같이:

이것은 참고용 예제입니다.

참고용 노트는 "참고"라는 말로 시작하며 class="note"로 구분되어 표시됩니다, 다음과 같이:

참고, 이것은 참고용 노트입니다.

권고(advisement)는 특별한 주의를 끌도록 스타일링된 규범적 단락이며, <strong class="advisement">로 구분되어, 다음과 같이 표시됩니다: UA는 반드시 접근 가능한 대안을 제공해야 합니다.

적합성 클래스

이 명세서에 대한 적합성은 세 가지 적합성 클래스로 정의됩니다:

스타일 시트
CSS 스타일 시트.
렌더러
UA로, 스타일 시트의 의미를 해석하고 스타일 시트를 사용하는 문서를 렌더링합니다.
저작 도구
UA로, 스타일 시트를 작성합니다.

해당 모듈에서 정의한 구문을 사용하는 모든 선언이 기본 CSS 문법 및 각 기능의 개별 문법에 따라 유효하다면, 스타일 시트는 이 명세에 적합합니다.

렌더러는 스타일 시트를 적절한 명세대로 해석하는 것에 더해, 본 명세서에서 정의한 모든 기능을 올바르게 파싱하고 문서를 이에 맞게 렌더링함으로써 적합성을 갖춥니다. 단, UA가 장치의 한계로 인해 문서를 올바르게 렌더링하지 못해도 비적합이 되는 것은 아닙니다. (예: UA가 단색 모니터에서 색상을 렌더링할 필요는 없음.)

저작 도구는 본 모듈의 기본 CSS 문법과 각 기능의 개별 문법에 맞게 문법적으로 올바른 스타일 시트를 작성하고, 이 모듈에서 설명한 스타일 시트의 모든 다른 적합성 요구도 만족해야 적합합니다.

부분 구현

저자가 미래 호환 파싱 규칙을 활용해 폴백 값을 지정할 수 있도록, CSS 렌더러는 반드시 지원 불가(적절히 무시)한 at-규칙, 속성, 속성값, 키워드, 기타 구문 구성요소를 무시해야 합니다. 특히 UA는 하나의 다중값 속성 선언에서 지원하지 않는 구성값만 무시하고 지원하는 값만 적용해서는 안 됩니다: 하나라도 값이 무효(지원 불가 값은 반드시 무효)라면 CSS는 전체 선언을 무시하도록 요구합니다.

불안정 및 독점 기능 구현

향후 안정된 CSS 기능과 충돌을 피하기 위해, CSSWG는 미래 대비 모범 사례를 따라 불안정 기능 및 독점 확장을 구현하는 것을 권고합니다.

비실험적 구현

명세가 후보 권고(CR) 단계에 도달하면, 비실험적 구현이 가능해지며 구현자는 명세대로 올바르게 구현했음을 보여줄 수 있는 CR 레벨 기능에 대해 접두사 없는(unprefixed) 구현을 배포해야 합니다.

CSS의 상호운용성을 확립하고 유지하기 위해, CSS 워킹 그룹은 비실험적 CSS 렌더러가 어떤 CSS 기능의 접두사 없는 구현을 배포하기 전에 구현 보고서(필요하다면 보고서에 사용된 테스트케이스도 포함)를 W3C에 제출해주길 요청합니다. W3C에 제출된 테스트케이스는 CSS 워킹 그룹의 검토와 교정을 받을 수 있습니다.

테스트케이스와 구현 보고서 제출에 관한 자세한 내용은 CSS 워킹 그룹 웹사이트 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. 2024년 3월 11일. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2024년 8월 4일. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018년 12월 18일. WD. URL: https://www.w3.org/TR/css-break-4/
[CSS-COLOR-5]
Chris Lilley; 외. CSS Color Module Level 5. 2024년 2월 29일. WD. URL: https://www.w3.org/TR/css-color-5/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023년 3월 30일. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-GRID-2]
Tab Atkins Jr.; Elika Etemad; Rossen Atanassov. CSS Grid Layout Module Level 2. 2020년 12월 18일. CR. URL: https://www.w3.org/TR/css-grid-2/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023년 3월 29일. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-5]
CSS Overflow Module Level 5. Editor's Draft. URL: https://drafts.csswg.org/css-overflow-5/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2024년 8월 10일. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-SCROLL-SNAP-1]
Matt Rakow; 외. CSS Scroll Snap Module Level 1. 2021년 3월 11일. CR. URL: https://www.w3.org/TR/css-scroll-snap-1/
[CSS-TABLES-3]
François Remy; Greg Whitworth; David Baron. CSS Table Module Level 3. 2019년 7월 27일. WD. URL: https://www.w3.org/TR/css-tables-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2024년 3월 22일. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024년 3월 12일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019년 7월 30일. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; 외. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS21/
[CSS3-ALIGN]
Elika Etemad; Tab Atkins Jr.. CSS Box Alignment Module Level 3. 2023년 2월 17일. WD. URL: https://www.w3.org/TR/css-align-3/
[CSS3-BREAK]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018년 12월 4일. CR. URL: https://www.w3.org/TR/css-break-3/
[CSS3-SIZING]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021년 12월 17일. WD. URL: https://www.w3.org/TR/css-sizing-3/
[MEDIAQUERIES-5]
Dean Jackson; 외. Media Queries Level 5. 2021년 12월 18일. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2022년 11월 11일. WD. URL: https://www.w3.org/TR/selectors-4/

참고용 참고 문헌

[CSS-TRANSFORMS-1]
Simon Fraser; 외. CSS Transforms Module Level 1. 2019년 2월 14일. CR. URL: https://www.w3.org/TR/css-transforms-1/
[CSS3-MULTICOL]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 1. 2024년 5월 16일. CR. URL: https://www.w3.org/TR/css-multicol-1/
[CSS3BOX]
Elika Etemad. CSS Box Model Module Level 3. 2024년 4월 11일. REC. URL: https://www.w3.org/TR/css-box-3/

속성 색인

이름 초기값 적용 대상 상속 %단위 애니메이션 타입 정규 순서 계산값
column-count auto | <integer [1,∞]> auto table wrapper box를 제외한 블록 컨테이너 아니오 N/A 계산값에 따라 문법에 따름 지정한 값
column-fill auto | balance | balance-all balance 다단 컨테이너 아니오 N/A 불연속 문법에 따름 지정한 키워드
column-rule <'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'> 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
column-rule-color <color> currentcolor 다단 컨테이너 아니오 N/A 계산값 타입에 따라 문법에 따름 계산된 색상
column-rule-style <line-style> none 다단 컨테이너 아니오 N/A 불연속 문법에 따름 지정한 키워드
column-rule-width <line-width> medium 다단 컨테이너 아니오 N/A 계산값 타입에 따라 문법에 따름 절대 길이, 테두리 너비로 스냅됨; column-rule-style이 none 또는 hidden이면 0
column-span none | <integer [1,∞]> | all | auto none 인플로우 블록 수준 요소 아니오 N/A 불연속 문법에 따름 지정한 값
column-width auto | <length [0,∞]> auto table wrapper box를 제외한 블록 컨테이너 아니오 N/A 계산값 타입에 따라 문법에 따름 auto 키워드 또는 절대 길이
columns <'column-width'> || <'column-count'> 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조

이슈 색인

이 정의는 불충분합니다.
column-span: 1column-span: none과 같지 않다면, 요소가 충분히 작을 때 column-span: 1로 해야 하는가, column-span: none으로 해야 하는가?