쿼크 모드

현행 표준 — 마지막 갱신

참여:
GitHub whatwg/quirks (새 이슈, 오픈 이슈)
Matrix에서 채팅
커밋:
GitHub whatwg/quirks/commits
이 커밋 기준 스냅샷
@quirksstandard
테스트:
web-platform-tests quirks/ (진행 중 작업)
번역 (비규범적):
简体中文
日本語
한국어

요약

쿼크 모드는 웹 브라우저가 웹과의 호환성을 위해 지원해야 하는 CSS 및 셀렉터의 쿼크들을 정의합니다.

1. 소개

1.1. 연혁

브라우저는 HTML 문서를 렌더링할 때 여러 렌더링 모드를 가지고 있습니다. 이는 기본적으로 역사적 우연의 결과입니다. CSS 명세는 기존 웹 콘텐츠가 의존하던 기존 브라우저의 동작과 호환되지 않았습니다. 명세를 준수하면서도 기존 콘텐츠를 깨뜨리지 않기 위해 브라우저들은 새로운 렌더링 모드(비-쿼크 모드, no-quirks mode)를 도입했습니다. 일부 브라우저는 비-쿼크 모드에서도 테이블 셀 안 이미지의 shrink-wrapping 동작을 유지했으며, 사이트들이 이에 의존하기 시작하자 명세의 동작을 구현한 브라우저들은 세 번째 모드(제한적 쿼크 모드, limited-quirks mode)를 도입했습니다. 돌이켜 보면, 기본 CSS 동작을 기존 콘텐츠가 의존하던 방식에 맞추고, 다른 동작에 opt-in하는 것이 더 나았을 것입니다. 이후 서로 다른 모드는 CSS 외의 몇 가지 차이점도 생기게 되었습니다.

1.2. 목표

이 명세는 현재 브라우저에 존재하는 모든 쿼크를 나열하지 않습니다. 여러 쿼크는 HTML, DOM, CSSOM, CSSOM View에서 명세화되어 있습니다. [HTML] [DOM] [CSSOM] [CSSOM-VIEW] 명세화되어 있지 않은 쿼크는 위 두 번째 항목 때문일 가능성이 높습니다.

2. 공통 인프라스트럭처

2.1. 적합성

이 명세서의 모든 다이어그램, 예시, 주석은 비규범적(non-normative)이며, 명시적으로 비규범적으로 표시된 모든 섹션도 마찬가지입니다. 이 외의 모든 내용은 규범적입니다.

이 명세서의 규범적인 부분에서 "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", "OPTIONAL"이라는 키워드는 RFC2119에 설명된 대로 해석해야 합니다. 가독성을 위해 이 단어들은 모두 대문자로 표기되어 있지 않습니다. [RFC2119]

2.2. 용어

이 명세서에서 "foo 요소"라고 할 때, 이는 지역 이름이 foo이고 네임스페이스가 http://www.w3.org/1999/xhtml인 요소를 의미합니다.

이 명세서에서 "foo 속성"이라고 할 때, 이는 지역 이름이 foo이고 네임스페이스가 없는 속성을 의미합니다.

문서의 body 요소자식 중에서 document elementhtml 요소일 때, 그 첫 번째 body 요소입니다(존재하는 경우). 그렇지 않으면 null입니다.

문서의 body 요소는 HTML의 the body element와 다릅니다. 후자는 frameset 요소일 수도 있기 때문입니다.

3. CSS

3.1. 해시 없는 16진수 색상 쿼크

CSS Color 4 § B Deprecated Quirky Hex Colors를 참고하세요.

3.2. 단위 없는 길이 쿼크

CSS Values 4 § C Quirky Lengths를 참고하세요.

3.3. 줄 높이 계산 쿼크

쿼크 모드제한적 쿼크 모드에서, 다음 조건을 모두 만족하는 인라인 박스는 줄 높이 계산 시 박스의 line-height가 0인 것처럼 동작해야 합니다.

3.4. 블록이 line-height를 무시하는 쿼크

쿼크 모드제한적 쿼크 모드에서, 내용이 인라인 레벨 요소로 구성된 블록 컨테이너 요소의 경우, 해당 요소의 line-height는 요소 내에서 최소 줄 상자 높이를 계산할 때 무시해야 합니다.

이로 인해 "strut"이 생성되지 않습니다.

3.5. 백분율 높이 계산 쿼크

