CSS 디스플레이 모듈 레벨 3

W3C 후보 권고안 스냅샷,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2023/CR-css-display-3-20230330/
최신 공개 버전:
https://www.w3.org/TR/css-display-3/
편집자 초안:
https://drafts.csswg.org/css-display/
히스토리:
https://www.w3.org/standards/history/css-display-3
구현 보고서:
https://wpt.fyi/results/css/css-display?label=master&label=experimental&aligned
테스트 슈트:
http://test.csswg.org/suites/css-display-3_dev/nightly-unstable/
https://wpt.fyi/results/css/css-flexbox/
피드백:
CSSWG 이슈 저장소
편집자:
Tab Atkins Jr. (Google)
Elika J. Etemad / fantasai (초청 전문가)
명세 수정 제안:
GitHub 편집자

요약

이 모듈은 문서 요소 트리로부터 CSS 포맷 박스 트리가 어떻게 생성되는지 설명하며, 이를 제어하는 display 속성을 정의합니다.

CSS는 구조화된 문서(HTML 및 XML 등)의 렌더링을 화면, 종이 등에서 기술하는 언어입니다.

문서 상태

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

이 문서는 CSS 작업 그룹에 의해 후보 권고안 스냅샷으로 권고안 경로를 통해 발행되었습니다. 후보 권고안으로 발행되었다고 해서 W3C 및 회원의 승인이나 지지를 의미하지 않습니다. 후보 권고안 스냅샷은 광범위한 검토를 받았으며, 구현 경험을 수집하기 위한 것이며, 작업 그룹 회원들이 구현에 대해 로열티 무료 라이선스를 약속합니다. 이 문서는 W3C 권고안이 될 예정이며, 추가 피드백을 수집하기 위해 최소 까지 후보 권고안으로 유지됩니다.

피드백은 GitHub 이슈 등록(권장)으로 보내주세요. 제목에 “css-display”를 포함해 주십시오, 예: “[css-display] …코멘트 요약…”. 모든 이슈와 코멘트는 아카이브됩니다. 또는 (아카이브됨) 공개 메일링 리스트 www-style@w3.org로 보내도 됩니다.

이 문서는 2021년 11월 2일 W3C 프로세스 문서에 따라 관리됩니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 그룹 산출물과 관련된 공개 특허 공개 목록을 유지 관리합니다; 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 특정 특허에 대해 실제로 인지하고 있고 해당 특허가 필수 클레임을 포함한다고 판단되는 개인은 W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

예비 구현 보고서도 제공됩니다. CR 기간 동안 추가 테스트가 추가될 예정입니다.

다음 기능들은 위험에 처해 있으며, CR 기간 중에 제거될 수 있습니다:

“위험(at-risk)”은 W3C 프로세스 용어이며, 기능이 반드시 제거되거나 지연됨을 의미하지는 않습니다. 이는 작업 그룹이 해당 기능이 상호운용적으로 제때 구현되기 어렵다고 판단하며, 위험 표시를 하면 필요시 제안 권고 단계로 넘어갈 때 해당 기능을 먼저 제거한 새 후보 권고를 발행하지 않고도 기능을 제거할 수 있기 때문입니다.

1. 소개

이 섹션은 규범적입니다.

CSS는 트리로 구성된 소스 문서를 받아 요소(다른 요소텍스트 노드가 혼합될 수 있음)와 텍스트 노드(텍스트를 포함할 수 있음)로 조직하고, 이를 캔버스에 렌더링합니다. 예를 들어 화면, 종이, 오디오 스트림 등입니다. 이러한 모든 소스 문서는 CSS로 렌더링할 수 있지만, 가장 일반적으로 사용되는 유형은 DOM입니다. [DOM] (이러한 더 복잡한 트리 유형에는 주석 노드와 같이 추가적인 노드 타입이 있을 수 있습니다. CSS 관점에서는 이러한 추가 노드 타입은 모두 무시되어 존재하지 않는 것처럼 간주합니다.)

이를 위해 중간 구조인 박스 트리를 생성하는데, 이는 렌더링된 문서의 포맷 구조를 나타냅니다. 박스 트리의 각 박스는 해당하는 요소(또는 의사요소)를 캔버스의 공간/시간상에서 나타내며, 박스 트리의 각 텍스트 시퀀스 역시 해당 텍스트 노드의 내용을 나타냅니다.

박스 트리를 만들기 위해, CSS는 먼저 캐스케이딩과 상속을 사용하여, 각 CSS 속성의 계산된 값을 소스 트리의 각각의 요소텍스트 노드에 할당합니다. (자세한 내용은 [CSS-CASCADE-3] 참조.)

그리고 각 요소마다, CSS는 해당 요소의 display 속성에 따라 0개 이상의 박스를 생성합니다. 일반적으로 요소는 하나의 박스(주 박스)를 생성하며, 이는 자신을 나타내고 박스 트리에 내용을 포함합니다. 하지만 일부 display 값(예: display: list-item)은 여러 박스(예: 주 블록 박스와 자식 마커 박스)를 생성합니다. 그리고 일부 값(none 또는 contents 등)은 요소 및/또는 그 자손이 박스를 전혀 생성하지 않게 합니다. 박스들은 종종 display 타입으로 불립니다—예를 들어 박스display: block이면 “블록 박스” 또는 “블록”이라고 부릅니다.

박스는 생성한 요소와 동일한 스타일을 할당받으며, 달리 명시되지 않으면 그대로입니다. 일반적으로 상속 속성주 박스에 할당되고, 박스 트리를 따라 같은 요소가 생성한 다른 박스에도 상속됩니다. 비상속 속성은 기본적으로 주 박스에 적용되지만, 요소가 여러 박스를 생성할 경우 다른 박스에 적용되도록 정의될 수 있습니다: 예를 들어, border 속성이 테이블 요소에 적용될 때는, 테이블 그리드 박스에 적용되고, 테이블 래퍼 박스에는 적용되지 않습니다. 만약 값 계산 과정에서 박스의 스타일이 변경된다면, 요소의 스타일을 요청할 경우(getComputedStyle() 등), 해당 속성이 적용된 박스의 값을 요소가 반영합니다.

마찬가지로, 인접한 형제 텍스트 노드의 연속 시퀀스는 텍스트 시퀀스를 생성하며, 그 텍스트 내용을 포함합니다. 생성한 텍스트 노드와 동일한 스타일을 할당받습니다. 단, 시퀀스에 텍스트가 없으면 텍스트 시퀀스도 생성되지 않습니다.

박스 트리를 구성할 때, 요소가 생성한 박스는 조상 요소의 주 박스의 자손이 됩니다. 일반적으로, 요소의 부모 박스는 가장 가까운 상위 요소가 생성한 박스주 박스입니다; 단, run-in 박스, 여러 컨테이너 박스를 생성하는 테이블과 같은 display 타입, 그리고 중간 익명 박스 등 예외도 있습니다.

익명 박스는 어떤 요소와도 연결되지 않은 박스입니다. 익명 박스박스 트리가 특정 중첩 구조를 필요로 하는데 요소 트리에서 생성된 박스가 이를 제공하지 않을 때 생성됩니다. 예를 들어, 테이블 셀 박스는 특정 부모 박스(즉, 테이블 행 박스)를 필요로 하며, 부모가 테이블 행 박스가 아니면 익명 테이블 행 박스가 자신을 감싸도록 생성됩니다. (자세한 내용은 [CSS2] § 17.2.1 참조.) 요소가 생성한 박스와 달리, 스타일은 요소 트리를 따라 엄격하게 상속되지만, 익명 박스(박스 트리에만 존재)는 박스 트리의 부모를 통해 상속됩니다. inherit

레이아웃 과정에서 박스텍스트 시퀀스는 여러 조각(fragment)으로 나뉠 수 있습니다. 예를 들어 인라인 박스 및/또는 텍스트 시퀀스가 줄을 넘어갈 때, 블록 박스가 페이지나 컬럼을 넘어갈 때 (이 과정을 단편화(fragmentation)라고 함) 발생합니다. 또한 텍스트의 양방향 정렬(bidi reordering; 양방향 알고리즘 적용CSS Writing Modes 참고), 또는 상위 display type 박스 분할, 예를 들어 block-in-inline 분할(CSS2§9.2 참고), column-spanner-in-block 분할(CSS 다단 레이아웃 참고) 등에서도 발생할 수 있습니다. 따라서 박스는 하나 이상의 박스 조각으로 구성되고, 텍스트 시퀀스는 하나 이상의 텍스트 조각으로 구성됩니다. 단편화(fragmentation)에 대한 자세한 내용은 [CSS-BREAK-3]를 참고하세요.

참고: 많은 CSS 명세들이 이런 용어가 정립되기 전에 작성되었거나, 용어를 잘못 참조하는 경우가 있으니, 오래된 명세에서 이 용어를 사용할 때 주의하세요. 실제로 어떤 용어를 의미하는지는 문맥에서 추론할 수 있어야 합니다. 명세에서 오류를 발견하면 오류를 보고해 주세요. 수정될 수 있도록 도와주세요.

