CSS Shadow Parts 모듈 레벨 1

W3C 작업 초안,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2025/WD-css-shadow-parts-1-20251216/
최신 공개 버전:
https://www.w3.org/TR/css-shadow-parts-1/
편집자 초안:
https://drafts.csswg.org/css-shadow-parts/
이력:
https://www.w3.org/standards/history/css-shadow-parts-1/
피드백:
CSSWG 이슈 저장소
명세 내 인라인
편집자:
Tab Atkins-Bittner (Google)
(Google)
이 명세에 대한 편집 제안:
GitHub 편집기
테스트 스위트:
https://wpt.fyi/results/css/css-shadow-parts/

초록

이 명세는 ::part() 의사 요소를 shadow hosts에 정의하여, shadow hosts가 자신의 shadow tree에서 선택한 요소를 스타일링 목적으로 외부 페이지에 선택적으로 노출할 수 있게 합니다.

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

이 문서의 상태

이 절은 발행 당시 이 문서의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 찾을 수 있습니다.

이 문서는 CSS Working GroupRecommendation track을 사용하여 작업 초안으로 발행했습니다. 작업 초안으로 발행되었다고 해서 W3C와 그 회원의 승인을 의미하지는 않습니다.

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

피드백은 GitHub에 이슈를 제출하는 방식(권장)으로 보내 주십시오. 제목에는 다음과 같이 명세 코드 “css-shadow-parts”를 포함해야 합니다. “[css-shadow-parts] …의견 요약…”. 모든 이슈와 의견은 아카이브됩니다. 또는 (아카이브된) 공개 메일링 리스트 www-style@w3.org로 피드백을 보낼 수도 있습니다.

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

이 문서는 W3C Patent Policy에 따라 운영되는 그룹이 작성했습니다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지하며, 그 페이지에는 특허 공개 지침도 포함되어 있습니다. 개인이 Essential Claim(s)을 포함한다고 믿는 특허에 대해 실제 지식을 가지고 있는 경우, W3C Patent Policy의 6절에 따라 해당 정보를 공개해야 합니다.

1. 소개

Shadow DOM은 작성자가 페이지를 "컴포넌트"로 분리할 수 있게 합니다. 이는 세부 사항이 외부 페이지가 아니라 컴포넌트 자체에만 관련되는 마크업의 하위 트리입니다. 이로 인해 페이지의 한 부분을 위한 스타일이 우연히 과도하게 적용되어 페이지의 다른 부분이 잘못 보일 가능성이 줄어듭니다. 그러나 이러한 스타일링 장벽은 페이지가 실제로 컴포넌트와 상호작용하기를 원할 때 그렇게 하기 어렵게 만들기도 합니다.

이 명세는 ::part() 의사 요소를 정의합니다. 이는 작성자가 shadow tree 안에서 특정하게 의도적으로 노출된 요소를 외부 페이지의 컨텍스트에서 스타일링할 수 있게 합니다. 외부 페이지가 특정 값 (예: 테마 색상)을 컴포넌트에 전달하여 컴포넌트가 원하는 대로 사용할 수 있게 하는 custom properties와 함께, 이러한 의사 요소는 컴포넌트와 외부 페이지가 모든 제어를 포기하지 않으면서도 캡슐화를 유지한 채 안전하고 강력한 방식으로 상호작용할 수 있게 합니다.

테스트

shadow parts에 대한 일반 테스트


1.1. 동기

custom element가 내장 요소만큼 충분히 유용하고 능력 있게 되려면 그 일부를 외부에서 스타일링할 수 있어야 합니다. 외부에서 정확히 무엇을 스타일링할 수 있는지는 요소 작성자가 제어해야 합니다. 또한 custom element가 스타일링을 위한 안정적인 "API"를 제공할 수 있어야 합니다. 즉, custom element의 일부를 스타일링하는 데 사용되는 선택자는 요소의 내부 세부 사항을 노출하거나 이에 대한 지식을 요구해서는 안 됩니다. custom element 작성자는 선택자를 그대로 둔 채 요소의 내부 세부 사항을 변경할 수 있어야 합니다.

shadow tree 내부를 스타일링하기 위해 이전에 제안되었던 방법인 >>> 결합자는 그 자체의 목적에 비해 너무 강력한 것으로 드러났습니다. 이는 컴포넌트의 내부 구조를 너무 많이 들여다볼 수 있게 하여, Shadow DOM 사용이 가져오는 캡슐화 이점 일부를 무력화했습니다. 이러한 이유와 다른 성능 관련 이유로, >>> 결합자는 결국 폐기되었습니다.