쿼크 모드에서, 요소 elementheight를 계산할 때, elementcomputed valueposition 속성이 relative 또는 static이고, elementheight 속성의 지정값이 <percentage>이며, elementcomputed valuedisplay 속성이 table-row, table-row-group, table-header-group, table-footer-group, table-cell 또는 table-caption이 아닌 경우, elementcontaining block은 다음 알고리즘을 사용해 계산해야 하며, 값을 반환하는 첫 번째 단계에서 중단합니다:

  1. elementelement의 가장 가까운 조상 containing block으로 둡니다(존재하는 경우). 그렇지 않으면 초기 containing block을 반환합니다.

  2. elementcomputed valuedisplay 속성이 table-cell이면, UA 정의 값을 반환합니다.

  3. elementcomputed valueheight 속성이 auto가 아니면, element를 반환합니다.

  4. elementcomputed valueposition 속성이 absolute이거나, element블록 컨테이너 또는 테이블 래퍼 박스가 아니면, element를 반환합니다.

  5. 첫 번째 단계로 이동합니다.

작성 시점 기준으로 테이블 내부의 백분율 높이 동작은 CSS에서 정의되어 있지 않습니다. 이 명세는 테이블 내 백분율 높이 계산 시 사용할 containing block이 무엇인지 명시하지 않습니다. 행운을 빕니다!

이 쿼크는 writing mode를 고려해야 합니다.

3.6. html 요소가 뷰포트를 채우는 쿼크

쿼크 모드에서, document element element가 다음 조건을 모두 만족하는 경우:

...그렇다면 elementborder box 크기를 block flow 방향에 대해 다음 알고리즘을 사용하여 설정해야 합니다:

  1. element수직 쓰기 모드라면, marginsused valuesmargin-leftmargin-right의 합으로 둡니다. 그렇지 않으면 marginsused valuesmargin-topmargin-bottom의 합으로 둡니다.

  2. size초기 containing blockblock flow 방향 크기에서 margins를 뺀 값으로 둡니다.

  3. size와 해당 요소가 CSS 명세에 따라 원래 가지는 border box 크기 중 더 큰 값을 반환합니다.

3.7. body 요소가 html 요소를 채우는 쿼크

쿼크 모드에서, 문서의 body 요소 body가 null이 아니고 다음 조건을 모두 만족하는 경우:

...그렇다면 bodyborder box 크기를 block flow 방향에 대해 다음 알고리즘을 사용하여 설정해야 합니다:

  1. body수직 쓰기 모드라면, marginsused valuesmargin-leftmargin-right의 합으로 둡니다. 그렇지 않으면 marginsused valuesmargin-topmargin-bottom의 합으로 둡니다.

  2. sizebody의 부모 요소 content boxblock flow 방향 크기에서 margins를 뺀 값으로 둡니다.

  3. size와 해당 요소가 CSS 명세에 따라 원래 가지는 border box 크기 중 더 큰 값을 반환합니다.

html 요소와 body 요소의 쓰기 모드가 다를 때 어떻게 동작해야 하는지?

3.8. 테이블 셀 너비 계산 쿼크

쿼크 모드에서, 테이블 셀 cellcontaining blockinline formatting context의 min-content width를 계산할 때, cellcomputed valuewidth 속성이 auto인 경우, 해당 inline formatting contextimg 요소가 인라인 레벨 대체 요소라면, 그 앞뒤에 소프트 줄바꿈 기회가 존재해서는 안 됩니다. [CSS-TEXT-3] [INTRINSIC]

3.9. 테이블 셀 nowrap 최소 너비 계산 쿼크

쿼크 모드에서, 아래 조건을 모두 만족하는 요소 cell은 자동 테이블 레이아웃 알고리즘에서 테이블 셀의 outer min-content widthcellcomputed valuewidth 속성과 테이블 셀의 outer min-content width 중 더 큰 값인 것처럼 동작해야 합니다. [INTRINSIC]

3.10. 테이블 셀 병합 쿼크

쿼크 모드에서, 아래 조건을 모두 만족하는 요소 tableused valueheight 속성은 0, used valueborder-style 속성은 none이어야 합니다.

3.11. text-decoration이 테이블에 전파되지 않는 쿼크

쿼크 모드에서, table 요소 내로 텍스트 데코레이션이 전파되어서는 안 됩니다.

3.12. 테이블이 body로부터 색상을 상속받는 쿼크

쿼크 모드에서, color 속성의 초기값은 quirk-inherit여야 하며, 이는 키워드 매핑이 없는 특수값입니다.

