1. 소개
이것은 CSS Sizing 레벨 3에 대한 차이 명세입니다. 현재 탐색적 작업 초안입니다: 무언가를 구현하고 있다면 레벨 3을 참조해 주세요. 이 초안이 CR에 도달하면 레벨 3의 텍스트를 이 초안에 병합할 예정입니다.
테스트
일반 크기 조정 테스트
- dynamic-available-size-iframe.html (실시간 테스트) (소스)
- dynamic-change-inline-size-001.html (실시간 테스트) (소스)
- dynamic-change-inline-size-002.html (실시간 테스트) (소스)
- dynamic-change-inline-size-003.html (실시간 테스트) (소스)
- dynamic-change-inline-size-004.html (실시간 테스트) (소스)
- frameset-intrinsic-crash.html (실시간 테스트) (소스)
- inheritance-001.html (실시간 테스트) (소스)
- inheritance-002.html (실시간 테스트) (소스)
- min-width-max-width-precedence.html (실시간 테스트) (소스)
- min-width-max-width-precedence.html (실시간 테스트) (소스)
- replaced-max-size-saturation.html (실시간 테스트) (소스)
- responsive-iframe-no-match-element.html (실시간 테스트) (소스)
- textarea-large-padding-crash.html (실시간 테스트) (소스)
1.1. 모듈 상호작용
이 모듈은 width, height, min-width, min-height, max-width, max-height 및 column-width 기능을 확장하며, 이 기능들은 [CSS2] 제10장 및 [CSS3COL]에 정의되어 있습니다.
1.2. 값 정의
이 명세는 CSS 속성 정의 규칙을 [CSS2]에서 따르며, 값 정의 구문은 [CSS-VALUES-3]을 사용합니다. 이 명세에서 정의되지 않은 값 유형은 CSS Values & Units [CSS-VALUES-3]에 정의되어 있습니다. 다른 CSS 모듈과 결합하면 이러한 값 유형의 정의가 확장될 수 있습니다.
각 정의에 나열된 속성별 값 외에도, 이 명세에서 정의된 모든 속성은 CSS 전역 키워드도 속성 값으로 허용합니다. 가독성을 위해 이를 명시적으로 반복하지 않았습니다.
2. 용어
3. 박스 크기 지정
3.1. 크기 조정 속성
| 이름: | size |
|---|---|
| 값: | <'width'> <'height'>? |
| 초깃값: | auto |
| 적용 대상: | 모든 요소 |
| 상속: | 개별 속성 참조 |
| 백분율: | 개별 속성 참조 |
| 계산값: | 개별 속성 참조 |
| 애니메이션 유형: | 개별 속성 참조 |
| 정규 순서: | 문법에 따름 |
size 속성은 단축 속성으로, width와 height를 하나의 선언으로 설정합니다. 두 번째 값을 생략하면 첫 번째 값이 복사됩니다.
size 단축 속성은 @page 컨텍스트에서 사용할 수 없습니다. @page에는 이미 페이지 크기를 설정하기 위한 별개의 size 디스크립터가 있기 때문입니다.
size 속성은 CSSOM의 선호 단축 속성 순서에서 제외되어야 합니다. 이는 호환성 문제 및 @page와의 충돌을 방지하기 위한 것입니다.
| 이름: | min-size |
|---|---|
| 값: | <'min-width'> <'min-height'>? |
| 초깃값: | auto |
| 적용 대상: | 모든 요소 |
| 상속: | 개별 속성 참조 |
| 백분율: | 개별 속성 참조 |
| 계산값: | 개별 속성 참조 |
| 애니메이션 유형: | 개별 속성 참조 |
| 정규 순서: | 문법에 따름 |
min-size 속성은 단축 속성으로, min-width와 min-height를 하나의 선언으로 설정합니다. 두 번째 값을 생략하면 첫 번째 값이 복사됩니다.
| 이름: | max-size |
|---|---|
| 값: | <'max-width'> <'max-height'>? |
| 초깃값: | none |
| 적용 대상: | 모든 요소 |
| 상속: | 개별 속성 참조 |
| 백분율: | 개별 속성 참조 |
| 계산값: | 개별 속성 참조 |
| 애니메이션 유형: | 개별 속성 참조 |
| 정규 순서: | 문법에 따름 |
max-size 속성은 단축 속성으로, max-width와 max-height를 하나의 선언으로 설정합니다. 두 번째 값을 생략하면 첫 번째 값이 복사됩니다.
3.2. 새로운 크기 조정 값: contain, fit-content() 및 calc-size() 값
CSS Sizing 3 § 3.2 크기 조정 값: <length-percentage>, auto | none, min-content, max-content 및 fit-content() 값
레벨 4에서는 contain, fit-content() 및 calc-size() 값을 크기 조정 속성에서 사용할 수 있는 기능이 추가되며, 이에 따라 <box-size> 생성식이 다음과 같이 확장됩니다:
<box-size> = <length-percentage> | stretch | contain | min-content | max-content | fit-content | fit-content() | calc-size()
| 이름: | width, height, min-width, min-height, max-width, max-height |
|---|---|
| 새로운 값: | contain | fit-content(<length-percentage [0,∞]>) |
- fit-content(<length-percentage [0,∞]>)
-
지정된 인수로 사용 가능한 공간을 대체하여 fit-content 공식을 사용합니다.
즉,
min(max-content, max(min-content, <length-percentage>))이며, 여기서 <length-percentage> 인수는 단독으로 사용되는 <length-percentage> 값과 정확히 같은 방식으로 해석됩니다.음수 <length-percentage> 값은 유효하지 않습니다.
테스트
- auto-scrollbar-inside-stf-abspos.html (실시간 테스트) (소스)
- block-fit-content-as-initial.html (실시간 테스트) (소스)
- fit-content-length-percentage-001.html (실시간 테스트) (소스)
- fit-content-length-percentage-002.html (실시간 테스트) (소스)
- fit-content-length-percentage-003.html (실시간 테스트) (소스)
- fit-content-length-percentage-004.html (실시간 테스트) (소스)
- fit-content-length-percentage-005.html (실시간 테스트) (소스)
- fit-content-length-percentage-006.html (실시간 테스트) (소스)
- fit-content-length-percentage-007.html (실시간 테스트) (소스)
- fit-content-length-percentage-008.html (실시간 테스트) (소스)
- fit-content-length-percentage-009.html (실시간 테스트) (소스)
- fit-content-length-percentage-010.html (실시간 테스트) (소스)
- fit-content-length-percentage-011.html (실시간 테스트) (소스)
- fit-content-length-percentage-012.html (실시간 테스트) (소스)
- fit-content-length-percentage-013.html (실시간 테스트) (소스)
- fit-content-length-percentage-014.html (실시간 테스트) (소스)
- fit-content-length-percentage-015.html (실시간 테스트) (소스)
- fit-content-length-percentage-016.html (실시간 테스트) (소스)
- contain
-
박스에 선호
종횡비가 있는 경우,
contain-fit
크기 조정을 적용하여,
가능한 한 선호 종횡비를 유지하면서
박스의 제약 조건에 맞추려고 합니다.
§ 6.1 Contain-fit 크기 조정: 종횡비를 유지하면서
늘이기를 참조하세요.
박스에 선호 종횡비가 없는 경우, stretch-fit 크기 조정을 적용합니다.
- calc-size()
-
CSS Values 5 § 10. 내재적 크기로
계산하기: calc-size() 함수를 참조하세요.
참고: none 키워드는 calc-size() 내에서 사용할 수 없습니다.
참고: 이러한 새로운 값은 <calc-size()>의 정의가 “컨텍스트에서 허용되는” 값이라고 지칭하는 값 집합에 추가됩니다.
4. 종횡비
이미지는 흔히 고유 종횡비를 가지며, CSS 레이아웃 알고리즘은 요소의 크기를 조정할 때 이 비율을 유지하려고 합니다.
aspect-ratio 속성을 사용하면 비대체 요소에 대해 이 동작을 지정하고, 대체 요소의 유효 종횡비를 변경할 수 있습니다.
이 절의 세부 사항은 아직 작업 중입니다. 여기에서 지정된 동작 중 대체 요소가 선호 종횡비를 가질 때 CSS2, Flex Layout 및 Grid Layout 명세의 요구 사항을 결합했을 때(이 명세가 적용되지 않는 경우)와 다르게 동작하게 하는 내용이 있다면, 이는 오류이며 CSSWG에 보고해야 합니다. 열려 있는 aspect-ratio 이슈 목록이 있습니다.
4.1. 선호 종횡비: aspect-ratio 속성
| 이름: | aspect-ratio |
|---|---|
| 값: | auto || <ratio> |
| 초깃값: | auto |
| 적용 대상: | 인라인 박스와 내부 루비 또는 테이블 박스를 제외한 모든 요소 |
| 상속: | 아니요 |
| 백분율: | 해당 없음 |
| 계산값: | 지정된 키워드 또는 숫자 쌍 |
| 정규 순서: | 문법에 따름 |
| 애니메이션 유형: | 계산값에 따름 |
테스트
- aspect-ratio-interpolation.html (실시간 테스트) (소스)
- abspos-001.html (실시간 테스트) (소스)
- abspos-002.html (실시간 테스트) (소스)
- abspos-003.html (실시간 테스트) (소스)
- abspos-004.html (실시간 테스트) (소스)
- abspos-005.html (실시간 테스트) (소스)
- abspos-006.html (실시간 테스트) (소스)
- abspos-007.html (실시간 테스트) (소스)
- abspos-008.html (실시간 테스트) (소스)
- abspos-009.html (실시간 테스트) (소스)
- abspos-010.html (실시간 테스트) (소스)
- abspos-011.html (실시간 테스트) (소스)
- abspos-012.html (실시간 테스트) (소스)
- abspos-013.html (실시간 테스트) (소스)
- abspos-014.html (실시간 테스트) (소스)
- abspos-015.html (실시간 테스트) (소스)
- abspos-016.html (실시간 테스트) (소스)
- abspos-017.html (실시간 테스트) (소스)
- abspos-018.html (실시간 테스트) (소스)
- abspos-019.html (실시간 테스트) (소스)
- abspos-020.html (실시간 테스트) (소스)
- abspos-021.html (실시간 테스트) (소스)
- auto-margins-001.html (실시간 테스트) (소스)
- block-aspect-ratio-001.html (실시간 테스트) (소스)
- block-aspect-ratio-002.html (실시간 테스트) (소스)
- block-aspect-ratio-003.html (실시간 테스트) (소스)
- block-aspect-ratio-004.html (실시간 테스트) (소스)
- block-aspect-ratio-005.html (실시간 테스트) (소스)
- block-aspect-ratio-006.html (실시간 테스트) (소스)
- block-aspect-ratio-007.html (실시간 테스트) (소스)
- block-aspect-ratio-008.html (실시간 테스트) (소스)
- block-aspect-ratio-009.html (실시간 테스트) (소스)
- block-aspect-ratio-010.html (실시간 테스트) (소스)
- block-aspect-ratio-011.html (실시간 테스트) (소스)
- block-aspect-ratio-012.html (실시간 테스트) (소스)
- block-aspect-ratio-013.html (실시간 테스트) (소스)
- block-aspect-ratio-014.html (실시간 테스트) (소스)
- block-aspect-ratio-015.html (실시간 테스트) (소스)
- block-aspect-ratio-016.html (실시간 테스트) (소스)
- block-aspect-ratio-017.html (실시간 테스트) (소스)
- block-aspect-ratio-018.html (실시간 테스트) (소스)
- block-aspect-ratio-019.html (실시간 테스트) (소스)
- block-aspect-ratio-020.html (실시간 테스트) (소스)
- block-aspect-ratio-021.html (실시간 테스트) (소스)
- block-aspect-ratio-022.html (실시간 테스트) (소스)
- block-aspect-ratio-023.html (실시간 테스트) (소스)
- block-aspect-ratio-024.html (실시간 테스트) (소스)
- block-aspect-ratio-025.html (실시간 테스트) (소스)
- block-aspect-ratio-026.html (실시간 테스트) (소스)
- block-aspect-ratio-027.html (실시간 테스트) (소스)
- block-aspect-ratio-028.html (실시간 테스트) (소스)
- block-aspect-ratio-029-crash.html (실시간 테스트) (소스)
- block-aspect-ratio-030.html (실시간 테스트) (소스)
- block-aspect-ratio-031.html (실시간 테스트) (소스)
- block-aspect-ratio-032.html (실시간 테스트) (소스)
- block-aspect-ratio-033.html (실시간 테스트) (소스)
- block-aspect-ratio-034.html (실시간 테스트) (소스)
- block-aspect-ratio-035.html (실시간 테스트) (소스)
- block-aspect-ratio-036.html (실시간 테스트) (소스)
- block-aspect-ratio-037.html (실시간 테스트) (소스)
- block-aspect-ratio-051-crash.html (실시간 테스트) (소스)
- block-aspect-ratio-052.html (실시간 테스트) (소스)
- block-aspect-ratio-053.html (실시간 테스트) (소스)
- block-aspect-ratio-054.html (실시간 테스트) (소스)
- block-aspect-ratio-055.html (실시간 테스트) (소스)
- block-aspect-ratio-056.html (실시간 테스트) (소스)
- block-aspect-ratio-058.html (실시간 테스트) (소스)
- block-aspect-ratio-with-margin-collapsing-001.html (실시간 테스트) (소스)
- block-aspect-ratio-with-margin-collapsing-002.html (실시간 테스트) (소스)
- box-sizing-dimensions.html (실시간 테스트) (소스)
- box-sizing-squashed.html (실시간 테스트) (소스)
- flex-aspect-ratio-001.html (실시간 테스트) (소스)
- flex-aspect-ratio-003.html (실시간 테스트) (소스)
- flex-aspect-ratio-005.html (실시간 테스트) (소스)
- flex-aspect-ratio-006.html (실시간 테스트) (소스)
- flex-aspect-ratio-007.html (실시간 테스트) (소스)
- flex-aspect-ratio-008.html (실시간 테스트) (소스)
- flex-aspect-ratio-009.html (실시간 테스트) (소스)
- flex-aspect-ratio-010.html (실시간 테스트) (소스)
- flex-aspect-ratio-011.html (실시간 테스트) (소스)
- flex-aspect-ratio-012.html (실시간 테스트) (소스)
- flex-aspect-ratio-013.html (실시간 테스트) (소스)
- flex-aspect-ratio-014.html (실시간 테스트) (소스)
- flex-aspect-ratio-015.html (실시간 테스트) (소스)
- flex-aspect-ratio-016.html (실시간 테스트) (소스)
- flex-aspect-ratio-017.html (실시간 테스트) (소스)
- flex-aspect-ratio-018.html (실시간 테스트) (소스)
- flex-aspect-ratio-019.html (실시간 테스트) (소스)
- flex-aspect-ratio-020.html (실시간 테스트) (소스)
- flex-aspect-ratio-021.html (실시간 테스트) (소스)
- flex-aspect-ratio-022.html (실시간 테스트) (소스)
- flex-aspect-ratio-023.html (실시간 테스트) (소스)
- flex-aspect-ratio-024.html (실시간 테스트) (소스)
- flex-aspect-ratio-027.html (실시간 테스트) (소스)
- flex-aspect-ratio-028.html (실시간 테스트) (소스)
- flex-aspect-ratio-029.html (실시간 테스트) (소스)
- flex-aspect-ratio-030.html (실시간 테스트) (소스)
- flex-aspect-ratio-032.html (실시간 테스트) (소스)
- flex-aspect-ratio-033.html (실시간 테스트) (소스)
- flex-aspect-ratio-034.html (실시간 테스트) (소스)
- flex-aspect-ratio-035.html (실시간 테스트) (소스)
- flex-aspect-ratio-036.html (실시간 테스트) (소스)
- flex-aspect-ratio-037.html (실시간 테스트) (소스)
- flex-aspect-ratio-038.html (실시간 테스트) (소스)
- flex-aspect-ratio-045.html (실시간 테스트) (소스)
- flex-aspect-ratio-046.html (실시간 테스트) (소스)
- flex-aspect-ratio-047.html (실시간 테스트) (소스)
- flex-aspect-ratio-048.html (실시간 테스트) (소스)
- flex-aspect-ratio-049.html (실시간 테스트) (소스)
- flex-aspect-ratio-050.html (실시간 테스트) (소스)
- flex-aspect-ratio-051.html (실시간 테스트) (소스)
- flex-aspect-ratio-052.html (실시간 테스트) (소스)
- flex-aspect-ratio-053.html (실시간 테스트) (소스)
- flex-aspect-ratio-054.html (실시간 테스트) (소스)
- flex-aspect-ratio-055.html (실시간 테스트) (소스)
- floats-aspect-ratio-001.html (실시간 테스트) (소스)
- fractional-aspect-ratio.html (실시간 테스트) (소스)
- grid-aspect-ratio-001.html (실시간 테스트) (소스)
- grid-aspect-ratio-002.html (실시간 테스트) (소스)
- grid-aspect-ratio-003.html (실시간 테스트) (소스)
- grid-aspect-ratio-004.html (실시간 테스트) (소스)
- grid-aspect-ratio-005.html (실시간 테스트) (소스)
- grid-aspect-ratio-006.html (실시간 테스트) (소스)
- grid-aspect-ratio-007.html (실시간 테스트) (소스)
- grid-aspect-ratio-008.html (실시간 테스트) (소스)
- grid-aspect-ratio-009.html (실시간 테스트) (소스)
- grid-aspect-ratio-010.html (실시간 테스트) (소스)
- grid-aspect-ratio-011.html (실시간 테스트) (소스)
- grid-aspect-ratio-012.html (실시간 테스트) (소스)
- grid-aspect-ratio-014.html (실시간 테스트) (소스)
- grid-aspect-ratio-015.html (실시간 테스트) (소스)
- grid-aspect-ratio-016.html (실시간 테스트) (소스)
- grid-aspect-ratio-017.html (실시간 테스트) (소스)
- grid-aspect-ratio-018.html (실시간 테스트) (소스)
- grid-aspect-ratio-019.html (실시간 테스트) (소스)
- grid-aspect-ratio-020.html (실시간 테스트) (소스)
- grid-aspect-ratio-021.html (실시간 테스트) (소스)
- grid-aspect-ratio-022.html (실시간 테스트) (소스)
- grid-aspect-ratio-023.html (실시간 테스트) (소스)
- grid-aspect-ratio-024.html (실시간 테스트) (소스)
- grid-aspect-ratio-025.html (실시간 테스트) (소스)
- grid-aspect-ratio-026.html (실시간 테스트) (소스)
- grid-aspect-ratio-027.html (실시간 테스트) (소스)
- grid-aspect-ratio-028.html (실시간 테스트) (소스)
- grid-aspect-ratio-029.html (실시간 테스트) (소스)
- grid-aspect-ratio-030.html (실시간 테스트) (소스)
- grid-aspect-ratio-031.html (실시간 테스트) (소스)
- grid-aspect-ratio-032.html (실시간 테스트) (소스)
- grid-aspect-ratio-033.html (실시간 테스트) (소스)
- grid-aspect-ratio-034.html (실시간 테스트) (소스)
- grid-aspect-ratio-035.html (실시간 테스트) (소스)
- grid-aspect-ratio-036.html (실시간 테스트) (소스)
- grid-aspect-ratio-037.html (실시간 테스트) (소스)
- grid-aspect-ratio-038.html (실시간 테스트) (소스)
- grid-aspect-ratio-040.html (실시간 테스트) (소스)
- grid-aspect-ratio-041.html (실시간 테스트) (소스)
- inheritance.html (실시간 테스트) (소스)
- intrinsic-size-001.html (실시간 테스트) (소스)
- intrinsic-size-002.html (실시간 테스트) (소스)
- intrinsic-size-003.html (실시간 테스트) (소스)
- intrinsic-size-004.html (실시간 테스트) (소스)
- intrinsic-size-005.html (실시간 테스트) (소스)
- intrinsic-size-006.html (실시간 테스트) (소스)
- intrinsic-size-007.html (실시간 테스트) (소스)
- intrinsic-size-008.html (실시간 테스트) (소스)
- intrinsic-size-009.html (실시간 테스트) (소스)
- intrinsic-size-011.html (실시간 테스트) (소스)
- intrinsic-size-012.html (실시간 테스트) (소스)
- intrinsic-size-013.html (실시간 테스트) (소스)
- intrinsic-size-014.html (실시간 테스트) (소스)
- intrinsic-size-015.html (실시간 테스트) (소스)
- intrinsic-size-016.html (실시간 테스트) (소스)
- intrinsic-size-017.html (실시간 테스트) (소스)
- intrinsic-size-018.html (실시간 테스트) (소스)
- intrinsic-size-019.html (실시간 테스트) (소스)
- intrinsic-size-020.html (실시간 테스트) (소스)
- intrinsic-size-021.html (실시간 테스트) (소스)
- intrinsic-size-022.html (실시간 테스트) (소스)
- intrinsic-size-023.html (실시간 테스트) (소스)
- intrinsic-size-024.html (실시간 테스트) (소스)
- intrinsic-size-025.html (실시간 테스트) (소스)
- large-aspect-ratio-crash.html (실시간 테스트) (소스)
- aspect-ratio-computed.html (실시간 테스트) (소스)
- aspect-ratio-invalid.html (실시간 테스트) (소스)
- aspect-ratio-valid.html (실시간 테스트) (소스)
- percentage-resolution-001.html (실시간 테스트) (소스)
- percentage-resolution-002.html (실시간 테스트) (소스)
- percentage-resolution-003.html (실시간 테스트) (소스)
- percentage-resolution-004.html (실시간 테스트) (소스)
- percentage-resolution-005.html (실시간 테스트) (소스)
- quirks-mode-001.html (실시간 테스트) (소스)
- quirks-mode-002.html (실시간 테스트) (소스)
- quirks-mode-003.html (실시간 테스트) (소스)
- replaced-element-001.html (실시간 테스트) (소스)
- replaced-element-002.html (실시간 테스트) (소스)
- replaced-element-003.html (실시간 테스트) (소스)
- replaced-element-004.html (실시간 테스트) (소스)
- replaced-element-005.html (실시간 테스트) (소스)
- replaced-element-006.html (실시간 테스트) (소스)
- replaced-element-007.html (실시간 테스트) (소스)
- replaced-element-008.html (실시간 테스트) (소스)
- replaced-element-009.html (실시간 테스트) (소스)
- replaced-element-010.html (실시간 테스트) (소스)
- replaced-element-011.html (실시간 테스트) (소스)
- replaced-element-012.html (실시간 테스트) (소스)
- replaced-element-013.html (실시간 테스트) (소스)
- replaced-element-014.html (실시간 테스트) (소스)
- replaced-element-015.html (실시간 테스트) (소스)
- replaced-element-016.html (실시간 테스트) (소스)
- replaced-element-017.html (실시간 테스트) (소스)
- replaced-element-018.html (실시간 테스트) (소스)
- replaced-element-019.html (실시간 테스트) (소스)
- replaced-element-020.html (실시간 테스트) (소스)
- replaced-element-021.html (실시간 테스트) (소스)
- replaced-element-022.html (실시간 테스트) (소스)
- replaced-element-023.html (실시간 테스트) (소스)
- replaced-element-024.html (실시간 테스트) (소스)
- replaced-element-025.html (실시간 테스트) (소스)
- replaced-element-026.html (실시간 테스트) (소스)
- replaced-element-027.html (실시간 테스트) (소스)
- replaced-element-028.html (실시간 테스트) (소스)
- replaced-element-029.html (실시간 테스트) (소스)
- replaced-element-030.html (실시간 테스트) (소스)
- replaced-element-031.html (실시간 테스트) (소스)
- replaced-element-034.html (실시간 테스트) (소스)
- replaced-element-035.html (실시간 테스트) (소스)
- replaced-element-036.html (실시간 테스트) (소스)
- replaced-element-037.html (실시간 테스트) (소스)
- replaced-element-042.html (실시간 테스트) (소스)
- replaced-element-045.html (실시간 테스트) (소스)
- replaced-element-046.html (실시간 테스트) (소스)
- replaced-element-049.html (실시간 테스트) (소스)
- replaced-element-dynamic-aspect-ratio.html (실시간 테스트) (소스)
- select-element-001.html (실시간 테스트) (소스)
- sign-function-aspect-ratio.html (실시간 테스트) (소스)
- small-aspect-ratio-crash.html (실시간 테스트) (소스)
- table-element-001.html (실시간 테스트) (소스)
- zero-or-infinity-001.html (실시간 테스트) (소스)
- zero-or-infinity-002.html (실시간 테스트) (소스)
- zero-or-infinity-003.html (실시간 테스트) (소스)
- zero-or-infinity-004.html (실시간 테스트) (소스)
- zero-or-infinity-005.html (실시간 테스트) (소스)
- zero-or-infinity-006.html (실시간 테스트) (소스)
- zero-or-infinity-007.html (실시간 테스트) (소스)
- zero-or-infinity-008.html (실시간 테스트) (소스)
- zero-or-infinity-009.html (실시간 테스트) (소스)
- zero-or-infinity-010.html (실시간 테스트) (소스)
이 속성은 박스에 선호 종횡비를 설정하며, 이는 auto 크기와 일부 다른 레이아웃 함수의 계산에 사용됩니다.
- auto
- 대체 요소에 고유 종횡비가 있으면 해당 종횡비를 사용합니다. 그렇지 않으면 박스에는 선호 종횡비가 없습니다. 종횡비가 관련된 크기 계산은 항상 콘텐츠 박스의 치수를 사용합니다.
- <ratio>
- 박스의 선호 종횡비는 지정된 width / height 비율입니다. 종횡비가 관련된 크기 계산은 box-sizing으로 지정된 박스의 치수를 사용합니다.
- auto && <ratio>
- auto와 <ratio>가 함께 지정되면, 선호 종횡비는 지정된 width / height 비율입니다. 다만 대체 요소이고 고유 종횡비가 있는 경우에는 해당 종횡비가 대신 사용됩니다. 모든 경우에 종횡비가 관련된 크기 계산은 항상 콘텐츠 박스의 치수를 사용합니다.
참고: 선호 종횡비를 갖는다고 해서 박스가 대체 요소가 되는 것은 아닙니다. 대체 요소에만 적용되는 레이아웃 규칙은 일반적으로 비대체 박스가 선호 종횡비를 갖는 경우에는 적용되지 않습니다. 예를 들어 비대체 절대 위치 지정된 박스는 justify-self: normal을 stretch로 취급하며, start로 취급하지 않습니다. (CSS Box Alignment 3 § 6.1.2 절대 위치 지정된 박스), 선호 종횡비가 있더라도 마찬가지입니다.
CSS2.1은 대체 요소와 종횡비를 가진 요소를 명확하게 구분하지 않습니다. 불명확한 구체적인 사례를 찾아 정의해야 하며, 적절한 레벨 3 명세 또는 여기에서 정의해야 합니다.
< ul > < li > …< li > …< li > …< li > …</ ul >
ul{ display : grid; grid-template-columns : repeat ( auto-fill, minmax ( 12 em , 1 fr )); } li{ aspect-ratio : 1 /1 ; overflow : auto; }
iframe
요소의
width 및 height 속성을 사용하여
aspect-ratio 속성을 설정하고,
iframe에 크기 조정에 사용할 종횡비를 제공함으로써
해당 종횡비를 가진 이미지와 정확히 같은 방식으로 동작하도록 합니다.
< iframe src = "https://www.youtube.com/embed/0Gr1XSyxZy0" width = 560 height = 315 >
@supports ( aspect-ratio:attr ( width number) /1 ) { iframe{ aspect-ratio : attr ( width number) /attr ( height number); width : 100 % ; height : auto; } }
대체 요소의 유일한 고유 치수가 고유 너비 또는 고유 높이인 경우, 선호 종횡비를 부여하면 누락된 쪽에 따라 고유 높이 또는 너비도 부여됩니다. 이는 기존 크기를 선호 종횡비를 통해 전달하여 이루어집니다.
4.2. 선호 종횡비가 자동 크기에 미치는 영향
박스에 선호 종횡비가 있으면, 해당 박스의 자동 크기는 대체 요소가 고유 종횡비를 갖고 해당 축에 고유 크기가 없는 경우와 같은 방식으로 계산됩니다. 예를 들어 CSS2 § 10 및 CSS Flexible Box Model Level 1 § 9.2를 참조하세요. 선호 크기 계산이 이 종횡비에 의존하는 축을 비율 의존 축이라고 하며, 입력 크기도 확정되어 있다면 결과 크기는 확정됩니다. 반대쪽 축(비율 의존 축의 크기가 의존하는 축)은 비율 결정 축입니다.
참고: 선호 종횡비는 박스 크기 중 적어도 하나가 자동인 경우에만 영향을 줍니다. width와 height 중 어느 것도 자동 크기가 아니면, 선호 종횡비는 해당 요소의 선호 크기에 영향을 줄 수 없습니다.
모든 크기 조정 정보를 여기로 옮겨 2.1에 억지로 끼워 넣지 않게 되면, 여기서의 핵심 원칙은 단순합니다: 비율 결정 축에서 해석된 선호 크기가 (최소/최대값을 적용하기 전에) 비율을 통해 전달됩니다. 최소/최대 제약 조건은 그 이후에 전달되며, 종횡비와 관계없이 각 축에 독립적으로 적용됩니다.
테스트
4.2.1. 마진 상쇄
마진 상쇄의 목적상(CSS 2 § 8.3.1 마진 상쇄), 블록 축이 비율 의존 축인 경우, 계산된 block-size 값이 auto인 것으로 간주하지 않습니다.
4.3. 자동 콘텐츠 기반 최소 크기
의도하지 않은 오버플로를 방지하기 위해, 자동 최소 크기는 비율 의존 축에서, 선호 종횡비를 갖는 박스가 대체 요소도 아니고, 해당 축에서 스크롤 컨테이너도 아닌 경우, 해당 박스의 min-content 크기를 최대 크기로 상한 제한한 값입니다.
div{ aspect-ratio : 1 /1 ; /* 'width'와 'height'는 둘 다 기본값이 'auto'입니다 */ }
+----------+ +----------+ +----------+
| ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ |
| ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ |
| ~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ |
| | | ~~~ | | ~~~~~~~~ |
+----------+ +----------+ | ~~~~~~~~ |
| ~~~~~~ |
+----------+
그러나 overflow: auto가 지정되면, 콘텐츠가 넘치는 박스조차 1:1 종횡비를 유지합니다. 대신 평소처럼 스크롤 가능해져 오버플로를 처리합니다.
div{ overflow : auto; aspect-ratio : 1 /1 ; }
+----------+ +----------+ +----------+ | ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~^| | ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ | | | | ~~~ | | ~~~~~~~~v| +----------+ +----------+ +----------+
min-height 속성을 재정의해도 1:1 종횡비가 유지되지만, 다른 방식으로 처리하지 않으면 콘텐츠가 박스 밖으로 넘치게 됩니다.
div{ aspect-ratio : 1 /1 ; min-height : 0 ; }
+----------+ +----------+ +----------+
| ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ |
| ~~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ |
| ~~~~~~~ | | ~~~~~~~~ | | ~~~~~~~~ |
| | | ~~~ | | ~~~~~~~~ |
+----------+ +----------+ +-~~~~~~~~-+
~~~~~~
< div style = "height: 100px; aspect-ratio: 1/1;" > < span style = "display: inline-block; width: 50px;" ></ span > < span style = "display: inline-block; width: 150px;" ></ span > </ div >
컨테이너의 width는 auto이므로 종횡비를 통해 100px로 해석됩니다. 그러나 min-width 역시 auto이므로 150px로 해석됩니다. 따라서 컨테이너의 최종 너비는 150px입니다. 컨테이너의 크기를 정할 때 콘텐츠를 무시하려면 min-width: 0을 지정할 수 있습니다.
테스트
- block-aspect-ratio-038.html (실시간 테스트) (소스)
- block-aspect-ratio-039.html (실시간 테스트) (소스)
- fieldset-element-001.html (실시간 테스트) (소스)
- fieldset-element-002.html (실시간 테스트) (소스)
- flex-aspect-ratio-002.html (실시간 테스트) (소스)
- flex-aspect-ratio-004.html (실시간 테스트) (소스)
- flex-aspect-ratio-025.html (실시간 테스트) (소스)
- flex-aspect-ratio-026.html (실시간 테스트) (소스)
- flex-aspect-ratio-040.html (실시간 테스트) (소스)
- flex-aspect-ratio-041.html (실시간 테스트) (소스)
- flex-aspect-ratio-042.html (실시간 테스트) (소스)
- flex-aspect-ratio-043.html (실시간 테스트) (소스)
- flex-aspect-ratio-044.html (실시간 테스트) (소스)
- grid-aspect-ratio-039.html (실시간 테스트) (소스)
- grid-aspect-ratio-042.html (실시간 테스트) (소스)
- intrinsic-size-010.html (실시간 테스트) (소스)
4.4. 최소/최대 크기 전달
어느 축이든 그 축의 크기 조정 제약 조건 (origin 축)은 선호 종횡비를 통해 전달되고, 다른 축(destination 축)의 미확정 최소, 최대 또는 선호 크기에 다음과 같이 적용됩니다:
-
먼저, 모든 확정 최소 크기는 origin 축에서 destination 축으로 변환되어 전달됩니다. 이렇게 전달된 최소값은 destination 축의 모든 확정 선호 또는 최대 크기를 상한으로 합니다.
-
그다음, 모든 확정 최대 크기는 origin에서 destination으로 변환되어 전달됩니다. 이렇게 전달된 최대값은 destination 축의 모든 확정 선호 또는 최소 크기, 그리고 존재하는 경우 전달된 최소값을 하한으로 합니다.
참고: 따라서 확정 크기는 전달된 제약 조건의 영향을 전혀 받지 않습니다. 또한 전달된 최소값으로 인해 요소가 확정 선호/최대 크기를 초과하는 일은 없으며, 전달된 최대값으로 인해 요소가 선호/최소 크기를 위반하는 일도 없습니다.
참고: 기본 원칙은 크기 조정 제약 조건이 종횡비를 통해 반대쪽으로 전달되어, 영향을 받는 축에 명시적으로 지정된 크기를 위반하지 않는 범위에서 가능한 한 종횡비를 유지하는 것입니다. (이 원칙은 CSS2 제10.4절의 제약 조건 표 내용을 결정한 원칙입니다.)
< div id = container style = "height: 100px; float: left;" > < div id = item style = "height: 100%; aspect-ratio: 1/1;" > content</ div > </ div >
#item의 높이는 확정 컨테이너를 기준으로 해석되는 백분율이므로,
항목의 너비는 내재적 크기 기여 및 최종 레이아웃 모두에서 100px로 해석되며,
따라서 컨테이너의 너비도 100px로 결정됩니다.
< div id = container style = "height: auto; float: left;" > < div id = item style = "height: 100%; aspect-ratio: 1/1;" > content</ div > </ div >
다음 예제에서는 항목의 백분율 높이를 해석할 수 없으므로 auto처럼 동작합니다 (CSS 2 § 10.5 콘텐츠 높이: 'height' 속성 참조). 이제 두 축 모두 자동 크기를 가지므로, 높이가 비율 의존 축이 됩니다. 박스의 내재적 크기 기여를 계산하면 콘텐츠에서 파생된 너비와, 해당 너비 및 종횡비로 계산된 높이가 생성되어, “content”라는 단어의 너비에 맞춰 크기가 정해진 정사각형 박스(및 컨테이너)가 만들어집니다.
테스트
- replaced-element-032.html (실시간 테스트) (소스)
- replaced-element-033.html (실시간 테스트) (소스)
- block-aspect-ratio-040.html (실시간 테스트) (소스)
- block-aspect-ratio-041.html (실시간 테스트) (소스)
- block-aspect-ratio-042.html (실시간 테스트) (소스)
- block-aspect-ratio-043.html (실시간 테스트) (소스)
- block-aspect-ratio-044.html (실시간 테스트) (소스)
- block-aspect-ratio-045.html (실시간 테스트) (소스)
- block-aspect-ratio-046.html (실시간 테스트) (소스)
- block-aspect-ratio-047.html (실시간 테스트) (소스)
- block-aspect-ratio-048.html (실시간 테스트) (소스)
- block-aspect-ratio-049.html (실시간 테스트) (소스)
- flex-aspect-ratio-039.html (실시간 테스트) (소스)
- replaced-element-039.html (실시간 테스트) (소스)
- replaced-element-040.html (실시간 테스트) (소스)
- replaced-element-041.html (실시간 테스트) (소스)
- replaced-element-043.html (실시간 테스트) (소스)
- replaced-element-044.html (실시간 테스트) (소스)
- image-max-width-and-height-behaves-as-auto.html (실시간 테스트) (소스)
- min-max-content-orthogonal-flow-crash-001.html (실시간 테스트) (소스)
이 절은 올바르게 작성되지 않았을 수 있습니다. [이슈 #6071]
5. 내재적 크기 결정
5.1. 내재적 크기
5.2. 포함된 내재적 크기 재정의: contain-intrinsic-* 속성
| 이름: | contain-intrinsic-width, contain-intrinsic-height, contain-intrinsic-block-size, contain-intrinsic-inline-size |
|---|---|
| 값: | auto? [ none | <length [0,∞]> ] |
| 초깃값: | none |
| 적용 대상: | 크기 격리가 있는 요소 |
| 상속: | 아니요 |
| 백분율: | 해당 없음 |
| 계산값: | 지정된 대로, <length> 값은 계산됨 |
| 정규 순서: | 문법에 따름 |
| 애니메이션 유형: | 계산값 유형에 따름 |
| 논리적 속성 그룹: | contain-intrinsic-size |
테스트
- auto-014.html (실시간 테스트) (소스)
- auto-015.html (실시간 테스트) (소스)
- auto-016.html (실시간 테스트) (소스)
- auto-017.html (실시간 테스트) (소스)
- auto-018.html (실시간 테스트) (소스)
- contain-intrinsic-size-001.html (실시간 테스트) (소스)
- contain-intrinsic-size-002.html (실시간 테스트) (소스)
- contain-intrinsic-size-003.html (실시간 테스트) (소스)
- contain-intrinsic-size-004.html (실시간 테스트) (소스)
- contain-intrinsic-size-005.html (실시간 테스트) (소스)
- contain-intrinsic-size-006.html (실시간 테스트) (소스)
- contain-intrinsic-size-007.html (실시간 테스트) (소스)
- contain-intrinsic-size-008.html (실시간 테스트) (소스)
- contain-intrinsic-size-009.html (실시간 테스트) (소스)
- contain-intrinsic-size-010.html (실시간 테스트) (소스)
- contain-intrinsic-size-011.html (실시간 테스트) (소스)
- contain-intrinsic-size-012.html (실시간 테스트) (소스)
- contain-intrinsic-size-013.html (실시간 테스트) (소스)
- contain-intrinsic-size-014.html (실시간 테스트) (소스)
- contain-intrinsic-size-015.html (실시간 테스트) (소스)
- contain-intrinsic-size-016.html (실시간 테스트) (소스)
- contain-intrinsic-size-017.html (실시간 테스트) (소스)
- contain-intrinsic-size-018.html (실시간 테스트) (소스)
- contain-intrinsic-size-019.html (실시간 테스트) (소스)
- contain-intrinsic-size-020.html (실시간 테스트) (소스)
- contain-intrinsic-size-021.html (실시간 테스트) (소스)
- contain-intrinsic-size-022.html (실시간 테스트) (소스)
- contain-intrinsic-size-023.html (실시간 테스트) (소스)
- contain-intrinsic-size-024.html (실시간 테스트) (소스)
- contain-intrinsic-size-025.html (실시간 테스트) (소스)
- contain-intrinsic-size-026.html (실시간 테스트) (소스)
- contain-intrinsic-size-027.html (실시간 테스트) (소스)
- contain-intrinsic-size-028.html (실시간 테스트) (소스)
- contain-intrinsic-size-029.html (실시간 테스트) (소스)
- contain-intrinsic-size-030.html (실시간 테스트) (소스)
- contain-intrinsic-size-031.html (실시간 테스트) (소스)
- contain-intrinsic-size-032.html (실시간 테스트) (소스)
- contain-intrinsic-size-logical-001.html (실시간 테스트) (소스)
- contain-intrinsic-size-logical-002.html (실시간 테스트) (소스)
- contain-intrinsic-size-logical-003.html (실시간 테스트) (소스)
- forget-on-disconnect-in-iframe.html (실시간 테스트) (소스)
- contain-intrinsic-size-computed.html (실시간 테스트) (소스)
- contain-intrinsic-size-invalid.html (실시간 테스트) (소스)
- contain-intrinsic-size-valid.html (실시간 테스트) (소스)
이러한 속성을 사용하면 크기 격리가 있는 요소가 명시적 내재적 내부 크기를 지정할 수 있으며, 박스가 흐름 내 콘텐츠의 총 너비와 높이가 지정된 명시적 내재적 내부 크기와 일치하는 것처럼 크기가 정해지게 합니다. (비어 있는 것처럼 크기를 정하는 대신입니다.)
참고: 이것이 항상 요소에 지정된 명시적 내재적 내부 크기를 가진 자식 하나가 있는 것처럼 레이아웃하는 것과 같지는 않습니다. 예를 들어 지정된 크기의 자식 하나를 가진 그리드 컨테이너는 여전히 지정된 그리드에 따라 크기가 정해지므로, 일반적으로 지정된 것보다 더 큰 콘텐츠 크기가 됩니다.
- none | <length>
-
다른 contain-intrinsic-size 값 (예: auto)이 명시적 내재적 내부 크기를 제공하지 않는 경우, 해당 축에는 명시적 내재적 내부 크기가 없거나 (none이 지정된 경우), 지정된 <length>의 명시적 내재적 내부 크기를 갖습니다.
- auto
-
auto가 지정되고 요소에 마지막으로 기억된 크기가 있으며 현재 콘텐츠를 건너뛰고 있는 경우, 해당 축의 명시적 내재적 내부 크기는 그 축의 마지막으로 기억된 크기입니다.
참고: 예를 들어 content-visibility: auto가 지정된 요소가 화면 밖에 있을 때 이러한 일이 발생합니다.
요소가 한 축에 명시적 내재적 내부 크기를 가진 경우, 크기 격리에 대해 평소와 같이 요소를 레이아웃한 후, 해당 축의 콘텐츠 크기는 레이아웃에서 계산된 값 대신 명시적 내재적 내부 크기인 것으로 처리되며, 필요한 경우 레이아웃을 다시 수행합니다. (두 축 모두에 명시적 내재적 내부 크기가 있는 경우, 첫 번째 레이아웃을 건너뛸 수 있음을 의미합니다.)
이 네 속성은 논리적 속성 그룹의 일부입니다.
참고: 크기 격리가 있는 요소는 콘텐츠가 없는 것처럼 레이아웃됩니다 [CSS-CONTAIN-1]. 이 때문에 많은 경우 요소의 내부 높이가 0으로 축소됩니다. 예상되는 콘텐츠를 표시할 수 있도록 명시적인 height를 선택하여 이를 수정할 수 있지만, Flex 및 Grid Layout과 같은 일부 레이아웃 시스템에서는 의도하지 않은 영향을 줄 수 있습니다. 이러한 시스템은 명시적인 height를 암시적인 콘텐츠 기반 높이보다 더 강한 명령으로 취급합니다. 따라서 요소는 단순히 해당 높이까지 콘텐츠가 채워진 경우와 비교해 상당히 다르게 레이아웃될 수 있습니다. 요소에 명시적 내재적 내부 크기를 제공하면, 레이아웃에서 콘텐츠를 무시함으로써 얻는 성능상의 이점을 유지하면서도 콘텐츠가 있는 것처럼 크기를 정할 수 있습니다.
| 이름: | contain-intrinsic-size |
|---|---|
| 값: | [ auto? [ none | <length [0,∞]> ] ]{1,2} |
| 초깃값: | 개별 속성 참조 |
| 적용 대상: | 개별 속성 참조 |
| 상속: | 개별 속성 참조 |
| 백분율: | 개별 속성 참조 |
| 계산값: | 개별 속성 참조 |
| 애니메이션 유형: | 개별 속성 참조 |
| 정규 순서: | 문법에 따름 |
contain-intrinsic-size는 contain-intrinsic-width와 contain-intrinsic-height 속성을 설정하는 단축 속성입니다.
첫 번째 값은 contain-intrinsic-width 값을 나타내며, 두 번째 값은 contain-intrinsic-height 값을 나타냅니다. 값이 하나만 주어지면 두 속성 모두에 적용됩니다.
5.2.1. 마지막으로 기억된 크기
크기 격리는 페이지를 효율적으로 렌더링할 수 있게 보장하는 데 매우 유용하며, 요소의 렌더링 변경으로 인해 발생할 수 있는 레이아웃 작업의 범위를 제한합니다. 그러나 작성자에게는 매우 제한적이기도 하여, 요소의 크기가 어떻게 될지 정확히 예측해야 합니다. 이 추정이 조금이라도 틀리면, 보기 흉한 스크롤바가 생기거나 콘텐츠가 의도치 않게 숨겨질 수 있습니다.
contain-intrinsic-size의 auto 키워드는 중간적인 선택지를 제공합니다: 요소가 어느 시점에든 크기 격리되지 않은 상태라면, 이 값은 요소가 자신의 크기를 기억하게 합니다 (레이아웃에서 평소와 같이 계산됨). 이후 요소에 크기 격리가 적용되면, 기억된 크기를 사용하여 크기 격리의 성능상 이점을 제공하면서 대체로 콘텐츠에 정확히 맞는 크기를 사용할 수 있습니다.
ResizeObserver
대상이 될 수 있는 요소만 마지막으로
기억된 크기를 가질 수 있습니다.
-
ResizeObserver이벤트가 결정되고 전달되는 시점에, 요소가 contain-intrinsic-size 속성에 auto 키워드를 가지고 있고,ResizeObserver대상이 될 수 있지만 크기 격리가 없는 경우, 해당 요소의 주 박스의 현재 내부 치수를 마지막으로 기억된 크기로 기록합니다. -
ResizeObserver이벤트가 결정되고 전달되는 시점에, 요소에 마지막으로 기억된 크기가 있지만 contain-intrinsic-size 속성에 auto 키워드가 없는 경우, 해당 요소의 마지막으로 기억된 크기를 제거합니다.
참고: 마지막으로 기억된 크기는 요소가 생성한 특정 박스가 아니라 요소 자체에 연결된 상태입니다. 요소가 contain-intrinsic-size 속성에 auto 키워드를 유지하는 한, display: none으로 전환하거나 그 상태에서 벗어나는 등의 변경이 있더라도 마지막으로 기억된 크기를 계속 기억합니다.
테스트
- auto-001.html (실시간 테스트) (소스)
- auto-002.html (실시간 테스트) (소스)
- auto-003.html (실시간 테스트) (소스)
- auto-004.html (실시간 테스트) (소스)
- auto-005.html (실시간 테스트) (소스)
- auto-006.html (실시간 테스트) (소스)
- auto-007.html (실시간 테스트) (소스)
- auto-008.html (실시간 테스트) (소스)
- auto-009.html (실시간 테스트) (소스)
- auto-010.html (실시간 테스트) (소스)
- auto-011.html (실시간 테스트) (소스)
- auto-012.html (실시간 테스트) (소스)
- auto-013.html (실시간 테스트) (소스)
5.2.2. overflow: auto와의 상호작용
contain-intrinsic-size 속성은 작성자가 요소의 콘텐츠가 어느 정도 크기일 것으로 예상하는지에 대한 추정치를 제공하지만, 이 추정치는 실제 콘텐츠가 아니며 사용자에게 표시해야 할 어떤 것도 나타내지 않습니다. 따라서 overflow: auto인 요소는 contain-intrinsic-size로 인해 스크롤바를 생성해서는 안 됩니다.
그러나 contain-intrinsic-size가 그 크기의 실제 콘텐츠를 포함했다면 요소가 스크롤바를 생성할 만큼 충분히 큰 크기를 나타내는 경우, 요소는 그러한 가상의 콘텐츠에 따라 스크롤바를 생성한 것처럼 크기가 정해져야 합니다.
div{ width : max-content; contain-intrinsic-size : 100 px 100 px ; overflow : auto; }
요소는 최종적으로 너비 100px, 높이 100px가 됩니다: contain-intrinsic-size가 max-content 너비와 높이를 모두 제공합니다.
이후 요소에 높이가 150px인 콘텐츠가 생기면 세로 스크롤바가 표시됩니다. 스크롤바가 오버레이가 아니라면 그 100px 너비의 일부를 차지하여 콘텐츠가 배치될 수 있는 공간이 더 작아집니다 (일반적으로 약 84px). (CSS Overflow 3 § 4 스크롤바와 레이아웃을 참조하세요.)
이제 콘텐츠에 사용할 수 있는 가로 공간이 100px보다 작더라도, contain-intrinsic-size가 100px 너비를 나타낸다는 이유만으로 가로 스크롤바가 생성되지는 않습니다. 실제 콘텐츠에 줄바꿈할 수 없는 항목이 있고 그 항목이 남은 공간보다 넓은 경우에만 가로 스크롤바가 생성됩니다.
div{ width : max-content; contain-intrinsic-size : 100 px 100 px ; height : 50 px ; overflow : auto; }
요소의 높이는 고정된 50px이지만, contain-intrinsic-size는 100px의 “예상 콘텐츠 높이”를 나타냅니다. 따라서 요소는 실제 콘텐츠로 채워질 때 세로 스크롤바가 필요할 것으로 가정하여, max-content 너비가 100px보다 약간 더 커집니다 (일반적으로 약 116px). 이는 contain-intrinsic-size에서 제공되는 예상 100px의 max-content 너비와 세로 스크롤바의 너비(일반적으로 약 16px)를 모두 수용하기 위한 것입니다.
그러나 요소가 스크롤바가 필요하다고 가정해 공간을 예약하더라도, 실제 콘텐츠가 오버플로하지 않는 한 실제 스크롤바는 생성되지 않습니다. 최종적으로 높이가 50px보다 작은 콘텐츠를 포함하게 되면 세로 스크롤바는 전혀 생성되지 않지만, 요소의 너비는 여전히 116px입니다.
5.3. 반응형으로 크기가 조정되는 iframe: frame-sizing 속성
| 이름: | frame-sizing |
|---|---|
| 값: | auto | content-width | content-height | content-block-size | content-inline-size |
| 초깃값: | auto |
| 적용 대상: | 대체 요소(자세한 내용은 아래 참조) |
| 상속: | 아니요 |
| 백분율: | 해당 없음 |
| 계산값: | 지정한 대로 |
| 정규 순서: | 문법에 따름 |
| 애니메이션 유형: | 불연속 |
일부 대체 요소는 HTML
iframe과
같이
"일반적인" 흐름 콘텐츠를 포함할 수 있습니다.
개인정보 보호 및 보안상의 이유로
이러한 요소는 기본적으로
내부 콘텐츠의 크기 조정에 관한 정보를
외부 페이지에 노출하지 않고,
대신 정적이고 미리 정해진 내재적 크기를 사용하며
콘텐츠를 스크롤할 수 있도록 합니다.
frame-sizing 속성을 사용하면
이러한 요소가 실제 콘텐츠 크기를 노출하도록 선택할 수 있으며,
이를 해당 요소의 내부
레이아웃 내재적 크기라고 합니다.
값의 의미는 다음과 같습니다:
- auto
-
요소의 내부 레이아웃 내재적 크기가 있더라도 무시합니다.
- content-width
- content-height
- content-block-size
- content-inline-size
- content-height
-
요소에 내부 레이아웃 내재적 크기가 있으면, 해당 요소의 내재적 크기는 대응하는 치수 (너비 또는 높이)를 내부 레이아웃 내재적 크기에서 가져옵니다. (다른 치수는 일반적인 방식으로 결정됩니다.)
논리적 방향은 요소의 쓰기 모드를 기준으로 해석됩니다. (임베드된 문서가 아닙니다.)
어떤 요소가 내부 레이아웃 내재적 크기를 가질 수 있는지와
그것을 어떻게 결정하는지는
문서 언어가 결정합니다.
HTML에서는
iframe
요소만 내부 레이아웃 내재적
크기를 가질 수 있으며,
또한 포함된 문서도
요소를 통해 이 기능을 사용하도록 선택한 경우에만 가능합니다.
(§ 5.3.1 HTML iframe 세부사항을 참조하세요.)
< meta name = "responsive-embedded-sizing" > < div style = "height: 500px" ></ div >
그리고 임베드하는 문서에 다음 CSS가 있는 경우:
iframe{ frame-sizing : content-height; }
iframe의
높이는
처음에는 기본 iframe 높이(일반적으로 150px)가 되지만,
iframe의 문서가 로드되면 500px로 업데이트됩니다.
또한
내부 문서는 window.requestResize()를
호출하여
나중에 자신의 내부 레이아웃 내재적 크기를 업데이트할 수 있습니다.
5.3.1.
HTML
iframe
세부사항
HTML에서는
iframe
요소만 내부 레이아웃 내재적 크기를 가질 수 있으며,
iframe의
임베드된 문서가 적절하게 이 기능을 사용하도록 선택한 경우에만 가능합니다.
HTML Document
객체에는
반응형 임베디드 크기 조정 플래그가 연결되어 있으며,
처음에는 설정되지 않은 상태입니다.
이 플래그는 초기 문서 파싱 중
다음 항목 중 먼저 발생하는 것에 따라
true 또는 false로 설정됩니다:
-
요소를 만나면 true로 설정합니다.< meta name = responsive-embedded-sizing > -
body요소가 열리거나(명시적 또는 암시적으로), 파서에 의해 문서에 삽입되면 false로 설정합니다.
한 번 true 또는 false로 설정되면,
이 플래그는 해당 Document의
수명 동안
다시 값을 변경하지 않습니다.
참고: 현재 HTML에서는
HTML 문서의
head에
나타나는
meta
요소가
임베드된 문서에서 이 기능을 사용하도록 선택할 수 있는 유일한 방법입니다.
이는
iframe
안의 SVG 문서는 이 기능을 사용할 수 없음을 의미합니다.
참고: HTML 파서의 특성 때문에
meta
요소는 기술적으로
head
요소와
body
요소 사이에 나타날 수 있으며,
이후
head로
부모가 변경됩니다.
이 위치는
body가
아직 열리지 않았으므로 <meta name=responsive-embedded-sizing> 요소에 여전히 유효한 위치입니다.
대부분의 HTML 요소는
body
시작 태그가 없더라도 암시적으로
body
요소를 연다는 점에 유의하세요.
또한 문서에 해당 요소가 전혀 없으면,
빈 요소가 자동으로 생성되어 삽입됩니다.
내부 레이아웃 내재적 크기는
임베드된 문서가 DOMContentLoaded
이벤트를 발생시킨 후 수행되는 첫 번째 레이아웃의 결과로 처음 설정되고,
load
이벤트가 Window에서
발생할 때
다시 설정됩니다.
이후 임베드된 문서의 콘텐츠, 스타일 또는 레이아웃 변경은
내부 레이아웃 내재적
크기에 자동으로 영향을 주지 않지만,
requestResize()를
참조하세요.
임베드된 문서는 추가로 고정된 임베디드 ICB 크기를 가질 수 있으며, 처음에는 null입니다. 문서가 레이아웃을 수행할 때 문서의 반응형 임베디드 크기 조정 플래그가 true이고 해당 문서의 고정된 임베디드 ICB 크기가 null이면, 현재 초기 컨테이닝 블록 크기를 고정된 임베디드 ICB 크기로 기록합니다. 이후 레이아웃에서는 초기 컨테이닝 블록 크기를 일반적으로 계산하는 대신 고정된 임베디드 ICB 크기를 사용합니다.
참고: ICB를 이렇게 고정하면 레이아웃 루프가 발생할 가능성을 줄일 수 있습니다. (iframe 문서의 크기가 ICB보다 약간 더 커지고, 그에 맞춰 상위 iframe의 크기가 변경된 다음, 다음 레이아웃에서 다시 ICB보다 약간 더 커지고, 이런 과정이 무한히 반복되는 경우 등입니다.)
iframe이 자신의 고정된 임베디드 ICB 크기를 강제로 잊게 하는 방법이 필요할까요? 아마 frame-sizing을 껐다가 다시 켜는 방식일까요?
iframe의 문서를 탐색하면 해당 문서는 자신의 고정된 임베디드 ICB 크기를 잊습니다. 새 문서의 반응형 임베디드 크기 조정 플래그가 설정되지 않은 동안에는 내부 레이아웃 내재적 크기를 잊지 않습니다. 플래그가 설정되면(true 또는 false), 내부 레이아웃 내재적 크기를 잊으며, 플래그가 true로 설정된 경우 두 값 모두 일반적인 방식으로 새로 계산됩니다.
5.3.2.
Window
인터페이스 확장
partial interface Window {undefined requestResize (); };
requestResize()가 호출되면:
-
navigable을 this를 자신의 콘텐츠 창으로 갖는 탐색 가능 객체로 둡니다. navigable이 자식 탐색 가능 객체가 아니면,
NotAllowedErrorDOMException을 던집니다. -
host element를 navigable을 자신의 콘텐츠 탐색 가능 객체로 갖는 탐색 가능 컨테이너로 둡니다. host element가 HTML
iframe요소가 아니면,NotAllowedErrorDOMException을 던집니다. -
document를 this의 활성 문서로 둡니다. document의 반응형 임베디드 크기 조정 플래그가 설정되지 않았거나 false이면,
NotAllowedErrorDOMException을 던집니다. -
document에 보류 중인 스타일 또는 레이아웃 변경이 있으면, 이를 수행합니다.
-
host element의 내부 레이아웃 내재적 크기를 this의 스크롤 영역의 너비와 높이로 설정합니다.
5.4. 내재적 크기 기여
5.5. 최소 콘텐츠 크기 기여를 0으로 만들기: min-intrinsic-sizing 속성
| 이름: | min-intrinsic-sizing |
|---|---|
| 값: | legacy | zero-if-scroll || zero-if-extrinsic |
| 초깃값: | legacy |
| 적용 대상: | 인라인 박스를 제외한 모든 요소 |
| 상속: | 아니요 |
| 백분율: | 해당 없음 |
| 계산값: | 지정한 대로 |
| 정규 순서: | 문법에 따름 |
| 애니메이션 유형: | 불연속 |
이 속성은 이름을 진지하게 다시 논의할 필요가 있습니다.
이 속성은 비대체 박스의 최소 콘텐츠 기여가 특정 상황에서 “압축”되는지 여부를 정의합니다. 값의 의미는 다음과 같습니다:
- legacy
- 박스의 최소 콘텐츠 기여를 일반적인 방식으로 처리합니다.
- zero-if-scroll
- 박스가 해당 축에서 스크롤 컨테이너인 경우, 박스의 최소 콘텐츠 기여가 “압축”됩니다.
- zero-if-extrinsic
-
박스에 외재적
선호 크기 또는 최대 크기가 있으면,
박스의 최소 콘텐츠 기여가 “압축”됩니다.
참고: 이는 대부분의 대체 요소의 기본 동작입니다.
*, ::before, ::after{ min-intrinsic-sizing : zero-if-scroll; }
이렇게 하면 스크롤 컨테이너에 표나 줄바꿈할 수 없는 긴 텍스트 줄 같은 큰 항목이 포함되어 있어도 조상 요소의 크기를 지나치게 키우지 않게 됩니다. 한편 스크롤 컨테이너가 아닌 박스는 계속해서 조상 요소의 최소 콘텐츠 크기에 영향을 줄 수 있습니다.
참고: zero-if-scroll의 동작이 더 나은 기본값이었겠지만, Web 호환성 때문에 초깃값으로 사용할 수 없습니다. :(
“압축된” 최소 콘텐츠 기여는 박스가 비어 있다고 가정하여 계산합니다. 단, 크기 조정 속성의 명시적 min-content, max-content 및 fit-content 값이 부과하는 크기 조정 제약을 고려할 때는 예외입니다.
5.6. 새로운 열 크기 조정 값: stretch, min-content, max-content, fit-content 및 fit-content() 값
| 이름: | column-width |
|---|---|
| 새로운 값: | <box-size> |
| 계산값: | 지정한 대로이며, <length-percentage> 값은 계산됨 |
| 애니메이션 유형: | 계산값 유형에 따름 |
column-width의 값으로 사용되는 경우, 새로운 키워드는 최적의 열 너비를 지정합니다:
- stretch
- 다단 컨테이너의 stretch-fit 인라인 크기를 최적의 열 너비로 지정합니다.
- min-content
- 다단 컨테이너 콘텐츠의 최소 콘텐츠 인라인 크기를 최적의 열 너비로 지정합니다.
- max-content
- 다단 컨테이너 콘텐츠의 최대 콘텐츠 인라인 크기를 최적의 열 너비로 지정합니다.
- fit-content
- 최적의 열 너비를
min(최대 콘텐츠 인라인 크기, max(최소 콘텐츠 인라인 크기, stretch-fit 인라인 크기))로 지정합니다. - fit-content(<length-percentage>)
-
최적의 열 너비를
min(최대 콘텐츠 크기, max(최소 콘텐츠 크기, <length-percentage>))로 지정합니다.
참고: 열 너비는 열마다 달라지지 않습니다. 열 너비가 다단 컨테이너의 콘텐츠에 의해 결정되는 경우 (위의 키워드와 같은 경우), 모든 콘텐츠가 고려되며 계산된 너비가 모든 열에 공통으로 적용됩니다.
6. 외재적 크기 결정
6.1. Contain-fit 크기 조정: 종횡비를 유지하면서 늘이기
Contain-fit 크기 조정은 본질적으로 stretch-fit 크기 조정을 적용하지만, 박스의 한 축 크기를 줄여 박스의 선호 종횡비를 유지합니다. 이는 object-fit 및 background-size 속성의 contain 키워드와 유사합니다.
먼저 대상 사각형을 결정합니다:
- 초기 대상 사각형은 박스의 컨테이닝 블록 크기이며, 정해지지 않은 크기는 무한대로 가정합니다. 두 치수 모두 정해지지 않은 경우, 초기 대상 사각형은 박스가 stretch-fit 크기 조정되었을 때의 박스 바깥쪽 가장자리와 일치하도록 설정합니다.
- 다음으로, 박스에 none이 아닌 max-width 또는 max-height가 있으면, 대상 사각형의 해당 치수를 박스 마진 박스의 “최대 크기” 이하로 제한합니다. 즉, 박스가 max-width/height 크기로 조정되었을 때 마진 박스가 갖게 되는 크기입니다. (일반적인 박스 크기 조정 규칙과 일관되게, 이 “최대 크기”에는 박스의 min-width/min-height 효과에 따른 하한이 적용된다는 점에 유의하세요.)
- 마지막으로 대상 사각형의 한 치수를 박스의 선호 종횡비와 일치시키는 데 필요한 최소한의 양만큼 줄입니다.
각 치수의 contain-fit 크기는 대상 사각형에 stretch-fit을 적용했을 때 얻어지는 크기입니다.
마진 상쇄와 관련하여 stretch-fit이 최종적으로 수행하는 동작을 그대로 복사하세요.
한 치수에 최소 크기가 있고, 종횡비를 유지할 경우 대상 사각형을 오버플로하게 된다면, 종횡비를 유지해야 할까요, 아니면 이미지를 왜곡해야 할까요? 전자라면 관련 최소값을 적용하는 #2와 유사한 단계가 필요합니다.
6.2. 백분율 크기 조정
…
변경 사항
2021년 5월 5일 작업 초안 이후 변경 사항
2021년 5월 5일 작업 초안 이후의 주요 변경 사항은 다음과 같습니다:
-
calc-size()를 크기 조정 속성에 추가했습니다. (이슈 6265)
-
frame-sizing 속성 정의를 추가했습니다. (1771)
-
레벨 3에서 fit-content()를 가져오고, fit-content 및 stretch를 다시 레벨 3으로 내렸습니다. (이슈 10601)
-
크기 조정 값을 통합하기 위해 <box-size> 문법 생성식을 도입했습니다. (이슈 13478)
-
contain-intrinsic-size의 값 순서를 바꾸는 것을 허용하지 않도록 했습니다. (이슈 6391).
-
유령 크기를 방지하기 위해 요소가 자신의 콘텐츠를 건너뛰는 경우에만 contain-intrinsic-* 속성의 auto 값에 대해 마지막으로 기억된 크기를 사용하도록 했습니다. (이슈 6308).
-
어떤 요소가 언제 마지막으로 기억된 크기를 갖는지 명확히 했습니다. (이슈 6220)
-
contain-intrinsic-size 속성을 위한 논리 속성 그룹을 추가했습니다. (이슈 2822).
-
더 유연한 값 조합을 허용하도록 contain-intrinsic-size의 문법을 변경했습니다. (이슈 8407).
-
contain-intrinsic-* 속성에서 음수 길이를 허용하지 않도록 했습니다. (이슈 11945).
-
'contain-intrinsic-size/from-element' 값을 통해 반응형으로 크기가 조정되는 iframe을 추가했습니다. (이슈 1771).
-
Flexbox의 stretch-fit 크기 조정 동작이 stretch와 약간 다르다는 점을 명확히 했습니다. (이슈 11784).
-
Web Platform Tests 적용 범위를 추가했습니다.
-
그 밖의 여러 사소한 편집 수정 및 개선을 수행했습니다.
2020년 10월 20일 작업 초안 이후 변경 사항
2020년 10월 20일 작업 초안 이후의 주요 변경 사항은 다음과 같습니다:
-
스크롤 컨테이너의 최소 콘텐츠 기여를 더 잘 제어할 수 있도록 min-intrinsic-sizing 속성을 초안으로 작성했습니다. (이슈 1865, 이슈 4585)
-
각 축을 독립적으로 제어할 수 있도록 contain-intrinsic-size에 개별 속성을 추가했습니다. (이슈 5432)
-
이전에 계산된 크기를 “기억”할 수 있도록 contain-intrinsic-size의 auto 값을 초안으로 작성했습니다. (이슈 5668, 이슈 5815)
-
aspect-ratio에서 퇴화 비율의 처리 방식을 정의했습니다. (이슈 5557)
-
aspect-ratio가 대체 요소의 자연 크기에 어떤 영향을 미치는지 정의했습니다. (이슈 5306)
-
§ 4.4 최소/최대 크기 전달 절의 일부 오류를 수정하고, CSS2 / CSS Flex Layout / 기타 명세에서 정의된 동작과 충돌하지 않도록 동작을 맞췄습니다. (이슈 6071)
-
contain-intrinsic-size: auto none 문법을 추가했습니다.
2020년 5월 26일 최초 공개 작업 초안 이후의 주요 변경 사항은 다음과 같습니다:
-
비율 결정 축을 용어로 정의했습니다.
-
최소/최대 크기 조정 제약이 종횡비를 통해 전달된다고 정의했습니다. (이슈 5257)
또한 어느 축에서든 크기 조정 제약 (origin 축)은 선호 종횡비를 통해 다른 축(destination 축)으로 다음과 같이 전달됩니다:
-
먼저 모든 확정된 최소 크기는 origin 축에서 destination 축으로 변환되어 전달됩니다. 전달된 최소값의 상한은 destination 축의 모든 확정된 선호 크기 또는 최대 크기입니다.
-
그다음 모든 확정된 최대 크기는 origin에서 destination으로 변환되어 전달됩니다. 전달된 최대값의 하한은 destination 축의 모든 확정된 선호 크기 또는 최소 크기와, 전달된 최소값이 있는 경우 그 최소값입니다.
참고: 기본 원칙은 크기 조정 제약이 종횡비를 통해 반대쪽으로 전달되어, 영향을 받는 축에 명시적으로 지정된 크기를 위반하지 않는 범위에서 가능한 한 종횡비를 유지한다는 것입니다.
-
-
자연 크기를 하나만 가진 대체 요소의 aspect-ratio가 다른 치수를 결정한다는 점을 명확히 했습니다. (이슈 5306)
대체 요소의 유일한 자연 치수가 자연 너비 또는 자연 높이인 경우, 해당 요소에 선호 종횡비를 지정하면 누락된 쪽에 따라 자연 높이 또는 너비도 부여되며, 기존 크기를 선호 종횡비를 통해 전달하여 계산합니다.
-
aspect-ratio가 마진 자체 상쇄를 억제한다고 정의했습니다. (이슈 5328)
마진 상쇄를 위해(CSS 2 § 8.3.1 마진 상쇄), 블록 축이 비율 종속 축이면, 해당 축은 auto의 계산된 block-size를 갖는 것으로 간주하지 않습니다.
레벨 3 이후 추가 사항
- 크기 조정 속성을 위한 fit-content() 함수와 contain 키워드를 추가했습니다.
- aspect-ratio 속성을 추가했습니다.
- contain-intrinsic-width, contain-intrinsic-height, contain-intrinsic-block-size 및 contain-intrinsic-inline-size 속성과 이들의 단축 속성인 contain-intrinsic-size를 추가했습니다.
- min-intrinsic-sizing 속성을 추가했습니다.
- frame-sizing 속성을 추가했습니다.
감사의 말
이 모듈에 기여해 주신 Aaron Gustafson과 L. David Baron께 특별히 감사드립니다.
개인정보 보호 고려사항
이 명세는 새로운 개인정보 보호 고려사항을 도입하지 않습니다.
보안 고려사항
이 명세는 새로운 보안 고려사항을 도입하지 않습니다.