이로 인해 shadow tree 안을 스타일링하는 유일한 방법으로 custom properties를 사용하는 방식만 남았습니다. 컴포넌트는 내부를 스타일링하기 위해 특정 custom properties를 사용한다고 알리고, 외부 페이지는 shadow host에 원하는 대로 이러한 속성을 설정하여, 상속이 필요한 위치까지 값을 전달하도록 합니다. 이는 많은 단순한 테마 적용 사용 사례에서 매우 잘 작동합니다.

그러나 이 방식이 무너지는 경우도 있습니다. 컴포넌트가 shadow tree 안의 어떤 대상에 대해 임의의 스타일링을 허용하려면, 이를 수행하는 유일한 방법은 수백 개의 custom properties를 정의하는 것입니다(제어를 허용하려는 CSS 속성마다 하나씩). 이는 사용성과 성능 양쪽 이유로 명백히 터무니없는 일입니다. 작성자가 :hover 같은 의사 클래스에 따라 컴포넌트를 다르게 스타일링하려는 경우 상황은 더 복잡해집니다. 컴포넌트는 각 의사 클래스마다 (그리고 :hover:focus 같은 각 조합마다) 사용되는 custom properties를 복제해야 하며, 이는 조합 폭발을 초래합니다. 이로 인해 사용성과 성능 문제가 더욱 악화됩니다.

우리는 이 경우를 훨씬 더 우아하고 성능 좋게 처리하기 위해 ::part()를 도입합니다. 모든 것을 custom property 이름에 묶어 넣는 대신, 기능은 원래 그래야 하는 것처럼 선택자와 스타일 규칙 구문 안에 존재합니다. 이는 컴포넌트 작성자와 컴포넌트 사용자 모두에게 훨씬 더 사용하기 쉽고, 훨씬 더 나은 성능을 가져야 하며, 더 나은 캡슐화/API 표면을 허용합니다.

::part()이론적으로 완전히 새로운 힘을 전혀 제공하지 않는다는 점은 중요합니다. 이는 >>> 결합자의 재탕이 아니며, 작성자가 이미 custom properties로 할 수 있는 일에 대한 더 편리하고 일관된 구문일 뿐입니다. 요소의 명시적으로 "공개된" 부분 (part element map)을 단지 우연히 포함하고 있는 하위 부분과 분리함으로써, 이는 캡슐화에도 도움이 됩니다. 작성자는 우발적인 과도한 스타일링을 걱정하지 않고 ::part()를 사용할 수 있습니다.

2. Shadow 요소 노출:

shadow tree 안의 요소는 part 및 exportparts 속성을 사용하여 트리 외부의 스타일시트가 스타일링할 수 있도록 내보낼 수 있습니다.

각 요소에는 토큰의 ordered setpart name list가 있습니다.

각 요소에는 전달되는 내부 part에 대한 string과 그것이 노출될 이름을 제공하는 string을 포함하는 tupleslistforwarded part name list가 있습니다.

shadow root는 키가 strings이고 값이 요소의 ordered setspart element map을 가진 것으로 생각할 수 있습니다.

part element map은 이 명세에서 스타일을 계산하는 알고리즘의 일부로만 설명됩니다. DOM을 통해 노출되지 않습니다. 이를 계산하는 비용이 클 수 있으며, 노출하면 닫힌 shadow root 내부의 요소에 접근할 수 있게 될 수 있기 때문입니다.

Part element maps는 요소의 추가 및 제거, 그리고 DOM 내 요소의 part name listsforwarded part name lists 변경에 의해 영향을 받습니다.

shadow root outerRootpart element map 계산은 다음과 같습니다.
  1. outerRoot 안의 각 descendant el에 대해:

    1. elpart name list에 있는 각 name에 대해, elouterRootpart element map[name]에 append합니다.

    2. el 자체가 shadow host이면 innerRoot를 그 shadow root로 둡니다.

    3. innerRootpart element map계산합니다.

    4. elforwarded part name list에 있는 각 innerName/outerName에 대해:

      1. innerName이 ident이면:

        1. innerPartsinnerRootpart element map[innerName]으로 둡니다.

        2. innerParts 안의 요소들을 outerRootpart element map[outerName]에 Append합니다.

      2. innerName이 pseudo-element name이면:

        1. innerRoot의 해당 이름을 가진 pseudo-element(s)를 outerRootpart element map[outerName]에 Append합니다.