요소 elementcomputed valuecolor 속성은 다음 알고리즘을 사용해 계산해야 합니다:

  1. elementcolor 속성의 지정값이 quirk-inherit이 아니라면 마지막 단계로 이동합니다.

  2. elementtable 요소가 아니라면 마지막 단계로 이동합니다.

  3. 문서의 body 요소가 null이라면 마지막 단계로 이동합니다.

  4. used valuecolor 속성을 문서의 body 요소에서 반환하고, 이 단계에서 종료합니다.

  5. elementcolor 속성의 지정값이 quirk-inherit이면, elementcolor 속성의 지정값을 CSS 명세에 따른 초기값으로 둡니다. computed valuecolor 속성을 CSS 명세에서 정의한 대로 반환합니다.

3.13. 테이블 셀 높이 box-sizing 쿼크

쿼크 모드에서, computed valuedisplay 속성이 table-cell인 요소는, used valuebox-sizing 속성이 border-box인 것처럼 동작해야 하지만, 이는 height, min-height, max-height 속성에 한해서만 적용됩니다.

4. 셀렉터

4.1. :active 및 :hover 쿼크

쿼크 모드에서, 아래 조건을 모두 만족하는 복합 셀렉터 selector:any-link 셀렉터에도 일치하지 않는 요소에는 일치해서는 안 됩니다. [SELECTORS4]

보안 및 프라이버시 고려사항

이 명세에서 알려진 보안 또는 프라이버시 영향은 없습니다.

감사의 글

Anne van Kesteren, Boris Zbarsky, Chris Rebert, Dan Mulvey, David Baron, Kang-Hao Lu, Ms2ger, Simon Sapin, 그리고 Tab Atkins 에게 유용한 의견을 주셔서 감사합니다.

Boris Zbarsky와 David Baron께서는 MDN에서 Mozilla 쿼크를 문서화해주셔서 특별히 감사드립니다.

이 현행 표준은 Simon Pieters (Mozilla, zcorpan@gmail.com)가 작성하였습니다.

지적 재산권

Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). 본 저작물은 Creative Commons Attribution 4.0 International License로 라이선스됩니다. 일부가 소스 코드로 포함되는 경우, 해당 부분의 소스 코드는 BSD 3-Clause License로 라이선스됩니다.

이는 현행 표준입니다. 특허 검토 버전에 관심이 있는 경우 현행 표준 검토 초안을 참조하세요.

색인

이 명세서에서 정의한 용어

참조로 정의된 용어

참고 문헌

규범적 참고문헌

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. URL: https://drafts.csswg.org/css-backgrounds/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. URL: https://drafts.csswg.org/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. URL: https://drafts.csswg.org/css-cascade-5/
[CSS-COLOR-4]
Chris Lilley; Tab Atkins Jr.; Lea Verou. CSS Color Module Level 4. URL: https://drafts.csswg.org/css-color-4/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. URL: https://drafts.csswg.org/css-display/
[CSS-MULTICOL-2]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 2. URL: https://drafts.csswg.org/css-multicol-2/
[CSS-PAGE-FLOATS-3]
Johannes Wilm. CSS Page Floats. URL: https://drafts.csswg.org/css-page-floats/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. URL: https://drafts.csswg.org/css-position-3/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. URL: https://drafts.csswg.org/css-sizing-3/
[CSS-TABLES-3]
François Remy; Greg Whitworth; David Baron. CSS Table Module Level 3. URL: https://drafts.csswg.org/css-tables-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. URL: https://drafts.csswg.org/css-text-3/
[CSS-TEXT-4]
Elika Etemad; et al. CSS Text Module Level 4. URL: https://drafts.csswg.org/css-text-4/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. URL: https://drafts.csswg.org/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. URL: https://drafts.csswg.org/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. URL: https://drafts.csswg.org/css-writing-modes-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. URL: https://drafts.csswg.org/css2/
[CSS3-MULTICOL]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 1. URL: https://drafts.csswg.org/css-multicol/
[DOM]
Anne van Kesteren. DOM Standard. 현행 표준. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[INTRINSIC]
David Baron. More Precise Definitions of Intrinsic Widths and Table Layout (Proposal). URL: https://dbaron.org/css/intrinsic/
[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
[SELECTORS4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. URL: https://drafts.csswg.org/selectors/

비규범적 참고문헌

[CSSOM]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). URL: https://drafts.csswg.org/cssom/
[CSSOM-VIEW]
Simon Pieters. CSSOM View Module. URL: https://drafts.csswg.org/cssom-view/