참고: "오럴 박스 트리"와 display 속성의 상호작용에 대한 추가 정보는 CSS Speech Module에서 확인할 수 있습니다. [CSS-SPEECH-1]

1.1. 모듈 상호작용

이 모듈은 display 속성의 정의를 [CSS2] 9.2.4절에서 대체 및 확장합니다.

이 모듈의 어떤 속성도 ::first-line이나 ::first-letter 의사요소에는 적용되지 않습니다.

1.2. 값 정의

이 명세는 CSS 속성 정의 규약[CSS2]에서 따르며, 값 정의 문법[CSS-VALUES-3]에서 사용합니다. 이 명세에서 정의되지 않은 값 타입은 CSS 값 및 단위 [CSS-VALUES-3]에서 정의됩니다. 다른 CSS 모듈과의 조합으로 이러한 값 타입의 정의가 확장될 수 있습니다.

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

2. 박스 레이아웃 모드: display 속성

이름: display
값: [ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>
초기값: inline
적용 대상: 모든 요소
상속: 아니오
백분율: 해당 없음
계산된 값: 내부 및 외부 display 타입을 나타내는 키워드 쌍 + 선택적 list-item 플래그, 또는 <display-internal> 또는 <display-box> 키워드; 계산 규칙은 여러 명세의 텍스트를 참조
정식 순서: 문법에 따름
애니메이션 타입: 애니메이션 불가

사용자 에이전트는 모든 미디어, 비시각적 미디어도 포함하여 이 속성을 지원해야 합니다. display 속성은 요소의 display 타입을 정의하며, 이는 요소가 박스를 생성하는 두 가지 기본 특성으로 구성됩니다:

텍스트 시퀀스display 타입을 가지지 않습니다.

일부 display 값은 추가적인 부수 효과가 있습니다: 예를 들어 list-item::marker 의사요소도 생성합니다. none은 요소의 전체 하위 트리를 박스 트리에서 제외시킵니다.

display 속성은 요소의 의미론에 영향을 주지 않습니다: 의미론은 문서 언어에 의해 정의되며 CSS에 의해 영향을 받지 않습니다. none 값만 예외로, 해당 값은 요소 및 자손의 오럴/음성 출력 [CSS-SPEECH-1]과 상호작용에도 영향을 주지만, display 속성은 오직 시각적 레이아웃에만 영향을 줍니다: 목적은 디자이너가 요소의 레이아웃 동작을 문서 의미를 해치지 않고 자유롭게 변경할 수 있도록 하는 것입니다.

값 정의는 다음과 같습니다:

<display-outside>  = block | inline | run-in
<display-inside>   = flow | flow-root | table | flex | grid | ruby
<display-listitem> = <display-outside>? && [ flow | flow-root ]? && list-item
<display-internal> = table-row-group | table-header-group |
                     table-footer-group | table-row | table-cell |
                     table-column-group | table-column | table-caption |
                     ruby-base | ruby-text | ruby-base-container |
                     ruby-text-container
<display-box>      = contents | none
<display-legacy>   = inline-block | inline-table | inline-flex | inline-grid

다음 안내 표는 display 값의 요약입니다:

축약 display 전체 display 생성된 박스
none 박스 트리에서 하위 트리 생략
contents 박스 트리에서 요소가 내용을 대신함
block block flow 블록 레벨 블록 컨테이너 aka 블록 박스
flow-root block flow-root 블록 레벨 블록 컨테이너로 새 블록 포맷팅 컨텍스트 (BFC) 생성
inline inline flow 인라인 박스
inline-block inline flow-root 인라인 레벨 블록 컨테이너 aka 인라인 블록
run-in run-in flow run-in 박스 (인라인 박스는 특별한 박스 트리 규칙 적용)
list-item block flow list-item 블록 박스와 추가 마커 박스
inline list-item inline flow list-item 인라인 박스와 추가 마커 박스
flex block flex 블록 레벨 플렉스 컨테이너
inline-flex inline flex 인라인 레벨 플렉스 컨테이너
grid block grid 블록 레벨 그리드 컨테이너
inline-grid inline grid 인라인 레벨 그리드 컨테이너
ruby inline ruby 인라인 레벨 ruby 컨테이너
block ruby block ruby 블록 박스ruby 컨테이너를 포함함
table block table 블록 레벨 테이블 래퍼 박스테이블 그리드 박스를 포함함
inline-table inline table 인라인 레벨 테이블 래퍼 박스테이블 그리드 박스를 포함함
<display-internal> 타입 레이아웃 내부 박스

참고: “가장 하위 호환, 그리고 가장 짧게” 우선 규칙에 따라, 동등한 display 값의 직렬화는 “축약 display” 열을 사용합니다. [CSSOM]

2.1. 플로우 레이아웃의 외부 디스플레이 역할: block, inline, run-in 키워드

<display-outside> 키워드는 요소의 외부 display 타입을 지정합니다. 이는 본질적으로 주 박스플로우 레이아웃에서 갖는 역할입니다. 각각 다음과 같이 정의됩니다:

block
요소는 플로우 레이아웃에서 블록 레벨 박스를 생성합니다. [CSS2]
inline
요소는 플로우 레이아웃에서 인라인 레벨 박스를 생성합니다. [CSS2]
run-in
요소는 run-in 박스를 생성하며, 이는 다음 블록 컨테이너와 병합을 시도하는 특별한 동작의 인라인 레벨 박스 유형입니다. 자세한 내용은 § 5 Run-In 레이아웃을 참고하세요.

참고: 외부 display 타입대체 요소에도 영향을 줍니다.

<display-outside> 값이 지정되고 <display-inside>가 생략된 경우, 요소의 내부 display 타입은 기본적으로 flow가 됩니다.

2.2. 내부 디스플레이 레이아웃 모델: flow, flow-root, table, flex, grid, ruby 키워드

<display-inside> 키워드는 요소의 내부 display 타입을 지정합니다. 이는 해당 요소가 포함하는 내용이 어떻게 레이아웃되는지 결정하는 포맷팅 컨텍스트 타입을 정의합니다 (요소가 비대체 요소인 경우). 각각 다음과 같이 정의됩니다:

flow
요소는 플로우 레이아웃(블록 및 인라인 레이아웃)을 사용해 내용을 배치합니다.

요소의 외부 display 타입inline 또는 run-in이고, 블록 또는 인라인 포맷팅 컨텍스트에 참여하는 경우, 인라인 박스를 생성합니다.

그 외에는 블록 컨테이너 박스를 생성합니다.

다른 속성(position, float, overflow 등) 값 및 요소가 블록 또는 인라인 포맷팅 컨텍스트에 참여하는지 여부에 따라, 자체 내용에 대해 새 블록 포맷팅 컨텍스트를 생성하거나, 부모 포맷팅 컨텍스트에 내용을 통합할 수 있습니다. 자세한 내용은 CSS2.1 Chapter 9 참고. [CSS2]블록 포맷팅 컨텍스트를 생성하는 블록 컨테이너는 사용된 내부 display 타입flow-root로 간주됩니다.

flow-root
요소는 블록 컨테이너 박스를 생성하며, 플로우 레이아웃을 사용해 내용을 배치합니다. 항상 자체 내용에 대해 새 블록 포맷팅 컨텍스트를 생성합니다. [CSS2]
table
요소는 주 테이블 래퍼 박스를 생성하며, 해당 박스는 블록 포맷팅 컨텍스트를 생성합니다. 그리고 그 안에 추가로 테이블 그리드 박스를 생성하며, 이는 테이블 포맷팅 컨텍스트를 생성합니다. [CSS2]
flex
요소는 주 플렉스 컨테이너 박스를 생성하며, 플렉스 포맷팅 컨텍스트를 생성합니다. [CSS-FLEXBOX-1]
grid
요소는 주 그리드 컨테이너 박스를 생성하며, 그리드 포맷팅 컨텍스트를 생성합니다. [CSS-GRID-1]

(subgrid를 사용하는 그리드는 새 그리드 포맷팅 컨텍스트를 생성하지 않을 수도 있습니다; 자세한 내용은 [CSS-GRID-2]를 참고하세요.)

ruby
요소는 ruby 컨테이너 박스를 생성하며, ruby 포맷팅 컨텍스트를 생성합니다. 인라인일 경우 부모 포맷팅 컨텍스트에 base-level 내용을 통합하고, 인라인이 아니면 적절한 외부 display 타입의 래퍼 박스를 생성합니다. [CSS-RUBY-1]

<display-inside> 값이 지정되고 <display-outside>가 생략된 경우, 요소의 외부 display 타입은 기본적으로 block입니다. 단, ruby는 기본값이 inline입니다.

2.3. 마커 박스 생성: list-item 키워드

list-item 키워드는 요소가 ::marker 의사요소 [CSS-PSEUDO-4]를 생성하게 하며, 그 내용은 list-style 속성으로 지정됩니다 (CSS 2.1§12.5 리스트) [CSS2]와 함께 자신의 내용에 대해 지정된 타입의 주 박스를 생성합니다.

내부 display 타입 값이 지정되지 않은 경우, 주 박스의 내부 display 타입은 기본적으로 flow가 됩니다. 외부 display 타입 값이 지정되지 않은 경우, 주 박스의 외부 display 타입은 기본적으로 block입니다.

참고: 이 단계에서는 문법에서 제한되듯, list-items는 플로우 레이아웃 display 타입 (block/inline/run-inflow/flow-root 내부 타입)에 한정됩니다. 이 제한은 향후 단계에서 완화될 수 있습니다.

2.4. 레이아웃 내부 display 타입: table-*, ruby-* 키워드

일부 레이아웃 모델(예: tableruby)은 내부 구조가 복잡하여, 자식 및 자손이 채울 수 있는 여러 역할이 있습니다. 이 섹션은 해당 레이아웃 모드 내에서만 의미를 가지는 “레이아웃 내부display 값을 정의합니다.

달리 명시되지 않은 한, 이러한 display 값을 사용하는 요소의 내부 display 타입외부 display 타입 모두 해당 키워드로 설정됩니다.

display 속성이 대체 요소에서 레이아웃 내부 값으로 계산되는 경우, 실제 사용 값은 inline으로 처리됩니다. 해당 inline 값을 기준으로, 대체 요소 주변의 공백 축약 및 익명 박스 생성이 이루어집니다. 즉, 레이아웃 내부 display 값이 적용되지 않은 것처럼 동작합니다.

저자는 레이아웃 내부 display 값을 대체 요소에 지정하지 않아야 합니다.

<display-internal> 키워드는 다음과 같이 정의됩니다:

table-row-group, table-header-group, table-footer-group, table-row, table-cell, table-column-group, table-column
요소는 내부 테이블 요소입니다. 해당 내부 테이블 박스를 생성하며, 테이블 포맷팅 컨텍스트에 참여합니다. 자세한 내용은 CSS2§17.2 [CSS2] 참고.

table-cell 박스는 flow-root 내부 display 타입을 가집니다.

table-caption
요소는 테이블 캡션 박스를 생성하며, 이는 블록 박스로, 테이블 및 테이블 래퍼 박스와 관련하여 특별한 동작을 가집니다. 자세한 내용은 CSS2§17.2 [CSS2] 참고.

table-caption 박스는 flow-root 내부 display 타입을 가집니다.

ruby-base, ruby-text, ruby-base-container, ruby-text-container
요소는 내부 ruby 요소입니다. 해당 내부 ruby 박스를 생성하며, ruby 포맷팅 컨텍스트에 참여합니다. [CSS-RUBY-1]

ruby-baseruby-textflow 내부 display 타입을 가집니다.

레이아웃 내부 display 타입을 가진 박스는 올바르지 않은 부모에 배치될 때, 해당 명세에서 정의한 대로 자신을 감싸는 익명 래퍼 박스를 생성합니다.

예를 들어, 테이블 레이아웃에서는 table-cell 박스는 반드시 table-row 부모 박스를 가져야 합니다.

잘못된 부모에 배치되면, 예를 들어:

<div style="display:block;">
  <div style="display:table-cell">...</div>
</div>

박스 주변에 래퍼 박스가 생성되어, 다음과 같은 구조가 만들어집니다:

block box
└anonymous table box
 └anonymous table-row-group box
  └anonymous table-row box
   └table-cell box

부모가 또 다른 내부 테이블 요소일지라도, 올바른 요소가 아니라면 래퍼 박스가 생성됩니다. 예를 들어, 아래 마크업에서는:

<div style="display:table;">
  <div style="display:table-row">
    <div style="display:table-cell">...</div>
  </div>
</div>

익명 래퍼 박스 생성 결과는 다음과 같습니다:

table box
└anonymous table-row-group box
 └table-row box
  └table-cell box

이러한 "정정(fix-up)"은 테이블 레이아웃에 예측 가능한 구조를 보장하기 위함입니다.

2.5. 박스 생성: nonecontents 키워드

display는 요소가 생성할 박스의 타입을 제어할 수 있을 뿐만 아니라, 요소가 박스를 생성할지 여부도 제어할 수 있습니다.

<display-box> 키워드는 다음과 같이 정의됩니다:

contents
해당 요소 자체는 박스를 생성하지 않지만, 자식과 의사요소는 평소처럼 박스텍스트 시퀀스를 생성합니다. 박스 생성과 레이아웃 관점에서, 해당 요소는 element tree에서 자식(문서 소스 자식과 ::before, ::after 등 의사요소 포함)으로 대체된 것처럼 취급됩니다.

참고: 박스 트리만 영향을 받으므로, 셀렉터 매칭, 이벤트 처리, 속성 상속 등 문서 트리 기반 의미에는 영향이 없습니다. 단, 현재 주요 브라우저에서는 올바르게 구현되어 있지 않으므로 이 기능을 사용할 때는 접근성 도구가 해당 요소의 의미에 접근하지 못할 수 있으니 주의해야 합니다.

이 값은 대체 요소 및 렌더링이 완전히 CSS로 제어되지 않는 요소에서는 display: none으로 계산됩니다. 자세한 내용은 부록 B: display: contents가 특이 요소에 미치는 영향을 참고하세요.

참고: 대체 요소 및 폼 컨트롤은 해당 요소 자체의 박스만 제거하는 것이 거의 정의되지 않은 동작이므로 특별하게 처리됩니다. 만약 더 구체적인 렌더링 모델과 사용 사례가 발전한다면 이 동작이 조정될 수 있으니, 저자는 이런 요소에 대해 display: contents 대신 display: none을 사용하여 호환성을 확보하는 것이 좋습니다.

none
요소와 그 자손은 박스텍스트 시퀀스를 생성하지 않습니다.

마찬가지로, 텍스트 노드display: none 동작을 하도록 정의된 경우, 텍스트 시퀀스도 생성하지 않습니다.

이 두 값을 가진 요소는 내부 또는 외부 display 타입을 가지지 않습니다. 박스를 전혀 생성하지 않기 때문입니다.

참고: 해당 값들은 요소가 박스를 생성하지 않게 하므로, 익명 박스 생성 규칙은 생략된 요소를 박스 트리에서 존재하지 않는 것처럼 완전히 무시합니다.

그러나 마크업 기반 관계는 이러한 값에 영향을 받지 않습니다. 이것은 렌더링 시점에만 적용되는 효과입니다. 예를 들어, 어떤 테이블 셀이 보이는지에는 영향을 줄 수 있지만, 어떤 셀이 특정 컬럼 element와 연결되어 있는지는 영향을 주지 않습니다. 마찬가지로, summary 요소가 어떤 테이블과 연결되는지, legend 요소가 어떤 fieldset의 내용을 라벨링하는지에는 영향을 주지 않습니다.

2.6. 사전 조합된 인라인 레벨 display 값

CSS 2단계에서는 display에 단일 키워드 문법을 사용하여, 동일한 레이아웃 모드의 블록 레벨/인라인 레벨 변형을 별도의 키워드로 구분했습니다. 이 <display-legacy> 키워드는 다음과 같이 매핑됩니다:

inline-block
inline flow-root으로 계산됩니다.
inline-table
inline table로 계산됩니다.
inline-flex
inline flex로 계산됩니다.
inline-grid
inline grid로 계산됩니다.

참고: 이 키워드들과 그 동등한 값은 계산 결과는 동일하지만, 지정 값은 구별됩니다.

참고: getComputedStyle() 직렬화 규칙은 항상 이 사전 조합된 키워드를 출력하며, 동등한 2키워드 조합 대신 가장 짧고 하위 호환이 좋은 직렬화 원칙을 따릅니다.

2.7. 박스 타입 자동 변환

일부 레이아웃 효과는 박스 타입의 blockification 또는 inlinification을 요구하며, 이로 인해 박스의 계산된 외부 display 타입이 각각 block 또는 inline으로 설정됩니다. (display 타입이 박스를 전혀 생성하지 않는 경우, 예를 들어 none 또는 contents처럼, 이 동작은 적용되지 않습니다.) 추가적으로:

참고: 박스 타입이 컨텍스트에 맞지 않는 경우 이를 정정하는 방법은 두 가지입니다. 하나는 계산 값의 변환(여기서 설명된 blockificationinlinification 등)입니다. 다른 하나는 박스 트리 구성(계산 값이 결정된 이후)에 중간 익명 박스를 생성하는 것이며, 이는 테이블, ruby, flow 레이아웃 등에서 발생합니다.

계산 값 정정의 예시는 다음과 같습니다:

2.8. 루트 요소의 주 박스

루트 요소의 display 타입은 항상 blockify되며, 주 박스는 항상 독립 포맷팅 컨텍스트를 생성합니다. 이 박스의 포함 블록초기 포함 블록입니다.

또한, 루트 요소에 displaycontents로 지정되면 block으로 계산됩니다.

3. 표시 순서: order 속성

이름: order
값: <integer>
초기값: 0
적용 대상: 플렉스 아이템그리드 아이템
상속 여부: 아니오
백분율: 해당 없음
계산된 값: 지정된 정수
표준 순서: 문법에 따름
애니메이션 유형: 계산된 값 유형에 따라

박스들은 일반적으로 소스 문서에 나타나는 순서대로 표시되고 레이아웃됩니다. 일부 포매팅 컨텍스트에서는 order 속성을 사용하여 박스의 순서를 변경하여 요소의 논리적 순서와 2D 시각적 캔버스에서의 공간 배치 순서 간의 차이를 의도적으로 만들 수 있습니다. (§ 3.1 재정렬 및 접근성 참고.)

특히, order 속성은 플렉스 아이템 또는 그리드 아이템이 컨테이너 내에서 나타나는 순서를 순서 그룹에 할당함으로써 제어합니다. 단일 <integer> 값을 가지며, 아이템이 속하는 순서 그룹을 지정합니다.

여기 카탈로그 아이템 카드의 예제가 있습니다. 카드에는 제목, 사진, 설명이 있습니다. 각 항목 내에서는 소스 문서의 콘텐츠가 논리적으로 제목→설명→사진 순으로 배치되어 있습니다. 이는 음성 렌더링 및 CSS가 없는 브라우저에서 합리적인 순서를 제공합니다. 더 흥미로운 시각적 표현을 위해서는 order를 사용하여 콘텐츠의 후반에 있던 이미지를 카드의 맨 위로 끌어올릴 수 있습니다.
article.sale-item {
  display: flex;
  flex-flow: column;
}
article.sale-item > img {
  order: -1; /* 레이아웃 순서에서 이미지를 다른 콘텐츠 앞에 배치 */
  align-self: center;
}
<article class="sale-item">
  <h1>컴퓨터 스타터 키트</h1>
  <p>이 제품은 돈이 많지 않다면 살 수 있는 최고의 컴퓨터입니다.
  <ul>
    <li>컴퓨터
    <li>모니터
    <li>키보드
    <li>마우스
  </ul>
  <img src="images/computer.jpg"
    alt="제공 품목: 흰색 데스크탑 컴퓨터와 일치하는 주변기기.">
</article>
제공 품목: 흰색 데스크탑 컴퓨터와 일치하는 키보드와 모니터.

컴퓨터 스타터 키트

이 제품은 돈이 많지 않다면 살 수 있는 최고의 컴퓨터입니다.

  • 컴퓨터
  • 모니터
  • 키보드
  • 마우스
위 코드의 렌더링 예시입니다.

플렉스그리드 컨테이너는 내용을 order로 수정된 문서 순서로 배치하며, 가장 낮은 순서 그룹부터 시작하여 높은 순서 그룹으로 올라갑니다. 동일한 순서 그룹의 아이템은 소스 문서에 나타나는 순서대로 배치됩니다. 이는 페인팅 순서에도 영향을 주며 [CSS2], 플렉스/그리드 아이템이 소스 문서에서 재정렬된 것처럼 동작합니다. 플렉스/그리드 컨테이너의 절대 위치 자식은 페인팅 순서를 결정할 때 order: 0로 간주되며, 플렉스/그리드 아이템과의 상대적 순서가 결정됩니다.

추후 명시되지 않는 한, 이 속성은 플렉스 아이템 또는 그리드 아이템이 아닌 박스에는 아무런 효과가 없습니다.

3.1. 재정렬 및 접근성

order 속성은 비시각적 미디어(예: 음성)의 순서에는 영향을 주지 않습니다. 마찬가지로 order는 기본 순차 탐색 모드(예: 링크 반복 탐색, tabindex [HTML] 참고)의 기본 순서에도 영향을 주지 않습니다.

저자들은 order를 오직 공간적(시각적) 콘텐츠 재정렬에만 사용해야 합니다. order를 논리적 재정렬에 사용하는 스타일 시트는 비준수입니다.

참고: 이는 비시각적 미디어와 CSS가 없는 사용자 에이전트에서 일반적으로 콘텐츠를 선형적으로 표시할 수 있도록 논리적 소스 순서에 의존할 수 있게 하며, order는 레이아웃 순서만 조정하는 데 사용됩니다. (시각적 인식은 2차원이고 비선형이므로 원하는 레이아웃 순서가 항상 논리적 순서와 일치하지 않습니다.)

모든 표현 모드에서 저자가 의도한 순서를 유지하기 위해 WYSIWYG 에디터 및 웹 기반 저작 도구를 포함한 저작 도구들은 기본 문서 소스를 재정렬해야 하며, order를 사용하여 재정렬을 수행해서는 안 됩니다. 단, 저자가 공간적 순서가 기본 문서 순서(음성 및 탐색 순서 결정)와 동기화되지 않음을 명시적으로 지정한 경우에는 제외합니다.

예를 들어, 도구가 플렉스 아이템의 드래그 앤 드롭 재정렬과 화면 크기별 대체 레이아웃 처리를 위한 미디어 쿼리 기능을 모두 제공할 수 있습니다.

대부분의 경우 재정렬은 모든 화면 크기 범위와 탐색 및 음성 순서에 영향을 미쳐야 하므로 도구는 DOM 레이어에서 드래그 앤 드롭 재정렬을 수행해야 합니다. 하지만 저자가 화면 크기별로 다른 레이아웃을 원할 때도 있습니다. 도구는 order와 미디어 쿼리를 함께 사용하여 이러한 기능을 제공할 수 있으며, 가장 작은 화면 크기의 순서는 기본 DOM 순서에 맞추고 (이는 일반적으로 논리적 선형 표시 순서임) 다른 크기 범위에서는 order로 시각적 표시 순서를 정의할 수 있습니다.

이런 도구는 준수 도구이지만, order만으로 드래그 앤 드롭 재정렬을 처리하는 도구(구현이 편리하더라도)는 비준수입니다.

참고: 브라우저, 접근성 기술, 확장 프로그램을 포함한 사용자 에이전트는 공간 탐색 기능을 제공할 수 있습니다. 이 섹션은 그런 공간 탐색 모드에서 order 속성을 고려하는 것을 금지하지 않습니다. 오히려 이런 기능이 작동하려면 반드시 고려해야 합니다. 하지만 order는 이런 공간 탐색 기능을 위해 고려해야 할 CSS 속성 중 유일하거나 주요 속성이 아닙니다. 잘 구현된 공간 탐색 기능은 공간 관계를 수정하는 모든 CSS 레이아웃 기능을 고려해야 합니다.

4. 투명성: visibility 속성

이름: visibility
값: visible | hidden | collapse
초기값: visible
적용 대상: 모든 요소
상속 여부:
백분율: 해당 없음
계산된 값: 지정된 값
표준 순서: 문법에 따름
애니메이션 유형: 이산형
미디어: 시각적

visibility 속성은 박스가 렌더링되는지 여부를 지정합니다. 투명한 박스도 레이아웃에는 영향을 줍니다. (박스 생성 자체를 완전히 막으려면 display 속성을 none으로 설정하세요.) 값의 의미는 다음과 같습니다:

visible
생성된 박스가 일반적으로 표시됩니다.
hidden
요소가 생성한 모든 박스가 투명해집니다. 하지만 자식 요소가 visibility: visible을 가지고 있다면 자식은 표시될 수 있습니다.
collapse
박스가 접힘 상태임을 나타내며, 포매팅 컨텍스트에 따라 공간을 덜 차지할 수 있습니다. 테이블의 동적 행/열 효과 [CSS2]플렉스 레이아웃에서의 collapsed flex items 참고 [CSS-FLEXBOX-1]. 그 외의 경우(별도 명시 없을 때)는 단순히 박스를 투명하게 만들며, hidden과 동일합니다.

참고: 현재 많은 사용자 에이전트 및 접근성 도구들이 투명 요소와 의미상 관계가 있는 표시된 요소의 접근성 문제를 올바르게 구현하지 못하고 있습니다. 예를 들어, 부모 요소(테이블 행 등)를 투명하게 하고 자식 요소(테이블 셀 등)는 표시 상태로 두면 그런 도구를 사용하는 사용자에게 문제가 될 수 있습니다. 저자들은 도구 상황이 개선될 때까지 이런 상황을 만들지 않는 것이 좋습니다.

투명 박스는 렌더링되지 않으며(완전히 투명한 것처럼), 상호작용할 수 없으며 (pointer-events: none과 동일하게 동작), 탐색에서 제외되며 (display: none과 유사), 음성 렌더링에서도 렌더링되지 않습니다. (단, speakalways인 경우는 예외 [CSS-SPEECH-1]). 하지만 display: contents처럼 컨테이너로서의 의미론적 역할은 유지되어 visible 자식 요소가 올바르게 해석됩니다.

참고: speakalways인 경우, 투명 박스도 음성으로 렌더링되며, 비시각적/공간적 방법으로 상호작용할 수 있습니다.

display: none을 사용하여 임시로 요소를 숨기는 것만으로도 충분한 경우가 많지만, 이렇게 하면 요소가 레이아웃에서 완전히 제거되어 숨기거나 표시할 때 페이지가 원치 않는 이동이나 리플로우가 발생할 수 있습니다. visibility: hidden을 사용하면 숨기거나 표시할 때 페이지 레이아웃을 안정적으로 유지할 수 있습니다.

예를 들어, 아래는 클릭 시 숨겨진 텍스트를 보여주는 "스포일러" 요소의 (의도적으로 단순화된) 구현 예시입니다:

<p>영화 초반의 상징주의는 마지막에 명확해지는데,
  <spoiler-text><span>루크가 자신의 아버지임이 드러날 때</span></spoiler-text>,
  마법사의 수수께끼가 의미를 갖게 됩니다.
<style>
spoiler-text { border-bottom: 1px solid; }
spoiler-text > span { visibility: hidden; }
spoiler-text.shown > span { visibility: visible; }
</style>
<script>
[...document.querySelectorAll("spoiler-text")].forEach(el=>{
  el.addEventListener("click", e=>el.classList.toggle("shown"));
});
</script>

이 예시는 의도적으로 크게 단순화되었습니다. 실제 사이트에서 사용할 수 있는 접근성 및 UX 기능이 많이 빠져있으니 visibility의 사용법만 참고하세요. 실제 사이트용으로 이 코드를 복사하지 마세요.

5. 런인 레이아웃

런인 박스는 자신의 뒤에 오는 블록에 합쳐져, 해당 블록의 인라인 수준 콘텐츠의 시작 부분에 자신을 삽입하는 박스입니다. 이는 간결한 제목, 정의, 기타 유사한 항목을 포맷할 때 유용하며, 적절한 DOM 구조는 본문 앞에 제목을 두지만, 원하는 표시는 인라인 제목이 텍스트와 함께 레이아웃되는 것입니다.

예를 들어, 사전 정의는 단어가 정의와 인라인으로 표시되도록 자주 포맷됩니다:
<dl class='dict'>
  <dt>dictionary
  <dd>언어의 단어를 알파벳순으로 나열하고 의미를 제공하는 책,
      또는 다른 언어의 해당 단어를 제공하는 책.
  <dt>glossary
  <dd>특정 주제, 텍스트, 방언에 나타나거나 관련된 용어 또는 단어를 알파벳순으로 나열하고 설명을 덧붙인 것; 간단한 사전.
</dl>
<style>
.dict > dt {
  display: run-in;
}
.dict > dt::after {
  content: ": "
}
</style>

이는 다음과 같이 포맷됩니다:

dictionary: 언어의 단어를 알파벳순으로 나열하고 의미를 설명하는 책.

glossary: 특정 주제, 텍스트, 방언에 나타나거나 관련된 용어 또는 단어를
알파벳순으로 나열하고 설명을 덧붙인 것; 간단한 사전.

런인 박스는 다른 인라인 수준 박스와 정확히 동일하게 동작하지만, 다음과 같은 예외가 있습니다:

런인 시퀀스는 연속된 형제 런인 박스들과 그 사이의 공백 및/또는 플로우 밖 박스의 최대 시퀀스입니다.

참고: 이 설명은 플로우 밖 박스가 두 런인 박스 사이에 있으면 리패런팅된다는 의미입니다. 다른 대안으로는 중간에 있는 플로우 밖 박스를 남겨두거나, 플로우 밖 박스가 이전 박스의 런인 동작을 방해하도록 할 수도 있습니다. 구현자 및 저자들은 원하는 동작이 있다면 CSSWG에 연락하는 것이 권장되며, 여기의 동작은 임의로 선택된 것입니다.

이 보정은 CSS2§9.2에서 설명된 익명 블록 및 인라인 박스 보정보다 먼저 발생하며, 영향을 받는 요소의 첫 번째 포맷된 줄 결정에 영향을 미칩니다. 마치 런인 시퀀스가 박스 트리의 최종 위치에 원래 있었던 것처럼 처리합니다.

참고: 최초의 런인 박스가 해당 블록의 첫 번째 포맷된 줄의 첫 텍스트가 되므로, 해당 블록 요소에 적용된 ::first-letter 의사 요소는 런인 박스의 첫 글자를 선택합니다. 블록 자체의 콘텐츠 첫 글자가 아니라.

참고: 이 런인 모델은 [CSS2]의 이전 버전에서 제안된 것과 약간 다릅니다.

부록 A: 용어집

다음 용어들은 편의상 여기서 정의합니다:

루트 요소
요소문서 트리의 루트에 위치한 것. 문서 트리가 DOM에 따라 생성된 경우, 이는 document element입니다; HTML에서는 html 요소입니다. [DOM] [HTML]
주요 박스
요소가 하나 이상의 박스를 생성할 때, 그 중 하나는 주요 박스이며, 자식 박스들과 생성된 콘텐츠를 포함하며, 포지셔닝 스킴에 관여하는 박스이기도 합니다.

일부 요소는 주요 박스 외에 추가 박스를 생성할 수 있습니다 (예: list-item 요소는 마커 박스를 추가로 생성, 또는 table 요소는 주요 테이블 래퍼 박스와 추가 테이블 그리드 박스 생성). 이러한 추가 박스들은 주요 박스를 기준으로 배치됩니다.

인라인 수준
인라인 레이아웃에 참여하는 콘텐츠. 구체적으로는 인라인 수준 박스와 텍스트 시퀀스입니다.
블록 수준
블록 레이아웃에 참여하는 콘텐츠. 구체적으로는 블록 수준 박스.
인라인 박스
인라인 수준 박스 중 내부 디스플레이 타입flow인 비치환 박스. 인라인 박스의 내용은 인라인 박스 자체와 동일한 인라인 포매팅 컨텍스트에 참여합니다.
인라인
인라인 박스 또는 인라인 수준 박스를 지칭할 때 약어로 사용(명확할 때). 또는 인라인 수준을 의미하는 형용사로 사용. 후자의 사용은 더 이상 권장되지 않음.
아토믹 인라인
치환(예: 이미지)이거나 새로운 포매팅 컨텍스트를 생성(예: inline-block 또는 inline-table)하는 인라인 수준 박스. 그리고 인라인 박스나 루비 컨테이너와 달리 줄을 나눌 수 없음.

내부 디스플레이 타입이 flow가 아닌 모든 인라인 수준 박스는 지정된 내부 디스플레이 타입의 새로운 포매팅 컨텍스트를 생성합니다.

블록 컨테이너
블록 컨테이너는 인라인 수준 박스만 포함해 인라인 포매팅 컨텍스트에 참여하거나, 블록 수준 박스만 포함해 블록 포매팅 컨텍스트에 참여합니다(이 제약을 보장하기 위해 익명 블록 박스 생성 가능, CSS2§9.2.1.1 참고).

인라인 수준 콘텐츠만 포함하는 블록 컨테이너는 새로운 인라인 포매팅 컨텍스트를 생성합니다. 이때 요소는 모든 인라인 콘텐츠를 감싸는 루트 인라인 박스도 생성합니다. 루트 인라인 박스 개념은 CSS2§9.2.2.1에서 도입된 "익명 인라인 요소" 개념을 사실상 대체합니다.

부모 포매팅 컨텍스트가 블록 포매팅 컨텍스트가 아닐 경우 블록 컨테이너는 새로운 블록 포매팅 컨텍스트를 생성합니다. 그렇지 않고 본인도 블록 포매팅 컨텍스트에 참여한다면, 내부에 새로운 블록 포매팅 컨텍스트를 생성하거나 기존 것을 계속 사용할 수 있습니다. 이는 다른 속성의 제약에 따라 결정됩니다 (예: overflow 또는 align-content 등).

참고: 블록 컨테이너 박스는 블록 포매팅 컨텍스트와 인라인 포매팅 컨텍스트를 동시에 생성할 수 있습니다.

블록 박스
블록 수준 박스이면서 블록 컨테이너인 박스.

참고: 모든 블록 컨테이너 박스가 블록 수준 박스인 것은 아닙니다: 비치환 인라인 블록과 비치환 테이블 셀이 예시이며, 이들은 블록 컨테이너이지만 블록 수준 박스는 아닙니다. 반대로 모든 블록 수준 박스가 블록 컨테이너인 것도 아닙니다: 블록 수준 치환 요소(display: block) 및 플렉스 컨테이너(display: flex) 등은 블록 컨테이너가 아닙니다.

블록
블록 박스, 블록 수준 박스, 블록 컨테이너 박스를 의미하며, 명확할 때 약어로 사용.
치환 요소
이미지나 임베디드 문서처럼 CSS 포매팅 모델의 범위를 벗어난 콘텐츠를 가진 요소. 예를 들어, HTML img 요소의 콘텐츠는 종종 src 속성이 지정한 이미지로 대체됩니다.

치환 요소는 고유 크기를 가지는 경우가 많습니다. 예를 들어, 비트맵 이미지는 절대 단위로 지정된 고유 너비와 높이가 있고, 고유 비율도 그로부터 결정할 수 있습니다. 반면, 다른 객체는 고유 크기가 없을 수 있습니다 (예: 빈 HTML 문서). [css-images-3] 참고.

사용자 에이전트는 치환 요소고유 크기를 가지지 않는 것으로 간주할 수 있는데, 그 크기가 제3자에게 민감한 정보를 유출할 가능성이 있다고 판단되는 경우입니다. 예를 들어, HTML 문서가 사용자의 은행 잔고에 따라 자연 크기가 달라진다면, UA는 해당 리소스가 고유 크기가 없다고 간주할 수 있습니다.

치환 요소의 콘텐츠는 CSS 포매팅 모델에 포함되지 않지만, 고유 크기는 다양한 레이아웃 계산에 사용됩니다. 치환 요소는 항상 독립 포매팅 컨텍스트를 생성합니다.

비치환 요소는 치환되지 않은 요소로, 즉 렌더링이 CSS 모델에 의해 결정되는 요소입니다.

컨테이닝 블록
박스와 관련된 크기와 위치의 기준이 되는 사각형. 특히 컨테이닝 블록박스가 아닙니다 (사각형임), 하지만 종종 박스의 크기를 기반으로 정의됩니다. 각 박스는 자신의 컨테이닝 블록 기준으로 위치가 부여되지만, 그 컨테이닝 블록에 제한되지는 않습니다; overflow될 수 있습니다. “박스의 컨테이닝 블록”은 “박스가 속한 컨테이닝 블록”을 의미하며, 박스가 생성하는 블록이 아닙니다.

일반적으로 박스의 가장자리가 자식 박스의 컨테이닝 블록 역할을 합니다; 박스가 자식의 컨테이닝 블록을 “생성한다”고 표현합니다. 컨테이닝 블록의 속성이 참조되는 경우, 박스의 값을 참조합니다. (초기 컨테이닝 블록의 경우, 별도 명시 없으면 루트 요소의 값을 사용합니다.)

[CSS2] Section 9.1.2, Section 10.1, CSS Positioned Layout 3 § 2.1 위치 지정 박스의 컨테이닝 블록 참고.

컨테이닝 블록 체인
컨테이닝 블록들의 연속된 시퀀스로, 컨테이닝 블록 관계를 통해 조상-자손 체인을 형성합니다. 예시: 인라인 박스의 컨테이닝 블록은 가장 가까운 블록 컨테이너 조상의 콘텐츠 박스; 해당 블록 컨테이너가 인플로우 블록이라면, 의 컨테이닝 블록은 부모 블록 컨테이너가 형성; 그 조부모 블록 컨테이너절대 위치라면, 의 컨테이닝 블록은 가장 가까운 포지셔닝된 조상의 패딩 가장자리 (반드시 부모일 필요는 없음)이고, 이런 식으로 초기 컨테이닝 블록까지 올라감.
초기 컨테이닝 블록
루트 요소컨테이닝 블록. 초기 컨테이닝 블록블록 포매팅 컨텍스트를 생성합니다. CSS2.1§10.1에서 연속 미디어 참고; [CSS-PAGE-3]에서 페이지 미디어의 위치와 크기 참고.
포매팅 컨텍스트
포매팅 컨텍스트란 관련 박스 집합이 레이아웃되는 환경을 의미합니다. 다양한 포매팅 컨텍스트는 박스를 서로 다른 규칙으로 레이아웃합니다. 예를 들어, 플렉스 포매팅 컨텍스트플렉스 레이아웃 규칙으로 박스를 배치하며 [CSS-FLEXBOX-1] 참고, 블록 포매팅 컨텍스트는 블록-인라인 레이아웃 규칙([CSS2])을 따름. 또한 일부 포매팅 컨텍스트 타입은 서로 섞여 존재: 예를 들어 인라인 포매팅 컨텍스트블록 포매팅 컨텍스트 내에서 존재하며, 루비 컨테이너루비 포매팅 컨텍스트인라인 포매팅 컨텍스트 위에 오버레이합니다.

박스는 새로운 독립 포매팅 컨텍스트를 생성하거나 부모 포매팅 컨텍스트를 계속 사용합니다. 경우에 따라 추가로 새로운(비독립) 포매팅 컨텍스트를 생성할 수 있습니다. 별도 명시 없으면, 새로운 포매팅 컨텍스트를 생성하면 독립 포매팅 컨텍스트가 생깁니다. 박스가 생성하는 포매팅 컨텍스트의 종류는 내부 디스플레이 타입에 의해 결정됩니다. 예: 그리드 컨테이너는 새로운 그리드 포매팅 컨텍스트를 생성, 루비 컨테이너는 새로운 루비 포매팅 컨텍스트를 생성, 블록 컨테이너는 새로운 블록 포매팅 컨텍스트와/또는 인라인 포매팅 컨텍스트를 생성할 수 있습니다. display 속성 참고.

독립 포매팅 컨텍스트
박스가 독립 포매팅 컨텍스트를 생성할 때 (그 포매팅 컨텍스트가 부모와 같은 타입이든 아니든), 사실상 새로운 독립 레이아웃 환경을 만듭니다: 박스 자체의 크기를 제외하고는, 자손의 레이아웃은(일반적으로) 박스 외부 포매팅 컨텍스트의 규칙과 내용에 영향을 받지 않으며, 반대도 마찬가지입니다.

예를 들어, 블록 포매팅 컨텍스트에서는 플로트 박스가 주변 박스의 레이아웃에 영향을 줍니다. 하지만 그 영향은 포매팅 컨텍스트 경계를 넘지 않습니다: 그 포매팅 컨텍스트를 생성하는 박스가 플로트를 모두 감싸고, 박스 외부의 플로트는 내부 내용에 영향을 줄 수 없습니다.

또 다른 예: 마진은 포매팅 컨텍스트 경계를 넘어 합쳐지지 않습니다.

익스클루전은 독립 포매팅 컨텍스트 경계를 넘어 콘텐츠에 영향을 줄 수 있습니다. (작성 시점 기준, 유일하게 그런 기능이 있음) [CSS3-EXCLUSIONS]

특정 속성은 박스가 독립 포매팅 컨텍스트를 생성하도록 강제할 수 있습니다. 예를 들어, 박스를 플로우 밖으로 만들면 블록화와 함께 독립 포매팅 컨텍스트 생성도 일어납니다. 또 다른 예: contain 속성의 특정 값은 박스가 독립 포매팅 컨텍스트 생성을 하게 만듭니다. 블록을 스크롤 컨테이너로 만들면 독립 포매팅 컨텍스트 생성이 일어나지만, 서브그리드스크롤 컨테이너로 만들면 그렇게 되지 않고, 자식은 부모 그리드 컨테이너의 레이아웃에 참여하게 됩니다.

블록 박스독립 포매팅 컨텍스트를 생성하면 자손을 위한 새로운 블록 포매팅 컨텍스트가 만들어집니다. 대부분의 다른 경우, 박스에 독립 포매팅 컨텍스트 생성을 강제하는 것은 아무런 효과가 없습니다—이미 해당 박스가 독립 포매팅 컨텍스트를 생성하든(예: 플렉스 컨테이너), 해당 박스 타입에서는 완전히 독립적인 새 포매팅 컨텍스트를 생성할 수 없든(예: 비치환 인라인 박스).

블록 포매팅 컨텍스트
인라인 포매팅 컨텍스트
블록인라인 포매팅 컨텍스트CSS 2.1 Section 9.4에서 정의됨. 인라인 포매팅 컨텍스트블록 포매팅 컨텍스트 내에 존재(속함); 예를 들어, 인라인 포매팅 컨텍스트의 라인 박스는 블록 포매팅 컨텍스트에 속한 플로트와 상호작용함.
블록 레이아웃
블록 수준 박스의 레이아웃이며, 블록 포매팅 컨텍스트 내에서 수행됨.
블록 포매팅 컨텍스트 루트
새로운 블록 포매팅 컨텍스트를 생성하는 블록 컨테이너.
BFC
블록 포매팅 컨텍스트 또는 블록 포매팅 컨텍스트 루트의 약어. 내부 플로트를 포함하고 외부 플로트를 배제하며 마진 합침을 억제하는 박스를 뜻하는 다양한 비공식적 정의가 있음. 그러므로 다음 중 하나를 지칭할 수 있음:
플로우 밖
플로우 내
박스가 플로우 밖이면, 기대되는 위치와 주변 콘텐츠와의 상호작용에서 추출되어 부모 포매팅 컨텍스트의 정상적인 콘텐츠 흐름 밖에서 다른 패러다임으로 레이아웃됩니다. 이는 박스가 플로트(float)되거나 절대 위치(position 사용)된 경우 발생. 박스가 플로우 내이면 플로우 밖이 아닌 경우임.

참고: 일부 포매팅 컨텍스트는 플로트 동작을 억제하므로, float: left가 반드시 플로우 밖임을 의미하지는 않습니다.

문서 순서
박스 또는 콘텐츠가 문서에서 나타나는 순서 (렌더링 시 나타나는 순서와 다를 수 있음). 의사 요소의 상대적 순서를 결정할 때는 박스 트리 순서를 사용합니다. CSS Pseudo-Elements 4 § 4 트리 기반 의사 요소 참고.

[CSS2] 9장에서 이 용어들에 대한 더 자세한 정의를 확인할 수 있습니다.

부록 B: display: contents가 특이한 요소에 미치는 영향

이 섹션은 (현재) 비규범적입니다.

일부 요소는 CSS 박스 개념만으로 렌더링되지 않습니다; 예를 들어, 치환 요소(예: img), 많은 폼 컨트롤(예: input), 그리고 SVG 요소가 있습니다.

이 부록에서는 이들이 display: contents와 어떻게 상호작용하는지 정의합니다.

HTML 요소

br
wbr
meter
progress
canvas
embed
object
audio
iframe
img
video
frame
frameset
input
textarea
select

display: contentsdisplay: none으로 계산됩니다.

legend

HTML에 따라, legend 요소에 display: contents가 지정되면 rendered legend가 아니게 되므로, 특별한 display 동작이 없습니다. (따라서 display: contents 동작이 일반적으로 적용됩니다.)

button
details
fieldset

이 요소들은 특별한 동작을 가지지 않습니다; display: contents는 그들의 주요 박스만 제거하고, 내용은 정상적으로 렌더링됩니다.

그 외 모든 HTML 요소

display: contents에 대해 일반적으로 동작합니다.

SVG 요소

CSS 박스 레이아웃을 가지는 svg 요소 (HTML 요소의 자식이거나, 문서 루트 요소인 모든 svg 포함)

display: contentsdisplay: none으로 계산됩니다.

그 외 모든 SVG 컨테이너 요소이면서 렌더링 가능한 요소
SVG 텍스트 콘텐츠 자식 요소
use

display: contents는 해당 요소를 포매팅 트리에서 제거하고, 그 내용물을 위치에 끌어올려 렌더링합니다. 이 내용에는 use 요소의 shadow-DOM 콘텐츠도 포함됩니다.

그 외 모든 SVG 요소

display: contentsdisplay: none으로 계산됩니다.

여기서의 의도는 요소 내부의 "렌더링 컨텍스트"가 외부와 다를 때마다 display: none 동작이 적용된다는 것입니다. 만약 요소의 자식 요소가 부모의 유효한 자식이 아니게 된다면, 단순히 포매팅 트리에서 끌어올릴 수 없습니다.

예를 들어, SVG의 텍스트 콘텐츠와 텍스트 포매팅 요소들은 text 요소 컨텍스트가 필요합니다; text 요소를 제거하면, 그 자식 텍스트 콘텐츠와 요소들은 더 이상 유효하지 않습니다. 이런 이유로 display: contentstext 요소에 지정하면 전체 텍스트 요소가 렌더링되지 않습니다. 반면에, tspan 또는 textPath 내의 모든 유효한 콘텐츠는 부모 텍스트 포매팅 컨텍스트에서도 유효하므로, 이런 요소에는 끌어올리기 동작이 적용됩니다.

마찬가지로, 끌어올리기로 인해 자식이 비렌더링 요소(예: pattern이나 symbol 내부의 도형)가 렌더링 요소(예: svg의 직접 자식 도형)로 변환된다면, 이는 렌더링 컨텍스트의 잘못된 변경입니다. 절대 렌더링되지 않는 컨테이너 요소는 display: contents로 "언박스"될 수 없습니다.

요소가 포매팅 트리에서 제거되면, 해당 요소에 있는 SVG 속성 중 레이아웃과 시각적 포매팅을 제어하는 속성은 내용 렌더링 시 무시됩니다. 그러나 SVG 프리젠테이션 속성CSS 속성에 매핑되는 것—은 값 처리와 상속에 계속 영향을 미칩니다 [CSS-CASCADE-3]; 따라서 이런 속성은 해당 속성이 적용된 자손의 레이아웃과 시각적 포매팅에 영향을 줄 수 있습니다.

MathML 요소

모든 MathML 요소에 대해, display: contentsdisplay: none으로 계산됩니다.

부록 C: 스펙 저자를 위한 박스 구성 가이드라인

이 섹션은 스펙 저자를 위한 비규범적 안내입니다.

감사의 글

박스 생성의 다양한 세부사항을 수년간 분리하려고 시도한 많은 사람들께 감사드립니다. 특히 Bert Bos, display-modeldisplay-role로 마지막 시도를 했으나 결실은 없었지만, 현 스펙의 바탕을 마련해 주셨고, Anton Prowse, CSS2.1 9장에 대한 끊임없는 공격으로 혼돈 속에서 어느 정도의 질서를 만들어냈으며, Oriol Brufau, 이 스펙의 수십 가지 미세한 구분과 오류를 밝혀낸 분, David Baron, Mats Palmgren, Ilya Streltsyn, Boris Zbarsky에게도 의견을 주셔서 명예의 언급을 드립니다.

변경 사항

2020 후보 권고 이후 변경 사항

코멘트 처리 결과2020년 5월 19일 후보 권고 이후 공개되었습니다.

2020년 5월 19일 후보 권고 이후의 변경 사항:

2019 후보 권고 이후 변경 사항

2019년 7월 11일 후보 권고 이후의 변경 사항:

2018년 8월 28일 후보 권고 이후의 변경 사항:

후보 권고 이전 변경 사항

코멘트 처리 결과가 제공됩니다.

2018년 4월 20일 워킹 드래프트 이후의 변경 사항:

2017년 7월 20일 워킹 드래프트 이후의 변경 사항:

2017년 1월 26일 워킹 드래프트 이후의 변경 사항:

코멘트 처리 결과도 제공됩니다.

2015년 10월 15일 워킹 드래프트 이후의 변경 사항:

2015년 7월 21일 워킹 드래프트 이후의 변경 사항:

2014년 9월 11일 워킹 드래프트 이후의 변경 사항:

개인정보 보호 사항

이 명세는 새로운 개인정보 보호 사항을 도입하지 않습니다.

보안 사항

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

자체 검토 질문지

보안 및 개인정보 자체 검토 질문지: 고려해야 할 질문

  1. 이 명세는 개인 식별 정보와 관련이 있습니까?

    아니오.

  2. 이 명세는 고가치 데이터와 관련이 있습니까?

    아니오.

  3. 이 명세는 브라우징 세션 간에 지속되는 출처의 새로운 상태를 도입합니까?

    아니오.

  4. 이 명세는 웹에 지속적이고 교차 출처 상태를 노출합니까?

    아니오.

  5. 이 명세는 출처에 현재 접근할 수 없는 다른 데이터를 노출합니까?

    아니오.

  6. 이 명세는 새로운 스크립트 실행/로드 메커니즘을 가능하게 합니까?

    아니오.

  7. 이 명세는 출처가 사용자의 위치에 접근할 수 있도록 허용합니까?

    아니오.

  8. 이 명세는 출처가 사용자의 기기 센서에 접근할 수 있도록 허용합니까?

    아니오.

  9. 이 명세는 출처가 사용자의 로컬 컴퓨팅 환경의 일부에 접근할 수 있도록 허용합니까?

    아니오.

  10. 이 명세는 출처가 다른 기기에 접근할 수 있도록 허용합니까?

    아니오.

  11. 이 명세는 출처가 사용자 에이전트의 기본 UI를 일정 부분 제어할 수 있도록 허용합니까?

    아니오.

  12. 이 명세는 웹에 임시 식별자를 노출합니까?

    아니오.

  13. 이 명세는 1자 및 3자 맥락에서의 동작을 구분합니까?

    아니오.

  14. 이 명세는 사용자 에이전트의 "시크릿 모드" 맥락에서 어떻게 동작해야 합니까?

    다르게 동작하지 않습니다.

  15. 이 명세는 사용자의 로컬 기기에 데이터를 저장합니까?

    아니오.

  16. 이 명세에는 "보안 사항"과 "개인정보 보호 사항" 섹션이 있습니까?

    예.

  17. 이 명세는 기본 보안 특성을 다운그레이드하도록 허용합니까?

    아니오.

준수

문서 규약

준수 요구사항은 설명적 단언과 RFC 2119 용어의 조합으로 표현됩니다. “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL”과 같은 핵심 단어들은 이 문서의 규범적 부분에서 RFC 2119에 명시된 대로 해석되어야 합니다. 다만, 가독성을 위해 이 단어들은 본 명세서에서 모두 대문자로 표시되지는 않습니다.

본 명세의 모든 텍스트는 명시적으로 비규범적, 예제, 또는 주석으로 표시된 섹션을 제외하고 규범적입니다. [RFC2119]

본 명세서의 예제는 “예를 들어”라는 문구로 시작하거나 class="example"와 같이 규범적 텍스트와 분리되어 있습니다, 다음과 같이:

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

참고 노트는 “Note”로 시작하며 class="note"로 규범적 텍스트와 분리됩니다, 다음과 같이:

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

권고(advisement)는 특별한 주의를 요구하는 규범적 섹션으로 <strong class="advisement">로 스타일링되며 다음과 같이 표시됩니다: UA는 반드시 접근 가능한 대안을 제공해야 합니다.

준수 클래스

본 명세에 대한 준수는 세 가지 준수 클래스로 정의됩니다:

style sheet
CSS 스타일 시트.
renderer
UA로, 스타일 시트의 의미를 해석하고 그 스타일 시트를 사용하는 문서를 렌더링합니다.
authoring tool
UA로, 스타일 시트를 작성하는 도구입니다.

스타일 시트가 본 명세를 준수하려면 이 모듈에서 정의한 문법을 사용하는 모든 문장이 일반 CSS 문법과 이 모듈에서 정의된 각 기능별 개별 문법에 따라 유효해야 합니다.

렌더러가 본 명세를 준수하려면 스타일 시트를 관련 명세서에 정의된 대로 해석하는 것뿐만 아니라, 본 명세서에서 정의한 모든 기능을 올바르게 파싱하고 그에 따라 문서를 렌더링해야 합니다. 다만, UA가 기기의 한계로 인해 문서를 올바르게 렌더링하지 못하는 경우, UA가 비준수라고 할 수 없습니다. (예를 들어, UA는 흑백 모니터에서 색상을 렌더링할 필요가 없습니다.)

저작 도구가 본 명세를 준수하려면 스타일 시트를 일반 CSS 문법과 이 모듈의 각 기능별 개별 문법에 따라 문법적으로 올바르게 작성해야 하며, 이 모듈에 설명된 스타일 시트의 기타 모든 준수 요구사항도 충족해야 합니다.

부분 구현

저자들이 미래 호환 파싱 규칙을 활용하여 대체값을 지정할 수 있도록, CSS 렌더러는 반드시 지원하지 않는 모든 at-규칙, 속성, 속성값, 키워드 및 기타 문법적 구조를 무효로 처리하고 (적절히 무시) 사용 가능한 수준의 지원이 없는 경우에는 무시해야 합니다. 특히, 사용자 에이전트는 지원하지 않는 구성값만 선택적으로 무시하고, 지원되는 구성값만 적용해서는 안 됩니다: 어떤 값이라도 무효(지원하지 않는 값은 반드시 무효임)로 간주되면, CSS에서는 전체 선언을 무시해야 합니다.

불안정 및 독자적 기능의 구현

향후 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 최선의 구현 관행에 따라 불안정 기능과 독자적 확장을 구현할 것을 권고합니다.

비실험적 구현

명세가 후보 권고 단계에 도달하면, 비실험적인 구현이 가능하며, 구현자는 스펙에 따라 올바르게 구현되었음을 입증할 수 있는 CR 단계 기능에 대해 접두어 없는(unprefixed) 구현을 공개해야 합니다.

CSS 구현 간 상호운용성을 확립하고 유지하기 위해, CSS 작업그룹은 비실험적 CSS 렌더러가 어떤 CSS 기능의 접두어 없는 구현을 공개하기 전에 W3C에 구현 보고서(필요하다면 그 구현 보고서에 사용된 테스트케이스도 함께)를 제출할 것을 요청합니다. W3C에 제출된 테스트케이스는 CSS 작업그룹의 검토 및 수정 대상이 됩니다.

테스트케이스와 구현 보고서 제출에 관한 자세한 내용은 CSS 작업그룹 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있습니다. 문의는 public-css-testsuite@w3.org 메일링리스트로 보내주세요.

CR 종료 기준

본 명세가 제안 권고(Proposed Recommendation)로 진행되려면, 각 기능마다 최소 두 개의 독립적이며 상호운용 가능한 구현이 있어야 합니다. 각 기능은 서로 다른 제품 세트로 구현될 수 있으며, 모든 기능을 단일 제품이 구현할 필요는 없습니다. 이 기준의 목적을 위해 다음 용어를 정의합니다:

independent
각 구현은 서로 다른 당사자가 개발해야 하며, 다른 적격 구현에서 사용된 코드를 공유, 재사용 또는 파생하지 않아야 합니다. 본 명세의 구현에 영향을 주지 않는 코드 부분은 이 요구사항에서 제외됩니다.
interoperable
공식 CSS 테스트 스위트의 해당 테스트케이스를 통과하거나, 구현이 웹 브라우저가 아닌 경우 동등한 테스트를 통과해야 함을 의미합니다. 테스트 스위트의 모든 관련 테스트는 해당 사용자 에이전트(UA)가 상호운용성을 주장하려면 동등한 테스트가 생성되어야 합니다. 또한, 해당 UA가 상호운용성을 주장하려면, 동일한 방식으로 동등 테스트를 통과할 수 있는 추가 UA가 하나 이상 있어야 하며, 상호운용성 목적을 위해 동등 테스트는 공개적으로 동료 검토(peer review)를 받을 수 있어야 합니다.
implementation
사용자 에이전트로서 다음 조건을 만족해야 함:
  1. 명세를 구현함.
  2. 일반 대중이 사용할 수 있음. 구현은 출시 제품이거나 기타 공개 버전(예: 베타 버전, 프리뷰 릴리스, "야간 빌드" 등)일 수 있음. 출시되지 않은 제품 버전은 기능을 최소 한 달 이상 구현하여 안정성을 입증해야 함.
  3. 실험적인 것이 아님(즉, 테스트 스위트 통과만을 목적으로 설계되었고 향후 일반 사용을 의도하지 않는 버전이 아님).

명세는 최소 6개월 동안 후보 권고(Candidate Recommendation) 상태를 유지합니다.

색인

이 명세서에서 정의된 용어

참조로 정의된 용어

참고문헌

규범적 참고문헌

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS Box Alignment Module Level 3. 2023년 2월 17일. WD. URL: https://www.w3.org/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2023년 2월 14일. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022년 11월 3일. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018년 12월 4일. CR. URL: https://www.w3.org/TR/css-break-3/
[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-CASCADE-3]
Elika Etemad; Tab Atkins Jr.. CSS Cascading and Inheritance Level 3. 2021년 2월 11일. REC. URL: https://www.w3.org/TR/css-cascade-3/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022년 1월 13일. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2. 2022년 9월 17일. WD. URL: https://www.w3.org/TR/css-contain-2/
[CSS-FLEXBOX-1]
Tab Atkins Jr.; et al. CSS Flexible Box Layout Module Level 1. 2018년 11월 19일. CR. URL: https://www.w3.org/TR/css-flexbox-1/
[CSS-GRID-1]
Tab Atkins Jr.; et al. CSS Grid Layout Module Level 1. 2020년 12월 18일. CR. URL: https://www.w3.org/TR/css-grid-1/
[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-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 3. 2020년 12월 17일. CR. URL: https://www.w3.org/TR/css-images-3/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad. CSS Inline Layout Module Level 3. 2022년 11월 14일. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023년 3월 21일. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin. CSS Paged Media Module Level 3. 2018년 10월 18일. WD. URL: https://www.w3.org/TR/css-page-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2023년 2월 17일. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2022년 12월 30일. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 2022년 12월 31일. WD. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SPEECH-1]
Léonie Watson; Elika Etemad. CSS Speech Module Level 1. 2023년 2월 14일. CR. URL: https://www.w3.org/TR/css-speech-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-TEXT-4]
Elika Etemad; et al. CSS Text Module Level 4. 2023년 3월 1일. WD. URL: https://www.w3.org/TR/css-text-4/
[CSS-UI-4]
Florian Rivoal. CSS Basic User Interface Module Level 4. 2021년 3월 16일. WD. URL: https://www.w3.org/TR/css-ui-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022년 12월 1일. 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. 2022년 10월 19일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019년 12월 10일. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016년 4월 12일. WD. URL: https://www.w3.org/TR/CSS22/
[CSSOM]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021년 8월 26일. WD. URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[MEDIAQUERIES-5]
Dean Jackson; et al. 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/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018년 10월 4일. CR. URL: https://www.w3.org/TR/SVG2/

참고용 참고문헌

[CSS3-EXCLUSIONS]
Rossen Atanassov; Vincent Hardy; Alan Stearns. CSS Exclusions Module Level 1. 2015년 1월 15일. WD. URL: https://www.w3.org/TR/css3-exclusions/

속성 색인

이름 초기값 적용 대상 상속 백분율 애니메이션 타입 표준 순서 계산된 값 미디어
display [ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy> inline 모든 요소 아니오 해당 없음 애니메이션 불가 문법에 따름 내부와 외부 디스플레이 타입을 나타내는 두 키워드 쌍 + 선택적 list-item 플래그, 또는 <display-internal> 또는 <display-box> 키워드; 계산 규칙은 여러 스펙의 본문 참고
order <integer> 0 flex 아이템과 grid 아이템 아니오 해당 없음 계산된 값 타입에 따라 문법에 따름 지정된 정수
visibility visible | hidden | collapse visible 모든 요소 해당 없음 이산형 문법에 따름 지정된 값 시각적