2.1. Shadow 요소 이름 지정: part 속성

shadow tree 안의 모든 요소는 part 속성을 가질 수 있습니다. 이는 요소를 shadow tree 외부에 노출하는 데 사용됩니다.

테스트

part 속성은 이 요소의 part 이름을 나타내는 토큰의 공백으로 구분된 목록으로 구문 분석됩니다.

참고: 하나의 part에 여러 이름을 주어도 괜찮습니다. "part name"은 id나 tagname이 아니라 class와 유사한 것으로 간주해야 합니다.

<style>
  c-e::part(textspan) { color: red; }
</style>

<template id="c-e-template">
  <span part="textspan">This text will be red</span>
</template>
<c-e></c-e>
<script>
  // Add template as custom element c-e
  ...
</script>

2.2. Shadow 요소 전달: exportparts 속성

shadow tree 안의 모든 요소는 exportparts 속성을 가질 수 있습니다. 요소가 shadow host인 경우, 이는 이 shadow tree 외부의 규칙에 의해 shadow tree 내부 host의 part를 스타일링할 수 있도록 하는 데 사용됩니다 (마치 host와 같은 트리 안에 있는, part 속성으로 이름 지정된 요소인 것처럼).
테스트

exportparts 속성은 part 매핑의 쉼표로 구분된 목록으로 구문 분석됩니다. 각 part 매핑은 다음 중 하나입니다.

innerIdent : outerIdent

innerIdent/outerIdent를 el의 forwarded part name list에 추가합니다.

ident

ident/ident를 el의 forwarded part name list에 추가합니다.

참고: 이는 ident : ident의 축약형입니다.

::ident : outerIdent

::identfully styleable pseudo-element의 이름이면, ::ident/outerIdent를 el의 forward part name list에 추가합니다. 그렇지 않으면 아무것도 하지 않습니다.

그 밖의 모든 것

오류 복구 / 향후 호환성을 위해 무시됩니다.

참고: 하나의 sub-part를 여러 이름에 매핑해도 괜찮습니다.

<style>
  c-e::part(textspan) { color: red; }
</style>

<template id="c-e-outer-template">
  <c-e-inner exportparts="innerspan: textspan"></c-e-inner>
</template>

<template id="c-e-inner-template">
  <span part="innerspan">
    This text will be red because the containing shadow
    host forwards innerspan to the document as "textspan"
    and the document style matches it.
  </span>
  <span part="textspan">
    This text will not be red because textspan in the document style
    cannot match against the part inside the inner custom element
    if it is not forwarded.
  </span>
</template>

<c-e></c-e>
<script>
  // Add template as custom elements c-e-inner, c-e-outer
  ...
</script>
예를 들어, fully styleable pseudo-elementexportparts 속성에서 사용되어, 그것이 들어 있는 컴포넌트에 대해 ::part()인 것처럼 가장할 수 있습니다.
<template id=custom-element-template>
  <p exportparts="::before : preceding-text, ::after : following-text">
    Main text.
</template>

그 템플릿을 사용하는 요소는 x-component::part(preceding-text) 같은 선택자를 사용하여 그 shadow 안의 p::before 의사 요소를 대상으로 삼을 수 있으므로, 컴포넌트 사용자는 preceding text가 의사 요소로 구현되어 있다는 사실을 알 필요가 없습니다.

3. Shadow 요소 선택: ::part() 의사 요소

::part() 의사 요소는 part 속성을 통해 노출된 요소를 선택할 수 있게 합니다. 구문은 다음과 같습니다.

::part() = ::part( <ident>+ )
테스트

::part() 의사 요소는 originating elementshadow host일 때에만 무엇인가와 일치합니다.

예를 들어, 스타일링을 위해 노출된 "label" 요소를 포함하는 custom button이 (via part="label") 있다면, x-button::part(label)로 이를 선택할 수 있습니다.
Part 이름은 class와 비슷하게 동작합니다. 여러 요소가 같은 part 이름을 가질 수 있으며, 하나의 요소가 여러 part 이름을 가질 수 있습니다.

tabstrip 컨트롤은 part="tab"을 가진 여러 요소를 가질 수 있으며, 이들 모두는 ::part(tab)에 의해 선택됩니다.

한 번에 하나의 tab만 활성 상태라면, part="tab active"로 특별히 표시한 다음 ::part(tab active) (또는 순서가 중요하지 않으므로 ::part(active tab))로 선택할 수 있습니다.

::part() 의사 요소는 fully styleable pseudo-element입니다. originating elementshadow rootpart element map이 지정된 <ident>contains하면, ::part()는 해당 ident에 키로 연결된 요소를 나타냅니다. 여러 ident가 제공되고 part element map이 그것들을 모두 포함하면, 각 ident에 키로 연결된 요소의 교집합을 나타냅니다. 그렇지 않으면 아무것도 일치하지 않습니다.

::part() 의사 요소는 originating element의 shadow tree 안에서의 위치에 따라 상속합니다.

예를 들어, x-panel::part(confirm-button)::part(label)은 절대 아무것도 일치하지 않습니다. 이는 그렇게 하면 의도된 것보다 더 많은 구조 정보를 노출하기 때문입니다.

<x-panel>의 내부 confirm button이 part="label => confirm-label" 같은 것을 사용하여 button의 내부 part를 panel 자체의 part element map으로 전달했다면, x-panel::part(confirm-label) 같은 선택자는 다른 label은 무시하고 그 button의 label 하나만 선택했을 것입니다.

4. Element 인터페이스에 대한 확장

partial interface Element {
  [SameObject, PutForwards=value] readonly attribute DOMTokenList part;
};
테스트

part 속성의 getter는 연결된 요소가 컨텍스트 객체이고 연결된 속성의 로컬 이름이 part인 DOMTokenList 객체를 반환해야 합니다. 이 특정 DOMTokenList 객체의 토큰 집합은 요소의 parts라고도 알려져 있습니다.

이를 DOM 명세의 superglobal로 정의하십시오. [w3c/csswg-drafts Issue #3424]

5. 구문 분석을 위한 마이크로구문

5.1. part 매핑 구문 분석 규칙

유효한 part 매핑은 U+003A COLON 문자로 구분되고 U+003A COLON 앞이나 뒤에 임의 개수의 공백 문자가 올 수 있는 토큰의 tuple입니다. 토큰은 U+003A COLON 또는 U+002C COMMA 문자를 포함해서는 안 됩니다.

part 매핑을 구문 분석하는 규칙은 다음과 같습니다.

  1. input을 구문 분석 중인 문자열로 둡니다.

  2. positioninput 안을 가리키는 포인터로 두고, 처음에는 문자열의 시작을 가리키도록 합니다.

  3. 공백 문자인 code point의 시퀀스를 수집합니다.

  4. 공백 문자 또는 U+003A COLON 문자가 아닌 code point의 시퀀스를 수집하고, first token을 그 결과로 둡니다.

  5. first token이 비어 있으면 error를 반환합니다.

  6. 공백 문자인 code point의 시퀀스를 수집합니다.

  7. input의 끝에 도달했으면 tuple (first token, first token)을 반환합니다.

  8. position의 문자가 U+003A COLON 문자가 아니면 error를 반환합니다.

  9. U+003A COLON 문자를 소비합니다.

  10. 공백 문자인 code point의 시퀀스를 수집합니다.

  11. 공백 문자 또는 U+003A COLON 문자가 아닌 code point의 시퀀스를 수집하고, second token을 그 결과로 둡니다.

  12. second token이 비어 있으면 error를 반환합니다.

  13. 공백 문자인 code point의 시퀀스를 수집합니다.

  14. positioninput의 끝을 지나 있지 않으면 error를 반환합니다.

  15. tuple (first token, second token)을 반환합니다.

5.2. part 매핑 목록 구문 분석 규칙

유효한 part 매핑 목록은 U+002C COMMA 문자로 구분되고 U+002C COMMA 앞이나 뒤에 임의 개수의 공백 문자가 올 수 있는 여러 유효한 part 매핑입니다.

part 매핑 목록을 구문 분석하는 규칙은 다음과 같습니다.

  1. input을 구문 분석 중인 문자열로 둡니다.

  2. 문자열 input을 쉼표로 분할합니다. unparsed mappings를 그 결과 문자열 목록으로 둡니다.

  3. mappings를 처음에는 비어 있는, 토큰의 tupleslist로 둡니다. 이 list가 이 알고리즘의 결과가 됩니다.

  4. unparsed mappings 안의 각 문자열 unparsed mapping에 대해, 다음 하위 단계를 실행합니다.

    1. unparsed mapping이 비어 있거나 공백 문자만 포함하면, 루프의 다음 반복으로 계속합니다.

    2. mappingpart 매핑 구문 분석 규칙을 사용하여 unparsed mapping을 구문 분석한 결과로 둡니다.

    3. mapping이 error이면 루프의 다음 반복으로 계속합니다. 이를 통해 클라이언트는 이해하지 못하는 새 구문을 건너뛸 수 있습니다.

    4. mappingmappings에 추가합니다.

6. 개인정보 보호 고려사항

이 명세는 페이지의 요소를 스타일링 대상으로 지정하는 새로운 방법을 정의합니다. 이러한 요소들은 이미 다른 방식으로 완전히 스타일링할 수 있습니다. 따라서 새로운 개인정보 보호 고려사항을 도입하지 않습니다.

7. 보안 고려사항

shadow trees는 의도적으로 보안 경계가 아니라 페이지 작성자를 위한 편의 기능일 뿐이므로, 이러한 방식으로 선택자에 노출하더라도 새로운 보안 고려사항을 도입하지 않습니다.

8. 변경 사항

2018년 11월 15일 First Public Working Draft 이후의 변경 사항

적합성

문서 규약

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

이 명세의 모든 텍스트는 명시적으로 비규범적이라고 표시된 절, 예제 및 참고를 제외하고 규범적입니다. [RFC2119]

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

이는 정보 제공 예제의 한 예입니다.

정보 제공 참고는 “Note”라는 말로 시작하며 class="note"를 통해 규범적 텍스트와 구분됩니다. 다음과 같습니다.

참고, 이는 정보 제공 참고입니다.

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

테스트

이 명세의 내용과 관련된 테스트는 이와 같은 “Tests” 블록에 문서화될 수 있습니다. 이러한 블록은 모두 비규범적입니다.


적합성 클래스

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

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

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

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

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

부분 구현

작성자가 앞으로 호환되는 구문 분석 규칙을 활용하여 대체 값을 할당할 수 있도록, CSS renderer는 사용 가능한 수준의 지원이 없는 모든 at-rule, 속성, 속성 값, 키워드 및 기타 구문 구조를 무효로 취급해야 하며(must) 적절한 경우 무시해야 합니다. 특히 사용자 에이전트는 하나의 다중 값 속성 선언에서 지원되지 않는 구성 값은 선택적으로 무시하고 지원되는 값은 존중해서는 안 됩니다(must not). 어떤 값이 무효로 간주되면 (지원되지 않는 값은 무효로 간주되어야 하므로), CSS는 전체 선언을 무시할 것을 요구합니다.

불안정하고 독점적인 기능의 구현

미래의 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 CSS의 불안정한 기능 및 독점 확장을 구현할 때 모범 사례를 따를 것을 권장합니다.

비실험적 구현

명세가 Candidate Recommendation 단계에 도달하면, 비실험적 구현이 가능하며, 구현자는 명세에 따라 올바르게 구현되었음을 입증할 수 있는 모든 CR 수준 기능에 대해 접두사 없는 구현을 출시해야 합니다.

CSS 구현 간의 상호운용성을 확립하고 유지하기 위해, CSS Working Group은 비실험적 CSS renderer가 어떤 CSS 기능에 대해 접두사 없는 구현을 출시하기 전에 구현 보고서(및 필요한 경우 그 구현 보고서에 사용된 테스트 케이스)를 W3C에 제출할 것을 요청합니다. W3C에 제출된 테스트 케이스는 CSS Working Group의 검토와 수정을 받을 수 있습니다.

테스트 케이스와 구현 보고서 제출에 관한 자세한 정보는 CSS Working Group 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있습니다. 질문은 public-css-testsuite@w3.org 메일링 리스트로 보내야 합니다.

색인

이 명세에서 정의하는 용어

참조로 정의되는 용어

참고 문헌

규범 참고 문헌

[CSS-PSEUDO-4]
Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2025년 6월 27일. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[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-VARIABLES-1]
Tab Atkins Jr.. CSS Custom Properties for Cascading Variables Module Level 1. 2022년 6월 16일. CR. URL: https://www.w3.org/TR/css-variables-1/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[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/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

IDL 색인

partial interface Element {
  [SameObject, PutForwards=value] readonly attribute DOMTokenList part;
};

이슈 색인

이를 DOM 명세의 superglobal로 정의하십시오. [w3c/csswg-drafts Issue #3424]