목차

  1. 1 소개
  2. 2 공통 인프라
  3. 3 HTML 문서의 의미론, 구조, 및 API
  4. 4 HTML 요소
  5. 5 마이크로데이터
  6. 6 사용자 상호작용
  7. 7 웹 페이지 로딩
  8. 8 웹 애플리케이션 API
  9. 9 통신
  10. 10 웹 워커
  11. 11 워클릿
  12. 12 웹 저장소
  13. 13 HTML 구문
  14. 14 XML 구문
  15. 15 렌더링
  16. 16 폐기된 기능
  17. 17 IANA 고려사항
  18. 색인
  19. 참조
  20. 감사의 말
  21. 지적 재산권

전체 목차

  1. 1 소개
    1. 1.1 이 명세는 어디에 적합합니까?
    2. 1.2 이것이 HTML5인가요?
    3. 1.3 배경
    4. 1.4 대상 독자
    5. 1.5 범위
    6. 1.6 역사
    7. 1.7 디자인 노트
      1. 1.7.1 스크립트 실행의 직렬화 가능성
      2. 1.7.2 확장성
    8. 1.8 HTML 대 XML 문법
    9. 1.9 이 명세서의 구조
      1. 1.9.1 이 명세서를 읽는 방법
      2. 1.9.2 타이포그래픽 규칙
    10. 1.10 HTML 간단 소개
      1. 1.10.1 HTML로 보안 애플리케이션 작성하기
      2. 1.10.2 스크립팅 API를 사용할 때 피해야 할 일반적인 함정
      3. 1.10.3 HTML 작성 시 실수를 잡는 방법: 검증기 및 적합성 검사기
    11. 1.11 작성자를 위한 적합성 요구사항
      1. 1.11.1 표현 마크업
      2. 1.11.2 문법 오류
      3. 1.11.3 콘텐츠 모델 및 속성 값에 대한 제한사항
    12. 1.12 추천 읽을거리
  2. 2 공통 인프라
    1. 2.1 용어
      1. 2.1.1 병렬 처리
      2. 2.1.2 리소스
      3. 2.1.3 XML 호환성
      4. 2.1.4 DOM 트리
      5. 2.1.5 스크립팅
      6. 2.1.6 플러그인
      7. 2.1.7 문자 인코딩
      8. 2.1.8 준수 클래스
      9. 2.1.9 의존성
      10. 2.1.10 확장성
      11. 2.1.11 XPath 및 XSLT와의 상호작용
    2. 2.2 정책으로 제어되는 기능
    3. 2.3 공통 마이크로 구문
      1. 2.3.1 공통 파서 관용구
      2. 2.3.2 불리언 속성
      3. 2.3.3 키워드와 열거형 속성
      4. 2.3.4 숫자
        1. 2.3.4.1 부호 있는 정수
        2. 2.3.4.2 음이 아닌 정수
        3. 2.3.4.3 부동 소수점 숫자
        4. 2.3.4.4 백분율과 길이
        5. 2.3.4.5 0이 아닌 백분율과 길이
        6. 2.3.4.6 부동 소수점 숫자 목록
        7. 2.3.4.7 차원 목록
      5. 2.3.5 날짜와 시간
        1. 2.3.5.1
        2. 2.3.5.2 날짜
        3. 2.3.5.3 연도 없는 날짜
        4. 2.3.5.4 시간
        5. 2.3.5.5 로컬 날짜와 시간
        6. 2.3.5.6 시간대
        7. 2.3.5.7 전역 날짜 및 시간
        8. 2.3.5.8
        9. 2.3.5.9 지속 시간
        10. 2.3.5.10 불분명한 시간들
      6. 2.3.6 레거시 색상
      7. 2.3.7 공백으로 구분된 토큰
      8. 2.3.8 쉼표로 구분된 토큰
      9. 2.3.9 참조
      10. 2.3.10 미디어 쿼리
      11. 2.3.11 고유한 내부 값
    4. 2.4 URL
      1. 2.4.1 용어
      2. 2.4.2 URL 파싱
      3. 2.4.3 문서 기본 URL
    5. 2.5 리소스 가져오기
      1. 2.5.1 용어
      2. 2.5.2 리소스 유형 결정
      3. 2.5.3 meta 요소에서 문자 인코딩 추출
      4. 2.5.4 CORS 설정 속성
      5. 2.5.5 리퍼러 정책 속성
      6. 2.5.6 넌스 속성
      7. 2.5.7 지연 로딩 속성
      8. 2.5.8 차단 속성
      9. 2.5.9 가져오기 우선순위 속성
    6. 2.6 공통 DOM 인터페이스
      1. 2.6.1 IDL 속성에서 콘텐츠 속성 반영
      2. 2.6.2 IDL 확장 속성을 통한 reflect 사용하기
      3. 2.6.3 명세에서 reflect 사용하기
      4. 2.6.4 컬렉션
        1. 2.6.4.1 HTMLAllCollection 인터페이스
          1. 2.6.4.1.1 [[Call]] ( thisArgument, argumentsList )
        2. 2.6.4.2 HTMLFormControlsCollection 인터페이스
        3. 2.6.4.3 HTMLOptionsCollection 인터페이스
      5. 2.6.5 DOMStringList 인터페이스
    7. 2.7 구조화된 데이터의 안전한 전달
      1. 2.7.1 직렬화 가능한 객체
      2. 2.7.2 전송 가능한 객체
      3. 2.7.3 StructuredSerializeInternal ( value, forStorage [ , memory ] )
      4. 2.7.4 StructuredSerialize ( value )
      5. 2.7.5 StructuredSerializeForStorage ( value )
      6. 2.7.6 StructuredDeserialize ( serialized, targetRealm [ , memory ] )
      7. 2.7.7 StructuredSerializeWithTransfer ( value, transferList )
      8. 2.7.8 StructuredDeserializeWithTransfer ( serializeWithTransferResult, targetRealm )
      9. 2.7.9 다른 명세에서의 직렬화 및 전송 수행
      10. 2.7.10 구조화된 클로닝 API
  3. 3 HTML 문서의 의미, 구조 및 API
    1. 3.1 문서
      1. 3.1.1 Document 객체
      2. 3.1.2 DocumentOrShadowRoot 인터페이스
      3. 3.1.3 리소스 메타데이터 관리
      4. 3.1.4 문서 로딩 상태 보고
      5. 3.1.5 렌더 차단 메커니즘
      6. 3.1.6 DOM 트리 접근자
    2. 3.2 요소
      1. 3.2.1 의미
      2. 3.2.2 DOM의 요소
      3. 3.2.3 HTML 요소 생성자
      4. 3.2.4 요소 정의
        1. 3.2.4.1 속성
      5. 3.2.5 콘텐츠 모델
        1. 3.2.5.1 "nothing" 콘텐츠 모델
        2. 3.2.5.2 콘텐츠의 종류
          1. 3.2.5.2.1 메타데이터 콘텐츠
          2. 3.2.5.2.2 플로우 콘텐츠
          3. 3.2.5.2.3 구획 콘텐츠
          4. 3.2.5.2.4 제목 콘텐츠
          5. 3.2.5.2.5 구문 콘텐츠
          6. 3.2.5.2.6 임베디드 콘텐츠
          7. 3.2.5.2.7 인터랙티브 콘텐츠
          8. 3.2.5.2.8 실체 콘텐츠
          9. 3.2.5.2.9 스크립트 지원 요소
          10. 3.2.5.2.10 select 요소 내부 콘텐츠 요소
          11. 3.2.5.2.11 optgroup 요소 내부 콘텐츠 요소
          12. 3.2.5.2.12 option 요소 내부 콘텐츠 요소
        3. 3.2.5.3 투명한 콘텐츠 모델
        4. 3.2.5.4 문단
      6. 3.2.6 글로벌 속성
        1. 3.2.6.1 title 속성
        2. 3.2.6.2 langxml:lang 속성
        3. 3.2.6.3 translate 속성
        4. 3.2.6.4 dir 속성
        5. 3.2.6.5 style 속성
        6. 3.2.6.6 data-* 속성을 사용하여 비가시적 데이터를 포함하기
      7. 3.2.7 innerTextouterText 속성
      8. 3.2.8 양방향 알고리즘과 관련된 요구사항
        1. 3.2.8.1 양방향 알고리즘 형식화 문자에 대한 작성 적합성 기준
        2. 3.2.8.2 사용자 에이전트 적합성 기준
      9. 3.2.9 ARIA 및 플랫폼 접근성 API와 관련된 요구사항
  4. 4 HTML 요소
    1. 4.1 문서 요소
      1. 4.1.1 html 요소
    2. 4.2 문서 메타데이터
      1. 4.2.1 head 요소
      2. 4.2.2 title 요소
      3. 4.2.3 base 요소
      4. 4.2.4 link 요소
        1. 4.2.4.1 media 속성 처리
        2. 4.2.4.2 type 속성 처리
        3. 4.2.4.3 link 요소에서 리소스를 가져오고 처리하기
        4. 4.2.4.4 `Link` 헤더 처리
        5. 4.2.4.5 사전 힌트
        6. 4.2.4.6 link 요소를 사용하여 생성된 하이퍼링크를 따라갈 수 있는 방법을 사용자에게 제공
      5. 4.2.5 meta 요소
        1. 4.2.5.1 표준 메타데이터 이름
        2. 4.2.5.2 다른 메타데이터 이름
        3. 4.2.5.3 프라그마 지시문
        4. 4.2.5.4 문서의 문자 인코딩 지정
      6. 4.2.6 style 요소
      7. 4.2.7 스타일링과 스크립팅의 상호작용
    3. 4.3 섹션
      1. 4.3.1 body 요소
      2. 4.3.2 article 요소
      3. 4.3.3 section 요소
      4. 4.3.4 nav 요소
      5. 4.3.5 aside 요소
      6. 4.3.6 h1, h2, h3, h4, h5, h6 요소
      7. 4.3.7 hgroup 요소
      8. 4.3.8 header 요소
      9. 4.3.9 footer 요소
      10. 4.3.10 address 요소
      11. 4.3.11 제목과 개요
        1. 4.3.11.1 제목 수준 & 오프셋
        2. 4.3.11.2 샘플 개요
        3. 4.3.11.3 사용자에게 개요 노출
      12. 4.3.12 사용 요약
        1. 4.3.12.1 아티클 또는 섹션?
    4. 4.4 내용 그룹화
      1. 4.4.1 p 요소
      2. 4.4.2 hr 요소
      3. 4.4.3 pre 요소
      4. 4.4.4 blockquote 요소
      5. 4.4.5 ol 요소
      6. 4.4.6 ul 요소
      7. 4.4.7 menu 요소
      8. 4.4.8 li 요소
      9. 4.4.9 dl 요소
      10. 4.4.10 dt 요소
      11. 4.4.11 dd 요소
      12. 4.4.12 figure 요소
      13. 4.4.13 figcaption 요소
      14. 4.4.14 main 요소
      15. 4.4.15 search 요소
      16. 4.4.16 div 요소
    5. 4.5 텍스트 수준의 시맨틱
      1. 4.5.1 a 요소
      2. 4.5.2 em 요소
      3. 4.5.3 strong 요소
      4. 4.5.4 small 요소
      5. 4.5.5 s 요소
      6. 4.5.6 cite 요소
      7. 4.5.7 q 요소
      8. 4.5.8 dfn 요소
      9. 4.5.9 abbr 요소
      10. 4.5.10 ruby 요소
      11. 4.5.11 rt 요소
      12. 4.5.12 rp 요소
      13. 4.5.13 data 요소
      14. 4.5.14 time 요소
      15. 4.5.15 code 요소
      16. 4.5.16 var 요소
      17. 4.5.17 samp 요소
      18. 4.5.18 kbd 요소
      19. 4.5.19 subsup 요소
      20. 4.5.20 i 요소
      21. 4.5.21 b 요소
      22. 4.5.22 u 요소
      23. 4.5.23 mark 요소
      24. 4.5.24 bdi 요소
      25. 4.5.25 bdo 요소
      26. 4.5.26 span 요소
      27. 4.5.27 br 요소
      28. 4.5.28 wbr 요소
      29. 4.5.29 사용 요약
    6. 4.6 링크
      1. 4.6.1 소개
      2. 4.6.2 aarea 요소가 생성하는 링크
      3. 4.6.3 aarea 요소를 위한 API
      4. 4.6.4 하이퍼링크 따라가기
      5. 4.6.5 리소스 다운로드
      6. 4.6.6 하이퍼링크 감사
        1. 4.6.6.1 `Ping-From` 및 `Ping-To` 헤더
      7. 4.6.7 링크 유형
        1. 4.6.7.1 링크 유형 "alternate"
        2. 4.6.7.2 링크 유형 "author"
        3. 4.6.7.3 링크 유형 "bookmark"
        4. 4.6.7.4 링크 유형 "canonical"
        5. 4.6.7.5 링크 유형 "dns-prefetch"
        6. 4.6.7.6 링크 유형 "expect"
        7. 4.6.7.7 링크 유형 "external"
        8. 4.6.7.8 링크 유형 "help"
        9. 4.6.7.9 링크 유형 "icon"
        10. 4.6.7.10 링크 유형 "license"
        11. 4.6.7.11 링크 유형 "manifest"
        12. 4.6.7.12 링크 유형 "modulepreload"
        13. 4.6.7.13 링크 유형 "nofollow"
        14. 4.6.7.14 링크 유형 "noopener"
        15. 4.6.7.15 링크 유형 "noreferrer"
        16. 4.6.7.16 링크 유형 "opener"
        17. 4.6.7.17 링크 유형 "pingback"
        18. 4.6.7.18 링크 유형 "preconnect"
        19. 4.6.7.19 링크 유형 "prefetch"
        20. 4.6.7.20 링크 유형 "preload"
        21. 4.6.7.21 링크 유형 "privacy-policy"
        22. 4.6.7.22 링크 유형 "search"
        23. 4.6.7.23 링크 유형 "stylesheet"
        24. 4.6.7.24 링크 유형 "tag"
        25. 4.6.7.25 링크 유형 "terms-of-service"
        26. 4.6.7.26 순차적 링크 유형
          1. 4.6.7.26.1 링크 유형 "next"
          2. 4.6.7.26.2 링크 유형 "prev"
        27. 4.6.7.27 기타 링크 유형
    7. 4.7 수정
      1. 4.7.1 ins 요소
      2. 4.7.2 del 요소
      3. 4.7.3 insdel 요소에 공통된 속성
      4. 4.7.4 수정과 단락
      5. 4.7.5 수정과 목록
      6. 4.7.6 수정과 표
    8. 4.8 임베디드 콘텐츠
      1. 4.8.1 picture 요소
      2. 4.8.2 source 요소
      3. 4.8.3 img 요소
      4. 4.8.4 이미지
        1. 4.8.4.1 소개
          1. 4.8.4.1.1 적응형 이미지
        2. 4.8.4.2 source, imglink 요소에 공통된 속성
          1. 4.8.4.2.1 Srcset 속성
          2. 4.8.4.2.2 Sizes 속성
        3. 4.8.4.3 처리 모델
          1. 4.8.4.3.1 이미지를 얻는 시점
          2. 4.8.4.3.2 DOM 변형에 반응
          3. 4.8.4.3.3 사용 가능한 이미지 목록
          4. 4.8.4.3.4 이미지 디코딩
          5. 4.8.4.3.5 이미지 데이터 업데이트
          6. 4.8.4.3.6 프레젠테이션을 위한 이미지 준비
          7. 4.8.4.3.7 이미지 소스 선택
          8. 4.8.4.3.8 속성에서 소스 세트 생성
          9. 4.8.4.3.9 소스 세트 업데이트
          10. 4.8.4.3.10 srcset 속성 파싱
          11. 4.8.4.3.11 sizes 속성 파싱
          12. 4.8.4.3.12 소스 밀도 정규화
          13. 4.8.4.3.13 환경 변화에 대응
        4. 4.8.4.4 이미지의 대체 텍스트를 제공하기 위한 요구 사항
          1. 4.8.4.4.1 일반적인 지침
          2. 4.8.4.4.2 이미지 외에는 아무것도 포함하지 않은 링크나 버튼
          3. 4.8.4.4.3 대체 그래픽 표현을 가진 문구나 단락: 차트, 다이어그램, 그래프, 지도, 일러스트레이션
          4. 4.8.4.4.4 대체 그래픽 표현을 가진 짧은 구절이나 레이블: 아이콘, 로고
          5. 4.8.4.4.5 그래픽으로 렌더링된 텍스트: 타이포그래피 효과
          6. 4.8.4.4.6 주변 텍스트의 일부에 대한 그래픽 표현
          7. 4.8.4.4.7 부수적 이미지
          8. 4.8.4.4.8 정보 추가가 없는 순전히 장식적인 이미지
          9. 4.8.4.4.9 링크가 없는 단일 큰 그림을 형성하는 이미지 그룹
          10. 4.8.4.4.10 링크가 있는 단일 큰 그림을 형성하는 이미지 그룹
          11. 4.8.4.4.11 콘텐츠의 주요 부분
          12. 4.8.4.4.12 사용자에게 의도되지 않은 이미지
          13. 4.8.4.4.13 이미지를 볼 수 있는 것으로 알려진 특정 인물에게 보내는 이메일 또는 개인 문서에 포함된 이미지
          14. 4.8.4.4.14 마크업 생성기를 위한 지침
          15. 4.8.4.4.15 적합성 검사기를 위한 지침
      5. 4.8.5 iframe 요소
      6. 4.8.6 embed 요소
      7. 4.8.7 object 요소
      8. 4.8.8 video 요소
      9. 4.8.9 audio 요소
      10. 4.8.10 track 요소
      11. 4.8.11 미디어 요소
        1. 4.8.11.1 오류 코드
        2. 4.8.11.2 미디어 리소스의 위치
        3. 4.8.11.3 MIME 타입
        4. 4.8.11.4 네트워크 상태
        5. 4.8.11.5 미디어 리소스 로드
        6. 4.8.11.6 미디어 리소스의 오프셋
        7. 4.8.11.7 준비 상태
        8. 4.8.11.8 미디어 리소스 재생
        9. 4.8.11.9 탐색
        10. 4.8.11.10 여러 미디어 트랙을 가진 미디어 리소스
          1. 4.8.11.10.1 AudioTrackListVideoTrackList 객체
          2. 4.8.11.10.2 특정 오디오 및 비디오 트랙을 선언적으로 선택
        11. 4.8.11.11 시간에 맞춰 표시되는 텍스트 트랙
          1. 4.8.11.11.1 텍스트 트랙 모델
          2. 4.8.11.11.2 인밴드 텍스트 트랙 소싱
          3. 4.8.11.11.3 밴드 외 텍스트 트랙 소싱
          4. 4.8.11.11.4 다양한 형식에서 큐를 텍스트 트랙 큐로 노출하기 위한 가이드라인
          5. 4.8.11.11.5 텍스트 트랙 API
          6. 4.8.11.11.6 텍스트 트랙 API 객체의 이벤트 핸들러
          7. 4.8.11.11.7 메타데이터 텍스트 트랙에 대한 모범 사례
        12. 4.8.11.12 URL을 통해 트랙 종류 식별하기
        13. 4.8.11.13 사용자 인터페이스
        14. 4.8.11.14 시간 범위
        15. 4.8.11.15 TrackEvent 인터페이스
        16. 4.8.11.16 이벤트 요약
        17. 4.8.11.17 보안 및 개인정보 보호 고려사항
        18. 4.8.11.18 미디어 요소를 사용하는 작성자를 위한 모범 사례
        19. 4.8.11.19 미디어 요소 구현자를 위한 모범 사례
      12. 4.8.12 map 요소
      13. 4.8.13 area 요소
      14. 4.8.14 이미지 맵
        1. 4.8.14.1 작성
        2. 4.8.14.2 처리 모델
      15. 4.8.15 MathML
      16. 4.8.16 SVG
      17. 4.8.17 크기 속성
    9. 4.9 표 형식 데이터
      1. 4.9.1 table 요소
        1. 4.9.1.1 테이블 설명 기법
        2. 4.9.1.2 테이블 설계를 위한 기법
      2. 4.9.2 caption 요소
      3. 4.9.3 colgroup 요소
      4. 4.9.4 col 요소
      5. 4.9.5 tbody 요소
      6. 4.9.6 thead 요소
      7. 4.9.7 tfoot 요소
      8. 4.9.8 tr 요소
      9. 4.9.9 td 요소
      10. 4.9.10 th 요소
      11. 4.9.11 tdth 요소에 공통된 속성
      12. 4.9.12 처리 모델
        1. 4.9.12.1 테이블 구성하기
        2. 4.9.12.2 데이터 셀과 헤더 셀 간의 관계 형성
      13. 4.9.13 예시
    10. 4.10 양식
      1. 4.10.1 소개
        1. 4.10.1.1 폼의 사용자 인터페이스 작성
        2. 4.10.1.2 폼의 서버 측 처리 구현
        3. 4.10.1.3 폼이 서버와 통신하도록 구성하기
        4. 4.10.1.4 클라이언트 측 폼 검증
        5. 4.10.1.5 폼 컨트롤의 클라이언트 측 자동 채우기 활성화
        6. 4.10.1.6 모바일 기기에서 사용자 경험 개선
        7. 4.10.1.7 필드 타입, 자동완성 필드 이름 및 입력 모드의 차이
        8. 4.10.1.8 날짜, 시간, 및 숫자 형식
      2. 4.10.2 카테고리
      3. 4.10.3 form 요소
      4. 4.10.4 label 요소
      5. 4.10.5 input 요소
        1. 4.10.5.1 type 속성의 상태
          1. 4.10.5.1.1 숨김 상태 (type=hidden)
          2. 4.10.5.1.2 텍스트 (type=text) 상태 및 검색 상태 (type=search)
          3. 4.10.5.1.3 전화 상태 (type=tel)
          4. 4.10.5.1.4 URL 상태 (type=url)
          5. 4.10.5.1.5 이메일 상태 (type=email)
          6. 4.10.5.1.6 Password 상태 (type=password)
          7. 4.10.5.1.7 날짜 상태 (type=date)
          8. 4.10.5.1.8 월 상태 (type=month)
          9. 4.10.5.1.9 주 상태 (type=week)
          10. 4.10.5.1.10 시간 상태 (type=time)
          11. 4.10.5.1.11 로컬 날짜 및 시간 상태 (type=datetime-local)
          12. 4.10.5.1.12 숫자 상태 (type=number)
          13. 4.10.5.1.13 범위 상태 (type=range)
          14. 4.10.5.1.14 색상 상태 (type=color)
          15. 4.10.5.1.15 체크박스 상태 (type=checkbox)
          16. 4.10.5.1.16 라디오 버튼 상태 (type=radio)
          17. 4.10.5.1.17 파일 업로드 상태 (type=file)
          18. 4.10.5.1.18 제출 버튼 상태 (type=submit)
          19. 4.10.5.1.19 이미지 버튼 상태 (type=image)
          20. 4.10.5.1.20 리셋 버튼 상태 (type=reset)
          21. 4.10.5.1.21 버튼 상태 (type=button)
        2. 4.10.5.2 폼 컨트롤의 현지화와 관련된 구현 메모
        3. 4.10.5.3 공통 input 요소 속성
          1. 4.10.5.3.1 maxlengthminlength 속성
          2. 4.10.5.3.2 size 속성
          3. 4.10.5.3.3 readonly 속성
          4. 4.10.5.3.4 required 속성
          5. 4.10.5.3.5 multiple 속성
          6. 4.10.5.3.6 pattern 속성
          7. 4.10.5.3.7 minmax 속성
          8. 4.10.5.3.8 step 속성
          9. 4.10.5.3.9 list 속성
          10. 4.10.5.3.10 placeholder 속성
        4. 4.10.5.4 공통 input 요소 API
        5. 4.10.5.5 공통 이벤트 동작
      6. 4.10.6 button 요소
      7. 4.10.7 select 요소
      8. 4.10.8 datalist 요소
      9. 4.10.9 optgroup 요소
      10. 4.10.10 option 요소
      11. 4.10.11 textarea 요소
      12. 4.10.12 output 요소
      13. 4.10.13 progress 요소
      14. 4.10.14 meter 요소
      15. 4.10.15 fieldset 요소
      16. 4.10.16 legend 요소
      17. 4.10.17 selectedcontent 요소
      18. 4.10.18 폼 컨트롤 인프라스트럭처
        1. 4.10.18.1 폼 컨트롤의 값
        2. 4.10.18.2 변경 가능성
        3. 4.10.18.3 컨트롤과 폼의 연관
      19. 4.10.19 폼 컨트롤에 공통된 속성
        1. 4.10.19.1 폼 컨트롤 이름 지정: name 속성
        2. 4.10.19.2 요소 방향성 제출: dirname 속성
        3. 4.10.19.3 사용자 입력 길이 제한: maxlength 속성
        4. 4.10.19.4 최소 입력 길이 요구 사항 설정: minlength 속성
        5. 4.10.19.5 폼 컨트롤 활성화 및 비활성화: disabled 속성
        6. 4.10.19.6 폼 제출 속성
        7. 4.10.19.7 자동 입력
          1. 4.10.19.7.1 폼 컨트롤 자동 입력: autocomplete 속성
          2. 4.10.19.7.2 처리 모델
      20. 4.10.20 텍스트 컨트롤 선택을 위한 API
      21. 4.10.21 제약 조건
        1. 4.10.21.1 정의
        2. 4.10.21.2 제약 조건 검증
        3. 4.10.21.3 제약 조건 검증 API
        4. 4.10.21.4 보안
      22. 4.10.22 폼 제출
        1. 4.10.22.1 소개
        2. 4.10.22.2 암시적 제출
        3. 4.10.22.3 폼 제출 알고리즘
        4. 4.10.22.4 엔트리 리스트 구성
        5. 4.10.22.5 폼 제출 인코딩 선택
        6. 4.10.22.6 엔트리 리스트를 이름-값 쌍 리스트로 변환
        7. 4.10.22.7 URL-인코딩된 폼 데이터
        8. 4.10.22.8 멀티파트 폼 데이터
        9. 4.10.22.9 일반 텍스트 폼 데이터
        10. 4.10.22.10 SubmitEvent 인터페이스
        11. 4.10.22.11 FormDataEvent 인터페이스
      23. 4.10.23 폼 리셋
    11. 4.11 대화형 요소
      1. 4.11.1 details 요소
      2. 4.11.2 summary 요소
      3. 4.11.3 명령
        1. 4.11.3.1 Facets
        2. 4.11.3.2 a 요소를 사용하여 명령 정의
        3. 4.11.3.3 button 요소를 사용하여 명령 정의
        4. 4.11.3.4 input 요소를 사용하여 명령 정의
        5. 4.11.3.5 option 요소를 사용하여 명령 정의
        6. 4.11.3.6 legend 요소에 accesskey 속성을 사용하여 명령 정의
        7. 4.11.3.7 accesskey 속성을 사용하여 다른 요소에서 명령 정의
      4. 4.11.4 dialog 요소
      5. 4.11.5 대화창 라이트 디스미스
    12. 4.12 스크립트
      1. 4.12.1 script 요소
        1. 4.12.1.1 처리 모델
        2. 4.12.1.2 스크립팅 언어
        3. 4.12.1.3 script 요소의 내용에 대한 제한
        4. 4.12.1.4 외부 스크립트에 대한 인라인 문서
        5. 4.12.1.5 script 요소와 XSLT의 상호작용
      2. 4.12.2 noscript 요소
      3. 4.12.3 template 요소
        1. 4.12.3.1 template 요소와 XSLT 및 XPath의 상호 작용
      4. 4.12.4 slot 요소
      5. 4.12.5 canvas 요소
        1. 4.12.5.1 2D 렌더링 컨텍스트
          1. 4.12.5.1.1 구현 참고 사항
          2. 4.12.5.1.2 캔버스 설정
          3. 4.12.5.1.3 캔버스 상태
          4. 4.12.5.1.4 선 스타일
          5. 4.12.5.1.5 텍스트 스타일
          6. 4.12.5.1.6 경로 구축
          7. 4.12.5.1.7 Path2D 객체
          8. 4.12.5.1.8 변환
          9. 4.12.5.1.9 2D 렌더링 컨텍스트를 위한 이미지 소스
          10. 4.12.5.1.10 채우기 및 획 스타일
          11. 4.12.5.1.11 비트맵에 사각형 그리기
          12. 4.12.5.1.12 비트맵에 텍스트 그리기
          13. 4.12.5.1.13 캔버스에 경로 그리기
          14. 4.12.5.1.14 포커스 링 그리기
          15. 4.12.5.1.15 이미지 그리기
          16. 4.12.5.1.16 픽셀 조작
          17. 4.12.5.1.17 합성
          18. 4.12.5.1.18 이미지 스무딩
          19. 4.12.5.1.19 그림자
          20. 4.12.5.1.20 필터
          21. 4.12.5.1.21 외부 정의 SVG 필터 작업
          22. 4.12.5.1.22 드로잉 모델
          23. 4.12.5.1.23 모범 사례
          24. 4.12.5.1.24 예제
        2. 4.12.5.2 ImageBitmap 렌더링 컨텍스트
          1. 4.12.5.2.1 소개
          2. 4.12.5.2.2 ImageBitmapRenderingContext 인터페이스
        3. 4.12.5.3 OffscreenCanvas 인터페이스
          1. 4.12.5.3.1 오프스크린 2D 렌더링 컨텍스트
        4. 4.12.5.4 색상 공간과 색상 공간 변환
        5. 4.12.5.5 비트맵을 파일로 직렬화
        6. 4.12.5.6 canvas 요소의 보안
        7. 4.12.5.7 프리멀티플라이드 알파와 2D 렌더링 컨텍스트
    13. 4.13 커스텀 요소
      1. 4.13.1 소개
        1. 4.13.1.1 자율 커스텀 요소 생성
        2. 4.13.1.2 폼 연관 커스텀 요소 생성
        3. 4.13.1.3 기본 접근성 역할, 상태 및 속성이 있는 커스텀 요소 생성
        4. 4.13.1.4 맞춤형 내장 요소 생성
        5. 4.13.1.5 자율 커스텀 요소의 단점
        6. 4.13.1.6 요소 생성 후 업그레이드
        7. 4.13.1.7 범위가 지정된 커스텀 요소 레지스트리
        8. 4.13.1.8 커스텀 요소 상태 노출
      2. 4.13.2 커스텀 요소 생성자 및 반응을 위한 요구 사항
        1. 4.13.2.1 이동 시 사용자 정의 요소 상태 보존
      3. 4.13.3 핵심 개념
      4. 4.13.4 CustomElementRegistry 인터페이스
      5. 4.13.5 업그레이드
      6. 4.13.6 커스텀 요소 반응
      7. 4.13.7 엘리먼트 내부
        1. 4.13.7.1 ElementInternals 인터페이스
        2. 4.13.7.2 Shadow root 접근
        3. 4.13.7.3 양식 관련 커스텀 요소
        4. 4.13.7.4 접근성 의미
        5. 4.13.7.5 사용자 상태 의사 클래스
    14. 4.14 전용 요소가 없는 일반적인 관용구
      1. 4.14.1 브레드크럼 내비게이션
      2. 4.14.2 태그 클라우드
      3. 4.14.3 대화
      4. 4.14.4 각주
    15. 4.15 비활성화된 요소
    16. 4.16 선택자와 CSS를 사용한 HTML 요소 일치
      1. 4.16.1 CSS 'attr()' 함수의 대소문자 구분
      2. 4.16.2 선택자의 대소문자 구분
      3. 4.16.3 의사 클래스
  5. 5 마이크로데이터
    1. 5.1 소개
      1. 5.1.1 개요
      2. 5.1.2 기본 문법
      3. 5.1.3 타입이 지정된 아이템
      4. 5.1.4 아이템의 전역 식별자
      5. 5.1.5 어휘를 정의할 때 이름 선택
    2. 5.2 마이크로데이터 인코딩
      1. 5.2.1 마이크로데이터 모델
      2. 5.2.2 아이템
      3. 5.2.3 이름: itemprop 속성
      4. 5.2.4
      5. 5.2.5 항목과 이름 연결하기
      6. 5.2.6 마이크로데이터와 기타 네임스페이스
    3. 5.3 샘플 마이크로데이터 어휘
      1. 5.3.1 vCard
        1. 5.3.1.1 vCard로의 변환
        2. 5.3.1.2 예제
      2. 5.3.2 vEvent
        1. 5.3.2.1 iCalendar로 변환
        2. 5.3.2.2 예시
      3. 5.3.3 저작물의 라이선스
        1. 5.3.3.1 예시
    4. 5.4 HTML을 다른 포맷으로 변환하기
      1. 5.4.1 JSON
  6. 6 사용자 상호작용
    1. 6.1 hidden 속성
    2. 6.2 페이지 가시성
      1. 6.2.1 VisibilityStateEntry 인터페이스
    3. 6.3 비활성 서브트리
      1. 6.3.1 모달 대화 상자와 비활성 서브트리
      2. 6.3.2 inert 속성
    4. 6.4 사용자 활성화 추적
      1. 6.4.1 데이터 모델
      2. 6.4.2 처리 모델
      3. 6.4.3 사용자 활성화로 제한된 API
      4. 6.4.4 UserActivation 인터페이스
      5. 6.4.5 사용자 에이전트 자동화
    5. 6.5 요소의 활성화 동작
      1. 6.5.1 ToggleEvent 인터페이스
      2. 6.5.2 CommandEvent 인터페이스
    6. 6.6 포커스
      1. 6.6.1 소개
      2. 6.6.2 데이터 모델
      3. 6.6.3 tabindex 속성
      4. 6.6.4 처리 모델
      5. 6.6.5 순차 포커스 탐색
      6. 6.6.6 포커스 관리 API
      7. 6.6.7 autofocus 속성
    7. 6.7 키보드 단축키 할당
      1. 6.7.1 소개
      2. 6.7.2 accesskey 속성
      3. 6.7.3 처리 모델
    8. 6.8 편집
      1. 6.8.1 문서 영역을 편집 가능하게 만들기: contenteditable 속성
      2. 6.8.2 문서 전체를 편집 가능하게 만들기: designMode 접근자 및 설정자
      3. 6.8.3 페이지 내 편집기를 위한 모범 사례
      4. 6.8.4 편집 API
      5. 6.8.5 맞춤법 및 문법 검사
      6. 6.8.6 쓰기 제안
      7. 6.8.7 자동 대문자 전환
      8. 6.8.8 자동 수정
      9. 6.8.9 입력 방식: inputmode 속성
      10. 6.8.10 입력 방식: enterkeyhint 속성
    9. 6.9 페이지 내 검색
      1. 6.9.1 소개
      2. 6.9.2 detailshidden=until-found과의 상호작용
      3. 6.9.3 선택과의 상호작용
    10. 6.10 닫기 요청과 닫기 감시자
      1. 6.10.1 닫기 요청
      2. 6.10.2 닫기 감시자 인프라
      3. 6.10.3 CloseWatcher 인터페이스
    11. 6.11 드래그 앤 드롭
      1. 6.11.1 소개
      2. 6.11.2 드래그 데이터 저장소
      3. 6.11.3 DataTransfer 인터페이스
        1. 6.11.3.1 DataTransferItemList 인터페이스
        2. 6.11.3.2 DataTransferItem 인터페이스
      4. 6.11.4 DragEvent 인터페이스
      5. 6.11.5 처리 모델
      6. 6.11.6 이벤트 요약
      7. 6.11.7 draggable 속성
      8. 6.11.8 드래그 앤 드롭 모델의 보안 위험
    12. 6.12 popover 속성
      1. 6.12.1 팝오버 타겟 속성
      2. 6.12.2 팝오버 라이트 해제
  7. 7 웹 페이지 로드
    1. 7.1 지원 개념
      1. 7.1.1 출처
        1. 7.1.1.1 사이트
        2. 7.1.1.2 동일 출처 제한 완화
      2. 7.1.2 출처 기반 에이전트 클러스터
      3. 7.1.3 교차 출처 오프너 정책
        1. 7.1.3.1 헤더
        2. 7.1.3.2 교차 출처 오프너 정책으로 인한 브라우징 컨텍스트 그룹 전환
        3. 7.1.3.3 보고
      4. 7.1.4 교차 출처 임베더 정책
        1. 7.1.4.1 헤더
        2. 7.1.4.2 임베더 정책 확인
      5. 7.1.5 샌드박싱
      6. 7.1.6 정책 컨테이너
    2. 7.2 탐색 및 세션 기록 관련 API
      1. 7.2.1 Window, WindowProxy, Location 객체에 대한 보안 인프라
        1. 7.2.1.1 IDL과의 통합
        2. 7.2.1.2 공유된 내부 슬롯: [[CrossOriginPropertyDescriptorMap]]
        3. 7.2.1.3 공유된 추상 연산
          1. 7.2.1.3.1 CrossOriginProperties ( O )
          2. 7.2.1.3.2 CrossOriginPropertyFallback ( P )
          3. 7.2.1.3.3 IsPlatformObjectSameOrigin ( O )
          4. 7.2.1.3.4 CrossOriginGetOwnPropertyHelper ( O, P )
          5. 7.2.1.3.5 CrossOriginGet ( O, P, Receiver )
          6. 7.2.1.3.6 CrossOriginSet ( O, P, V, Receiver )
          7. 7.2.1.3.7 CrossOriginOwnPropertyKeys ( O )
      2. 7.2.2 Window 객체
        1. 7.2.2.1 윈도우 열기 및 닫기
        2. 7.2.2.2 Window 객체에 대한 인덱스 접근
        3. 7.2.2.3 Window 객체에 대한 이름 접근
        4. 7.2.2.4 관련 창에 액세스
        5. 7.2.2.5 역사적인 브라우저 인터페이스 요소 API
        6. 7.2.2.6 Window 객체에 대한 스크립트 설정
      3. 7.2.3 WindowProxy 이색 객체
        1. 7.2.3.1 [[GetPrototypeOf]] ( )
        2. 7.2.3.2 [[SetPrototypeOf]] ( V )
        3. 7.2.3.3 [[IsExtensible]] ( )
        4. 7.2.3.4 [[PreventExtensions]] ( )
        5. 7.2.3.5 [[GetOwnProperty]] ( P )
        6. 7.2.3.6 [[DefineOwnProperty]] ( P, Desc )
        7. 7.2.3.7 [[Get]] ( P, Receiver )
        8. 7.2.3.8 [[Set]] ( P, V, Receiver )
        9. 7.2.3.9 [[Delete]] ( P )
        10. 7.2.3.10 [[OwnPropertyKeys]] ( )
      4. 7.2.4 Location 인터페이스
        1. 7.2.4.1 [[GetPrototypeOf]] ( )
        2. 7.2.4.2 [[SetPrototypeOf]] ( V )
        3. 7.2.4.3 [[IsExtensible]] ( )
        4. 7.2.4.4 [[PreventExtensions]] ( )
        5. 7.2.4.5 [[GetOwnProperty]] ( P )
        6. 7.2.4.6 [[DefineOwnProperty]] ( P, Desc )
        7. 7.2.4.7 [[Get]] ( P, Receiver )
        8. 7.2.4.8 [[Set]] ( P, V, Receiver )
        9. 7.2.4.9 [[Delete]] ( P )
        10. 7.2.4.10 [[OwnPropertyKeys]] ( )
      5. 7.2.5 History 인터페이스
      6. 7.2.6 네비게이션 API
        1. 7.2.6.1 소개
        2. 7.2.6.2 Navigation 인터페이스
        3. 7.2.6.3 핵심 인프라
        4. 7.2.6.4 엔트리 목록 초기화 및 업데이트
        5. 7.2.6.5 NavigationHistoryEntry 인터페이스
        6. 7.2.6.6 히스토리 엔트리 목록
        7. 7.2.6.7 내비게이션 시작
        8. 7.2.6.8 진행 중인 네비게이션 추적
        9. 7.2.6.9 NavigationActivation 인터페이스
        10. 7.2.6.10 navigate 이벤트
          1. 7.2.6.10.1 NavigateEvent 인터페이스
          2. 7.2.6.10.2 NavigationPrecommitController 인터페이스
          3. 7.2.6.10.3 NavigationDestination 인터페이스
          4. 7.2.6.10.4 이벤트 발생
          5. 7.2.6.10.5 스크롤 및 포커스 동작
      7. 7.2.7 이벤트 인터페이스
        1. 7.2.7.1 NavigationCurrentEntryChangeEvent 인터페이스
        2. 7.2.7.2 PopStateEvent 인터페이스
        3. 7.2.7.3 HashChangeEvent 인터페이스
        4. 7.2.7.4 PageSwapEvent 인터페이스
        5. 7.2.7.5 PageRevealEvent 인터페이스
        6. 7.2.7.6 PageTransitionEvent 인터페이스
        7. 7.2.7.7 BeforeUnloadEvent 인터페이스
      8. 7.2.8 NotRestoredReasons 인터페이스
    3. 7.3 문서 시퀀스의 인프라스트럭처
      1. 7.3.1 탐색 가능 항목
        1. 7.3.1.1 탐색 가능한 탐색 항목
        2. 7.3.1.2 최상위 탐색 가능 항목
        3. 7.3.1.3 자식 내비게이블
        4. 7.3.1.4 Jake 다이어그램
        5. 7.3.1.5 관련 내비게이블 컬렉션
        6. 7.3.1.6 내비게이블 파괴
        7. 7.3.1.7 내비게이블 대상 이름
      2. 7.3.2 브라우징 컨텍스트
        1. 7.3.2.1 브라우징 컨텍스트 생성
        2. 7.3.2.2 관련 브라우징 컨텍스트
        3. 7.3.2.3 브라우징 컨텍스트 그룹화
      3. 7.3.3 완전히 활성화된 문서
    4. 7.4 내비게이션 및 세션 기록
      1. 7.4.1 세션 기록
        1. 7.4.1.1 세션 기록 항목
        2. 7.4.1.2 문서 상태
        3. 7.4.1.3 세션 기록의 중앙 집중식 수정
        4. 7.4.1.4 세션 기록에 대한 저수준 작업
      2. 7.4.2 내비게이션
        1. 7.4.2.1 지원 개념
        2. 7.4.2.2 내비게이션 시작
        3. 7.4.2.3 내비게이션 종료
          1. 7.4.2.3.1 일반적인 교차 문서 내비게이션 사례
          2. 7.4.2.3.2 javascript: URL 특수 사례
          3. 7.4.2.3.3 단편 탐색
          4. 7.4.2.3.4 비 가져오기 스킴과 외부 소프트웨어
        4. 7.4.2.4 탐색 방지
        5. 7.4.2.5 탐색 중단
      3. 7.4.3 새로 고침 및 탐색
      4. 7.4.4 비-프래그먼트 동기 "탐색"
      5. 7.4.5 세션 기록 항목 채우기
      6. 7.4.6 세션 기록 단계 적용
        1. 7.4.6.1 트래버서블 업데이트
        2. 7.4.6.2 문서 업데이트
        3. 7.4.6.3 문서 표시
        4. 7.4.6.4 프래그먼트로 스크롤
        5. 7.4.6.5 저장된 히스토리 항목 상태
    5. 7.5 문서 생명주기
      1. 7.5.1 공유 문서 생성 인프라
      2. 7.5.2 HTML 문서 로딩
      3. 7.5.3 XML 문서 로딩
      4. 7.5.4 텍스트 문서 로딩
      5. 7.5.5 multipart/x-mixed-replace 문서 로딩
      6. 7.5.6 미디어 문서 로딩
      7. 7.5.7 >DOM이 없는 인라인 콘텐츠를 위한 문서 로딩
      8. 7.5.8 로딩 과정 마무리
      9. 7.5.9 문서 언로드
      10. 7.5.10 문서 파기
      11. 7.5.11 문서 로드 중단
    6. 7.6 사전적 로딩
      1. 7.6.1 사전적 규칙
        1. 7.6.1.1 데이터 모델
        2. 7.6.1.2 파싱
        3. 7.6.1.3 처리 모델
      2. 7.6.2 탐색 프리페칭
      3. 7.6.3 `Speculation-Rules` 헤더
      4. 7.6.4 `Sec-Speculation-Tags` 헤더
      5. 7.6.5 보안 고려사항
        1. 7.6.5.1 교차 사이트 요청
        2. 7.6.5.2 주입된 콘텐츠
        3. 7.6.5.3 IP 익명화
      6. 7.6.6 개인정보 보호 고려사항
        1. 7.6.6.1 휴리스틱 및 선택성
        2. 7.6.6.2 상태 분할
        3. 7.6.6.3 신원 결합
    7. 7.7 `X-Frame-Options` 헤더
    8. 7.8 `Refresh` 헤더
    9. 7.9 브라우저 사용자 인터페이스 고려사항
  8. 8 웹 애플리케이션 API
    1. 8.1 스크립팅
      1. 8.1.1 소개
      2. 8.1.2 에이전트 및 에이전트 클러스터
        1. 8.1.2.1 JavaScript 에이전트 형식과의 통합
        2. 8.1.2.2 JavaScript 에이전트 클러스터 형식과의 통합
      3. 8.1.3 영역과 그 대응 항목
        1. 8.1.3.1 환경
        2. 8.1.3.2 환경 설정 객체
        3. 8.1.3.3 영역, 설정 객체, 및 전역 객체
          1. 8.1.3.3.1 진입
          2. 8.1.3.3.2 담당
          3. 8.1.3.3.3 현재
          4. 8.1.3.3.4 관련
        4. 8.1.3.4 스크립팅 활성화 및 비활성화
        5. 8.1.3.5 보안 컨텍스트
      4. 8.1.4 스크립팅 처리 모델
        1. 8.1.4.1 스크립트
        2. 8.1.4.2 스크립트 가져오기
        3. 8.1.4.3 스크립트 생성
        4. 8.1.4.4 스크립트 호출
        5. 8.1.4.5 스크립트 중단
        6. 8.1.4.6 런타임 스크립트 오류
        7. 8.1.4.7 처리되지 않은 프로미스 거부
        8. 8.1.4.8 import 맵 구문 분석 결과
        9. 8.1.4.9 추측 규칙 파싱 결과
      5. 8.1.5 모듈 명세자 해결
        1. 8.1.5.1 해결 알고리즘
        2. 8.1.5.2 임포트 맵
        3. 8.1.5.3 임포트 맵 처리 모델
      6. 8.1.6 JavaScript 명세 호스트 훅
        1. 8.1.6.1 HostEnsureCanAddPrivateElement 구현(O)
        2. 8.1.6.2 HostEnsureCanCompileStrings(realm, parameterStrings, bodyString, codeString, compilationType, parameterArgs, bodyArg)
        3. 8.1.6.3 HostGetCodeForEval(argument)
        4. 8.1.6.4 HostPromiseRejectionTracker(promise, operation)
        5. 8.1.6.5 HostSystemUTCEpochNanoseconds(global)
        6. 8.1.6.6 JavaScript 작업 관련 호스트 훅
          1. 8.1.6.6.1 HostCallJobCallback(callback, V, argumentsList)
          2. 8.1.6.6.2 HostEnqueueFinalizationRegistryCleanupJob(finalizationRegistry)
          3. 8.1.6.6.3 HostEnqueueGenericJob(job, realm)
          4. 8.1.6.6.4 HostEnqueuePromiseJob(job, realm)
          5. 8.1.6.6.5 HostEnqueueTimeoutJob(job, realm, milliseconds)
          6. 8.1.6.6.6 HostMakeJobCallback(callable)
        7. 8.1.6.7 모듈 관련 호스트 훅
          1. 8.1.6.7.1 HostGetImportMetaProperties(moduleRecord)
          2. 8.1.6.7.2 HostGetSupportedImportAttributes()
          3. 8.1.6.7.3 HostLoadImportedModule(referrer, moduleRequest, loadState, payload)
      7. 8.1.7 이벤트 루프
        1. 8.1.7.1 정의
        2. 8.1.7.2 태스크 큐에 추가하기
        3. 8.1.7.3 처리 모델
        4. 8.1.7.4 일반 작업 소스
        5. 8.1.7.5 다른 사양에서 이벤트 루프 다루기
      8. 8.1.8 이벤트
        1. 8.1.8.1 이벤트 핸들러
        2. 8.1.8.2 요소, Document 객체 및 Window 객체의 이벤트 핸들러
          1. 8.1.8.2.1 IDL 정의
        3. 8.1.8.3 이벤트 발생
    2. 8.2 WindowOrWorkerGlobalScope 믹스인
    3. 8.3 Base64 유틸리티 메서드
    4. 8.4 동적 마크업 삽입
      1. 8.4.1 입력 스트림 열기
      2. 8.4.2 입력 스트림 닫기
      3. 8.4.3 document.write()
      4. 8.4.4 document.writeln()
    5. 8.5 DOM 파싱 및 직렬화 API
      1. 8.5.1 DOMParser 인터페이스
      2. 8.5.2 안전하지 않은 HTML 파싱 메서드
      3. 8.5.3 HTML 직렬화 메서드
      4. 8.5.4 innerHTML 속성
      5. 8.5.5 outerHTML 속성
      6. 8.5.6 insertAdjacentHTML() 메서드
      7. 8.5.7 createContextualFragment() 메서드
      8. 8.5.8 XMLSerializer 인터페이스
    6. 8.6 타이머
    7. 8.7 미시작업 큐잉
    8. 8.8 사용자 프롬프트
      1. 8.8.1 간단한 대화 상자
      2. 8.8.2 인쇄
    9. 8.9 시스템 상태 및 기능
      1. 8.9.1 Navigator 객체
        1. 8.9.1.1 클라이언트 식별
        2. 8.9.1.2 언어 기본 설정
        3. 8.9.1.3 브라우저 상태
        4. 8.9.1.4 사용자 정의 스킴 핸들러: registerProtocolHandler() 메서드
          1. 8.9.1.4.1 보안 및 개인정보 보호
          2. 8.9.1.4.2 사용자 에이전트 자동화
        5. 8.9.1.5 쿠키
        6. 8.9.1.6 PDF 보기 지원
    10. 8.10 이미지
      1. 8.10.1 ImageData 인터페이스
      2. 8.10.2 ImageBitmap 인터페이스
    11. 8.11 애니메이션 프레임
  9. 9 통신
    1. 9.1 MessageEvent 인터페이스
    2. 9.2 서버-발신 이벤트
      1. 9.2.1 소개
      2. 9.2.2 EventSource 인터페이스
      3. 9.2.3 처리 모델
      4. 9.2.4 `Last-Event-ID` 헤더
      5. 9.2.5 이벤트 스트림 구문 분석
      6. 9.2.6 이벤트 스트림 해석
      7. 9.2.7 작성 노트
      8. 9.2.8 연결 없는 푸시 및 기타 기능
      9. 9.2.9 가비지 컬렉션
      10. 9.2.10 구현 조언
    3. 9.3 문서 간 메시징
      1. 9.3.1 소개
      2. 9.3.2 보안
        1. 9.3.2.1 작성자
        2. 9.3.2.2 User agents
      3. 9.3.3 메시지 전송
    4. 9.4 채널 메시징
      1. 9.4.1 소개
        1. 9.4.1.1 예제
        2. 9.4.1.2 웹에서 객체-능력 모델의 기초로서의 포트
        3. 9.4.1.3 서비스 구현을 추상화하는 기반으로서의 포트
      2. 9.4.2 메시지 채널
      3. 9.4.3 MessageEventTarget 믹스인
      4. 9.4.4 메시지 포트
      5. 9.4.5 포트 및 가비지 수집
    5. 9.5 다른 브라우징 컨텍스트로 방송하기
  10. 10 웹 워커
    1. 10.1 소개
      1. 10.1.1 범위
      2. 10.1.2 예제
        1. 10.1.2.1 백그라운드 숫자 계산 워커
        2. 10.1.2.2 JavaScript 모듈을 워커로 사용하기
        3. 10.1.2.3 공유 워커 소개
        4. 10.1.2.4 공유 워커를 사용한 상태 공유
        5. 10.1.2.5 위임
        6. 10.1.2.6 라이브러리 제공
      3. 10.1.3 튜토리얼
        1. 10.1.3.1 전용 워커 생성
        2. 10.1.3.2 전용 워커와의 통신
        3. 10.1.3.3 공유 워커
    2. 10.2 인프라스트럭처
      1. 10.2.1 전역 범위
        1. 10.2.1.1 WorkerGlobalScope 공통 인터페이스
        2. 10.2.1.2 전용 워커와 DedicatedWorkerGlobalScope 인터페이스
        3. 10.2.1.3 공유 워커와 SharedWorkerGlobalScope 인터페이스
      2. 10.2.2 이벤트 루프
      3. 10.2.3 워커의 수명
      4. 10.2.4 처리 모델
      5. 10.2.5 런타임 스크립트 오류
      6. 10.2.6 워커 생성
        1. 10.2.6.1 AbstractWorker 믹스인
        2. 10.2.6.2 워커를 위한 스크립트 설정
        3. 10.2.6.3 전용 워커 및 Worker 인터페이스
        4. 10.2.6.4 공유 워커 및 SharedWorker 인터페이스
      7. 10.2.7 동시 하드웨어 기능
    3. 10.3 워커에서 사용할 수 있는 API
      1. 10.3.1 스크립트 및 라이브러리 가져오기
      2. 10.3.2 WorkerNavigator 인터페이스
      3. 10.3.3 WorkerLocation 인터페이스
  11. 11 워클릿
    1. 11.1 소개
      1. 11.1.1 동기
      2. 11.1.2 코드 멱등성
      3. 11.1.3 추측적 평가
    2. 11.2 예시
      1. 11.2.1 스크립트 로딩
      2. 11.2.2 클래스 등록 및 메서드 호출
    3. 11.3 인프라
      1. 11.3.1 전역 스코프
        1. 11.3.1.1 에이전트 및 이벤트 루프
        2. 11.3.1.2 생성 및 종료
        3. 11.3.1.3 워크릿의 스크립트 설정
      2. 11.3.2 Worklet 클래스
      3. 11.3.3 워클릿의 수명
  12. 12 웹 스토리지
    1. 12.1 소개
    2. 12.2 API
      1. 12.2.1 Storage 인터페이스
      2. 12.2.2 sessionStorage getter
      3. 12.2.3 localStorage getter
      4. 12.2.4 StorageEvent 인터페이스
    3. 12.3 개인정보 보호
      1. 12.3.1 사용자 추적
      2. 12.3.2 데이터의 민감성
    4. 12.4 보안
      1. 12.4.1 DNS 스푸핑 공격
      2. 12.4.2 디렉토리 간 공격
      3. 12.4.3 구현 위험
  13. 13 HTML 문법
    1. 13.1 HTML 문서 작성
      1. 13.1.1 DOCTYPE
      2. 13.1.2 요소
        1. 13.1.2.1 시작 태그
        2. 13.1.2.2 종료 태그
        3. 13.1.2.3 속성
        4. 13.1.2.4 선택적 태그
        5. 13.1.2.5 콘텐츠 모델의 제한사항
        6. 13.1.2.6 원시 텍스트 및 이스케이프 가능한 원시 텍스트 요소의 콘텐츠 제한 사항
      3. 13.1.3 텍스트
        1. 13.1.3.1 개행 문자
      4. 13.1.4 문자 참조
      5. 13.1.5 CDATA 섹션
      6. 13.1.6 주석
    2. 13.2 HTML 문서 구문 분석
      1. 13.2.1 구문 분석 모델 개요
      2. 13.2.2 구문 분석 오류
      3. 13.2.3 입력 바이트 스트림
        1. 13.2.3.1 알려진 문자 인코딩으로 파싱
        2. 13.2.3.2 문자 인코딩 결정하기
        3. 13.2.3.3 문자 인코딩
        4. 13.2.3.4 파싱 중 인코딩 변경
        5. 13.2.3.5 입력 스트림 전처리
      4. 13.2.4 파싱 상태
        1. 13.2.4.1 삽입 모드
        2. 13.2.4.2 열린 요소들의 스택
        3. 13.2.4.3 활성 형식 지정 요소 목록
        4. 13.2.4.4 요소 포인터
        5. 13.2.4.5 기타 구문 분석 상태 플래그
      5. 13.2.5 토큰화
        1. 13.2.5.1 데이터 상태
        2. 13.2.5.2 RCDATA 상태
        3. 13.2.5.3 RAWTEXT 상태
        4. 13.2.5.4 스크립트 데이터 상태
        5. 13.2.5.5 PLAINTEXT 상태
        6. 13.2.5.6 태그 열림 상태
        7. 13.2.5.7 종료 태그 열림 상태
        8. 13.2.5.8 태그 이름 상태
        9. 13.2.5.9 RCDATA 미만 기호 상태
        10. 13.2.5.10 RCDATA 종료 태그 열림 상태
        11. 13.2.5.11 RCDATA 종료 태그 이름 상태
        12. 13.2.5.12 RAWTEXT 미만 기호 상태
        13. 13.2.5.13 RAWTEXT 종료 태그 열림 상태
        14. 13.2.5.14 RAWTEXT 종료 태그 이름 상태
        15. 13.2.5.15 스크립트 데이터 미만 기호 상태
        16. 13.2.5.16 스크립트 데이터 종료 태그 열림 상태
        17. 13.2.5.17 스크립트 데이터 종료 태그 이름 상태
        18. 13.2.5.18 스크립트 데이터 이스케이프 시작 상태
        19. 13.2.5.19 스크립트 데이터 이스케이프 시작 대시 상태
        20. 13.2.5.20 스크립트 데이터 이스케이프 상태
        21. 13.2.5.21 스크립트 데이터 이스케이프 대시 상태
        22. 13.2.5.22 스크립트 데이터 이스케이프 대시 대시 상태
        23. 13.2.5.23 스크립트 데이터 이스케이프 미만 기호 상태
        24. 13.2.5.24 스크립트 데이터 이스케이프 종료 태그 열기 상태
        25. 13.2.5.25 스크립트 데이터 이스케이프 종료 태그 이름 상태
        26. 13.2.5.26 스크립트 데이터 이중 이스케이프 시작 상태
        27. 13.2.5.27 스크립트 데이터 이중 이스케이프 상태
        28. 13.2.5.28 스크립트 데이터 이중 이스케이프 대시 상태
        29. 13.2.5.29 스크립트 데이터 이중 이스케이프 대시 대시 상태
        30. 13.2.5.30 스크립트 데이터 이중 이스케이프 미만 기호 상태
        31. 13.2.5.31 스크립트 데이터 이중 이스케이프 종료 상태
        32. 13.2.5.32 속성 이름 앞 상태
        33. 13.2.5.33 속성 이름 상태
        34. 13.2.5.34 속성 이름 뒤 상태
        35. 13.2.5.35 속성 값 앞 상태
        36. 13.2.5.36속성 값 (이중 인용 부호) 상태
        37. 13.2.5.37속성 값 (단일 인용 부호) 상태
        38. 13.2.5.38 속성 값 (따옴표 없음) 상태
        39. 13.2.5.39 속성 값 이후 (따옴표) 상태
        40. 13.2.5.40 자체 종료 시작 태그 상태
        41. 13.2.5.41 가짜 주석 상태
        42. 13.2.5.42 마크업 선언 열림 상태
        43. 13.2.5.43 주석 시작 상태
        44. 13.2.5.44 주석 시작 대시 상태
        45. 13.2.5.45 주석 상태
        46. 13.2.5.46주석 작은따옴표 상태
        47. 13.2.5.47 주석 작은따옴표 느낌표 상태
        48. 13.2.5.48 주석 작은따옴표 느낌표 대시 상태
        49. 13.2.5.49 주석 작은따옴표 느낌표 대시 대시 상태
        50. 13.2.5.50 주석 끝 대시 상태
        51. 13.2.5.51 주석 끝 상태
        52. 13.2.5.52 주석 끝 느낌표 상태
        53. 13.2.5.53 DOCTYPE 상태
        54. 13.2.5.54 DOCTYPE 이름 이전 상태
        55. 13.2.5.55 DOCTYPE 이름 상태
        56. 13.2.5.56 DOCTYPE 이름 이후 상태
        57. 13.2.5.57 DOCTYPE 공용 키워드 이후 상태
        58. 13.2.5.58 DOCTYPE 공용 식별자 이전 상태
        59. 13.2.5.59 DOCTYPE 공용 식별자 (큰따옴표) 상태
        60. 13.2.5.60 DOCTYPE 공용 식별자 (작은따옴표) 상태
        61. 13.2.5.61 DOCTYPE 공용 식별자 이후 상태
        62. 13.2.5.62 DOCTYPE 공용 및 시스템 식별자 사이 상태
        63. 13.2.5.63 DOCTYPE 시스템 키워드 이후 상태
        64. 13.2.5.64 DOCTYPE 시스템 식별자 이전 상태
        65. 13.2.5.65 DOCTYPE 시스템 식별자 (큰따옴표) 상태
        66. 13.2.5.66 DOCTYPE 시스템 식별자 (작은따옴표) 상태
        67. 13.2.5.67 DOCTYPE 시스템 식별자 이후 상태
        68. 13.2.5.68 잘못된 DOCTYPE 상태
        69. 13.2.5.69 CDATA 섹션 상태
        70. 13.2.5.70 CDATA section bracket state
        71. 13.2.5.71 CDATA section end state
        72. 13.2.5.72 문자 참조 상태
        73. 13.2.5.73 이름이 있는 문자 참조 상태
        74. 13.2.5.74 모호한 앰퍼샌드 상태
        75. 13.2.5.75 숫자 문자 참조 상태
        76. 13.2.5.76 16진수 문자 참조 시작 상태
        77. 13.2.5.77 10진수 문자 참조 시작 상태
        78. 13.2.5.78 16진수 문자 참조 상태
        79. 13.2.5.79 10진수 문자 참조 상태
        80. 13.2.5.80 숫자 문자 참조 종료 상태
      6. 13.2.6 트리 구성
        1. 13.2.6.1 노드 생성 및 삽입
        2. 13.2.6.2 텍스트만 포함하는 요소 파싱
        3. 13.2.6.3 암시적 종료 태그가 있는 요소 닫기
        4. 13.2.6.4 HTML 콘텐츠에서 토큰을 파싱하는 규칙
          1. 13.2.6.4.1 "초기" 삽입 모드
          2. 13.2.6.4.2 "html 이전" 삽입 모드
          3. 13.2.6.4.3 "head 이전" 삽입 모드
          4. 13.2.6.4.4 "head" 삽입 모드
          5. 13.2.6.4.5 "in head noscript" 삽입 모드
          6. 13.2.6.4.6 "after head" 삽입 모드
          7. 13.2.6.4.7 "in body" 삽입 모드
          8. 13.2.6.4.8 "텍스트" 삽입 모드
          9. 13.2.6.4.9 "테이블 내" 삽입 모드
          10. 13.2.6.4.10 "테이블 텍스트" 삽입 모드
          11. 13.2.6.4.11 "캡션" 삽입 모드
          12. 13.2.6.4.12 "열 그룹 안" 삽입 모드
          13. 13.2.6.4.13 "테이블 본문 안" 삽입 모드
          14. 13.2.6.4.14 "행 안" 삽입 모드
          15. 13.2.6.4.15 "셀 내부" 삽입 모드
          16. 13.2.6.4.16 "템플릿 내부" 삽입 모드
          17. 13.2.6.4.17 "본문 이후" 삽입 모드
          18. 13.2.6.4.18 "프레임셋 내부" 삽입 모드
          19. 13.2.6.4.19 "프레임셋 이후" 삽입 모드
          20. 13.2.6.4.20 "본문 이후 이후" 삽입 모드
          21. 13.2.6.4.21 "프레임셋 이후 이후" 삽입 모드
        5. 13.2.6.5 외부 콘텐츠에서 토큰을 파싱하는 규칙
      7. 13.2.7
      8. 13.2.8 추측적 HTML 파싱
      9. 13.2.9 HTML DOM을 인포셋으로 강제 변환
      10. 13.2.10 파서에서의 오류 처리 및 특이한 사례에 대한 소개
        1. 13.2.10.1 잘못 중첩된 태그: <b><i></b></i>
        2. 13.2.10.2 잘못 중첩된 태그: <b><p></b></p>
        3. 13.2.10.3 테이블에서 예상치 못한 마크업
        4. 13.2.10.4 구문 분석 중 페이지를 수정하는 스크립트
        5. 13.2.10.5 여러 문서를 이동하는 스크립트의 실행
        6. 13.2.10.6 닫히지 않은 서식 지정 요소
    3. 13.3 HTML 조각 직렬화
    4. 13.4 HTML 조각 구문 분석
    5. 13.5 이름이 지정된 문자 참조
  14. 14 XML 문법
    1. 14.1 XML 문법으로 문서 작성하기
    2. 14.2 XML 문서 구문 분석
    3. 14.3 XML 조각 직렬화
    4. 14.4 XML 조각 구문 분석
  15. 15 렌더링
    1. 15.1 소개
    2. 15.2 CSS 사용자 에이전트 스타일 시트와 표현 힌트
    3. 15.3 대체되지 않는 요소
      1. 15.3.1 숨겨진 요소
      2. 15.3.2 페이지
      3. 15.3.3 흐름 콘텐츠
      4. 15.3.4 문구 콘텐츠
      5. 15.3.5 양방향 텍스트
      6. 15.3.6 섹션 및 제목
      7. 15.3.7 목록
      8. 15.3.8
      9. 15.3.9 여백 병합 쿼크
      10. 15.3.10 양식 컨트롤
      11. 15.3.11 hr 요소
      12. 15.3.12 fieldsetlegend 요소
    4. 15.4 교체된 요소
      1. 15.4.1 임베디드 콘텐츠
      2. 15.4.2 이미지
      3. 15.4.3 포함된 콘텐츠 및 이미지의 속성
      4. 15.4.4 이미지 맵
    5. 15.5 위젯
      1. 15.5.1 기본 외관
      2. 15.5.2 쓰기 모드
      3. 15.5.3 버튼 레이아웃
      4. 15.5.4 button 요소
      5. 15.5.5 detailssummary 요소
      6. 15.5.6 input 요소를 텍스트 입력 위젯으로 사용
      7. 15.5.7 input 요소를 도메인 특정 위젯으로 사용
      8. 15.5.8 input 요소를 범위 컨트롤로 사용
      9. 15.5.9 input 요소를 색상 선택 도구로 사용
      10. 15.5.10 input 요소를 체크박스 및 라디오 버튼 위젯으로 사용
      11. 15.5.11 input 요소를 파일 업로드 컨트롤로 사용
      12. 15.5.12 input 요소를 버튼으로 사용
      13. 15.5.13 marquee 요소
      14. 15.5.14 meter 요소
      15. 15.5.15 progress 요소
      16. 15.5.16 select 요소
      17. 15.5.17 textarea 요소
    6. 15.6 프레임 및 프레임셋
    7. 15.7 인터랙티브 미디어
      1. 15.7.1 링크, 폼 및 탐색
      2. 15.7.2 title 속성
      3. 15.7.3 호스트 편집
      4. 15.7.4 네이티브 사용자 인터페이스에 렌더링된 텍스트
    8. 15.8 인쇄 매체
    9. 15.9 스타일 없는 XML 문서
  16. 16 사용되지 않는 기능
    1. 16.1사용되지 않지만 준수하는 기능
      1. 16.1.1 사용되지 않지만 준수하는 기능에 대한 경고
    2. 16.2 비준수 기능
    3. 16.3 구현 요구 사항
      1. 16.3.1 marquee 요소
      2. 16.3.2 프레임
      3. 16.3.3 기타 요소, 속성 및 API
  17. 17 IANA 고려사항
    1. 17.1 text/html
    2. 17.2 multipart/x-mixed-replace
    3. 17.3 application/xhtml+xml
    4. 17.4 text/ping
    5. 17.5 application/microdata+json
    6. 17.6 application/speculationrules+json
    7. 17.7 text/event-stream
    8. 17.8 web+ 스킴 접두사
  18. 색인
    1. 요소
    2. 요소 콘텐츠 범주
    3. 속성
    4. 요소 인터페이스
    5. 모든 인터페이스
    6. 이벤트
    7. HTTP 헤더
    8. MIME 유형
  19. 참조
  20. 감사의 말
  21. 지적 재산권

1 소개

1.1 이 명세는 어디에 적합합니까?

이 명세는 웹 플랫폼의 큰 부분을 상세하게 정의합니다. 다른 명세들과의 관계에서 이 명세의 위치를 다음과 같이 요약할 수 있습니다:

CSS SVG MathML 서비스 워커 IDB Fetch CSP AV1 Opus PNG 이 명세서 HTTP TLS DOM Unicode Web IDL MIME URL XML JavaScript Encoding

1.2 이것이 HTML5인가요?

이 섹션은 비규범적입니다.

간단히 말하면: 네.

좀 더 길게 설명하자면: "HTML5"라는 용어는 현대 웹 기술을 지칭하는 유행어로 널리 사용됩니다. 이들 중 많은 부분이 (물론 전부는 아니지만) WHATWG에서 개발되었습니다. 이 문서는 그런 문서 중 하나입니다. 다른 문서는 WHATWG 표준 개요에서 확인할 수 있습니다.

1.3 배경

이 섹션은 비규범적입니다.

HTML은 월드 와이드 웹의 핵심 마크업 언어입니다. 원래 HTML은 과학 문서를 의미론적으로 설명하기 위한 언어로 설계되었습니다. 그러나 그 일반적인 설계는 시간이 지나면서 여러 종류의 문서 및 심지어 응용 프로그램을 설명할 수 있도록 적응되었습니다.

1.4 대상 독자

이 섹션은 비규범적입니다.

이 명세서는 이 명세서에 정의된 기능을 사용하는 문서와 스크립트의 작성자, 이 명세서에 정의된 기능을 사용하는 페이지에서 작동하는 도구의 구현자, 그리고 이 명세서의 요구 사항에 따라 문서 또는 구현의 정확성을 확인하려는 사람들을 대상으로 합니다.

이 문서는 웹 기술에 대한 최소한의 기본 지식이 없는 독자에게는 적합하지 않을 수 있습니다. 일부 내용은 명확성을 희생하고 정확성을 위해, 또는 완전성을 위해 간결성을 희생하기 때문입니다. 더 다가가기 쉬운 튜토리얼과 저술 가이드가 주제를 더 부드럽게 소개할 수 있습니다.

특히, 이 명세서의 기술적인 부분을 완전히 이해하려면 DOM 기본에 대한 친숙함이 필요합니다. Web IDL, HTTP, XML, 유니코드, 문자 인코딩, 자바스크립트, CSS에 대한 이해도 일부에서는 도움이 되지만 필수는 아닙니다.

1.5 범위

이 섹션은 비규범적입니다.

이 명세서는 정적 문서부터 동적 응용 프로그램에 이르는 접근 가능한 페이지를 작성하기 위한 의미 수준의 마크업 언어 및 관련 의미 수준의 스크립팅 API를 제공하는 것으로 제한됩니다.

이 명세서의 범위에는 프레젠테이션의 매체별 사용자 정의를 제공하는 메커니즘이 포함되지 않습니다(웹 브라우저의 기본 렌더링 규칙은 이 명세서의 끝에 포함되어 있으며, 언어의 일부로서 CSS에 연결하는 몇 가지 메커니즘이 제공됩니다).

이 명세서의 범위는 전체 운영 체제를 설명하는 것이 아닙니다. 특히, 하드웨어 구성 소프트웨어, 이미지 편집 도구, 고급 워크스테이션에서 사용자가 매일 사용하는 응용 프로그램은 범위에 포함되지 않습니다. 응용 프로그램의 경우, 이 명세서는 사용자가 가끔 또는 다양한 위치에서 정기적으로 사용할 것으로 예상되며, 낮은 CPU 요구 사항을 가지는 응용 프로그램을 대상으로 합니다. 이러한 응용 프로그램의 예로는 온라인 구매 시스템, 검색 시스템, 게임(특히 멀티플레이어 온라인 게임), 공개 전화번호부 또는 주소록, 통신 소프트웨어(이메일 클라이언트, 인스턴트 메시징 클라이언트, 토론 소프트웨어), 문서 편집 소프트웨어 등이 있습니다.

1.6 역사

이 섹션은 비규범적입니다.

HTML은 첫 5년(1990-1995) 동안 여러 번의 개정을 거쳤고, 주로 처음에는 CERN에서, 이후에는 IETF에서 여러 확장을 경험했습니다.

W3C의 창립과 함께, HTML의 개발은 다시 장소를 옮겼습니다. 1995년 HTML 3.0으로 알려진 HTML 확장의 첫 시도가 중단된 후, 1997년에 완료된 보다 실용적인 접근 방식인 HTML 3.2로 이어졌습니다. 같은 해 말 HTML4가 빠르게 뒤따랐습니다.

그 다음 해, W3C 회원들은 HTML의 진화를 중단하고 XML 기반의 동등한 표현인 XHTML의 작업을 시작하기로 결정했습니다. 이 작업은 새 직렬화만 추가된 HTML4의 XML 재구성인 XHTML 1.0으로 시작되었으며, 2000년에 완료되었습니다. XHTML 1.0 이후, W3C는 XHTML 모듈화라는 배너 아래 다른 작업 그룹이 XHTML을 확장하기 쉽게 만드는 데 초점을 맞추었습니다. 이와 동시에, W3C는 이전의 HTML 및 XHTML 언어와 호환되지 않는 새로운 언어를 개발하는 작업도 진행했으며, 이를 XHTML2라고 불렀습니다.

1998년 HTML의 진화가 중단된 시점에, 브라우저 벤더에 의해 개발된 HTML의 일부 API가 DOM Level 1(1998년)이라는 이름으로 지정되어 공개되었고, DOM Level 2 Core 및 DOM Level 2 HTML(2000년 시작하여 2003년에 완성됨)로 이어졌습니다. 이러한 노력은 이후 일부 DOM Level 3 명세가 2004년에 발표되었지만, Level 3 초안이 모두 완료되기 전에 작업 그룹이 종료되면서 점차 사라졌습니다.

2003년, 차세대 웹 양식으로 자리 잡은 기술인 XForms의 발표는 HTML 자체를 발전시키려는 새로운 관심을 불러일으켰습니다. 이 관심은 XML이 웹 기술로서 기존 배포된 기술(예: HTML)을 대체하기보다는 완전히 새로운 기술(예: RSS 및 이후의 Atom)로서만 제한적으로 배포된다는 인식에서 비롯되었습니다.

XForms 1.0이 도입한 많은 기능을 브라우저가 기존 HTML 웹 페이지와 호환되지 않는 렌더링 엔진을 구현하지 않고도 제공할 수 있도록 HTML4의 양식을 확장할 수 있다는 것을 보여주는 개념 증명이 이 새로운 관심의 첫 결과였습니다. 이 초기 단계에서 초안은 이미 공개적으로 사용 가능했으며, 모든 출처로부터 입력을 이미 요청받고 있었지만, 명세는 오페라 소프트웨어의 저작권 하에 있었습니다.

HTML의 진화가 다시 열려야 한다는 생각은 2004년 W3C 워크숍에서 테스트되었으며, 그 자리에서 HTML5 작업을 뒷받침하는 몇 가지 원칙(아래에 설명됨)과 이전에 언급된 양식 관련 기능만을 다룬 초기 초안 제안서가 모질라와 오페라에 의해 W3C에 공동으로 제시되었습니다. 제안서는 웹의 진화에 대해 이전에 선택된 방향과 충돌한다는 이유로 거부되었습니다. W3C 직원과 회원들은 XML 기반 대체 기술을 계속 개발하기로 투표했습니다.

그 후 얼마 지나지 않아 Apple, Mozilla, Opera는 WHATWG라는 새로운 장소에서 작업을 계속할 의도를 공동으로 발표했습니다. 공개 메일링 리스트가 만들어졌고, 초안은 WHATWG 사이트로 이동되었습니다. 저작권은 이후 세 벤더가 공동으로 소유하고, 명세의 재사용을 허용하도록 수정되었습니다.

WHATWG는 특히 기술이 이전 버전과 호환되어야 한다는 원칙, 명세와 구현이 일치해야 하며 이를 위해 명세를 변경해야 한다면 그렇게 해야 한다는 원칙, 그리고 명세가 구현이 상호 운용성을 완전히 달성할 수 있도록 충분히 상세해야 한다는 원칙에 기반을 두고 있었습니다.

특히 마지막 요구 사항은 HTML5 명세의 범위에 이전에 세 개의 별도 문서로 지정되었던 HTML4, XHTML1, DOM2 HTML이 포함되어야 한다는 것을 의미했습니다. 또한 이전에는 표준으로 간주되지 않았던 것보다 훨씬 더 많은 세부 사항을 포함해야 한다는 것을 의미했습니다.

2006년 W3C는 결국 HTML5 개발에 참여할 의향을 나타냈고, 2007년 WHATWG와 협력하여 HTML5 명세를 개발하기 위해 작업 그룹을 구성했습니다. Apple, Mozilla, Opera는 W3C가 W3C 저작권 하에 명세를 게시할 수 있도록 허용하면서도, WHATWG 사이트에 제한이 적은 라이선스를 가진 버전을 유지했습니다.

수년간 두 그룹은 함께 작업했습니다. 그러나 2011년, 두 그룹은 목표가 다르다는 결론에 도달했습니다: W3C는 "완성된" 버전의 "HTML5"를 발표하기를 원했지만, WHATWG는 계속해서 HTML의 현행 표준을 작업하여 명세를 동결하지 않고, 문제를 수정하며, 필요에 따라 새로운 기능을 추가하여 플랫폼을 발전시키고자 했습니다.

2019년 WHATWG와 W3C는 협력 계약을 체결하여 앞으로 HTML의 단일 버전으로 협력하기로 합의했습니다: 이 문서가 그것입니다.

1.7 디자인 노트

이 섹션은 비규범적입니다.

HTML의 많은 측면이 처음에는 비합리적이고 일관성이 없는 것처럼 보인다는 점을 인정해야 합니다.

HTML, 이를 지원하는 DOM API, 그리고 많은 지원 기술들은 여러 우선순위를 가진 다양한 사람들이 수십 년에 걸쳐 개발한 것이며, 많은 경우 서로의 존재를 알지 못했습니다.

따라서 여러 출처에서 기능이 발생했으며, 항상 일관되게 설계된 것은 아닙니다. 더욱이 웹의 독특한 특성으로 인해, 구현 버그가 실제로 사실상의 표준이 되었고, 이제는 공식적인 표준이 되었으며, 이는 콘텐츠가 수정되기 전에 의도치 않게 이러한 버그에 의존하여 작성되었기 때문입니다.

이 모든 것에도 불구하고 특정 설계 목표를 준수하려는 노력이 있었습니다. 이들은 다음 몇 개의 하위 섹션에서 설명됩니다.

1.7.1 스크립트 실행의 직렬화 가능성

이 섹션은 비규범적입니다.

웹 저자가 멀티스레딩의 복잡성에 노출되지 않도록 HTML과 DOM API는 어떤 스크립트도 다른 스크립트의 동시 실행을 감지할 수 없도록 설계되었습니다. 심지어 워커와 함께 사용하더라도, 모든 글로벌에서 모든 스크립트의 실행을 완전히 직렬화하는 것으로 구현의 동작을 생각할 수 있습니다.

이 일반적인 설계 원칙의 예외는 JavaScript SharedArrayBuffer 클래스입니다. SharedArrayBuffer 객체를 사용하면 다른 에이전트에서 스크립트가 동시에 실행되고 있음을 관찰할 수 있습니다. 또한, JavaScript 메모리 모델로 인해 이러한 스크립트 간의 직렬화된 스크립트 실행뿐만 아니라 직렬화된 실행을 통해서도 나타낼 수 없는 상황이 발생할 수 있습니다.

1.7.2 확장성

이 섹션은 비규범적입니다.

HTML에는 안전한 방식으로 의미를 추가할 수 있는 다양한 확장 메커니즘이 있습니다:

1.8 HTML 대 XML 문법

이 섹션은 비규범적입니다.

이 명세서는 문서와 응용 프로그램을 설명하는 추상 언어와 이 언어를 사용하는 리소스의 메모리 내 표현과 상호작용하기 위한 일부 API를 정의합니다.

메모리 내 표현은 "DOM HTML" 또는 간단히 "DOM"으로 알려져 있습니다.

이 추상 언어를 사용하는 리소스를 전송하는 데 사용할 수 있는 다양한 구체적인 문법이 있으며, 이 명세서에서는 그중 두 가지를 정의합니다.

첫 번째 구체적인 문법은 HTML 문법입니다. 이것은 대부분의 작성자에게 권장되는 형식입니다. 이는 대부분의 기존 웹 브라우저와 호환됩니다. 문서가 text/html MIME 유형으로 전송되면 웹 브라우저에서 HTML 문서로 처리됩니다. 이 명세서는 단순히 "HTML"로 알려진 최신 HTML 문법을 정의합니다.

두 번째 구체적인 문법은 XML입니다. 문서가 XML MIME 유형으로, 예를 들어 application/xhtml+xml로 전송되면, 웹 브라우저에서 XML 문서로 처리되어 XML 프로세서에 의해 파싱됩니다. 작성자는 XML과 HTML의 처리가 다르다는 점을 상기해야 합니다. 특히, 사소한 구문 오류라도 XML로 레이블이 지정된 문서가 완전히 렌더링되는 것을 방지할 수 있지만, HTML 문법에서는 무시될 수 있습니다.

HTML의 XML 문법은 이전에 "XHTML"로 불렸지만, 이 명세서는 이 용어를 사용하지 않습니다(다른 이유 중 하나는 MathML 및 SVG의 HTML 문법에 대해 이러한 용어가 사용되지 않기 때문입니다).

DOM, HTML 문법 및 XML 문법은 동일한 콘텐츠를 모두 표현할 수 없습니다. 예를 들어, 네임스페이스는 HTML 문법을 사용하여 표현할 수 없지만, DOM 및 XML 문법에서는 지원됩니다. 유사하게, noscript 기능을 사용하는 문서는 HTML 문법을 사용하여 표현할 수 있지만, DOM이나 XML 문법으로는 표현할 수 없습니다. "-->" 문자열을 포함하는 주석은 HTML 및 XML 문법에서는 표현할 수 없지만, DOM에서는 표현할 수 있습니다.

1.9 이 명세서의 구조

이 섹션은 비규범적입니다.

이 명세서는 다음과 같은 주요 섹션으로 나뉩니다:

소개
HTML 표준의 배경을 제공하는 비규범적 자료입니다.
공통 인프라
준수 클래스, 알고리즘, 정의, 그리고 명세서의 나머지 부분의 공통 기반을 정의합니다.
HTML 문서의 의미, 구조 및 API
문서는 요소로 구성됩니다. 이 요소들은 DOM을 사용하여 트리를 형성합니다. 이 섹션에서는 이 DOM의 기능을 정의하고 모든 요소에 공통된 기능과 요소를 정의하는 데 사용되는 개념을 소개합니다.
HTML 요소
각 요소에는 미리 정의된 의미가 있으며, 이 섹션에서 설명됩니다. 요소를 사용하는 방법에 대한 작성자 규칙과 각 요소를 처리하는 방법에 대한 사용자 에이전트 요구 사항도 제공됩니다. 여기에는 비디오 재생 및 자막, 폼 컨트롤 및 폼 제출, HTML 캔버스로 알려진 2D 그래픽 API와 같은 HTML의 주요 기능이 포함됩니다.
마이크로데이터
이 명세서는 문서에 기계 판독 가능한 주석을 추가하는 메커니즘을 도입하여 도구가 문서에서 이름-값 쌍의 트리를 추출할 수 있도록 합니다. 이 섹션에서는 이 메커니즘과 HTML 문서를 다른 형식으로 변환하는 데 사용할 수 있는 몇 가지 알고리즘을 설명합니다. 이 섹션에서는 연락처 정보, 캘린더 이벤트 및 라이선스 작업에 대한 몇 가지 샘플 마이크로데이터 어휘도 정의합니다.
사용자 상호작용
HTML 문서는 사용자가 콘텐츠와 상호작용하고 수정할 수 있는 여러 메커니즘을 제공할 수 있으며, 이 섹션에서는 포커스 작동 방식 및 드래그 앤 드롭과 같은 기능을 설명합니다.
웹 페이지 로드
HTML 문서는 진공 상태에 존재하지 않으며, 이 섹션에서는 웹 브라우저와 같이 여러 페이지를 다루는 환경에 영향을 미치는 많은 기능을 정의합니다.
웹 애플리케이션 API
이 섹션에서는 HTML에서 애플리케이션을 스크립팅하는 기본 기능을 소개합니다.
웹 워커
이 섹션에서는 JavaScript의 백그라운드 스레드를 위한 API를 정의합니다.
워크릿
이 섹션에서는 메인 JavaScript 실행 환경과 분리하여 JavaScript를 실행해야 하는 API를 위한 인프라를 정의합니다.
통신 API
이 섹션에서는 HTML로 작성된 애플리케이션이 동일한 클라이언트에서 실행되는 다른 도메인의 애플리케이션과 통신할 수 있는 몇 가지 메커니즘을 설명합니다. 또한 서버 푸시 이벤트 스트림 메커니즘인 Server Sent Events 또는 EventSource와 Web Sockets로 알려진 스크립트를 위한 양방향 풀 듀플렉스 소켓 프로토콜을 소개합니다.
웹 스토리지
이 섹션에서는 이름-값 쌍을 기반으로 한 클라이언트 측 스토리지 메커니즘을 정의합니다.
HTML 문법
XML 문법
이러한 모든 기능이 직렬화된 형식으로 표현되어 다른 사람에게 전송될 수 없다면 무의미할 것입니다. 따라서 이 섹션에서는 HTML 및 XML의 문법과 해당 문법을 사용하여 콘텐츠를 파싱하는 방법에 대한 규칙을 정의합니다.
렌더링
이 섹션에서는 웹 브라우저의 기본 렌더링 규칙을 정의합니다.

또한 폐기된 기능IANA 고려사항을 나열한 부록과 여러 색인이 있습니다.

1.9.1 이 명세서를 읽는 방법

이 명세서는 다른 모든 명세서와 마찬가지로 읽어야 합니다. 먼저, 처음부터 끝까지 여러 번 읽어야 합니다. 그런 다음, 최소한 한 번은 거꾸로 읽어야 합니다. 그 후에는 목차에서 무작위로 섹션을 선택하고 모든 교차 참조를 따라 읽어야 합니다.

아래의 준수 요구 사항 섹션에 설명된 것처럼, 이 명세서는 다양한 준수 클래스에 대한 준수 기준을 설명합니다. 특히, 작성자와 작성된 문서와 같은 생산자에게 적용되는 준수 요구 사항과 웹 브라우저와 같은 소비자에게 적용되는 준수 요구 사항이 있습니다. 이들은 무엇을 요구하는지에 따라 구별할 수 있습니다: 생산자에 대한 요구 사항은 허용되는 것을 명시하고, 소비자에 대한 요구 사항은 소프트웨어가 어떻게 작동해야 하는지를 명시합니다.

예를 들어, "the foo 속성의 값은 유효한 정수여야 한다"는 생산자에 대한 요구 사항입니다. 이는 허용된 값을 명시하기 때문입니다. 반면, "the foo 속성의 값은 정수를 파싱하는 규칙을 사용하여 파싱되어야 한다"는 소비자에 대한 요구 사항입니다. 이는 콘텐츠를 처리하는 방법을 설명합니다.

생산자에 대한 요구 사항은 소비자에게 전혀 영향을 미치지 않습니다.

위의 예를 계속해서, 특정 속성의 값이 유효한 정수로 제한된다는 요구 사항은 소비자에 대한 요구 사항과 전혀 관련이 없습니다. 실제로 소비자는 값이 요구 사항을 준수하는지 여부에 전혀 영향을 받지 않는 불투명한 문자열로 해당 속성을 처리해야 할 수도 있습니다. 또는 (이전 예와 같이) 소비자가 유효하지 않은(이 경우 비숫자) 값을 처리하는 방법을 정의하는 특정 규칙을 사용하여 값을 파싱해야 할 수도 있습니다.

1.9.2 타이포그래픽 규칙

이것은 정의, 요구 사항 또는 설명입니다.

이것은 주석입니다.

이것은 예제입니다.

이것은 열려 있는 이슈입니다.

이것은 경고입니다.

[Exposed=Window]
interface Example {
  // this is an IDL definition
};
variable = object.method([optionalArgument])

이것은 인터페이스의 사용법을 설명하는 작성자에게 주는 참고 사항입니다.

/* this is a CSS fragment */

용어의 정의 인스턴스는 이와 같이 표시됩니다. 해당 용어의 사용은 이와 같이 또는 이와 같이 표시됩니다.

요소, 속성 또는 API의 정의 인스턴스는 이와 같이 표시됩니다. 해당 요소, 속성 또는 API에 대한 참조는 이와 같이 표시됩니다.

다른 코드 조각은 이와 같이 표시됩니다.

변수는 이와 같이 표시됩니다.

알고리즘에서 동기화 섹션의 단계는 ⌛로 표시됩니다.

일부 경우에는 조건과 해당 조건에 적용되는 요구 사항을 포함한 목록의 형태로 요구 사항이 제공됩니다. 이러한 경우 조건에 적용되는 요구 사항은 항상 조건 다음에 나오는 첫 번째 요구 사항 집합이며, 해당 요구 사항에 대해 여러 조건 집합이 있는 경우에도 마찬가지입니다. 이러한 경우는 다음과 같이 표시됩니다:

이것은 조건입니다.
이것은 또 다른 조건입니다.
위 조건에 적용되는 요구 사항입니다.
이것은 세 번째 조건입니다.
세 번째 조건에 적용되는 요구 사항입니다.

1.10 HTML 간단 소개

이 섹션은 비규범적입니다.

기본적인 HTML 문서는 다음과 같습니다:

<!DOCTYPE html>
<html lang="en">
 <head>
  <title>Sample page</title>
 </head>
 <body>
  <h1>Sample page</h1>
  <p>This is a <a href="demo.html">simple</a> sample.</p>
  <!-- this is a comment -->
 </body>
</html>

HTML 문서는 요소와 텍스트로 구성된 트리로 이루어져 있습니다. 각 요소는 "<body>"와 같은 시작 태그와 "</body>"와 같은 종료 태그로 소스에서 표시됩니다. (특정 상황에서는 일부 시작 태그와 종료 태그를 생략할 수 있으며, 다른 태그에 의해 암시될 수 있습니다.)

태그는 요소가 서로 겹치지 않고 완전히 다른 요소 안에 포함되도록 중첩되어야 합니다:

<p>This is <em>very <strong>wrong</em>!</strong></p>
<p>This <em>is <strong>correct</strong>.</em></p>

이 명세서는 HTML에서 사용할 수 있는 요소 집합과 요소를 중첩할 수 있는 방법에 대한 규칙을 정의합니다.

요소는 작동 방식을 제어하는 속성을 가질 수 있습니다. 아래 예에서는 하이퍼링크a 요소와 해당 href 속성을 사용하여 생성되었습니다:

<a href="demo.html">simple</a>

속성은 시작 태그 안에 배치되며, 이름으로 구성되며, "=" 문자로 구분됩니다. 속성 값에 ASCII 공백 문자", ', `, =, <, >가 포함되지 않은 경우에는 따옴표를 사용하지 않아도 됩니다. 그렇지 않은 경우, 단일 또는 이중 따옴표를 사용하여 값을 따옴표로 묶어야 합니다. 값이 빈 문자열인 경우 "=" 문자와 함께 값을 생략할 수 있습니다.

<!-- 빈 속성 -->
<input name=address disabled>
<input name=address disabled="">

<!-- 값이 있는 속성 -->
<input name=address maxlength=200>
<input name=address maxlength='200'>
<input name=address maxlength="200">

HTML 사용자 에이전트(예: 웹 브라우저)는 이 마크업을 파싱하여 이를 DOM(문서 객체 모델) 트리로 변환합니다. DOM 트리는 문서의 메모리 내 표현입니다.

DOM 트리는 여러 종류의 노드를 포함하며, 특히 DocumentType 노드, Element 노드, Text 노드, Comment 노드 및 경우에 따라 ProcessingInstruction 노드를 포함합니다.

이 섹션의 위쪽에 있는 마크업 스니펫은 다음과 같은 DOM 트리로 변환됩니다:

이 트리의 문서 요소html 요소이며, HTML 문서에서 항상 이 위치에 나타납니다. 이 요소는 head 요소와 body 요소, 그리고 그 사이의 텍스트 노드를 포함합니다.

DOM 트리에는 예상보다 많은 텍스트 노드가 포함되어 있으며, 소스에는 여러 개의 공백 문자(여기서는 "␣"로 표시)와 줄 바꿈("⏎")이 포함되어 있으며, 이들은 모두 DOM에서 텍스트 노드로 나타납니다. 그러나 역사적 이유로 인해 원본 마크업의 모든 공백 문자와 줄 바꿈이 DOM에 나타나지는 않습니다. 특히 head 시작 태그 이전의 모든 공백 문자는 조용히 삭제되고, body 종료 태그 이후의 모든 공백 문자는 body의 끝에 배치됩니다.

head 요소에는 title 요소가 포함되어 있으며, 이 요소에는 "Sample page"라는 텍스트가 있는 텍스트 노드가 포함되어 있습니다. 유사하게, body 요소에는 h1 요소, p 요소 및 주석이 포함되어 있습니다.


이 DOM 트리는 페이지의 스크립트에서 조작할 수 있습니다. 스크립트(일반적으로 JavaScript로 작성됨)는 script 요소를 사용하거나 이벤트 핸들러 콘텐츠 속성을 사용하여 포함할 수 있는 작은 프로그램입니다. 예를 들어, 여기에서 폼의 output 요소의 값을 "Hello World"로 설정하는 스크립트가 포함된 폼이 있습니다:

<form name="main">
 Result: <output name="result"></output>
 <script>
  document.forms.main.elements.result.value = 'Hello World';
 </script>
</form>

DOM 트리의 각 요소는 객체로 표현되며, 이러한 객체에는 조작할 수 있는 API가 있습니다. 예를 들어, 링크(예: 위 트리의 a 요소)는 "href" 속성을 여러 가지 방법으로 변경할 수 있습니다:

var a = document.links[0]; // 문서에서 첫 번째 링크를 얻습니다
a.href = 'sample.html'; // 링크의 대상 URL을 변경합니다
a.protocol = 'https'; // URL의 스킴 부분만 변경합니다
a.setAttribute('href', 'https://example.com/'); // 콘텐츠 속성을 직접 변경합니다

DOM 트리는 구현이 처리하고 표시할 때(특히 웹 브라우저와 같은 상호작용형 구현에서) HTML 문서를 표현하는 방식으로 사용되기 때문에, 이 명세서는 주로 위에서 설명한 마크업 대신 DOM 트리를 기준으로 작성되었습니다.


HTML 문서는 상호작용 콘텐츠의 매체 독립적인 설명을 나타냅니다. HTML 문서는 화면에 렌더링되거나, 음성 합성기를 통해 읽히거나, 점자 디스플레이에 표시될 수 있습니다. 이러한 렌더링이 정확히 어떻게 이루어지는지에 영향을 미치기 위해, 작성자는 CSS와 같은 스타일링 언어를 사용할 수 있습니다.

다음 예에서는 CSS를 사용하여 페이지가 노란색 배경에 파란색 텍스트로 설정되었습니다.

<!DOCTYPE html>
<html lang="en">
 <head>
  <title>Sample styled page</title>
  <style>
   body { background: navy; color: yellow; }
  </style>
 </head>
 <body>
  <h1>Sample styled page</h1>
  <p>This page is just a demo.</p>
 </body>
</html>

HTML을 사용하는 방법에 대한 자세한 내용은 작성자가 튜토리얼과 가이드를 참조할 것을 권장합니다. 이 명세서에 포함된 일부 예제도 유용할 수 있지만, 초보 작성자는 이 명세서가 필요에 따라 정의된 언어를 처음에는 이해하기 어려울 수 있는 수준의 세부 사항으로 정의하고 있다는 점을 유의해야 합니다.

1.10.1 HTML로 보안 애플리케이션 작성하기

이 섹션은 비규범적입니다.

HTML을 사용하여 상호작용 사이트를 만들 때, 공격자가 사이트 자체 또는 사이트 사용자의 무결성을 손상시킬 수 있는 취약점을 도입하지 않도록 주의해야 합니다.

이 문제에 대한 포괄적인 연구는 이 문서의 범위를 벗어나며, 작성자는 이 문제를 더 자세히 연구할 것을 강력히 권장합니다. 그러나 이 섹션에서는 HTML 애플리케이션 개발에서 흔히 발생하는 몇 가지 함정을 간단히 소개하려고 합니다.

웹의 보안 모델은 "출처" 개념을 기반으로 하며, 따라서 웹에서 발생할 수 있는 많은 공격은 교차 출처 작업과 관련이 있습니다. [ORIGIN]

사용자 입력 검증 안 함
크로스 사이트 스크립팅(XSS)
SQL 인젝션

신뢰할 수 없는 입력(예: 텍스트 댓글, URL 매개변수의 값, 타사 사이트의 메시지 등과 같은 사용자 생성 콘텐츠)을 수락할 때는 사용하기 전에 데이터를 검증하고 표시할 때 적절히 이스케이프해야 합니다. 이를 수행하지 않으면 악의적인 사용자가 거짓 사용자 정보 제공(예: 음수 나이와 같은 사소한 것에서부터)부터 정보를 포함하는 페이지를 볼 때마다 스크립트를 실행하여 공격을 전파하는 등의 심각한 공격, 서버의 모든 데이터를 삭제하는 등의 치명적인 공격에 이르기까지 다양한 공격을 수행할 수 있습니다.

사용자 입력을 검증하는 필터를 작성할 때는 항상 허용 목록 기반 필터를 사용하여 알려진 안전한 구문만 허용하고 모든 다른 입력을 허용하지 않도록 해야 합니다. 블랙리스트 기반 필터는 알려진 나쁜 입력을 차단하고 나머지는 모두 허용하는 방식으로는 보안이 보장되지 않습니다. 나쁜 입력 중 일부는 아직 알려지지 않았을 수 있기 때문입니다(예: 미래에 새로운 공격 방식이 발명될 수 있습니다).

예를 들어, URL의 쿼리 문자열을 확인하여 표시할 내용을 결정한 다음, 사이트가 해당 페이지로 사용자를 리디렉션하여 메시지를 표시한다고 가정해 보겠습니다:

<ul>
 <li><a href="message.cgi?say=Hello">Say Hello</a>
 </ul>

메시지가 이스케이프 처리 없이 사용자에게 표시되면, 공격자가 스크립트 요소를 포함하는 URL을 생성할 수 있습니다:

https://example.com/message.cgi?say=%3Cscript%3Ealert%28%27Oh%20no%21%27%29%3C/script%3E

공격자가 피해자인 사용자가 이 페이지를 방문하도록 설득하면, 공격자가 선택한 스크립트가 페이지에서 실행됩니다. 이러한 스크립트는 사이트가 제공하는 것에 따라 무수히 많은 악의적인 작업을 수행할 수 있습니다. 예를 들어, 사이트가 전자 상거래 사이트인 경우, 이러한 스크립트는 사용자가 인지하지 못한 상태에서 임의의 원치 않는 구매를 하도록 만들 수 있습니다.

이것을 크로스 사이트 스크립팅 공격이라고 합니다.

사이트에 코드를 실행하도록 속이기 위해 사용할 수 있는 여러 구문이 있습니다. 작성자는 허용 목록 필터를 작성할 때 다음과 같은 항목을 고려할 것을 권장합니다:

크로스 사이트 요청 위조(CSRF)

사용자가 사용자별 부작용이 있는 폼 제출을 할 수 있는 사이트, 예를 들어 사용자의 이름으로 포럼에 메시지를 게시하거나, 구매를 하거나, 여권을 신청하는 등의 사이트에서는 요청이 사용자가 의도적으로 한 것인지, 아니면 다른 사이트가 사용자를 속여 알지 못하게 요청을 수행하게 한 것인지를 확인하는 것이 중요합니다.

이 문제는 HTML 폼이 다른 출처로 제출될 수 있기 때문에 발생합니다.

사이트는 사용자별 숨겨진 토큰으로 폼을 채우거나 모든 요청에 대해 `Origin` 헤더를 확인하여 이러한 공격을 방지할 수 있습니다.

클릭재킹

사용자가 원하지 않는 작업을 수행하는 인터페이스를 제공하는 페이지는 사용자가 인터페이스를 활성화하도록 속일 수 있는 가능성을 방지하도록 설계해야 합니다.

사용자가 이러한 속임수에 넘어갈 수 있는 한 가지 방법은 악성 사이트가 피해자 사이트를 작은 iframe에 배치한 다음, 사용자가 반응 게임을 하도록 설득하는 것입니다. 사용자가 게임을 하고 있으면 악성 사이트는 사용자가 클릭하려는 순간 iframe을 마우스 커서 아래에 빠르게 위치시켜 사용자가 피해자 사이트의 인터페이스를 클릭하도록 속일 수 있습니다.

이를 방지하기 위해 프레임에서 사용될 것으로 예상하지 않는 사이트는 프레임에 있지 않음을 감지한 경우에만 인터페이스를 활성화하는 것이 좋습니다(예: window 객체를 top 속성의 값과 비교하여 확인).

1.10.2 스크립팅 API를 사용할 때 피해야 할 일반적인 함정

이 섹션은 비규범적입니다.

HTML에서 스크립트는 "완료될 때까지 실행"되는 의미를 가지며, 이는 브라우저가 다른 작업(예: 추가 이벤트 발생 또는 문서 파싱 지속)을 수행하기 전에 일반적으로 스크립트를 중단 없이 실행한다는 것을 의미합니다.

반면에 HTML 파일의 파싱은 점진적으로 발생하므로, 파서가 언제든지 중단되어 스크립트를 실행할 수 있습니다. 이는 일반적으로 좋은 일이지만, 작성자는 이벤트 핸들러를 이벤트가 발생할 수 있는 시점 이후에 연결하지 않도록 주의해야 합니다.

이를 안정적으로 수행하는 두 가지 방법은 이벤트 핸들러 콘텐츠 속성을 사용하거나, 동일한 스크립트에서 요소를 생성하고 이벤트 핸들러를 추가하는 것입니다. 후자의 방법은 앞서 언급한 것처럼, 스크립트가 추가 이벤트가 발생하기 전에 완료될 때까지 실행되므로 안전합니다.

이것이 발생할 수 있는 한 가지 방법은 img 요소와 load 이벤트와 관련된 것입니다. 특히 이미지가 이미 캐시된 경우(이는 흔한 일입니다) 요소가 파싱되자마자 이벤트가 발생할 수 있습니다.

여기에서 작성자는 onload 핸들러를 img 요소에 사용하여 load 이벤트를 포착합니다:

<img src="games.png" alt="Games" onload="gamesLogoHasLoaded(event)">

스크립트로 요소를 추가하는 경우, 이벤트 핸들러가 동일한 스크립트에서 추가되기만 하면 이벤트가 여전히 누락되지 않습니다:

<script>
 var img = new Image();
 img.src = 'games.png';
 img.alt = 'Games'; 
 img.onload = gamesLogoHasLoaded; 
 // img.addEventListener('load', gamesLogoHasLoaded, false); // 이 방법도 작동합니다
</script>

그러나 작성자가 먼저 img 요소를 생성하고, 별도의 스크립트에서 이벤트 리스너를 추가하면 load 이벤트가 그 사이에 발생하여 이벤트를 놓칠 수 있습니다:

<!-- 이 스타일을 사용하지 마십시오, 경합 상태가 발생할 수 있습니다! -->
 <img id="games" src="games.png" alt="Games">
 <!-- 파서가 잠시 멈추는 동안 'load' 이벤트가 여기서 발생할 수 있으며,
      이 경우 이벤트를 볼 수 없게 됩니다! -->
 <script>
  var img = document.getElementById('games'); 
  img.onload = gamesLogoHasLoaded; // 이벤트가 절대 발생하지 않을 수 있습니다!
 </script>

1.10.3 HTML 작성 시 실수를 잡는 방법: 검증기 및 적합성 검사기

이 섹션은 비규범적입니다.

작성자는 일반적인 실수를 잡기 위해 적합성 검사기(검증기라고도 함)를 사용하는 것이 좋습니다. WHATWG에서는 이러한 도구의 목록을 유지 관리하고 있습니다: https://whatwg.org/validator/

1.11 작성자를 위한 적합성 요구사항

이 섹션은 비규범적입니다.

이전 버전의 HTML 명세서와 달리, 이 명세서는 유효한 문서뿐만 아니라 유효하지 않은 문서의 처리에 대한 요구사항도 일부 자세히 정의하고 있습니다.

그러나 유효하지 않은 콘텐츠의 처리가 대부분의 경우 잘 정의되어 있지만, 문서 적합성 요구사항은 여전히 중요합니다. 실제로, 상호 운용성(특정 콘텐츠를 신뢰할 수 있고 동일하거나 동등한 방식으로 모든 구현이 처리하는 상황)은 문서 적합성 요구사항의 유일한 목표가 아닙니다. 이 섹션에서는 여전히 적합한 문서와 오류가 있는 문서를 구별해야 하는 일반적인 이유를 설명합니다.

1.11.1 표현 마크업

이 섹션은 비규범적입니다.

이전 버전의 HTML에서 대부분의 표현적 기능은 더 이상 허용되지 않습니다. 일반적으로 표현 마크업은 여러 가지 문제가 있는 것으로 나타났습니다:

표현 요소의 사용은 접근성을 저하시킵니다

표현 마크업을 사용하여 보조 기술(AT) 사용자에게 수용 가능한 경험을 제공하는 것은 가능하지만(예: ARIA 사용), 이는 의미적으로 적절한 마크업을 사용할 때보다 훨씬 더 어렵습니다. 게다가, 이러한 기술을 사용하더라도 텍스트 모드 브라우저 사용자와 같은 비-AT 비-그래픽 사용자에게 페이지를 접근 가능하게 만드는 데 도움이 되지 않습니다.

반면, 미디어 독립적인 마크업을 사용하면 텍스트 브라우저 사용자 등 더 많은 사용자에게 작동하는 방식으로 문서를 작성할 수 있는 쉬운 방법을 제공합니다.

유지 보수 비용이 높아짐

스타일에 독립적인 방식으로 작성된 사이트를 유지 보수하는 것이 훨씬 더 쉽습니다. 예를 들어, <font color="">를 사용하는 사이트의 색상을 변경하는 경우, 사이트 전체에 걸쳐 변경해야 하지만, CSS를 기반으로 한 사이트의 유사한 변경은 단일 파일을 변경하여 수행할 수 있습니다.

문서 크기 증가

표현 마크업은 일반적으로 훨씬 더 중복되므로 문서 크기가 커집니다.

이러한 이유로 이 버전의 HTML에서 표현 마크업이 제거되었습니다. 이 변경은 놀라운 일이 아닙니다. HTML4는 많은 해 전에 표현 마크업을 더 이상 사용하지 않도록 하고, 작성자가 표현 마크업에서 벗어나도록 돕기 위해 모드(HTML4 Transitional)를 제공했습니다. 나중에 XHTML 1.1은 이러한 기능을 완전히 폐기했습니다.

HTML에 남아 있는 유일한 표현 마크업 기능은 style 속성과 style 요소입니다. style 속성의 사용은 프로덕션 환경에서 다소 권장되지 않지만, 나중에 별도의 스타일 시트로 직접 이동할 수 있는 규칙을 신속하게 프로토타입화하는 데 유용할 수 있으며, 별도의 스타일 시트가 불편한 경우 특정 스타일을 제공하는 데 유용할 수 있습니다. 유사하게, style 요소는 배포 또는 페이지별 스타일에 유용할 수 있지만, 스타일이 여러 페이지에 적용되는 경우 일반적으로 외부 스타일 시트가 더 편리합니다.

또한 이전에 표현적이었던 일부 요소가 이 명세서에서 미디어 독립적으로 재정의되었다는 점도 주목할 가치가 있습니다: b, i, hr, s, small, u.

1.11.2 문법 오류

이 섹션은 비규범적입니다.

HTML의 문법은 다양한 문제를 피하기 위해 제한됩니다.

직관적이지 않은 오류 처리 동작

특정 잘못된 문법 구조는 파싱될 때 매우 직관적이지 않은 DOM 트리를 생성할 수 있습니다.

예를 들어, 다음 마크업 조각은 hr 요소가 해당 table 요소보다 이전에 형제로 나타나는 DOM을 생성합니다:

<table><hr>...
옵션 오류 복구가 있는 오류

사용자 에이전트를 제어된 환경에서 사용할 수 있도록, 더 기괴하고 복잡한 오류 처리 규칙을 구현하지 않고도 사용자 에이전트가 파싱 오류를 만날 때마다 실패할 수 있습니다.

스트리밍 사용자 에이전트와 호환되지 않는 오류 처리 동작

위에서 언급한 <table><hr>... 예와 같은 일부 오류 처리 동작은 상태를 저장하지 않고 한 번의 통과로 HTML 파일을 처리하는 스트리밍 사용자 에이전트와 호환되지 않습니다. 이러한 사용자 에이전트와의 상호 운용성 문제를 피하기 위해, 이러한 동작을 초래하는 모든 문법은 유효하지 않은 것으로 간주됩니다.

정보 집합 강제를 초래할 수 있는 오류

XML을 기반으로 하는 사용자 에이전트가 HTML 파서에 연결될 때, 요소 또는 속성 이름에 여러 개의 콜론이 포함되지 않는 것과 같은 XML이 강제하는 특정 불변성이 HTML 파일에 의해 위반될 수 있습니다. 이를 처리하려면 파서가 HTML DOM을 XML 호환 정보 집합으로 강제해야 할 수 있습니다. 이러한 처리가 필요한 대부분의 문법 구조는 유효하지 않은 것으로 간주됩니다. (연속된 두 개의 하이픈을 포함하거나 하이픈으로 끝나는 주석은 HTML 문법에서 허용되는 예외입니다.)

불균형적으로 성능이 저하될 수 있는 오류

특정 문법 구조는 불균형적으로 성능이 저하될 수 있습니다. 이러한 구조의 사용을 방지하기 위해, 이들은 일반적으로 적합하지 않은 것으로 만들어집니다.

예를 들어, 다음 마크업은 성능이 저하됩니다. 모든 닫히지 않은 i 요소가 각 문단에서 다시 구성되어 점차적으로 각 문단에 더 많은 요소가 생성됩니다:

<p><i>그녀는 꿈을 꾸었다.
<p><i>그녀는 아침을 먹었다는 꿈을 꾸었다.
<p><i>그 후 점심.
<p><i>그리고 마침내 저녁.

이 조각의 결과로 생성된 DOM은 다음과 같습니다:

  • p
    • i
      • #text: 그녀는 꿈을 꾸었다.
  • p
    • i
      • i
        • #text: 그녀는 아침을 먹었다는 꿈을 꾸었다.
  • p
  • p
취약한 문법 구조와 관련된 오류

역사적 이유로 상대적으로 취약한 문법 구조가 있습니다. 이러한 문제에 우연히 부딪히는 사용자의 수를 줄이기 위해, 이러한 구조는 비적합한 것으로 만들어집니다.

예를 들어, 속성에서 특정 명명된 문자 참조의 파싱은 종결 세미콜론이 생략되더라도 발생합니다. 따옴표로 닫히지 않은 속성에서 따옴표 없이 앰퍼샌드(&)와 글자를 포함하는 경우, 그 글자가 명명된 문자 참조가 아닌 경우에는 안전하지만, 명명된 문자 참조로 해석되는 경우 그 문자로 해석됩니다.

이 조각에서, 속성 값은 "?bill&ted"입니다:

<a href="?bill&ted">Bill and Ted</a>

그러나 다음 조각에서, 속성 값은 실제로 "?art©"입니다. 의도된 "?art&copy"가 아닌 "©"로 해석됩니다.

<a href="?art&copy">Art and Copy</a>

이 문제를 피하기 위해, 모든 명명된 문자 참조는 세미콜론으로 끝나야 하며, 세미콜론 없이 명명된 문자 참조를 사용하는 경우 오류로 표시됩니다.

따라서 위의 경우를 올바르게 표현하는 방법은 다음과 같습니다:

<a href="?bill&ted">Bill and Ted</a> <!-- &ted는 명명된 문자 참조가 아니므로 괜찮습니다. -->
<a href="?art&amp;copy">Art and Copy</a> <!-- &copy는 명명된 문자 참조이므로 &가 이스케이프되어야 합니다. -->
레거시 사용자 에이전트에서의 상호 운용성 문제를 일으키는 오류

특정 문법 구조는 레거시 사용자 에이전트에서 특히 미묘하거나 심각한 문제를 일으키는 것으로 알려져 있으며, 작성자가 이러한 문제를 피할 수 있도록 비적합한 것으로 표시됩니다.

예를 들어, U+0060 그레이브 악센트(`) 문자가 따옴표로 닫히지 않은 속성에서 허용되지 않는 이유는 특정 레거시 사용자 에이전트에서 때때로 따옴표 문자로 처리되기 때문입니다.

또 다른 예로, DOCTYPE은 퀴르크 모드를 방지하기 위해 필수적으로 비 퀴르크 모드로 트리거됩니다. 레거시 사용자 에이전트의 퀴르크 모드에서의 동작은 대부분 문서화되지 않았기 때문입니다.

보안 공격에 노출될 위험이 있는 오류

특정 제한은 알려진 보안 문제를 피하기 위해 존재합니다.

예를 들어, UTF-7의 사용 제한은 UTF-7을 사용한 알려진 크로스 사이트 스크립팅 공격으로 인해 작성자가 피해를 입지 않도록 순전히 존재합니다. [UTF7]

작성자의 의도가 불분명한 경우

작성자의 의도가 매우 불분명한 마크업은 종종 비적합한 것으로 간주됩니다. 이러한 오류를 조기에 수정하면 나중에 유지보수가 더 쉬워집니다.

예를 들어, 작성자가 다음을 h1 제목으로 의도했는지 또는 h2 제목으로 의도했는지는 불분명합니다:

<h1>연락처</h2>
오타일 가능성이 높은 경우

사용자가 간단한 오타를 범했을 때, 이 오류를 조기에 잡아내면 작성자가 많은 디버깅 시간을 절약할 수 있습니다. 따라서 이 명세서는 일반적으로 이 명세서에 정의된 이름과 일치하지 않는 요소 이름, 속성 이름 등을 사용하는 것을 오류로 간주합니다.

예를 들어, 작성자가 <capton> 대신 <caption>을 입력한 경우, 이는 오류로 표시되어 작성자가 즉시 오타를 수정할 수 있습니다.

미래의 새로운 문법과 충돌할 가능성이 있는 오류

미래에 언어 문법을 확장할 수 있도록 하기 위해, 그렇지 않으면 무해한 기능들이 허용되지 않습니다.

예를 들어, 현재는 "속성"이 종료 태그에서 무시되지만, 이들은 무효이며, 미래에 해당 문법 기능을 사용하여 배포된(및 유효한!) 콘텐츠와 충돌하지 않도록 하기 위해 비적합합니다.

일부 작성자는 모든 속성을 항상 따옴표로 묶고 모든 선택적 태그를 항상 포함하는 관행을 따르는 것이 유용하다고 생각하며, HTML 문법의 유연성을 활용하여 제공되는 간결성의 사소한 이점보다 이러한 관습에서 얻는 일관성을 선호합니다. 이러한 작성자를 돕기 위해, 적합성 검사기는 그러한 관습이 강제되는 운영 모드를 제공할 수 있습니다.

1.11.3 콘텐츠 모델 및 속성 값에 대한 제한사항

이 섹션은 비규범적입니다.

언어의 문법을 넘어서, 이 명세서는 요소와 속성을 지정하는 방법에 대한 제한도 둡니다. 이러한 제한은 비슷한 이유로 존재합니다:

의심스러운 의미론을 가진 콘텐츠와 관련된 오류

정의된 의미를 가진 요소의 오용을 피하기 위해, 이러한 중첩이 의심스러운 가치가 있을 경우 요소를 중첩하는 방법을 제한하는 콘텐츠 모델이 정의됩니다.

예를 들어, 이 명세서는 section 요소를 kbd 요소 내부에 중첩하는 것을 허용하지 않는데, 이는 저자가 전체 섹션을 입력해야 한다고 표시할 가능성이 매우 낮기 때문입니다.

표현된 의미의 충돌과 관련된 오류

마찬가지로, 요소 사용의 실수를 저자의 주목을 끌기 위해, 표현된 의미에서의 명백한 모순은 적합성 오류로 간주됩니다.

예를 들어, 아래의 조각에서는 의미가 말이 되지 않습니다: 구분자는 동시에 셀일 수 없으며, 라디오 버튼은 진행 표시줄이 될 수 없습니다.

<hr role="cell">
<input type=radio role=progressbar>

또 다른 예는 ul 요소의 콘텐츠 모델에 대한 제한입니다. 이 요소는 li 요소 자식만을 허용합니다. 리스트는 정의상 0개 이상의 리스트 항목으로만 구성되므로, ul 요소에 li 요소 이외의 것이 포함된 경우, 무엇을 의미하는지 명확하지 않습니다.

기본 스타일이 혼란을 초래할 가능성이 있는 경우

일부 요소는 기본 스타일이나 동작으로 인해 특정 조합이 혼란을 초래할 가능성이 있습니다. 이 문제를 피할 수 있는 동등한 대체 요소가 있는 경우, 혼란스러운 조합은 허용되지 않습니다.

예를 들어, div 요소는 블록 박스로 렌더링되며, span 요소는 인라인 박스로 렌더링됩니다. 블록 박스인라인 박스에 넣는 것은 불필요하게 혼란스럽습니다. div 요소를 중첩하거나, span 요소를 중첩하거나, span 요소를 div 요소 안에 중첩하는 것은 모두 div 요소를 span 요소 안에 중첩하는 것과 동일한 목적을 수행하지만, 후자는 블록 박스인라인 박스에 넣는 것을 포함하기 때문에 후자 조합은 허용되지 않습니다.

또 다른 예는 인터랙티브 콘텐츠가 중첩될 수 없는 방식입니다. 예를 들어, button 요소는 textarea 요소를 포함할 수 없습니다. 이는 이러한 중첩된 인터랙티브 요소의 기본 동작이 사용자에게 매우 혼란스러울 수 있기 때문입니다. 이러한 요소를 중첩하는 대신 나란히 배치할 수 있습니다.

명세서를 오해한 것 같다고 나타나는 오류

때때로, 무언가가 허용되지 않는 이유는 이를 허용하는 것이 저자의 혼란을 야기할 가능성이 높기 때문입니다.

예를 들어, disabled 속성을 "false" 값으로 설정하는 것은 허용되지 않으며, 이는 요소가 활성화된다는 의미로 보일 수 있지만 실제로는 요소가 비활성화됨을 의미하기 때문입니다. (구현에서 중요한 것은 속성의 값이 아니라 속성의 존재입니다).

단순히 언어를 단순화하기 위해 부과된 제한과 관련된 오류

일부 적합성 오류는 저자가 배워야 할 언어를 단순화합니다.

예를 들어, area 요소의 shape 속성은 실습에서 동의어로 circcircle 값을 허용하지만, circ 값을 허용하지 않으므로 자습서 및 기타 학습 도구를 단순화할 수 있습니다. 둘 다 허용하는 데는 이점이 없지만 언어를 가르치는 데 혼란을 초래할 수 있습니다.

구문 분석기의 특이성과 관련된 오류

일부 요소는 다소 독특한 방식으로 구문 분석되며(주로 역사적 이유로), 이러한 콘텐츠 모델 제한은 저자가 이러한 문제에 노출되는 것을 방지하기 위한 것입니다.

예를 들어, form 요소는 구문 콘텐츠 내에서 허용되지 않으며, HTML로 구문 분석할 때, form 요소의 시작 태그는 p 요소의 종료 태그를 암시합니다. 따라서 다음 마크업은 하나가 아닌 두 개의 문단을 생성합니다:

<p>Welcome. <form><label>Name:</label> <input></form>

이는 정확히 다음과 같이 구문 분석됩니다:

<p>Welcome. </p><form><label>Name:</label> <input></form>
스크립트가 디버깅하기 어려운 방식으로 실패할 가능성이 있는 오류

일부 오류는 디버깅하기 어려운 스크립트 문제를 방지하기 위해 의도되었습니다.

예를 들어, 동일한 값을 가진 두 개의 id 속성을 갖는 것이 비적합한 이유는 중복된 ID가 잘못된 요소가 선택되도록 하여, 때로는 원인을 파악하기 어려운 재앙적인 영향을 미칠 수 있기 때문입니다.

저작 시간 낭비와 관련된 오류

일부 구조는 역사적으로 많은 저작 시간 낭비의 원인이 되었기 때문에 금지되었으며, 이를 피함으로써 저자는 미래의 작업에서 시간을 절약할 수 있습니다.

예를 들어, script 요소의 src 속성은 요소의 내용을 무시하게 합니다. 그러나 이는 명확하지 않으며, 특히 요소의 내용이 실행 가능한 스크립트처럼 보이는 경우 저자는 실행되지 않는 인라인 스크립트를 디버깅하려고 시간을 낭비할 수 있습니다. 이러한 문제를 줄이기 위해, 이 명세서는 script 요소의 src 속성이 존재할 때 실행 가능한 스크립트를 포함하는 것을 비적합하게 만듭니다. 이를 통해 문서를 검증하는 작성자는 이러한 실수로 시간을 낭비할 가능성이 줄어듭니다.

HTML 및 XML 문법 간의 전환을 시도하는 작성자에게 영향을 미치는 오류

일부 저자는 XML 및 HTML로 유사한 결과를 해석할 수 있는 파일을 작성하는 것을 좋아합니다. 이 실습은 일반적으로 스크립팅, 스타일링 또는 자동화된 직렬화와 관련된 미묘한 복잡성으로 인해 권장되지 않지만, 이 명세서는 이러한 어려움을 어느 정도 완화하기 위한 몇 가지 제한을 두고 있습니다. 이는 작성자가 HTML 및 XML 문법 간의 전환 시 이를 임시 단계로 사용할 수 있도록 합니다.

예를 들어, langxml:lang 속성을 동기화 상태로 유지하기 위한 다소 복잡한 규칙이 존재합니다.

또 다른 예는 HTML 직렬화에서 xmlns 속성 값에 대한 제한입니다. 이러한 제한은 문서를 HTML 또는 XML로 처리할 때 요소가 동일한 네임스페이스에 속하도록 보장하기 위해 마련되었습니다.

미래 확장을 위해 예약된 영역과 관련된 오류

언어의 미래 수정에서 새로운 구문을 허용하기 위한 구문 제한과 마찬가지로, 요소의 콘텐츠 모델 및 속성 값에 대한 일부 제한은 HTML 어휘의 미래 확장을 허용하기 위한 것입니다.

예를 들어, U+005F LOW LINE 문자(_)로 시작하는 target 속성 값이 특정 미리 정의된 값만 허용되도록 제한함으로써, 작성자가 정의한 값과 충돌하지 않고 나중에 새로운 미리 정의된 값을 도입할 수 있습니다.

다른 명세서를 잘못 사용한 것과 관련된 오류

일부 제한은 다른 명세서에 의해 설정된 제한을 지원하기 위한 것입니다.

예를 들어, 미디어 쿼리 목록을 사용하는 속성은 유효한 미디어 쿼리 목록만을 사용하도록 요구함으로써 해당 명세서의 적합성 규칙을 따르는 것의 중요성을 강조합니다.

1.12 추천 읽을거리

이 섹션은 비규범적입니다.

다음 문서는 이 사양의 독자에게 흥미로울 수 있습니다.

월드 와이드 웹을 위한 문자 모델 1.0: 기본 사항 [CHARMOD]

이 아키텍처 사양은 사양 작성자, 소프트웨어 개발자 및 콘텐츠 개발자에게 유니코드 표준과 ISO/IEC 10646에 의해 공동으로 정의된 유니버설 문자 세트를 기반으로 웹에서 상호 운용 가능한 텍스트 처리를 위한 공통 참조를 제공합니다. 다루는 주제는 '문자', '인코딩' 및 '문자열' 용어의 사용, 참조 처리 모델, 문자 인코딩의 선택 및 식별, 문자 이스케이프 및 문자열 인덱싱을 포함합니다.

유니코드 보안 고려 사항 [UTR36]

유니코드는 매우 많은 수의 문자를 포함하고 있으며 세계의 다양한 문자 체계를 통합하고 있기 때문에 잘못된 사용은 프로그램이나 시스템을 보안 공격에 노출시킬 수 있습니다. 특히 더 많은 제품이 국제화됨에 따라 이것은 매우 중요합니다. 이 문서는 프로그래머, 시스템 분석가, 표준 개발자 및 사용자가 고려해야 할 보안 고려 사항 중 일부를 설명하고, 문제의 위험을 줄이기 위한 구체적인 권장 사항을 제공합니다.

웹 콘텐츠 접근성 지침 (WCAG) [WCAG]

웹 콘텐츠 접근성 지침 (WCAG)은 웹 콘텐츠를 더 접근 가능하게 만드는 방법에 대한 다양한 권장 사항을 다룹니다. 이 지침을 따르면 시각 장애, 청각 장애, 학습 장애, 인지적 제한, 운동 제한, 언어 장애, 광 과민성 및 이들의 조합을 포함한 다양한 장애를 가진 사람들에게 콘텐츠를 접근 가능하게 할 수 있습니다. 이 지침을 따르면 일반 사용자를 포함하여 더 많은 사용자가 웹 콘텐츠를 더 쉽게 이용할 수 있게 됩니다.

저작 도구 접근성 지침 (ATAG) 2.0 [ATAG]

이 사양은 장애인을 위한 더 접근 가능한 웹 콘텐츠 저작 도구를 설계하기 위한 지침을 제공합니다. 이 지침을 준수하는 저작 도구는 장애인을 위한 접근 가능한 사용자 인터페이스를 제공할 뿐만 아니라 모든 저자가 접근 가능한 웹 콘텐츠를 제작할 수 있도록 지원하고 촉진할 것입니다.

사용자 에이전트 접근성 지침 (UAAG) 2.0 [UAAG]

이 문서는 장애인을 위한 웹 접근성을 향상시키기 위한 사용자 에이전트를 설계하는 지침을 제공합니다. 사용자 에이전트에는 웹 콘텐츠를 검색하고 렌더링하는 브라우저 및 기타 유형의 소프트웨어가 포함됩니다. 이 지침을 준수하는 사용자 에이전트는 자체 사용자 인터페이스와 기타 내부 기능을 통해 접근성을 촉진할 것이며, 특히 보조 기술과의 통신 능력을 포함합니다. 또한 장애인뿐만 아니라 모든 사용자가 준수하는 사용자 에이전트를 더 사용하기 쉽게 느낄 것입니다.

2 공통 인프라

이 사양은 Infra에 의존합니다. [INFRA]

2.1 용어

이 사양은 HTML 및 XML 속성과 IDL 속성을 모두 참조하며, 종종 동일한 맥락에서 사용됩니다. 어떤 것을 참조하는지 명확하지 않을 때는 HTML 및 XML 속성을 콘텐츠 속성이라고 하고, IDL 인터페이스에 정의된 속성은 IDL 속성이라고 합니다. 유사하게, "속성"이라는 용어는 자바스크립트 객체 속성과 CSS 속성 모두에 사용됩니다. 이러한 경우 모호함을 피하기 위해 객체 속성CSS 속성으로 명확히 구분합니다.

일반적으로, 사양에서 특정 기능이 HTML 구문 또는 XML 구문에 적용된다고 명시할 때, 다른 하나에도 적용됩니다. 특정 기능이 두 언어 중 하나에만 적용될 경우, "HTML의 경우, ... (이는 XML에는 적용되지 않음)"과 같이 명확하게 언급하여 다른 형식에는 적용되지 않음을 명시합니다.

이 사양은 문서라는 용어를 HTML의 모든 사용 사례를 참조하는 데 사용합니다. 이에는 짧은 정적 문서부터 멀티미디어가 풍부한 긴 에세이 또는 보고서, 완전한 인터랙티브 애플리케이션까지 포함됩니다. 이 용어는 Document 객체 및 그 하위 DOM 트리와, HTML 구문 또는 XML 구문을 사용하여 직렬화된 바이트 스트림을 참조하는 데 사용됩니다. 어떤 맥락에서 사용되는지에 따라 다릅니다.

DOM 구조의 맥락에서 HTML 문서XML 문서라는 용어는 DOM에서 정의된 대로 사용되며, Document 객체가 처할 수 있는 두 가지 다른 모드를 구체적으로 나타냅니다. [DOM] (이러한 용어 사용 시 항상 정의로 하이퍼링크됩니다.)

바이트 스트림의 맥락에서, HTML 문서는 text/html로 라벨이 지정된 리소스를, XML 문서는 XML MIME 타입으로 라벨이 지정된 리소스를 의미합니다.


간단히 하기 위해, 문서가 사용자에게 렌더링되는 방식과 관련하여 표시됨, 디스플레이됨, 보임과 같은 용어를 사용할 수 있습니다. 이러한 용어는 시각적 매체를 암시하는 것이 아니며, 다른 매체에도 동등하게 적용되어야 합니다.

2.1.1 병렬 처리

단계를 병렬로 실행한다는 것은 해당 단계들이 표준의 다른 로직(예: 이벤트 루프)과 동시에 실행되어야 함을 의미합니다. 이 표준은 이를 달성하는 정확한 메커니즘, 예를 들어 타임셰어링 협동 멀티태스킹, 파이버, 스레드, 프로세스, 다른 하이퍼스레드, 코어, CPU, 머신 등을 정의하지 않습니다. 반면, 즉시 실행되어야 하는 작업은 현재 실행 중인 작업을 중단하고, 자신을 실행한 후 이전에 실행 중이던 작업을 다시 시작해야 합니다.

병렬 처리를 활용하는 사양을 작성하는 방법에 대한 지침은 다른 사양에서 이벤트 루프 처리를 참조합니다.

동일한 데이터에서 작동하는 여러 병렬 알고리즘 간의 경쟁 조건을 피하기 위해 병렬 큐를 사용할 수 있습니다.

병렬 큐는 일련의 알고리즘 단계를 순차적으로 실행해야 하는 큐를 나타냅니다.

병렬 큐알고리즘 큐()를 가지며, 초기에는 비어 있습니다.

병렬 큐에 단계를 큐에 추가하려면, 알고리즘 단계를 병렬 큐알고리즘 큐추가합니다.

새로운 병렬 큐를 시작하려면 다음 단계를 실행합니다:

  1. parallelQueue를 새로운 병렬 큐로 설정합니다.

  2. 다음 단계를 병렬로 실행합니다:

    1. 항상:

      1. stepsparallelQueue알고리즘 큐에서 큐에서 제거한 결과로 설정합니다.

      2. steps가 아무것도 아닌 경우, steps를 실행합니다.

      3. Assert: 병렬로 실행되는 단계는 예외를 발생시킬 수 없으므로 steps를 실행한 결과 예외가 발생하지 않았음을 확인합니다.

      구현에서는 이를 지속적으로 실행되는 루프로 구현할 필요는 없습니다. 표준의 알고리즘은 이해하기 쉬워야 하며 배터리 수명이나 성능을 반드시 고려하지는 않습니다.

  3. parallelQueue를 반환합니다.

병렬로 실행되는 단계들은 자체적으로 다른 단계를 병렬로 실행할 수 있습니다. 예를 들어, 병렬 큐 내에서 일련의 단계를 큐와 병렬로 실행하는 것이 유용할 수 있습니다.

어떤 표준이 nameList(리스트)를 정의하고, nameListname을 추가하는 메서드를 정의하는데, nameList에 이미 name이 포함되어 있는 경우 거부하는 것으로 가정합니다.

아래 솔루션은 경쟁 조건이 발생할 수 있습니다:

  1. pthis관련 영역에서 생성된 새 프로미스로 설정합니다.

  2. globalthis관련 전역 객체로 설정합니다.

  3. 다음 단계를 병렬로 실행합니다:

    1. 만약 nameListname포함하면, global이 주어진 DOM 조작 작업 소스에서 pTypeError로 거부하도록 전역 작업을 대기열에 추가하고 이 단계를 중단합니다.

    2. 잠재적으로 오래 걸리는 작업을 수행합니다.

    3. namenameList추가합니다.

    4. global이 주어진 DOM 조작 작업 소스에서 p를 undefined로 확인하도록 전역 작업을 대기열에 추가합니다.

  4. p를 반환합니다.

위의 두 가지 호출은 동시에 실행될 수 있으며, name이 3.1 단계 동안 nameList에 없지만, 3.3 단계를 실행하기 전에 추가될 수 있으므로 namenameList에 두 번 추가됩니다.

병렬 큐는 이 문제를 해결합니다. 표준은 nameListQueue새로운 병렬 큐를 시작한 결과로 정의하고, 다음 과 같이 합니다:

  1. pthis관련 영역에서 생성된 새 프로미스로 설정합니다.

  2. globalthis관련 전역 객체로 설정합니다.

  3. nameListQueue다음 단계를 대기열에 추가합니다:

    1. 만약 nameListname포함하면, global이 주어진 DOM 조작 작업 소스에서 pTypeError로 거부하도록 전역 작업을 대기열에 추가하고 이 단계를 중단합니다.

    2. 잠재적으로 오래 걸리는 작업을 수행합니다.

    3. namenameList추가합니다.

    4. global이 주어진 DOM 조작 작업 소스에서 p를 undefined로 확인하도록 전역 작업을 대기열에 추가합니다.

  4. p를 반환합니다.

이제 단계들이 큐에 추가되고 경쟁 상태가 발생하지 않습니다.

2.1.2 리소스

본 명세서에서는 외부 리소스의 의미를 해석할 수 있는 구현이 있는지 여부를 나타낼 때 지원됨이라는 용어를 사용합니다. 특정 형식 또는 유형의 외부 리소스를 처리할 수 있고 해당 리소스의 중요한 측면이 무시되지 않으면 해당 형식 또는 유형이 지원됨으로 간주됩니다. 특정 리소스가 지원됨인지 여부는 리소스 형식의 기능이 어떻게 사용되는지에 따라 달라질 수 있습니다.

예를 들어, PNG 이미지는 해당 픽셀 데이터를 해독하고 렌더링할 수 있다면, 구현이 알지 못하더라도 이미지에 애니메이션 데이터가 포함되어 있어도 지원되는 형식으로 간주됩니다.

MPEG-4 비디오 파일은 압축 형식이 지원되지 않는다면 해당 구현이 파일의 메타데이터에서 영화의 크기를 결정할 수 있더라도 지원되는 형식으로 간주되지 않습니다.

일부 명세서, 특히 HTTP 명세서에서 표현이라고 하는 것을 이 명세서에서는 리소스라고 합니다. [HTTP]

리소스의 중요 하위 리소스는 리소스를 올바르게 처리하기 위해 필요한 리소스입니다. 어떤 리소스가 중요한지 아닌지는 리소스 형식을 정의하는 명세서에서 정의됩니다.

예를 들어, CSS 스타일 시트의 경우, 여기에서는 임시로 이들의 중요한 하위 리소스를 @import 규칙을 통해 가져온 다른 스타일 시트들로 정의합니다. 다른 가져온 스타일 시트들에 의해 간접적으로 가져온 스타일 시트들도 포함됩니다.

이 정의는 완전히 상호 운용 가능한 것은 아닙니다. 또한 일부 사용자 에이전트는 배경 이미지나 웹 폰트와 같은 리소스를 중요한 하위 리소스로 간주하는 것 같습니다. 이상적으로는 CSS 워킹 그룹이 이것을 정의해야 합니다. 이 문제에 대한 진행 상황을 추적하려면 w3c/csswg-drafts issue #1088를 참조합니다.

2.1.3 XML 호환성

HTML에서 XML로의 마이그레이션을 용이하게 하기 위해, 이 명세서를 준수하는 사용자 에이전트는 HTML의 요소를 http://www.w3.org/1999/xhtml 네임스페이스에 배치합니다. 적어도 DOM과 CSS의 목적을 위해서라도 그렇습니다. "HTML 요소"라는 용어는 XML 문서에서도 해당 네임스페이스에 있는 모든 요소를 지칭합니다.

달리 명시되지 않는 한, 이 명세서에서 정의되거나 언급된 모든 요소는 HTML 네임스페이스 ("http://www.w3.org/1999/xhtml")에 있으며, 이 명세서에서 정의되거나 언급된 모든 속성은 네임스페이스가 없습니다.

요소 타입이라는 용어는 특정 로컬 이름과 네임스페이스를 가진 요소의 집합을 지칭하는 데 사용됩니다. 예를 들어, button 요소는 button 요소 타입의 요소로, 로컬 이름이 "button"이며 (위에서 정의한 대로 암묵적으로) HTML 네임스페이스에 속합니다.

2.1.4 DOM 트리

어떤 요소나 속성이 무시됨, 또는 다른 값으로 처리됨, 또는 다른 것으로 취급됨이라고 명시된 경우, 이는 해당 노드가 DOM에 삽입된 후 처리에만 해당됩니다. 이러한 상황에서 사용자 에이전트는 DOM을 변경해서는 안 됩니다.

콘텐츠 속성의 값이 이전 값과 다를 때만 값이 변경됨이라고 합니다. 이미 가진 값으로 속성을 설정하는 것은 변경으로 간주되지 않습니다.

비어 있음이라는 용어는 속성 값, 텍스트 노드 또는 문자열에 사용될 때, 텍스트의 길이가 0임을 의미합니다 (즉, 제어 문자 또는 U+0020 SPACE를 포함하지 않음).

HTML 요소는 특정 HTML 요소 삽입 단계, HTML 요소 연결 후 단계, HTML 요소 제거 단계HTML 요소 이동 단계를 모두 요소의 로컬 이름에 대해 정의할 수 있습니다.

HTML 표준의 삽입 단계insertedNode가 주어졌을 때 다음과 같이 정의됩니다:

  1. insertedNode네임스페이스HTML 네임스페이스인 요소이며, 이 표준이 insertedNode로컬 이름에 대한 HTML 요소 삽입 단계를 정의하는 경우, insertedNode에 대해 해당하는 HTML 요소 삽입 단계를 실행합니다.

  2. insertedNode폼 연관 요소이거나 폼 연관 요소의 조상인 경우:

    1. 만약 폼 연관 요소파서 삽입 플래그가 설정되어 있으면, 반환합니다.

    2. 폼 소유자 재설정을 실행합니다.

  3. insertedNodeElement이지만 열린 요소 스택에 없을 경우, 내부 리소스 링크 처리insertedNode노드 문서로 실행합니다.

insertedNode가 주어진 HTML 표준에 대한 연결 후 단계는 다음과 같이 정의됩니다:

  1. insertedNode네임스페이스HTML 네임스페이스인 요소이며, 이 표준이 insertedNode로컬 이름에 대한 HTML 요소 연결 후 단계를 정의하는 경우, insertedNode에 대해 해당하는 HTML 요소 연결 후 단계를 실행합니다.

HTML 표준의 제거 단계removedNodeoldParent가 주어졌을 때 다음과 같이 정의됩니다:

  1. documentremovedNode노드 문서로 설정합니다.

  2. 만약 document포커스된 영역removedNode라면, document포커스된 영역document뷰포트로 설정하고, document관련 글로벌 객체네비게이션 API에서 네비게이션 중 포커스 변경됨을 false로 설정합니다.

    이는 포커스 해제 단계, 포커스 설정 단계 또는 포커스 업데이트 단계를 수행하지 않으므로 blur 또는 change 이벤트가 발생하지 않습니다.

  3. removedNode네임스페이스HTML 네임스페이스인 요소이고, 이 표준이 removedNode로컬 이름에 대한 HTML 요소 제거 단계를 정의하는 경우, removedNodeoldParent에 대해 해당하는 HTML 요소 제거 단계를 실행합니다.

  4. 만약 removedNode폼 관련 요소이고, null이 아닌 폼 소유자를 가지고 있으며, removedNode와 그 폼 소유자가 더 이상 동일한 트리에 속하지 않는 경우, 폼 소유자를 재설정하십시오.

  5. removedNodepopover 속성이 No Popover 상태에 있지 않다면, 팝오버 숨기기 알고리즘removedNode, false, false, false, null를 인수로 실행합니다.

movedNode가 주어진 HTML 표준에 대한 이동 단계는 다음과 같이 정의됩니다:

  1. movedNode네임스페이스HTML 네임스페이스인 요소이고, 이 표준이 movedNode 로컬 이름에 대한 HTML 요소 이동 단계를 정의한다면, movedNode를 인자로 하여 해당 HTML 요소 이동 단계를 실행한다.

  2. movedNode폼 연관 요소이고 널이 아닌 폼 소유자를 가지고 있으며, movedNode와 그 폼 소유자가 더 이상 같은 트리에 있지 않다면, movedNode폼 소유자를 리셋한다.

노드가 문서에 삽입됨삽입 단계가 해당 노드를 인수로 호출하고 이제 문서 트리에 포함되었을 때를 의미합니다. 마찬가지로, 노드가 문서에서 제거됨제거 단계가 해당 노드를 인수로 호출하고 이제 더 이상 문서 트리에 포함되지 않았을 때를 의미합니다.

노드가 연결됨삽입 단계가 해당 노드를 인수로 호출하고 이제 연결됨을 의미합니다. 마찬가지로, 노드가 연결 해제됨제거 단계가 해당 노드를 인수로 호출하고 이제 더 이상 연결됨이 아닌 경우를 의미합니다.

노드가 탐색 문맥에 연결됨은 해당 노드가 연결됨이고, 해당 노드의 섀도우 포함 루트탐색 문맥이 null이 아닐 때를 의미합니다. 노드가 탐색 문맥에 연결됨삽입 단계가 해당 노드를 인수로 호출하고 이제 탐색 문맥에 연결됨을 의미합니다. 노드가 탐색 문맥에서 연결 해제됨제거 단계가 해당 노드를 인수로 호출하고 이제 더 이상 탐색 문맥에 연결됨이 아니거나, 해당 노드의 섀도우 포함 루트탐색 문맥이 null이 된 경우를 의미합니다.

2.1.5 스크립팅

Foo가 실제로는 인터페이스인 경우에도 "a Foo object"라는 표현이 사용되며, 이는 더 정확한 "인터페이스 Foo를 구현하는 객체" 대신 사용되기도 합니다.

IDL 속성이 얻어짐이라고 할 때는 해당 속성의 값이 조회되고 있을 때(예: 저자 스크립트에 의해), 설정됨이라고 할 때는 새 값이 할당될 때를 의미합니다.

DOM 객체가 라이브라고 할 때, 해당 객체의 속성과 메서드는 스냅샷이 아닌 실제 기본 데이터에 대해 작동해야 합니다.

2.1.6 플러그인

플러그인이라는 용어는 사용자 에이전트가 사용하는 구현 정의된 콘텐츠 핸들러 집합을 의미하며, 이는 document 객체의 렌더링에 참여할 수 있지만, document하위 탐색 가능 요소로 작동하지 않으며, 노드 객체를 document의 DOM에 추가하지 않습니다.

일반적으로 이러한 콘텐츠 핸들러는 서드파티에 의해 제공되지만, 사용자 에이전트가 내장된 콘텐츠 핸들러를 플러그인으로 지정할 수도 있습니다.

사용자 에이전트는 text/plainapplication/octet-stream 유형을 등록된 플러그인으로 간주해서는 안 됩니다.

플러그인의 한 예로, 사용자가 PDF 파일로 이동할 때 탐색 가능 요소에서 인스턴스화되는 PDF 뷰어를 들 수 있습니다. 이는 PDF 뷰어 구성 요소를 구현한 당사자가 사용자 에이전트를 구현한 당사자와 동일한지 여부와 관계없이 플러그인으로 간주됩니다. 그러나 사용자 에이전트와 별도로 실행되는 PDF 뷰어 애플리케이션(동일한 인터페이스를 사용하지 않는 경우)은 이 정의에 따른 플러그인이 아닙니다.

이 명세서는 플러그인과 상호 작용하는 메커니즘을 정의하지 않습니다. 이는 사용자 에이전트 및 플랫폼에 따라 다를 것으로 예상되기 때문입니다. 일부 사용자 에이전트는 Netscape 플러그인 API와 같은 플러그인 메커니즘을 지원할 수 있으며, 다른 사용자 에이전트는 원격 콘텐츠 변환기를 사용하거나 특정 유형에 대한 내장 지원을 가질 수 있습니다. 실제로 이 명세서는 사용자 에이전트가 플러그인을 지원해야 한다고 요구하지 않습니다. [NPAPI]

브라우저는 플러그인을 위해 의도된 외부 콘텐츠와 상호 작용할 때 극도로 주의해야 합니다. 서드파티 소프트웨어가 사용자 에이전트 자체와 동일한 권한으로 실행될 때, 서드파티 소프트웨어의 취약점은 사용자 에이전트의 취약점만큼 위험해질 수 있습니다.

(이것은 추적 벡터입니다.) 서로 다른 사용자가 서로 다른 플러그인 집합을 가지는 것이 사용자가 고유하게 식별될 가능성을 높이는 추적 벡터를 제공하기 때문에, 사용자 에이전트는 각 사용자에 대해 동일한 플러그인 집합을 지원하도록 권장됩니다.

2.1.7 문자 인코딩

문자 인코딩은, 또는 모호하지 않은 경우 인코딩인코딩에서 정의된 바와 같이 바이트 스트림과 유니코드 문자열 간의 변환을 정의하는 방법입니다. 인코딩인코딩 이름과 하나 이상의 인코딩 레이블을 가지며, 인코딩 표준에서는 이를 인코딩의 이름레이블이라고 합니다. [ENCODING]

2.1.8 준수 클래스

이 명세서는 사용자 에이전트(구현자에게 관련)와 문서(저자 및 저작 도구 구현자에게 관련)에 대한 준수 기준을 설명합니다.

준수 문서는 문서에 대한 모든 준수 기준을 준수하는 문서입니다. 가독성을 위해 이러한 준수 요구 사항 중 일부는 저자에 대한 준수 요구 사항으로 표현됩니다. 이러한 요구 사항은 암묵적으로 문서에 대한 요구 사항입니다. 정의상, 모든 문서는 저자가 있는 것으로 가정됩니다. (일부 경우에는 그 저자가 사용자 에이전트일 수도 있으며, 이러한 사용자 에이전트는 아래에서 설명하는 추가 규칙의 적용을 받습니다.)

예를 들어, "저자는 foobar 요소를 사용해서는 안 됩니다."라는 요구 사항이 있으면 문서에 foobar라는 이름의 요소가 포함될 수 없음을 의미합니다.

문서 준수 요구 사항과 구현 준수 요구 사항 간에는 암묵적인 관계가 없습니다. 사용자 에이전트는 비준수 문서를 자유롭게 처리할 수 없습니다. 이 명세서에서 설명하는 처리 모델은 입력 문서의 준수 여부와 관계없이 구현에 적용됩니다.

사용자 에이전트는 여러 (중첩된) 범주로 나뉘며, 각각 다른 준수 요구 사항이 있습니다.

웹 브라우저 및 기타 상호작용 사용자 에이전트

XML 구문을 지원하는 웹 브라우저는 XML 문서에서 발견된 HTML 네임스페이스의 요소와 속성을 이 명세서에서 설명한 대로 처리하여 사용자가 상호작용할 수 있도록 해야 합니다. 단, 이러한 요소의 의미가 다른 명세서에 의해 재정의된 경우는 제외합니다.

준수 웹 브라우저는 XML 문서에서 스크립트 요소를 발견하면 해당 요소에 포함된 스크립트를 실행해야 합니다. 그러나, XSLT로 표현된 변환 내에서 이 요소가 발견되면 (사용자 에이전트가 XSLT도 지원한다고 가정할 때) 프로세서는 대신 스크립트 요소를 변환의 일부를 형성하는 불투명한 요소로 취급해야 합니다.

HTML 구문을 지원하는 웹 브라우저는 이 명세서에서 설명한 대로 HTML MIME 유형으로 레이블된 문서를 처리하여 사용자가 상호작용할 수 있도록 해야 합니다.

스크립팅을 지원하는 사용자 에이전트는 또한 이 명세서의 IDL 조각의 준수 구현이어야 합니다. Web IDL에서 설명한 대로. [WEBIDL]

명시적으로 명시되지 않는 한, HTML 요소의 의미를 재정의하는 명세서는 해당 요소를 나타내는 DOM 객체에 대한 요구 사항을 재정의하지 않습니다. 예를 들어, 위 예에서 스크립트 요소는 여전히 HTMLScriptElement 인터페이스를 구현해야 합니다.

비상호작용 프레젠테이션 사용자 에이전트

HTML 및 XML 문서를 처리하여 비상호작용 버전으로 렌더링하는 사용자 에이전트는 사용자 상호작용에 대한 요구 사항을 제외하고 웹 브라우저와 동일한 준수 기준을 준수해야 합니다.

비상호작용 프레젠테이션 사용자 에이전트의 전형적인 예로는 프린터(정적 UA) 및 오버헤드 디스플레이(동적 UA)가 있습니다. 대부분의 정적 비상호작용 프레젠테이션 사용자 에이전트는 스크립팅 지원이 없도록 선택할 것으로 예상됩니다.

비상호작용이지만 동적인 프레젠테이션 UA는 여전히 스크립트를 실행하여 양식을 동적으로 제출할 수 있도록 해야 합니다. 그러나 사용자가 문서와 상호작용할 수 없는 경우 "포커스"라는 개념은 관련이 없으므로 UA는 포커스 관련 DOM API를 지원할 필요가 없습니다.

권장 기본 렌더링을 지원하는 시각적 사용자 에이전트

사용자 에이전트는 상호작용 여부와 관계없이 이 명세서에서 정의된 권장 기본 렌더링을 지원하는 것으로 지정될 수 있습니다(사용자 옵션으로 지정될 수 있음).

이는 필수 사항은 아닙니다. 특히, 권장 기본 렌더링을 구현하는 사용자 에이전트라도 기본 설정을 덮어써서 사용자 경험을 개선할 수 있는 설정을 제공하는 것이 좋습니다. 예를 들어 색상 대비를 변경하거나, 다른 포커스 스타일을 사용하거나, 사용자가 더 접근 가능하고 사용하기 쉽도록 하는 등의 방법이 있습니다.

권장 기본 렌더링을 지원하도록 지정된 사용자 에이전트는 그러한 상태에서 렌더링 섹션에서 정의된 대로 사용자 에이전트가 구현할 것으로 기대되는 동작 규칙을 구현해야 합니다.

스크립팅 지원이 없는 사용자 에이전트

스크립팅을 지원하지 않거나 스크립팅 기능이 완전히 비활성화된 구현은 이 명세서에서 언급된 이벤트 및 DOM 인터페이스를 지원할 필요가 없습니다. 이벤트 모델이나 DOM 측면에서 정의된 명세서의 부분에 대해서는 그러한 사용자 에이전트가 이벤트와 DOM이 지원되는 것처럼 행동해야 합니다.

스크립팅은 애플리케이션의 필수적인 부분을 형성할 수 있습니다. 스크립팅을 지원하지 않거나 스크립팅이 비활성화된 웹 브라우저는 저자의 의도를 완전히 전달하지 못할 수 있습니다.

준수 검사기

준수 검사기는 문서가 이 명세서에서 설명하는 해당 준수 기준을 준수하는지 확인해야 합니다. 자동화된 준수 검사기는 저자의 의도를 해석해야 하는 오류(예: 인용 블록 요소의 내용이 인용이 아닌 경우 문서는 비준수이지만, 인간의 판단 입력 없이 실행되는 준수 검사기는 인용 블록 요소에 인용된 자료만 포함되어 있는지 확인할 필요는 없습니다.)를 감지하는 것을 면제받습니다.

준수 검사기는 입력 문서가 탐색 문맥 없이 파싱될 때(스크립트가 실행되지 않으며 파서의 스크립팅 플래그가 비활성화됨) 문서가 준수하는지 확인해야 하며, 입력 문서가 스크립트가 실행되는 탐색 문맥에서 파싱될 때도 준수하는지 확인해야 합니다. 스크립트가 실행 중에만 발생하는 일시적인 상태를 제외하고는 스크립트가 비준수 상태를 일으키지 않아야 합니다. (이는 불가능한 것으로 입증되었기 때문에 "해야 한다"가 아닌 "권장 사항"입니다. [COMPUTABLE])

"HTML 유효성 검사기"라는 용어는 이 명세서의 해당 요구 사항을 준수하는 준수 검사기를 나타내는 데 사용할 수 있습니다.

XML DTD는 이 명세서의 모든 준수 요구 사항을 표현할 수 없습니다. 따라서 유효성 검사 XML 프로세서와 DTD는 준수 검사기를 구성할 수 없습니다. 또한, 이 명세서에서 정의한 두 가지 저작 형식 중 어느 것도 SGML의 응용 프로그램이 아니기 때문에 유효성 검사 SGML 시스템도 준수 검사기를 구성할 수 없습니다.

달리 표현하자면, 세 가지 유형의 준수 기준이 있습니다:

  1. DTD로 표현할 수 있는 기준.
  2. DTD로 표현할 수 없지만 여전히 기계로 검사할 수 있는 기준.
  3. 인간만이 검사할 수 있는 기준.

준수 검사기는 첫 번째와 두 번째를 검사해야 합니다. 단순 DTD 기반 유효성 검사기는 오류의 첫 번째 클래스를 검사할 뿐이므로 이 명세서에 따라 준수 검사기로 간주되지 않습니다.

데이터 마이닝 도구

문서를 렌더링하거나 준수 여부를 검사하기 위해서가 아닌 다른 이유로 HTML 및 XML 문서를 처리하는 애플리케이션 및 도구는 처리하는 문서의 의미에 따라 행동해야 합니다.

단락마다 중첩 수준을 증가시키고 헤딩에 대해서는 중첩 수준을 증가시키지 않는 문서 개요를 생성하는 도구는 준수하지 않는 것입니다.

저작 도구 및 마크업 생성기

저작 도구 및 마크업 생성기는 준수 문서를 생성해야 합니다. 저자에게 적용되는 준수 기준은 적절한 경우 저작 도구에도 적용됩니다.

저작 도구는 요소를 지정된 용도로만 사용하는 것에 대한 엄격한 요구 사항에서 제외되지만, 저작 도구가 아직 저자의 의도를 결정할 수 없는 범위 내에서만 해당됩니다. 그러나 저작 도구는 요소를 자동으로 오용하거나 사용자가 그렇게 하도록 유도해서는 안 됩니다.

예를 들어, 주소 요소를 임의의 연락처 정보에 사용하는 것은 준수하지 않는 것입니다. 해당 요소는 가장 가까운 아티클 또는 본문 요소 상위 요소에 대한 연락처 정보를 표시하는 데만 사용할 수 있습니다. 그러나 저작 도구는 차이를 결정할 수 없을 가능성이 높기 때문에 저작 도구는 해당 요구 사항에서 제외됩니다. 그러나 이것이 저작 도구가 주소 요소를 임의의 이탤릭체 텍스트 블록에 사용할 수 있음을 의미하는 것은 아닙니다. 이것은 단지 사용자가 아티클 요소에 대한 연락처 정보를 삽입하기 위한 도구를 사용할 때, 사용자가 실제로 그렇게 하고 다른 것을 삽입하지 않는다는 것을 확인할 필요가 없다는 것을 의미합니다.

준수 검사와 관련하여, 편집기는 준수 검사기가 확인할 것과 동일한 정도로 문서를 출력해야 합니다.

비준수 문서를 편집하기 위해 저작 도구를 사용하는 경우, 편집 세션 중에 편집되지 않은 문서의 섹션에서 준수 오류를 유지할 수 있습니다(즉, 편집 도구는 잘못된 콘텐츠를 라운드트립하는 것이 허용됩니다). 그러나 오류가 그렇게 유지된 경우 저작 도구는 출력이 준수한다고 주장해서는 안 됩니다.

저작 도구는 구조 또는 의미 데이터에서 작동하는 도구와 미디어별 편집 기반(WYSIWYG)에서 작동하는 도구의 두 가지 광범위한 종류로 나뉠 것으로 예상됩니다.

전자는 HTML을 작성하는 도구에 권장되는 메커니즘입니다. 소스 정보의 구조를 사용하여 어느 HTML 요소와 속성이 가장 적합한지에 대해 정보에 입각한 선택을 할 수 있기 때문입니다.

그러나 WYSIWYG 도구도 정당합니다. WYSIWYG 도구는 적절하다고 판단되는 요소를 사용해야 하며, 적절하지 않은 요소는 사용하지 않아야 합니다. 이는 극단적인 경우에 div, b, i, span과 같은 몇 가지 요소로 흐름 요소의 사용을 제한하고 스타일 속성을 자유롭게 사용하는 것을 의미할 수 있습니다.

WYSIWYG 여부와 관계없이 모든 저작 도구는 사용자가 구조가 잘 갖춰져 있고, 의미가 풍부하며, 미디어에 독립적인 콘텐츠를 만들 수 있도록 최선을 다해야 합니다.

기존 콘텐츠 및 이전 명세서와의 호환성을 위해 이 명세서는 두 가지 저작 형식을 설명합니다: 하나는 XML을 기반으로 하며, 하나는 SGML에서 영감을 받은 사용자 정의 형식을 사용합니다(HTML 구문이라고 함). 구현은 이 두 형식 중 하나 이상을 지원해야 하지만, 둘 다 지원하는 것이 좋습니다.

일부 준수 요구 사항은 요소, 속성, 메서드 또는 객체에 대한 요구 사항으로 표현됩니다. 이러한 요구 사항은 콘텐츠 모델 제한을 설명하는 것과 구현 동작을 설명하는 두 가지 범주로 나뉩니다. 전자는 문서 및 저작 도구에 대한 요구 사항이고, 후자는 사용자 에이전트에 대한 요구 사항입니다. 마찬가지로 일부 준수 요구 사항은 저자에 대한 요구 사항으로 표현됩니다. 이러한 요구 사항은 저자가 작성한 문서에 대한 준수 요구 사항으로 해석되어야 합니다. (즉, 이 명세서는 저자에 대한 준수 기준과 문서에 대한 준수 기준을 구분하지 않습니다.)

2.1.9 의존성

이 명세서는 여러 다른 기본 명세서에 의존합니다.

Infra

다음 용어는 Infra에서 정의됩니다: [INFRA]

유니코드 및 인코딩

유니코드 문자 집합은 텍스트 데이터를 나타내는 데 사용되며, 인코딩문자 인코딩과 관련된 요구 사항을 정의합니다. [UNICODE]

이 명세서는 용어를 이러한 명세서에서 정의된 용어를 기반으로 도입합니다.

다음 용어는 인코딩에서 정의된 대로 사용됩니다: [ENCODING]

  • 인코딩 얻기
  • 출력 인코딩 얻기
  • 바이트 스트림과 인코딩을 받아 문자 스트림을 반환하는 일반 디코딩 알고리즘
  • 바이트 스트림을 받아 문자 스트림을 반환하며, 가능하다면 하나의 UTF-8 바이트 순서 표시(BOM)를 제거하는 UTF-8 디코딩 알고리즘
  • 하나의 UTF-8 바이트 순서 표시(BOM)를 제거하지 않는다는 점을 제외하면 UTF-8 디코딩과 동일한 BOM 없는 UTF-8 디코딩 알고리즘
  • 문자 스트림과 인코딩을 받아 바이트 스트림을 반환하는 인코딩 알고리즘
  • 문자 스트림을 받아 바이트 스트림을 반환하는 UTF-8 인코딩 알고리즘
  • 바이트 스트림을 받아 인코딩 또는 null을 반환하는 BOM 감지 알고리즘
XML 및 관련 명세서

HTML에 대해 XML 구문을 지원하는 구현은 XML의 일부 버전과 해당 네임스페이스 명세서를 지원해야 합니다. 왜냐하면 해당 구문은 네임스페이스가 있는 XML 직렬화를 사용하기 때문입니다. [XML] [XMLNS]

스크립트를 실행하지 않고 CSS나 XPath 표현식을 평가하지 않으며, 또는 결과 DOM을 임의의 콘텐츠에 노출하지 않고 콘텐츠에 대해 작업을 수행하는 데이터 마이닝 도구 및 기타 사용자 에이전트는 DOM 노드 유사체가 특정 네임스페이스에 있음을 주장하는 것으로 "네임스페이스 지원"을 할 수 있으며, 실제로 네임스페이스 문자열을 노출하지 않아도 됩니다.

HTML 구문에서는 네임스페이스 접두사 및 네임스페이스 선언이 XML에서와 동일한 효과를 가지지 않습니다. 예를 들어, 콜론은 HTML 요소 이름에서 특별한 의미를 가지지 않습니다.


XML 네임스페이스space 이름을 가진 속성은 확장 가능 마크업 언어 (XML)에서 정의됩니다. [XML]

Name 프로덕션은 XML에서 정의됩니다. [XML]

이 명세서는 또한 XML 문서와 스타일 시트를 연결하는 명세서에서 정의된 <?xml-stylesheet?> 처리 지침을 참조합니다. [XMLSSPI]

이 명세서는 또한 XSLTProcessor 인터페이스와 transformToFragment(), transformToDocument() 메서드를 비규범적으로 언급합니다. [XSLTP]

URL

다음 용어는 URL에서 정의됩니다: [URL]

이 명세서는 또한 다음과 같은 스키마 및 프로토콜을 참조합니다:

미디어 프래그먼트 구문미디어 프래그먼트 URI에서 정의됩니다. [MEDIAFRAG]

URL 패턴

다음 용어들은 URL Pattern에서 정의됩니다: [URLPATTERN]

HTTP 및 관련 명세서

다음 용어는 HTTP 명세서에서 정의됩니다: [HTTP]

다음 용어는 HTTP 상태 관리 메커니즘에서 정의됩니다: [COOKIES]

다음 용어는 웹 링크에서 정의됩니다: [WEBLINK]

다음 용어는 HTTP를 위한 구조화된 필드 값에서 정의됩니다: [STRUCTURED-FIELDS]

다음 용어는 MIME 스니핑에서 정의됩니다: [MIMESNIFF]

Fetch

다음 용어는 Fetch에서 정의됩니다: [FETCH]

다음 용어는 Referrer Policy에서 정의됩니다: [REFERRERPOLICY]

다음 용어는 Mixed Content에서 정의됩니다: [MIX]

다음 용어는 Subresource Integrity에서 정의됩니다: [SRI]

No-Vary-Search HTTP 응답 헤더 필드

다음 용어들은 No-Vary-Search HTTP Response Header Field에서 정의됩니다: [NOVARYSEARCH]

Paint Timing

Paint Timing에서 다음 용어가 정의되었습니다: [PAINTTIMING]

Navigation Timing

Navigation Timing에서 다음 용어가 정의되었습니다: [NAVIGATIONTIMING]

Resource Timing

Resource Timing에서 다음 용어가 정의되었습니다: [RESOURCETIMING]

Performance Timeline

Performance Timeline에서 다음 용어가 정의되었습니다: [PERFORMANCETIMELINE]

Long Animation Frames

Long Animation Frames에서 다음 용어가 정의되었습니다: [LONGANIMATIONFRAMES]

Long Tasks

Long Tasks에서 다음 용어가 정의되었습니다: [LONGTASKS]

Web IDL

이 명세서의 IDL 조각은 Web IDL에 설명된 대로 IDL 조각을 준수하기 위해 해석되어야 합니다. [WEBIDL]

Web IDL에서 다음 용어가 정의되었습니다:

Web IDL은 또한 이 명세서에서 사용되는 다음 타입들을 정의합니다:

이 명세서에서 throw라는 용어는 Web IDL에 정의된 대로 사용됩니다. DOMException 타입 및 다음 예외 이름은 Web IDL에 의해 정의되고 이 명세서에서 사용됩니다:

이 명세서가 특정 시간을 나타내는 Date 객체를 생성해야 하는 경우(특별 값 Not-a-Number 포함), 해당 시간이 있다면 그 밀리초 구성요소는 정수로 잘려야 하며, 새로 생성된 Date 객체의 시간 값은 잘린 결과를 나타내야 합니다.

예를 들어, 2000년 1월 1일 01:00 UTC 이후 23045만분의 1초인 2000-01-01T00:00:00.023045Z의 경우, 해당 시간을 나타내는 객체는 45만분의 1초 이전의 2000-01-01T00:00:00.023Z 시간을 나타내는 객체와 동일한 시간을 나타냅니다. 주어진 시간이 NaN인 경우, 결과는 특정 시간을 나타내지 않는 시간을 나타내는 Date 객체가 됩니다.

JavaScript

이 명세서에서 설명하는 언어의 일부는 JavaScript를 기본 스크립팅 언어로만 지원합니다. [JAVASCRIPT]

"JavaScript"라는 용어는 ECMAScript라는 공식 용어 대신 ECMA-262를 지칭하는 데 사용되며, 이는 JavaScript가 더 널리 알려져 있기 때문입니다.

다음 용어는 JavaScript 명세서에 정의되어 있으며, 이 명세서에서 사용됩니다:

JavaScript를 지원하는 사용자 에이전트는 동적 코드 브랜드 체크 제안을 구현해야 합니다. 이 명세서에서 사용하는 다음 용어가 해당 제안에 정의되어 있습니다: [JSDYNAMICCODEBRANDCHECKS]

JavaScript를 지원하는 사용자 에이전트는 또한 ECMAScript 국제화 API를 구현해야 합니다. [JSINTL]

JavaScript를 지원하는 사용자 에이전트는 또한 Temporal 제안을 구현해야 합니다. 이 명세서에서 사용하는 다음 용어가 해당 제안에 정의되어 있습니다: [JSTEMPORAL]

WebAssembly

WebAssembly JavaScript Interface에서 정의된 용어는 다음과 같습니다: [WASMJS]

DOM

문서 객체 모델(DOM)은 문서와 그 내용의 표현입니다. DOM은 단순한 API가 아니라, HTML 구현의 적합성 기준이 이 명세서에서 DOM 작업의 관점에서 정의됩니다. [DOM]

이 명세서는 DOM을 통해 정의되며, 일부 기능은 DOM 인터페이스의 확장으로 정의되므로 구현체는 DOM과 UI 이벤트에서 정의된 이벤트를 지원해야 합니다. [DOM] [UIEVENTS]

특히, DOM에서 정의된 기능은 다음과 같습니다: [DOM]

다음 기능은 UI Events에 정의되어 있습니다: [UIEVENTS]

다음 기능은 Touch Events에 정의되어 있습니다: [TOUCH]

다음 기능은 Pointer Events에 정의되어 있습니다: [POINTEREVENTS]

다음 이벤트는 Clipboard API and events에 정의되어 있습니다: [CLIPBOARD-APIS]

이 사양에서는 때때로 이벤트의 타입을 참조하여 이름이라는 용어를 사용합니다. 예를 들어 "이름이 click인 이벤트" 또는 "이벤트 이름이 keypress인 경우"와 같이 사용됩니다. 이벤트의 "이름"과 "타입"은 동의어입니다.

다음 기능은 DOM Parsing and Serialization에 정의되어 있습니다: [DOMPARSING]

다음 기능은 Selection API에 정의되어 있습니다: [SELECTION]

사용자 에이전트는 execCommand에서 설명한 기능을 구현하는 것이 권장됩니다. [EXECCOMMAND]

다음 기능은 Fullscreen API에 정의되어 있습니다: [FULLSCREEN]

High Resolution Time는 다음 기능을 제공합니다: [HRT]

파일 API

이 명세서는 파일 API에 정의된 다음 기능들을 사용합니다: [FILEAPI]

인덱스된 데이터베이스 API

다음 용어는 Indexed Database API에 정의되어 있습니다: [INDEXEDDB]

미디어 소스 확장

다음 용어들은 미디어 소스 확장에 정의되어 있습니다: [MEDIASOURCE]

미디어 캡처 및 스트림

다음 용어들은 미디어 캡처 및 스트림에 정의되어 있습니다: [MEDIASTREAM]

리포팅

다음 용어들은 리포팅에 정의되어 있습니다: [REPORTING]

XMLHttpRequest

다음 기능들과 용어들은 XMLHttpRequest에 정의되어 있습니다: [XHR]

배터리 상태

다음 기능들은 배터리 상태 API에 정의되어 있습니다: [BATTERY]

미디어 쿼리

구현체는 미디어 쿼리를 지원해야 합니다. <media-condition> 기능이 그곳에 정의되어 있습니다. [MQ]

CSS 모듈

이 명세서의 구현에 CSS 전체에 대한 지원이 필수는 아니지만(특히 웹 브라우저의 경우 지원을 권장함), 일부 기능은 특정 CSS 요구 사항에 따라 정의됩니다.

이 명세서에서 무언가를 특정 CSS 문법에 따라 구문 분석해야 한다고 요구할 때, CSS 구문의 관련 알고리즘을 따라야 하며, 오류 처리 규칙도 포함됩니다. [CSSSYNTAX]

예를 들어, 사용자 에이전트는 스타일 시트의 끝을 예상치 못하게 발견할 때 모든 열린 구문을 닫아야 합니다. 따라서 색상 값으로 문자열 "rgb(0,0,0"(닫는 괄호가 누락된 경우)을 구문 분석할 때 이 오류 처리 규칙에 따라 닫는 괄호가 암시되어 검은색이 얻어집니다. 그러나 "rgb(0,0,"(괄호와 "blue" 값이 모두 누락된 경우)와 같은 유사한 구문은 열린 구문을 닫아도 적절한 값을 얻을 수 없으므로 구문 분석할 수 없습니다.

다음 용어와 기능은 CSS에서 정의됩니다: [CSS]

'display' 속성의 기본 버전은 CSS에 정의되어 있으며, 이 속성은 다른 CSS 모듈에 의해 확장됩니다. [CSS] [CSSRUBY] [CSSTABLE]

다음 용어와 기능은 CSS 박스 모델에 정의되어 있습니다: [CSSBOX]

다음 기능들은 CSS 논리적 속성에 정의되어 있습니다: [CSSLOGICAL]

다음 용어와 기능들은 CSS 색상에 정의되어 있습니다: [CSSCOLOR]

다음 용어는 CSS 이미지에 정의되어 있습니다: [CSSIMAGES]

페인트 소스 용어는 CSS 이미지 레벨 4에서 정의되었으며, CSS 'element()' 함수와 특정 HTML 요소 간의 상호작용을 정의하는 데 사용됩니다. [CSSIMAGES4]

다음 기능들은 CSS 배경 및 테두리에 정의되어 있습니다: [CSSBG]

CSS 배경 및 테두리는 다음과 같은 테두리 속성도 정의합니다: [CSSBG]

테두리 속성
상단 하단 왼쪽 오른쪽
너비 'border-top-width' 'border-bottom-width' 'border-left-width' 'border-right-width'
스타일 'border-top-style' 'border-bottom-style' 'border-left-style' 'border-right-style'
색상 'border-top-color' 'border-bottom-color' 'border-left-color' 'border-right-color'

다음 기능들은 CSS 박스 정렬에 정의되어 있습니다: [CSSALIGN]

다음 용어와 기능들은 CSS 디스플레이에 정의되어 있습니다: [CSSDISPLAY]

다음 기능들은 CSS 플렉서블 박스 레이아웃에 정의되어 있습니다: [CSSFLEXBOX]

다음 용어와 기능들은 CSS 폰트에 정의되어 있습니다: [CSSFONTS]

다음 기능들은 CSS Forms에 정의되어 있습니다: [CSSFORMS]

다음 기능들은 CSS 그리드 레이아웃에 정의되어 있습니다: [CSSGRID]

다음 용어는 CSS 인라인 레이아웃에 정의되어 있습니다: [CSSINLINE]

다음 용어와 기능들은 CSS 박스 사이징에 정의되어 있습니다: [CSSSIZING]

다음 기능들은 CSS 목록 및 카운터에 정의되어 있습니다. [CSSLISTS]

다음 기능들은 CSS 오버플로우에 정의되어 있습니다. [CSSOVERFLOW]

다음 용어와 기능들은 CSS 위치 지정 레이아웃에 정의되어 있습니다: [CSSPOSITION]

다음 기능들은 CSS 멀티컬럼 레이아웃에 정의되어 있습니다. [CSSMULTICOL]

'ruby-base' 값은 'display' 속성의 값으로 CSS 루비 레이아웃에 정의되어 있습니다. [CSSRUBY]

다음 기능들은 CSS 테이블에 정의되어 있습니다: [CSSTABLE]

다음 기능들은 CSS 텍스트에 정의되어 있습니다: [CSSTEXT]

다음 기능들은 CSS 쓰기 모드에 정의되어 있습니다: [CSSWM]

다음 기능들은 CSS 기본 사용자 인터페이스에 정의되어 있습니다: [CSSUI]

애니메이션을 업데이트하고 이벤트를 전송하는 알고리즘은 웹 애니메이션에 정의되어 있습니다. [WEBANIMATIONS]

스크립팅을 지원하는 구현은 CSS 객체 모델을 지원해야 합니다. 다음 기능과 용어는 CSSOM 명세에서 정의되어 있습니다: [CSSOM] [CSSOMVIEW]

다음 기능들과 용어들은 CSS Syntax에 정의되어 있습니다: [CSSSYNTAX]

다음 용어들은 Selectors에 정의되어 있습니다: [SELECTORS]

다음 기능들은 CSS Values and Units에 정의되어 있습니다: [CSSVALUES]

다음 기능들은 CSS View Transitions에 정의되어 있습니다: [CSSVIEWTRANSITIONS]

스타일 속성 용어는 CSS Style Attributes에 정의되어 있습니다. [CSSATTR]

다음 용어들은 CSS Cascading and Inheritance에 정의되어 있습니다: [CSSCASCADE]

CanvasRenderingContext2D 객체의 글꼴 사용은 CSS FontsFont Loading 명세에서 설명된 기능들에 따라 달라집니다. 특히 FontFace 객체와 글꼴 소스 개념에 의존합니다. [CSSFONTS] [CSSFONTLOAD]

다음 인터페이스들과 용어들은 Geometry Interfaces에 정의되어 있습니다: [GEOMETRY]

다음 용어들은 CSS Scoping에 정의되어 있습니다: [CSSSCOPING]

다음 용어들과 기능들은 CSS Color Adjustment에 정의되어 있습니다: [CSSCOLORADJUST]

다음 용어들은 CSS Pseudo-Elements에 정의되어 있습니다: [CSSPSEUDO]

다음 용어들은 CSS Containment에 정의되어 있습니다: [CSSCONTAIN]

다음 용어는 CSS 앵커 포지셔닝에 정의되어 있습니다: [CSSANCHOR]

Intersection Observer

다음 용어는 Intersection Observer에 정의되어 있습니다: [INTERSECTIONOBSERVER]

Resize Observer

다음 용어들은 Resize Observer에 정의되어 있습니다: [RESIZEOBSERVER]

WebGL

다음 인터페이스들은 WebGL 명세서에 정의되어 있습니다: [WEBGL]

WebGPU

다음 인터페이스들은 WebGPU에 정의되어 있습니다: [WEBGPU]

WebVTT

구현체들은 WebVTT를 자막, 캡션, 메타데이터 등의 텍스트 트랙 형식으로 지원할 수 있습니다. [WEBVTT]

이 명세서에서 사용된 다음 용어들은 WebVTT에 정의되어 있습니다:

ARIA

role 속성은 Accessible Rich Internet Applications (ARIA)에 정의되어 있으며, 다음 역할들도 포함됩니다: [ARIA]

또한, 다음 aria-* 콘텐츠 속성들도 ARIA에 정의되어 있습니다: [ARIA]

마지막으로, 다음 용어는 ARIA에 정의되어 있습니다: [ARIA]

콘텐츠 보안 정책

다음 용어들은 콘텐츠 보안 정책에 정의되어 있습니다: [CSP]

Service Workers

다음 용어들은 Service Workers에 정의되어 있습니다: [SW]

보안 컨텍스트

다음 알고리즘들은 보안 컨텍스트에 정의되어 있습니다: [SECURE-CONTEXTS]

권한 정책

다음 용어들은 권한 정책에 정의되어 있습니다: [PERMISSIONSPOLICY]

결제 요청 API

다음 기능은 결제 요청 API에서 정의되었습니다: [PAYMENTREQUEST]

MathML

이 규격에서는 MathML 전체를 지원할 필요는 없지만 (웹 브라우저에서는 권장됨), 특정 기능은 MathML의 일부 요소 구현에 의존합니다. [MATHML]

다음 기능은 수학적 마크업 언어 (MathML)에서 정의됩니다:

SVG

이 규격에서는 SVG 전체를 지원할 필요는 없지만 (웹 브라우저에서는 권장됨), 특정 기능은 SVG의 일부 요소 구현에 의존합니다.

SVG를 구현하는 사용자 에이전트는 SVG 2 사양을 구현해야 하며, 이전 버전은 지원하지 않습니다.

다음 기능은 SVG 2 사양에서 정의됩니다: [SVG]

필터 효과

다음 기능은 필터 효과에서 정의됩니다: [FILTERS]

합성 및 혼합

다음 기능은 합성 및 혼합에서 정의됩니다: [COMPOSITE]

백그라운드 작업의 협력적 스케줄링

다음 기능은 백그라운드 작업의 협력적 스케줄링에서 정의됩니다: [REQUESTIDLECALLBACK]

화면 방향

다음 용어는 화면 방향에서 정의됩니다: [SCREENORIENTATION]

저장소

다음 용어는 저장소에서 정의됩니다: [STORAGE]

웹 앱 매니페스트

다음 기능은 웹 앱 매니페스트에서 정의됩니다: [MANIFEST]

WebAssembly 자바스크립트 인터페이스: ESM 통합

다음 용어들은 WebAssembly 자바스크립트 인터페이스: ESM 통합에서 정의됩니다: [WASMESM]

WebCodecs

다음 기능은 WebCodecs에서 정의됩니다: [WEBCODECS]

WebDriver

다음 용어는 WebDriver에서 정의됩니다: [WEBDRIVER]

WebDriver BiDi

다음 용어는 WebDriver BiDi에서 정의됩니다: [WEBDRIVERBIDI]

웹 암호화 API

다음 용어는 웹 암호화 API에서 정의됩니다: [WEBCRYPTO]

웹소켓

다음 용어는 웹소켓에서 정의됩니다: [WEBSOCKETS]

웹 전송

다음 용어는 웹 전송에서 정의됩니다: [WEBTRANSPORT]

웹 인증: 공개 키 자격 증명에 액세스하기 위한 API

다음 용어는 웹 인증: 공개 키 자격 증명에 액세스하기 위한 API에서 정의됩니다: [WEBAUTHN]

자격 증명 관리

다음 용어는 자격 증명 관리에서 정의됩니다: [CREDMAN]

콘솔

다음 용어는 콘솔에서 정의됩니다: [CONSOLE]

웹 잠금 API

다음 용어는 웹 잠금 API에서 정의됩니다: [WEBLOCKS]

신뢰된 유형

이 사양은 신뢰된 유형에서 정의된 다음 기능을 사용합니다: [TRUSTED-TYPES]

WebRTC API

다음 용어는 WebRTC API에 정의되어 있습니다: [WEBRTC]

Picture-in-Picture API

다음 용어는 Picture-in-Picture API에 정의되어 있습니다: [PICTUREINPICTURE]

유휴 감지 API

다음 용어는 유휴 감지 API에 정의되어 있습니다:

웹 음성 API

다음 용어는 웹 음성 API에 정의되어 있습니다:

WebOTP API

다음 용어는 WebOTP API에 정의되어 있습니다:

웹 공유 API

다음 용어는 웹 공유 API에 정의되어 있습니다:

웹 스마트 카드 API

다음 용어는 웹 스마트 카드 API에 정의되어 있습니다:

웹 백그라운드 동기화

다음 용어는 웹 백그라운드 동기화에 정의되어 있습니다:

웹 주기적 백그라운드 동기화

다음 용어는 웹 주기적 백그라운드 동기화에 정의되어 있습니다:

웹 백그라운드 가져오기

다음 용어는 백그라운드 가져오기에 정의되어 있습니다:

키보드 잠금

다음 용어는 키보드 잠금에 정의되어 있습니다:

웹 MIDI API

다음 용어는 웹 MIDI API에 정의되어 있습니다:

일반 센서 API

다음 용어는 일반 센서 API에 정의되어 있습니다:

WebHID API

다음 용어는 WebHID API에 정의되어 있습니다:

WebXR 장치 API

다음 용어는 WebXR 장치 API에 정의되어 있습니다:


이 명세는 특정 네트워크 프로토콜, 스타일 시트 언어, 스크립팅 언어, 또는 위에 나열된 것들 외의 DOM 명세를 필수적으로 지원해야 하는 것은 아닙니다. 그러나 이 명세에서 설명하는 언어는 CSS를 스타일링 언어로, JavaScript를 스크립팅 언어로, HTTP를 네트워크 프로토콜로 편향되어 있으며, 여러 기능이 이러한 언어와 프로토콜이 사용되고 있음을 전제로 합니다.

HTTP 프로토콜을 구현하는 사용자 에이전트는 HTTP 상태 관리 메커니즘 (쿠키)도 구현해야 합니다. [HTTP] [COOKIES]

이 명세는 각 섹션에서 문자 인코딩, 이미지 형식, 오디오 형식 및 비디오 형식에 대한 추가적인 요구 사항이 있을 수 있습니다.

2.1.10 확장성

이 사양에 대한 공급업체별 독점 사용자 에이전트 확장은 강력히 권장되지 않습니다. 문서에서 이러한 확장을 사용해서는 안 되며, 그렇게 하면 상호 운용성이 감소하고 사용자 기반이 분열되어 특정 사용자 에이전트만 콘텐츠에 접근할 수 있게 됩니다.

모든 확장은 이 사양에서 정의된 기능을 모순되거나 비준수로 만들지 않도록 정의되어야 합니다.

예를 들어, 권장되지 않지만, 구현에서 사용자에게 현재 제어값을 선택하는 데 걸린 시간을 반환하는 "typeTime"이라는 새로운 IDL 속성을 컨트롤에 추가할 수 있습니다. 반면, 양식의 elements 배열에 나타나는 새로운 컨트롤을 정의하는 것은 위의 요구 사항을 위반하는 것으로, 이 사양에서 제공된 elements의 정의를 위반하는 것입니다.


이 사양에 대한 공급업체 중립적인 확장이 필요할 때, 이 사양을 적절히 업데이트하거나 이 사양의 요구 사항을 무효화하는 확장 사양을 작성할 수 있습니다. 이 사양을 적용하는 사람이 해당 확장 사양의 요구 사항을 인정하기로 결정하면, 해당 확장 사양은 이 사양의 준수 요구 사항의 목적에 대해 적용 가능한 사양이 됩니다.

누군가는 임의의 바이트 스트림을 준수하는 것으로 정의하는 사양을 작성한 후, 자신이 만든 무작위 데이터가 준수한다고 주장할 수 있습니다. 그러나 이것이 모든 목적에서 실제로 준수된다는 의미는 아닙니다. 다른 사람이 해당 사양이 자신의 작업에 적용되지 않는다고 결정하면, 해당 무작위 데이터가 단지 쓰레기일 뿐이며 전혀 준수되지 않는다고 정당하게 말할 수 있습니다. 준수에 관한 한, 특정 커뮤니티에서 중요한 것은 그 커뮤니티가 적용 가능한 것으로 동의하는 것입니다.


사용자 에이전트는 이해하지 못하는 요소와 속성을 의미적으로 중립적으로 취급해야 하며, 이를 DOM에 남겨두고(CSS 프로세서의 경우 CSS에 따라 스타일을 지정) 의미를 유추해서는 안 됩니다.

기능에 대한 지원이 비활성화된 경우(예: 보안 문제를 완화하기 위한 긴급 조치, 개발 지원, 성능 문제 등), 사용자 에이전트는 해당 기능에 대한 지원이 전혀 없었던 것처럼 행동해야 하며, 해당 기능이 이 사양에서 언급되지 않은 것처럼 행동해야 합니다. 예를 들어, 특정 기능이 Web IDL 인터페이스의 속성을 통해 접근되는 경우, 해당 속성 자체는 해당 인터페이스를 구현하는 객체에서 생략되어야 하며, 속성을 객체에 남겨두고 null을 반환하거나 예외를 발생시키는 것은 충분하지 않습니다.

2.1.11 XPath 및 XSLT와의 상호작용

이 사양에 설명된 방식으로 파싱되거나 생성된 HTML 문서에서 작동하는 XPath 1.0의 구현은 다음 편집이 XPath 1.0 사양에 적용된 것처럼 작동해야 합니다.

먼저, 다음 단락을 제거합니다:

노드 테스트의 QName은 표현 컨텍스트에서 네임스페이스 선언을 사용하여 확장된 이름으로 확장됩니다. 이는 시작 및 종료 태그의 요소 유형 이름에 대해 확장이 수행되는 방식과 동일하지만, xmlns로 선언된 기본 네임스페이스는 사용되지 않습니다: QName에 접두사가 없으면 네임스페이스 URI는 null입니다 (속성 이름이 확장되는 방식과 동일합니다). QName에 표현 컨텍스트에서 네임스페이스 선언이 없는 접두사가 있는 경우 오류가 발생합니다.

그런 다음, 다음 내용으로 대체합니다:

노드 테스트의 QName은 표현 컨텍스트에서 네임스페이스 선언을 사용하여 확장된 이름으로 확장됩니다. QName에 접두사가 있는 경우, 이 접두사에 대한 네임스페이스 선언이 표현 컨텍스트에 있어야 하며, 해당 네임스페이스 URI는 이 접두사와 연결된 URI입니다. QName에 표현 컨텍스트에서 네임스페이스 선언이 없는 접두사가 있는 경우 오류가 발생합니다.

QName에 접두사가 없고 축의 주요 노드 유형이 요소인 경우 기본 요소 네임스페이스가 사용됩니다. 그렇지 않고 QName에 접두사가 없는 경우 네임스페이스 URI는 null입니다. 기본 요소 네임스페이스는 XPath 표현식의 컨텍스트 구성원입니다. DOM3 XPath API를 통해 XPath 표현식을 실행할 때 기본 요소 네임스페이스의 값은 다음과 같이 결정됩니다:

  1. 컨텍스트 노드가 HTML DOM에서 온 경우 기본 요소 네임스페이스는 "http://www.w3.org/1999/xhtml"입니다.
  2. 그 외의 경우 기본 요소 네임스페이스 URI는 null입니다.

이는 XPath 2.0의 기본 요소 네임스페이스 기능을 XPath 1.0에 추가하고, HTML 문서에 대해 HTML 네임스페이스를 기본 요소 네임스페이스로 사용하는 것과 동일합니다. 이는 이 사양이 HTML 요소에 사용되는 네임스페이스에 도입하는 변경 사항을 지원하면서도 기존 HTML 콘텐츠와 호환되도록 구현하려는 욕구에서 비롯되었으며, XPath 2.0보다는 XPath 1.0을 사용하려는 욕구에서 비롯되었습니다.

이 변경 사항은 XPath 1.0 명세의 고의적인 위반이며, 구현이 레거시 콘텐츠와 호환되도록 하면서도 이 명세가 HTML 요소에 사용되는 네임스페이스에 관해 도입하는 변경 사항을 계속 지원하고자 하는 바람에서 비롯되었습니다. [XPATH10]


XSLT 1.0 프로세서가 출력 메서드가 "html"인 경우(DOM으로 출력하는 경우 XSLT 1.0에서의 기본 규칙을 통해 명시적으로 또는 기본 규칙을 통해) 다음과 같이 영향을 받습니다:

변환 프로그램이 네임스페이스가 없는 요소를 출력하는 경우, 프로세서는 해당 DOM 요소 노드를 구성하기 전에 요소의 네임스페이스를 HTML 네임스페이스로 변경하고, 요소의 로컬 이름을 ASCII 소문자로 변환하며, 요소의 비네임스페이스 속성의 이름도 ASCII 소문자로 변환해야 합니다.

이 요구 사항은 XSLT 1.0 명세의 고의적인 위반이며, 이 명세가 HTML의 네임스페이스 및 대소문자 구분 규칙을 변경하여 DOM 기반 XSLT 변환과 호환되지 않을 수 있기 때문에 필요합니다. (출력을 직렬화하는 프로세서는 영향을 받지 않습니다.) [XSLT10]


이 사양은 XSLT 처리와 HTML 파서 인프라가 상호작용하는 방식을 정확히 명시하지 않습니다 (예: XSLT 프로세서가 모든 요소를 열린 요소의 스택에 넣는 것처럼 작동하는지 여부). 그러나 XSLT 프로세서는 성공적으로 완료된 경우 파싱을 중지해야 하며, 중단된 경우 먼저 "interactive"로, 그 다음 "complete"로 현재 문서 준비 상태를 업데이트해야 합니다.


이 사양은 XSLT가 탐색 알고리즘과 상호작용하는 방식, 이벤트 루프와의 연관성, 또는 오류 페이지가 처리되는 방식(XSLT 오류가 증분 XSLT 출력을 대체하는지, 인라인으로 렌더링되는지 등)을 명시하지 않습니다.

XSLT와 HTML 간의 상호작용에 관한 추가적인 비규범적 설명이 script 요소 섹션에 있으며, XSLT, XPath, HTML 간의 상호작용에 관한 설명이 template 요소 섹션에 있습니다.

2.2 정책으로 제어되는 기능

Headers/Permissions-Policy/document-domain

하나의 엔진에서만 지원됩니다.

Firefox🔰 74+Safari지원 안 함Chrome🔰 88+
Opera?Edge🔰 88+
Edge (Legacy)?Internet Explorer지원 안 함
Firefox Android?Safari iOS?Chrome Android지원 안 함WebView Android?Samsung Internet?Opera Android?

이 문서는 다음과 같은 정책으로 제어되는 기능을 정의합니다:

Headers/Feature-Policy/autoplay

Firefox🔰 74+Safari지원 안 함Chrome64+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안 함
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

Headers/Permissions-Policy/autoplay

하나의 엔진에서만 지원됩니다.

Firefox🔰 74+Safari지원 안 함Chrome88+
Opera?Edge88+
Edge (Legacy)?Internet Explorer지원 안 함
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

2.3 공통 마이크로 구문

HTML에서는 날짜나 숫자와 같은 특정 데이터 유형을 허용하는 다양한 위치가 있습니다. 이 섹션에서는 해당 형식의 콘텐츠에 대한 적합성 기준과 이를 파싱하는 방법을 설명합니다.

구현자들은 아래 설명된 구문을 파싱하기 위해 사용할 수 있는 서드파티 라이브러리를 신중하게 검토할 것을 강력히 권장합니다. 예를 들어, 날짜 라이브러리는 이 사양에서 요구하는 것과 다른 오류 처리 동작을 구현할 가능성이 큽니다. 이는 유사한 날짜 구문을 설명하는 사양에서는 오류 처리 동작이 자주 정의되지 않기 때문에, 구현에 따라 오류를 처리하는 방식이 크게 다를 수 있기 때문입니다.

2.3.1 공통 파서 관용구

아래에 설명된 일부 마이크로 파서는 파싱할 문자열을 저장하는 input 변수와 input에서 다음에 파싱할 문자를 가리키는 position 변수를 가지는 패턴을 따릅니다.

2.3.2 불리언 속성

많은 속성이 불리언 속성입니다. 요소에 불리언 속성이 존재하면 true 값을 나타내고, 속성이 없으면 false 값을 나타냅니다.

속성이 존재하는 경우, 그 값은 빈 문자열이거나 속성의 표준 이름과 ASCII 대소문자 구분 없이 일치하는 값이어야 하며, 앞뒤에 공백이 없어야 합니다.

불리언 속성에는 "true"와 "false" 값을 사용할 수 없습니다. false 값을 나타내려면 속성을 완전히 생략해야 합니다.

다음은 체크되어 있고 비활성화된 체크박스의 예입니다. checkeddisabled 속성이 불리언 속성입니다.

<label><input type=checkbox checked name=cheese disabled> Cheese</label>

이 코드는 다음과 같이 동일하게 작성할 수 있습니다:

<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>

스타일을 혼합해서 사용하는 것도 가능하며, 다음과 같이 작성해도 여전히 동일한 의미를 갖습니다:

<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

2.3.3 키워드와 열거형 속성

일부 속성은 열거형 속성이라고 하며, 한정된 상태 집합을 가집니다. 이러한 속성의 상태는 속성 값, 키워드/상태 매핑 집합, 그리고 속성의 명세에 정의될 수 있는 세 가지 특수 상태를 조합하여 결정됩니다. 이 특수 상태는 잘못된 값 기본값, 값 누락 기본값, 빈 값 기본값입니다.

여러 키워드가 동일한 상태에 매핑될 수 있습니다.

속성의 상태를 결정하려면 다음 단계를 따르세요:

  1. 속성이 지정되지 않은 경우:

    1. 속성에 값 누락 기본값 상태가 정의되어 있으면, 해당 값 누락 기본값 상태를 반환합니다.

    2. 그렇지 않으면 상태를 반환하지 않습니다.

  2. 속성의 값이 해당 속성에 대해 정의된 키워드 중 하나와 ASCII 대소문자 구분 없이 일치하면, 해당 키워드가 나타내는 상태를 반환합니다.

  3. 속성에 빈 값 기본값 상태가 정의되어 있고, 속성의 값이 빈 문자열이면, 해당 빈 값 기본값 상태를 반환합니다.

  4. 속성에 잘못된 값 기본값 상태가 정의되어 있으면, 해당 잘못된 값 기본값 상태를 반환합니다.

  5. 상태를 반환하지 않습니다.

작성 준수 목적상, 열거형 속성이 지정된 경우 속성 값은 다음 중 하나여야 합니다:

반영 목적상, 어떤 키워드가 해당 상태로 매핑되는 경우, 그 상태는 정식 키워드를 가진다고 합니다. 이는 다음과 같이 결정됩니다:

  1. 주어진 상태로 매핑되는 키워드가 하나뿐이면, 바로 그 키워드입니다.

  2. 주어진 상태로 매핑되는 적합한 키워드가 하나뿐이면, 바로 그 적합한 키워드입니다.

  3. 주어진 상태로 매핑되는 적합한 키워드가 두 개이고, 그 중 하나가 빈 문자열인 경우, 정식 키워드는 빈 문자열이 아닌 적합한 키워드입니다.

  4. 그 외의 경우, 해당 상태의 정식 키워드는 속성 명세에 명시적으로 제시됩니다.

2.3.4 숫자

2.3.4.1 부호 있는 정수

문자열이 하나 이상의 ASCII 숫자로 구성되고, 선택적으로 U+002D 하이픈-마이너스 문자(-)로 시작하는 경우, 그 문자열은 유효한 정수입니다.

U+002D 하이픈-마이너스(-) 접두사가 없는 유효한 정수는 해당 숫자 문자열로 나타낸 10진수 숫자를 나타냅니다. U+002D 하이픈-마이너스(-) 접두사가 있는 유효한 정수는 하이픈-마이너스 뒤에 나오는 숫자 문자열로 나타낸 10진수 숫자에서 0을 뺀 값을 나타냅니다.

정수 파싱 규칙은 다음 알고리즘에 제시된 대로입니다. 호출될 때, 주어진 순서대로 단계를 따라야 하며, 값을 반환하는 첫 번째 단계에서 중단합니다. 이 알고리즘은 정수 또는 오류를 반환합니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

  3. sign을(를) "positive"로 설정합니다.

  4. ASCII 공백을 건너뜁니다 position이 가리키는 input 내에서.

  5. positioninput의 끝을 지난 경우, 오류를 반환합니다.

  6. position이 가리키는 문자(첫 번째 문자)가 U+002D 하이픈-마이너스 문자(-)인 경우:

    1. sign을(를) "negative"로 설정합니다.
    2. position을(를) 다음 문자로 이동시킵니다.
    3. positioninput의 끝을 지난 경우, 오류를 반환합니다.

    그렇지 않고 position이 가리키는 문자(첫 번째 문자)가 U+002B 플러스 기호(+)인 경우:

    1. position을(를) 다음 문자로 이동시킵니다. ("+"는 무시되지만, 이는 적합하지 않습니다.)
    2. positioninput의 끝을 지난 경우, 오류를 반환합니다.
  7. position이 가리키는 문자가 ASCII 숫자가 아니면, 오류를 반환합니다.

  8. 코드 포인트 시퀀스를 수집합니다 position이 가리키는 input에서 ASCII 숫자로 구성된 시퀀스를 수집하고, 결과 시퀀스를 10진수 정수로 해석합니다. value을(를) 그 정수로 설정합니다.

  9. sign이 "positive"이면 value를 반환하고, 그렇지 않으면 value에서 0을 뺀 결과를 반환합니다.

2.3.4.2 음이 아닌 정수

문자열이 하나 이상의 ASCII 숫자로 구성된 경우, 그 문자열은 유효한 음이 아닌 정수입니다.

유효한 음이 아닌 정수는 해당 숫자 문자열로 나타낸 10진수 숫자를 나타냅니다.

음이 아닌 정수를 파싱하는 규칙은 다음 알고리즘에 제시된 대로입니다. 호출될 때, 주어진 순서대로 단계를 따라야 하며, 값을 반환하는 첫 번째 단계에서 중단합니다. 이 알고리즘은 0, 양의 정수 또는 오류를 반환합니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. value을(를) 정수 파싱 규칙을 사용하여 input을 파싱한 결과로 설정합니다.

  3. value가 오류이면, 오류를 반환합니다.

  4. value가 0보다 작으면, 오류를 반환합니다.

  5. value을(를) 반환합니다.

2.3.4.3 부동 소수점 숫자

문자열이 다음으로 구성된 경우, 그 문자열은 유효한 부동 소수점 숫자입니다:

  1. 선택적으로, U+002D 하이픈-마이너스 문자(-).

  2. 다음 중 하나 또는 둘 다, 주어진 순서대로:

    1. 하나 이상의 ASCII 숫자.

    2. 다음 두 가지, 주어진 순서대로:

      1. 하나의 U+002E 풀 스톱 문자(.).

      2. 하나 이상의 ASCII 숫자.

  3. 선택적으로:

    1. U+0065 라틴 소문자 e (e) 또는 U+0045 라틴 대문자 E (E).

    2. 선택적으로, U+002D 하이픈-마이너스 문자(-) 또는 U+002B 플러스 기호(+).

    3. 하나 이상의 ASCII 숫자.

유효한 부동 소수점 숫자는 유효숫자(significand)를 10의 지수승(exponent)으로 곱한 값으로 나타낸 숫자입니다. 여기서 유효숫자는 첫 번째 숫자로, 10진수로 해석됩니다(소수점 및 소수점 이후 숫자가 있을 경우 포함하며, 문자열 전체가 U+002D 하이픈-마이너스 문자(-)로 시작하고 숫자가 0이 아닌 경우 유효숫자를 음수로 해석). 지수는 E 뒤에 나오는 숫자입니다(숫자가 0이 아닌 경우, E와 숫자 사이에 U+002D 하이픈-마이너스 문자(-)가 있으면 지수를 음수로 해석하며, 그렇지 않으면 E와 숫자 사이에 U+002B 플러스 기호(+)가 있을 경우 이를 무시합니다). E가 없으면 지수는 0으로 처리됩니다.

Infinity 및 NaN(숫자가 아님) 값은 유효한 부동 소수점 숫자가 아닙니다.

유효한 부동 소수점 숫자 개념은 일반적으로 저자가 사용할 수 있는 것을 제한하는 데만 사용되며, 사용자 에이전트 요구사항은 아래의 부동 소수점 숫자 값을 파싱하는 규칙을 사용합니다(예: max 속성이 progress 요소에 있는 경우). 그러나 일부 경우에는 사용자 에이전트 요구사항에 문자열이 유효한 부동 소수점 숫자인지 확인하는 것이 포함됩니다(예: 값 정화 알고리즘에서 Number 상태가 input 요소에 있는 경우, 또는 srcset 속성 파싱 알고리즘에서).

부동 소수점 숫자로서 숫자 n의 최적 표현ToString(n)을 실행하여 얻은 문자열입니다. ToString 추상 연산은 고유하게 결정되지 않습니다. 특정 값에 대해 ToString에서 얻을 수 있는 여러 문자열이 있을 때, 사용자 에이전트는 항상 해당 값에 대해 동일한 문자열을 반환해야 합니다(다른 사용자 에이전트에서 사용된 값과 다를 수 있음에도 불구하고).

부동 소수점 숫자 값을 파싱하는 규칙은 다음 알고리즘에 제시된 대로입니다. 이 알고리즘은 반환하는 단계에서 즉시 중단해야 합니다. 이 알고리즘은 숫자 또는 오류를 반환합니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

  3. value를 1로 설정합니다.

  4. divisor를 1로 설정합니다.

  5. exponent를 1로 설정합니다.

  6. ASCII 공백을 건너뜁니다 position이 가리키는 input 내에서.

  7. positioninput의 끝을 지난 경우, 오류를 반환합니다.

  8. position이 가리키는 문자가 U+002D 하이픈-마이너스 문자(-)인 경우:

    1. valuedivisor를 −1로 변경합니다.
    2. position을(를) 다음 문자로 이동시킵니다.
    3. positioninput의 끝을 지난 경우, 오류를 반환합니다.

    그렇지 않고 position이 가리키는 문자(첫 번째 문자)가 U+002B 플러스 기호(+)인 경우:

    1. position을(를) 다음 문자로 이동시킵니다. ("+"는 무시되지만, 이는 적합하지 않습니다.)
    2. positioninput의 끝을 지난 경우, 오류를 반환합니다.
  9. position이 가리키는 문자가 U+002E 풀 스톱 문자(.)이고, 그 다음 문자가 ASCII 숫자인 경우, value를 0으로 설정하고 fraction 단계로 이동합니다.

  10. position이 가리키는 문자가 ASCII 숫자가 아니면, 오류를 반환합니다.

  11. 코드 포인트 시퀀스를 수집합니다 input에서 ASCII 숫자로 구성된 시퀀스를 수집하고, 이를 10진수 정수로 해석하여 value에 곱합니다.

  12. positioninput의 끝을 지난 경우, conversion 단계로 이동합니다.
  13. Fraction: position이 가리키는 문자가 U+002E 풀 스톱(.)인 경우, 다음 단계를 실행합니다:

    1. position을(를) 다음 문자로 이동시킵니다.
    2. positioninput의 끝을 지나거나, position이 가리키는 문자가 ASCII 숫자, U+0065 라틴 소문자 e (e), 또는 U+0045 라틴 대문자 E (E)가 아닌 경우, conversion 단계로 이동합니다.

    3. position이 가리키는 문자가 U+0065 라틴 소문자 e 또는 U+0045 라틴 대문자 E이면, 이 단계의 나머지를 건너뜁니다.

    4. Fraction loop: divisor에 10을 곱합니다.

    5. position이 가리키는 문자를 10진수 숫자(0..9)로 해석하고 divisor로 나눈 값을 value에 더합니다.
    6. position을(를) 다음 문자로 이동시킵니다.
    7. positioninput의 끝을 지난 경우, conversion 단계로 이동합니다.

    8. position이 가리키는 문자가 ASCII 숫자인 경우, 이 단계의 fraction loop로 돌아갑니다.

  14. position이 가리키는 문자가 U+0065 (e) 또는 U+0045 (E)인 경우, 다음을 실행합니다:

    1. position을(를) 다음 문자로 이동시킵니다.
    2. positioninput의 끝을 지난 경우, conversion 단계로 이동합니다.

    3. position이 가리키는 문자가 U+002D 하이픈-마이너스 문자(-)인 경우:

      1. exponent를 −1로 변경합니다.
      2. position을(를) 다음 문자로 이동시킵니다.
      3. positioninput의 끝을 지난 경우, conversion 단계로 이동합니다.

      그렇지 않고 position이 가리키는 문자가 U+002B 플러스 기호(+)인 경우:

      1. position을(를) 다음 문자로 이동시킵니다.
      2. positioninput의 끝을 지난 경우, conversion 단계로 이동합니다.
    4. position이 가리키는 문자가 ASCII 숫자가 아니면, conversion 단계로 이동합니다.
    5. 코드 포인트 시퀀스를 수집합니다 input에서 ASCII 숫자로 구성된 시퀀스를 수집하고, 이를 10진수 정수로 해석하여 exponent에 곱합니다.

    6. value에 10의 exponent 제곱 값을 곱합니다.
  15. Conversion: S를 유한한 IEEE 754 배정밀도 부동 소수점 값 집합(−0 제외)으로 설정하되, 21024 및 −21024를 추가합니다.

  16. rounded-valuevalue에 가장 가까운 S의 숫자로 설정하되, 두 개의 값이 동일하게 가까운 경우 유효숫자가 짝수인 숫자를 선택합니다(이 목적을 위해 21024 및 −21024는 유효숫자가 짝수로 간주됨).

  17. rounded-value가 21024 또는 −21024인 경우, 오류를 반환합니다.

  18. rounded-value을(를) 반환합니다.

2.3.4.4 백분율과 길이

차원 값을 파싱하는 규칙은 다음 알고리즘에 제시된 대로입니다. 호출될 때, 주어진 순서대로 단계를 따라야 하며, 값을 반환하는 첫 번째 단계에서 중단합니다. 이 알고리즘은 0.0 이상인 숫자 또는 실패를 반환합니다. 숫자가 반환된 경우, 이는 백분율 또는 길이로 추가로 분류됩니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) 위치 변수로 설정하며, 초기값은 input의 시작 위치입니다.

  3. ASCII 공백을 건너뜁니다 position이 가리키는 input 내에서.

  4. positioninput의 끝을 지나거나 input 내에서 position이 가리키는 코드 포인트가 ASCII 숫자가 아닌 경우, 실패를 반환합니다.

  5. 코드 포인트 시퀀스를 수집합니다 input에서 ASCII 숫자로 구성된 시퀀스를 수집하고, 이를 10진수 정수로 해석하여 value에 설정합니다.

  6. positioninput의 끝을 지난 경우, value을(를) 길이로 반환합니다.

  7. position이 가리키는 코드 포인트가 U+002E (.)인 경우, 다음을 실행합니다:

    1. position을(를) 1만큼 이동시킵니다.
    2. positioninput의 끝을 지나거나 position이 가리키는 코드 포인트가 ASCII 숫자가 아닌 경우, 현재 차원 값value, input, position과 함께 반환합니다.
    3. divisor에 1을 설정합니다.
    4. 다음 반복문을 실행합니다:

      1. divisor에 10을 곱합니다.
      2. position이 가리키는 코드 포인트를 10진수 숫자(0..9)로 해석하여 divisor로 나눈 값을 value에 더합니다.
      3. position을(를) 1만큼 이동시킵니다.
      4. positioninput의 끝을 지나면 value을(를) 길이로 반환합니다.
      5. position이 가리키는 코드 포인트가 ASCII 숫자가 아니면, 반복을 중단합니다.
  8. 현재 차원 값value, input, position과 함께 반환합니다.

현재 차원 값value, input, position이 주어진 경우, 다음과 같이 결정됩니다:

  1. positioninput의 끝을 지난 경우, value를 길이로 반환합니다.

  2. position이 가리키는 코드 포인트가 U+0025 (%)인 경우, value를 백분율로 반환합니다.

  3. value를 길이로 반환합니다.

2.3.4.5 0이 아닌 백분율과 길이

0이 아닌 차원 값을 파싱하는 규칙은 다음 알고리즘에 제시된 대로입니다. 호출될 때, 주어진 순서대로 단계를 따라야 하며, 값을 반환하는 첫 번째 단계에서 중단합니다. 이 알고리즘은 0.0보다 큰 숫자 또는 오류를 반환합니다. 숫자가 반환된 경우, 이는 백분율 또는 길이로 추가로 분류됩니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. value차원 값을 파싱하는 규칙을 사용하여 input을 파싱한 결과로 설정합니다.

  3. value가 오류이면, 오류를 반환합니다.

  4. value가 0이면, 오류를 반환합니다.

  5. value가 백분율인 경우, value를 백분율로 반환합니다.

  6. value를 길이로 반환합니다.

2.3.4.6 부동 소수점 숫자 목록

유효한 부동 소수점 숫자 목록유효한 부동 소수점 숫자가 U+002C 콤마 문자로 구분된 것입니다. 다른 문자가 없어야 합니다(예: ASCII 공백이 없어야 함). 또한, 부동 소수점 숫자의 개수나 허용되는 값의 범위에 제한이 있을 수 있습니다.

부동 소수점 숫자 목록을 파싱하는 규칙은 다음과 같습니다:

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

  3. numbers를 초기에는 비어 있는 부동 소수점 숫자 목록으로 설정합니다. 이 목록이 이 알고리즘의 결과가 됩니다.

  4. 코드 포인트 시퀀스를 수집합니다 position이 가리키는 input 내에서 ASCII 공백, U+002C 콤마, U+003B 세미콜론 문자를 수집합니다. 이는 앞부분의 구분 문자를 건너뜁니다.

  5. positioninput의 끝을 지나지 않았을 때:

    1. 코드 포인트 시퀀스를 수집합니다 position이 가리키는 input 내에서 ASCII 공백, U+002C 콤마, U+003B 세미콜론, ASCII 숫자, U+002E 풀 스톱, U+002D 하이픈-마이너스 문자가 아닌 코드 포인트를 수집합니다. 이는 앞부분의 쓰레기를 건너뜁니다.

    2. 코드 포인트 시퀀스를 수집합니다 position이 가리키는 input 내에서 ASCII 공백, U+002C 콤마, U+003B 세미콜론이 아닌 코드 포인트를 수집하고, 이를 unparsed number로 설정합니다.

    3. number부동 소수점 숫자 값을 파싱하는 규칙을 사용하여 unparsed number를 파싱한 결과로 설정합니다.

    4. number가 오류이면, number를 0으로 설정합니다.

    5. numbernumbers에 추가합니다.

    6. 코드 포인트 시퀀스를 수집합니다 position이 가리키는 input 내에서 ASCII 공백, U+002C 콤마, U+003B 세미콜론 문자를 수집합니다. 이는 구분 문자를 건너뜁니다.

  6. numbers을(를) 반환합니다.

2.3.4.7 차원 목록

차원 목록을 파싱하는 규칙은 다음과 같습니다. 이 규칙은 0개 이상의 숫자와 단위로 구성된 쌍의 목록을 반환합니다. 단위는 백분율, 상대적인, 절대적인 중 하나입니다.

  1. raw input을(를) 파싱 중인 문자열로 설정합니다.

  2. 만약 raw input의 마지막 문자가 U+002C 콤마 문자(,)인 경우, 해당 문자를 raw input에서 제거합니다.

  3. 문자열 raw input을 콤마로 나눕니다. raw tokens을(를) 생성된 토큰 목록으로 설정합니다.

  4. result을(를) 비어 있는 숫자/단위 쌍 목록으로 설정합니다.

  5. raw tokens의 각 토큰에 대해 다음 하위 단계를 실행합니다:

    1. input을(를) 해당 토큰으로 설정합니다.

    2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

    3. value를 0으로 설정합니다.

    4. unit을(를) 절대적인으로 설정합니다.

    5. positioninput의 끝을 지난 경우, unit을(를) 상대적인으로 설정하고 마지막 하위 단계로 이동합니다.

    6. position이 가리키는 문자가 ASCII 숫자인 경우, 코드 포인트 시퀀스를 수집합니다 input에서, 결과 시퀀스를 10진수 정수로 해석하여 value에 추가합니다.

    7. position이 가리키는 문자가 U+002E (.)인 경우:

      1. 코드 포인트 시퀀스를 수집합니다 ASCII 공백ASCII 숫자로 구성된 시퀀스를 input에서 수집합니다. s을(를) 생성된 시퀀스로 설정합니다.

      2. s에서 모든 ASCII 공백을 제거합니다.

      3. s이(가) 빈 문자열이 아닌 경우:

        1. lengths의 문자 수로 설정합니다.

        2. fraction을(를) s을(를) 10진수 정수로 해석한 결과로 설정하고, 그 숫자를 10length로 나눕니다.

        3. valuefraction을(를) 추가합니다.

    8. ASCII 공백을 건너뜁니다 input 내에서 position이 가리키는 위치에 따라.

    9. position이 가리키는 문자가 U+0025 퍼센트 기호(%)인 경우, unit을(를) 백분율로 설정합니다.

      그렇지 않고, position이 가리키는 문자가 U+002A 별표 문자(*)인 경우, unit을(를) 상대적인으로 설정합니다.

    10. resultvalueunit으로 구성된 항목을 추가합니다.

  6. result 목록을 반환합니다.

2.3.5 날짜와 시간

다음 알고리즘에서는, 해당 yearmonth에 있는 일수는 다음과 같습니다: month이 1, 3, 5, 7, 8, 10, 또는 12이면 31일, month이 4, 6, 9, 또는 11이면 30일, year가 400으로 나누어 떨어지거나, 4로 나누어 떨어지지만 100으로 나누어 떨어지지 않는 경우 month이 2이면 29일, 그렇지 않으면 28일. 이는 그레고리력의 윤년을 고려한 것입니다. [GREGORIAN]

이 섹션에서 정의된 날짜와 시간 구문에서 ASCII 숫자가 사용되는 경우, 이들은 10진수로 숫자를 나타냅니다.

여기서 설명하는 형식은 해당 ISO8601 형식의 하위 집합을 의도하고 있지만, 이 명세서는 ISO8601보다 훨씬 자세하게 파싱 규칙을 정의합니다. 따라서 구현자는 아래에 설명된 파싱 규칙을 구현하기 위해 날짜 파싱 라이브러리를 사용하기 전에 주의 깊게 검토해야 합니다. ISO8601 라이브러리가 날짜와 시간을 정확히 동일한 방식으로 파싱하지 않을 수 있습니다. [ISO8601]

이 명세서가 프롤렙틱 그레고리력을 참조하는 경우, 이는 현대 그레고리력을 의미하며, 연도 1로 소급하여 적용한 것입니다. 프롤렙틱 그레고리력에 있는 날짜는 이 명세서가 언급한 대로 해당 달력으로 설명된 것입니다. 그 당시(또는 장소)에 그 달력이 사용되지 않았더라도 마찬가지입니다. [GREGORIAN]

이 명세서에서 그레고리력을 와이어 형식으로 사용하는 것은 의사 결정에 참여한 사람들의 문화적 편향에서 비롯된 임의의 선택입니다. 저자를 위한 양식에서 날짜, 시간, 숫자 형식에 대해 논의하는 섹션과 양식 컨트롤의 지역화와 관련된 구현 참고 사항을 참고합니다. time 요소도 참조합니다.

2.3.5.1

은 특정 프롤렙틱 그레고리력 날짜로 구성되며, 시간대 정보가 없고 연도와 월 이상의 날짜 정보가 없는 것입니다. [GREGORIAN]

문자열이 yearmonth을 나타내는 유효한 월 문자열인 경우, 이는 주어진 순서로 다음 구성 요소로 구성됩니다:

  1. year을(를) 나타내는 네 개 이상의 ASCII 숫자, year > 0
  2. U+002D 하이픈-마이너스 문자(-)
  3. month을(를) 나타내는 두 개의 ASCII 숫자, 1 ≤ month ≤ 12 범위 내

월 문자열을 파싱하는 규칙은 다음과 같습니다. 이는 연도와 월을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

  3. 월 구성 요소를 파싱하여 yearmonth을 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  4. positioninput의 끝을 넘지 않는 경우, 실패합니다.

  5. yearmonth을 반환합니다.

월 구성 요소를 파싱하는 규칙은 주어진 input 문자열과 position을 사용합니다. 이는 연도와 월을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 4자 이상이 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. year를 해당 숫자로 설정합니다.

  2. year가 0보다 큰 숫자가 아니면 실패합니다.

  3. positioninput의 끝을 벗어나거나 position의 문자가 U+002D HYPHEN-MINUS 문자가 아니면 실패합니다. 그렇지 않으면 position을 한 문자 앞으로 이동합니다.

  4. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. month를 해당 숫자로 설정합니다.

  5. month가 1 ≤ month ≤ 12 범위의 숫자가 아니면 실패합니다.

  6. yearmonth를 반환합니다.

2.3.5.2 날짜

날짜는 특정 프롤렙틱 그레고리력 날짜로 구성되며, 시간대 정보가 없고 연도, 월, 일로 구성됩니다. [GREGORIAN]

문자열이 year, month, day을 나타내는 유효한 날짜 문자열인 경우, 이는 주어진 순서로 다음 구성 요소로 구성됩니다:

  1. 유효한 월 문자열, yearmonth을 나타냅니다.
  2. U+002D 하이픈-마이너스 문자(-)
  3. 두 개의 ASCII 숫자, day을 나타내며, 1 ≤ daymaxday 범위 내. 여기서 maxday해당 월과 연도에 있는 일수입니다.

날짜 문자열을 파싱하는 규칙은 다음과 같습니다. 이는 날짜를 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

  3. 날짜 구성 요소를 파싱하여 year, month, day을 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  4. positioninput의 끝을 넘지 않는 경우, 실패합니다.

  5. date을(를) year, month, day을 가진 날짜로 설정합니다.

  6. date를 반환합니다.

날짜 구성 요소를 파싱하는 규칙은 주어진 input 문자열과 position을 사용합니다. 이는 연도, 월, 일 또는 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. 월 구성 요소를 파싱하여 yearmonth을 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  2. maxday을(를) 해당 월과 연도에 있는 일수로 설정합니다.

  3. positioninput의 끝을 넘거나, position이 가리키는 문자가 U+002D 하이픈-마이너스 문자가 아닌 경우, 알고리즘이 실패합니다. 그렇지 않으면, position을 한 문자 앞으로 이동시킵니다.

  4. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. day를 해당 숫자로 설정합니다.

  5. day이 1 ≤ daymaxday 범위 내 숫자가 아니면, 알고리즘이 실패합니다.

  6. year, month, day을 반환합니다.

2.3.5.3 연도 없는 날짜

연도 없는 날짜는 그레고리력의 특정 월과 해당 월 내의 특정 일로 구성되며, 연도는 포함되지 않습니다. [GREGORIAN]

문자열이 monthday을 나타내는 유효한 연도 없는 날짜 문자열인 경우, 이는 주어진 순서로 다음 구성 요소로 구성됩니다:

  1. 선택적으로, 두 개의 U+002D 하이픈-마이너스 문자(-)
  2. 두 개의 ASCII 숫자, month을 나타내며, 1 ≤ month ≤ 12 범위 내
  3. U+002D 하이픈-마이너스 문자(-)
  4. 두 개의 ASCII 숫자, day을 나타내며, 1 ≤ daymaxday 범위 내. 여기서 maxday해당 월에 있는 일수이며, 임의의 윤년(예: 4 또는 2000년)의 기준을 따릅니다.

다시 말해, month이 "02"(2월)인 경우, 윤년으로 가정하여 day은 29일이 될 수 있습니다.

연도 없는 날짜 문자열을 파싱하는 규칙은 다음과 같습니다. 이는 월과 일을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.

  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.

  3. 연도 없는 날짜 구성 요소를 파싱하여 monthday을 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  4. positioninput의 끝을 넘지 않는 경우, 실패합니다.

  5. monthday을 반환합니다.

연도 없는 날짜 구성 요소를 파싱하는 규칙은 주어진 input 문자열과 position을 사용합니다. 이는 월과 일을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. 코드 포인트 시퀀스를 수집합니다 input에서 U+002D 하이픈-마이너스 문자(-)로 구성된 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 0 또는 2 글자가 되지 않으면, 알고리즘이 실패합니다.

  2. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. month를 해당 숫자로 설정합니다.

  3. month이 1 ≤ month ≤ 12 범위 내 숫자가 아니면, 알고리즘이 실패합니다.

  4. maxday을(를) 해당 월의 임의의 윤년(예: 4 또는 2000년) 기준 일수로 설정합니다.

  5. positioninput의 끝을 넘거나, position이 가리키는 문자가 U+002D 하이픈-마이너스 문자가 아닌 경우, 알고리즘이 실패합니다. 그렇지 않으면, position을 한 문자 앞으로 이동시킵니다.

  6. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. day를 해당 숫자로 설정합니다.

  7. day이 1 ≤ daymaxday 범위 내 숫자가 아니면, 알고리즘이 실패합니다.

  8. monthday을 반환합니다.

2.3.5.4 시간

시간은 시간대 정보가 없는 특정 시간으로, 시간, 분, 초, 초의 일부로 구성됩니다.

문자열이 hour(시간), minute(분), second(초)을 나타내는 유효한 시간 문자열인 경우, 이는 주어진 순서로 다음 구성 요소로 구성됩니다:

  1. 두 개의 ASCII 숫자, hour을 나타내며, 0 ≤ hour ≤ 23 범위 내
  2. U+003A 콜론 문자 (:)
  3. 두 개의 ASCII 숫자, minute을 나타내며, 0 ≤ minute ≤ 59 범위 내
  4. 만약 second가 0이 아닌 경우, 또는 선택적으로 second가 0인 경우:
    1. U+003A 콜론 문자 (:)
    2. 두 개의 ASCII 숫자, second의 정수 부분을 나타내며, 0 ≤ second ≤ 59 범위 내
    3. 만약 second가 정수가 아닌 경우, 또는 선택적으로 second가 정수인 경우:
      1. U+002E 마침표 문자 (.)
      2. 하나, 두 개 또는 세 개의 ASCII 숫자, second의 소수 부분을 나타냄

second 구성 요소는 60 또는 61이 될 수 없습니다. 윤초는 표현할 수 없습니다.

시간 문자열을 파싱하는 규칙은 다음과 같습니다. 이는 시간 또는 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을 파싱하고 있는 문자열로 둔다.

  2. positioninput 내의 포인터로 둔다. 이 포인터는 처음에 문자열의 시작을 가리킨다.

  3. 시간 컴포넌트 파싱을 수행하여 hour, minute, second를 얻는다. 만약 아무것도 반환하지 않으면, 실패한다.

  4. positioninput의 끝을 지나지 않았다면, 실패한다.

  5. timehour 시, minute 분, second 초로 하는 시간으로 둔다.

  6. time을 반환한다.

시간 구성 요소를 파싱하는 규칙은 주어진 input 문자열과 position을 사용합니다. 이는 시간, 분, 초를 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. hour를 해당 숫자로 설정합니다.

  2. hour가 0 ≤ hour ≤ 23 범위의 숫자가 아니면 실패합니다.
  3. positioninput의 끝을 벗어나거나 position의 문자가 U+003A COLON 문자가 아니면 실패합니다. 그렇지 않으면, position을 한 문자 앞으로 이동합니다.

  4. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. minute를 해당 숫자로 설정합니다.

  5. minute가 0 ≤ minute ≤ 59 범위의 숫자가 아니면 실패합니다.
  6. second를 0으로 설정합니다.

  7. positioninput의 끝을 벗어나지 않고 position의 문자가 U+003A (:)이면 다음을 수행합니다:

    1. positioninput의 다음 문자로 진행합니다.

    2. positioninput의 끝을 벗어나거나, input의 마지막 문자에 있거나, position에서 시작하는 input의 다음 문자가 모두 ASCII 숫자가 아니면 실패합니다.

    3. position이 주어진 input에서 ASCII 숫자이거나 U+002E FULL STOP 문자인 코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 3자이거나, 3자보다 길고 세 번째 문자가 U+002E FULL STOP 문자가 아니거나, U+002E FULL STOP 문자가 하나 이상 있으면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 (소수 부분 포함 가능)로 해석합니다. second를 해당 숫자로 설정합니다.

    4. second가 0 ≤ second < 60 범위의 숫자가 아니면 실패합니다.

  8. hour, minute, second를 반환합니다.

2.3.5.5 로컬 날짜와 시간

로컬 날짜와 시간은 특정 프로렙틱 그레고리력 날짜로, 연도, 월, 일로 구성되며, 시간은 시, 분, 초 및 초의 일부로 구성되지만, 시간대 정보는 포함되지 않습니다. [GREGORIAN]

문자열이 날짜와 시간을 나타내는 유효한 로컬 날짜 및 시간 문자열인 경우, 이는 주어진 순서로 다음 구성 요소로 구성됩니다:

  1. 유효한 날짜 문자열, 날짜를 나타냄
  2. U+0054 라틴 대문자 T 문자(T) 또는 U+0020 공백 문자
  3. 유효한 시간 문자열, 시간을 나타냄

문자열이 날짜와 시간을 나타내는 유효한 정규화된 로컬 날짜 및 시간 문자열인 경우, 이는 주어진 순서로 다음 구성 요소로 구성됩니다:

  1. 유효한 날짜 문자열, 날짜를 나타냄
  2. U+0054 라틴 대문자 T 문자(T)
  3. 유효한 시간 문자열, 시간을 나타내며, 주어진 시간에 대해 가능한 한 짧은 문자열로 표현됨(예: 주어진 시간이 0초인 경우 초 구성 요소를 완전히 생략)

로컬 날짜 및 시간 문자열을 파싱하는 규칙은 다음과 같습니다. 이 규칙은 날짜와 시간을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.
  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.
  3. 날짜 구성 요소를 파싱하여 year, month, day를 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  4. positioninput의 끝을 넘었거나, position이 가리키는 문자가 U+0054 라틴 대문자 T 문자(T) 또는 U+0020 공백 문자가 아니면, 알고리즘이 실패합니다. 그렇지 않으면, position을 한 문자 앞으로 이동시킵니다.
  5. 시간 구성 요소를 파싱하여 hour, minute, second을(를) 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  6. positioninput의 끝을 넘지 않으면, 알고리즘이 실패합니다.
  7. year, month, day로 구성된 date을(를) 설정합니다.
  8. hour, minute, second로 구성된 time을(를) 설정합니다.
  9. datetime을 반환합니다.
2.3.5.6 시간대

시간대 오프셋은 시간과 분으로 이루어진 부호 있는 숫자를 의미합니다.

문자열이 시간대 오프셋을 나타내는 유효한 시간대 오프셋 문자열인 경우, 이는 다음 중 하나로 구성됩니다:

이 형식은 -23:59에서 +23:59까지의 시간대 오프셋을 허용합니다. 현재 실제 시간대의 오프셋 범위는 -12:00에서 +14:00까지이며, 실제 시간대의 오프셋의 분 구성 요소는 항상 00, 30 또는 45입니다. 그러나 시간대는 정치적 이유로 변동될 수 있기 때문에, 이 범위가 영원히 유지될 것이라는 보장은 없습니다.

역사적인 시간과 관련된 시간대 오프셋 사용에 대한 자세한 내용은 아래 전역 날짜 및 시간 섹션의 사용 설명 및 예제를 참조합니다.

시간대 오프셋 문자열을 파싱하는 규칙은 다음과 같습니다. 이 규칙은 시간대 오프셋을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.
  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.
  3. 시간대 오프셋 구성 요소를 파싱하여 timezonehourstimezoneminutes를 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  4. positioninput의 끝을 넘지 않으면, 알고리즘이 실패합니다.
  5. timezonehourstimezoneminutes로 구성된 시간대 오프셋을 반환합니다.

시간대 오프셋 구성 요소를 파싱하는 규칙은 다음과 같습니다. 이 규칙은 시간대 오프셋의 시간과 분을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. position의 문자가 U+005A LATIN CAPITAL LETTER Z 문자(Z)이면 다음을 수행합니다:

    1. timezonehours를 0으로 설정합니다.

    2. timezoneminutes를 0으로 설정합니다.

    3. positioninput의 다음 문자로 진행합니다.

    그렇지 않고, position의 문자가 U+002B PLUS SIGN (+) 또는 U+002D HYPHEN-MINUS (-)이면 다음을 수행합니다:

    1. position의 문자가 U+002B PLUS SIGN (+)이면 sign을 "positive"로 설정합니다. 그렇지 않으면 U+002D HYPHEN-MINUS (-)이므로 sign을 "negative"로 설정합니다.

    2. positioninput의 다음 문자로 진행합니다.

    3. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. s를 수집된 시퀀스로 설정합니다.

    4. s가 정확히 2자이면 다음을 수행합니다:

      1. s를 10진수 정수로 해석합니다. timezonehours를 해당 숫자로 설정합니다.

      2. positioninput의 끝을 벗어나거나 position의 문자가 U+003A COLON 문자가 아니면 실패합니다. 그렇지 않으면 position을 한 문자 앞으로 이동합니다.

      3. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. timezoneminutes를 해당 숫자로 설정합니다.

      s가 정확히 4자이면 다음을 수행합니다:

      1. s의 처음 두 문자를 10진수 정수로 해석합니다. timezonehours를 해당 숫자로 설정합니다.

      2. s의 마지막 두 문자를 10진수 정수로 해석합니다. timezoneminutes를 해당 숫자로 설정합니다.

      그렇지 않으면 실패합니다.

    5. timezonehours가 0 ≤ timezonehours ≤ 23 범위의 숫자가 아니면 실패합니다.
    6. sign이 "negative"이면 timezonehours를 음수로 만듭니다.
    7. timezoneminutes가 0 ≤ timezoneminutes ≤ 59 범위의 숫자가 아니면 실패합니다.
    8. sign이 "negative"이면 timezoneminutes를 음수로 만듭니다.

    그렇지 않으면 실패합니다.

  2. timezonehourstimezoneminutes를 반환합니다.

2.3.5.7 전역 날짜 및 시간

전역 날짜 및 시간은 특정한 프롤렙틱 그레고리력 날짜로 구성되며, 연도, 월, 일, 시간(시간, 분, 초, 소수 초) 및 시간대 오프셋(부호 있는 시간 및 분 수)을 포함합니다. [GREGORIAN]

문자열이 날짜, 시간, 그리고 시간대 오프셋을 나타내는 유효한 전역 날짜 및 시간 문자열인 경우, 이는 다음 구성 요소들로 주어진 순서대로 구성됩니다:

  1. 유효한 날짜 문자열로 날짜를 나타냄
  2. U+0054 라틴 대문자 T 문자(T) 또는 U+0020 공백 문자
  3. 유효한 시간 문자열로 시간을 나타냄
  4. 유효한 시간대 오프셋 문자열로 시간대 오프셋을 나타냄

UTC가 형성되기 전의 날짜의 시간은 UTC가 아닌 UT1(0° 경도의 현대 지구 태양 시간) 기준으로 표현하고 해석해야 하며, 시간대가 형성되기 전의 시간은 그리니치 런던에서 관측된 시간과 적절한 현지 시간 간의 차이를 대략적으로 나타내는 명시적인 시간대 오프셋과 함께 UT1 시간으로 표현하고 해석해야 합니다.

다음은 유효한 전역 날짜 및 시간 문자열로 작성된 날짜의 몇 가지 예입니다.

"0037-12-13 00:00Z"
네로 황제의 생일에 런던 시간으로 자정을 나타냅니다. 이 날짜가 실제로 어떤 날짜인지에 대한 논의는 아래를 참조하세요.
"1979-10-14T12:00:00.001-04:00"
1979년 10월 14일, 미국 동부 해안의 일광 절약 시간제 사용 시간으로 정오 직후 1밀리초를 나타냅니다.
"8592-01-01T02:09+02:09"
UTC 기준으로 8592년 1월 1일 자정을 나타냅니다. 해당 시간대는 UTC보다 2시간 9분 앞서며, 이는 현재 실제 시간대는 아니지만 허용됩니다.

이 날짜들에서 주목할 점은 다음과 같습니다:

전역 날짜 및 시간 문자열을 파싱하는 규칙은 다음과 같습니다. 이 규칙은 UTC 시간과 표시 또는 라운드 트립을 위한 관련 시간대 오프셋 정보를 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을(를) 파싱 중인 문자열로 설정합니다.
  2. position을(를) input의 시작을 가리키는 포인터로 설정합니다.
  3. 날짜 구성 요소를 파싱하여 year, month, day를 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  4. positioninput의 끝을 넘었거나 position이 가리키는 문자가 U+0054 라틴 대문자 T 문자(T) 또는 U+0020 공백 문자가 아닌 경우, 알고리즘이 실패합니다. 그렇지 않으면, position을 한 문자 앞으로 이동시킵니다.
  5. 시간 구성 요소를 파싱하여 hour, minute, second를 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  6. positioninput의 끝을 넘었다면, 알고리즘이 실패합니다.
  7. 시간대 오프셋 구성 요소를 파싱하여 timezonehourstimezoneminutes를 얻습니다. 이 과정에서 실패하면, 알고리즘이 실패합니다.

  8. positioninput의 끝을 넘지 않았다면, 알고리즘이 실패합니다.
  9. timeyear, month, day, hour, minute, second으로 구성된 시간으로 설정하고, timezonehours 시간과 timezoneminutes 분을 뺀 시간을 구합니다. 이 시간은 UTC 시간대의 순간입니다.
  10. timezonetimezonehourstimezoneminutes로 설정합니다.
  11. timetimezone을 반환합니다.
2.3.5.8

는 주-연도 번호와 월요일부터 시작하는 7일 기간을 나타내는 주 번호로 구성됩니다. 이 달력 시스템에서 각 주-연도는 아래 정의된 대로 52주 또는 53주의 7일 기간을 포함합니다. 1969년 12월 29일 월요일(1969-12-29)에 시작하는 7일 기간은 1970년 주-연도에서 주 번호 1로 정의됩니다. 연속적인 주는 순차적으로 번호가 매겨집니다. 주-연도에서 번호 1 이전의 주는 이전 주-연도의 마지막 주이며, 그 반대의 경우도 마찬가지입니다. [GREGORIAN]

숫자 year로 된 주-연도는 프롤렙틱 그레고리력의 첫 번째 날(1월 1일)이 목요일인 경우, 또는 year가 400으로 나누어 떨어지거나 100으로 나누어 떨어지지 않는 4로 나누어 떨어지는 숫자이며, 첫 번째 날(1월 1일)이 수요일인 경우 53주를 포함합니다. 다른 모든 주-연도는 52주를 갖습니다.

마지막 날의 주 번호는 53주를 가진 주-연도의 경우 53이며, 52주를 가진 주-연도의 마지막 날의 주 번호는 52입니다.

특정 날의 주-연도 번호는 프롤렙틱 그레고리력에서 그 날을 포함하는 연도의 번호와 다를 수 있습니다. 주-연도 y의 첫 번째 주는 y년의 그레고리력의 첫 번째 목요일을 포함하는 주입니다.

현대적 목적에서는, 여기서 정의된 는 ISO 8601에서 정의된 ISO 주와 동일합니다. [ISO8601]

문자열이 주-연도 year와 주 week를 나타내는 유효한 주 문자열인 경우, 이는 다음 구성 요소들로 주어진 순서대로 구성됩니다:

  1. 네 자리 이상의 ASCII 숫자, year를 나타내며, year > 0
  2. U+002D 하이픈-마이너스 문자 (-)
  3. U+0057 라틴 대문자 W 문자 (W)
  4. 두 자리 ASCII 숫자, 주 week를 나타내며, 범위는 1 ≤ weekmaxweek이며, 여기서 maxweek는 주-연도 year마지막 날의 주 번호입니다.

주 문자열을 파싱하는 규칙은 다음과 같습니다. 이 규칙은 주-연도 번호와 주 번호를 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 지점에서는 알고리즘이 중단되고 아무것도 반환되지 않습니다.

  1. input을 구문 분석 중인 문자열로 설정합니다.

  2. positioninput에 대한 포인터로 설정하고, 처음에는 문자열의 시작을 가리킵니다.

  3. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 4자 이상이 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. year를 해당 숫자로 설정합니다.

  4. year가 0보다 큰 숫자가 아니면 실패합니다.

  5. positioninput의 끝을 벗어나거나 position의 문자가 U+002D HYPHEN-MINUS 문자가 아니면 실패합니다. 그렇지 않으면 position을 한 문자 앞으로 이동합니다.

  6. positioninput의 끝을 벗어나거나 position의 문자가 U+0057 LATIN CAPITAL LETTER W 문자(W)가 아니면 실패합니다. 그렇지 않으면 position을 한 문자 앞으로 이동합니다.

  7. position이 주어진 input에서 ASCII 숫자코드 포인트 시퀀스를 수집합니다. 수집된 시퀀스가 정확히 2자가 아니면 실패합니다. 그렇지 않으면 결과 시퀀스를 10진수 정수로 해석합니다. week를 해당 숫자로 설정합니다.

  8. maxweekyear마지막 날의 주 번호로 설정합니다.

  9. week가 1 ≤ week ≤ maxweek 범위의 숫자가 아니면 실패합니다.

  10. positioninput의 끝을 벗어나지 않으면 실패합니다.

  11. 주-연도 번호 year와 주 번호 week를 반환합니다.

2.3.5.9 지속 시간

지속 시간은 초 단위로 구성됩니다.

달과 초는 비교할 수 없습니다(달은 정확한 초의 수가 아니라 측정되는 특정 날짜에 따라 길이가 달라지는 기간이기 때문에). 따라서 이 사양에서 정의된 지속 시간에는 달(또는 12개월에 해당하는 연도)을 포함할 수 없습니다. 오직 특정 초의 수를 나타내는 지속 시간만 설명할 수 있습니다.

문자열이 지속 시간 t을 나타내는 유효한 지속 시간 문자열이라면, 다음 중 하나로 구성됩니다:

지속 시간 문자열을 구문 분석하는 규칙은 다음과 같습니다. 이 규칙은 지속 시간을 반환하거나 아무것도 반환하지 않습니다. 알고리즘이 "실패"했다고 말하면, 이는 그 시점에서 중단되고 아무것도 반환되지 않음을 의미합니다.

  1. input이 구문 분석 중인 문자열이라고 가정합니다.

  2. positioninput의 시작 부분을 가리키는 포인터로 가정합니다.

  3. months, seconds, component count를 모두 0으로 설정합니다.

  4. M-disambiguatorminutes로 설정합니다.

    이 플래그의 다른 값은 months입니다. 이 플래그는 ISO8601 지속 시간에서 "M" 단위를 분과 월을 구분하기 위해 사용됩니다. 월은 허용되지 않지만, 미래의 호환성을 위해 그리고 다른 컨텍스트에서 유효할 수 있는 ISO8601 지속 시간을 오해하지 않기 위해 구문 분석됩니다.

  5. ASCII 공백 문자를 건너뛰십시오 input 내에서 position을 기준으로.

  6. 만약 positioninput의 끝을 넘어섰다면, 실패합니다.

  7. 만약 input 내의 position이 가리키는 문자가 U+0050 라틴 대문자 P 문자라면, position을 다음 문자로 이동시키고, M-disambiguatormonths로 설정하고 ASCII 공백 문자를 건너뛰십시오 input 내에서 position을 기준으로.

  8. 다음의 과정을 반복합니다:

    1. units을 정의되지 않은 상태로 둡니다. 이것은 다음 값 중 하나로 설정됩니다: years, months, weeks, days, hours, minutes, seconds.

    2. next character를 정의되지 않은 상태로 둡니다. 이것은 input에서 문자를 처리하는 데 사용됩니다.

    3. 만약 positioninput의 끝을 넘어섰다면, 중단합니다.

    4. 만약 position이 가리키는 문자가 U+0054 라틴 대문자 T 문자라면, position을 다음 문자로 이동시키고, M-disambiguatorminutes로 설정하고, ASCII 공백 문자를 건너뛰십시오 input 내에서 position을 기준으로, 그리고 계속합니다.

    5. next characterinput 내의 position이 가리키는 문자로 설정합니다.

    6. next character가 U+002E FULL STOP 문자(.)인 경우, N을 0으로 설정합니다. (position을 진행하지 마십시오.

      그렇지 않다면, 만약 next characterASCII 숫자라면, 코드 포인트 시퀀스를 수집합니다 position을 기준으로 input에서. 이 시퀀스를 10진수로 해석하고, 그 숫자를 N으로 설정합니다.

      그렇지 않다면, next character는 숫자가 아니므로 실패합니다.

    7. 만약 positioninput의 끝을 넘어섰다면, 실패합니다.

    8. next characterinput 내의 position이 가리키는 문자로 설정하고, 이번에는 position을 다음 문자로 이동시킵니다. (만약 next character가 이전에 U+002E 온점 문자(.)였다면, 이번에도 동일한 문자일 것입니다.)

    9. 만약 next character가 U+002E(.)이라면:

      1. 코드 포인트 시퀀스를 수집합니다 position을 기준으로 input에서 ASCII 숫자. s를 결과 시퀀스로 설정합니다.

      2. 만약 s가 빈 문자열이라면, 실패합니다.

      3. lengths의 문자 수로 설정합니다.

      4. fraction을 10length으로 나눈 후 s를 10진수로 해석한 결과로 설정합니다.

      5. Nfraction만큼 증가시킵니다.

      6. ASCII 공백 문자를 건너뛰십시오 input 내에서 position을 기준으로.

      7. 만약 positioninput의 끝을 넘어섰다면, 실패합니다.

      8. next characterinput 내의 position이 가리키는 문자로 설정하고, position을 다음 문자로 이동시킵니다.

      9. 만약 next character가 U+0053 라틴 대문자 S 문자나 U+0073 라틴 소문자 S 문자가 아니라면, 실패합니다.

      10. unitsseconds로 설정합니다.

      그렇지 않다면:

      1. 만약 next characterASCII 공백 문자라면, ASCII 공백 문자를 건너뛰십시오 input 내에서 position을 기준으로, next characterposition이 가리키는 문자로 설정하고, position을 다음 문자로 이동시킵니다.

      2. 만약 next character가 U+0059 라틴 대문자 Y 문자이거나 U+0079 라틴 소문자 Y 문자라면, unitsyears로 설정하고 M-disambiguatormonths로 설정합니다.

        만약 next character가 U+004D 라틴 대문자 M 문자이거나 U+006D 라틴 소문자 M 문자이고, M-disambiguatormonths라면, unitsmonths로 설정합니다.

        만약 next character가 U+0057 라틴 대문자 W 문자이거나 U+0077 라틴 소문자 W 문자라면, unitsweeks로 설정하고 M-disambiguatorminutes로 설정합니다.

        만약 next character가 U+0044 라틴 대문자 D 문자이거나 U+0064 라틴 소문자 D 문자라면, unitsdays로 설정하고 M-disambiguatorminutes로 설정합니다.

        만약 next character가 U+0048 라틴 대문자 H 문자이거나 U+0068 라틴 소문자 H 문자라면, unitshours로 설정하고 M-disambiguatorminutes로 설정합니다.

        만약 next character가 U+004D 라틴 대문자 M 문자이거나 U+006D 라틴 소문자 M 문자이고, M-disambiguatorminutes라면, unitsminutes로 설정합니다.

        만약 next character가 U+0053 라틴 대문자 S 문자이거나 U+0073 라틴 소문자 S 문자라면, unitsseconds로 설정하고 M-disambiguatorminutes로 설정합니다.

        그렇지 않다면, 만약 next character가 위의 문자들 중 어느 것도 아니라면, 실패합니다.

    10. component count를 증가시킵니다.

    11. multiplier를 1로 설정합니다.

    12. 만약 unitsyears라면, multiplier를 12로 곱하고 unitsmonths로 설정합니다.

    13. 만약 unitsmonths라면, monthsNmultiplier의 곱을 더합니다.

      그렇지 않다면:

      1. 만약 unitsweeks라면, multiplier를 7로 곱하고 unitsdays로 설정합니다.

      2. 만약 unitsdays라면, multiplier를 24로 곱하고 unitshours로 설정합니다.

      3. 만약 unitshours라면, multiplier를 60으로 곱하고 unitsminutes로 설정합니다.

      4. 만약 unitsminutes라면, multiplier를 60으로 곱하고 unitsseconds로 설정합니다.

      5. 강제로, units는 이제 seconds입니다. Nmultiplier의 곱을 seconds에 더합니다.

    14. ASCII 공백 문자를 건너뛰십시오 input 내에서 position을 기준으로.

  9. 만약 component count가 0이라면, 실패합니다.

  10. 만약 months가 0이 아니라면, 실패합니다.

  11. seconds 초로 구성된 지속 시간을 반환합니다.

2.3.5.10 불분명한 시간들

문자열이 다음 중 하나일 경우 유효한 선택적 시간 포함 날짜 문자열입니다:


날짜 또는 시간 문자열을 구문 분석하는 규칙은 다음과 같습니다. 이 알고리즘은 날짜, 시간, 전역 날짜 및 시간 또는 아무것도 반환하지 않습니다. 알고리즘이 "실패"한다고 말하는 경우, 이 시점에서 중단되고 아무것도 반환하지 않습니다.

  1. input을 구문 분석 중인 문자열로 설정합니다.

  2. positioninput의 시작을 가리키는 포인터로 설정합니다.

  3. start positionposition과 동일한 위치로 설정합니다.

  4. date presenttime present 플래그를 true로 설정합니다.

  5. 날짜 구성 요소를 구문 분석하여 year, month, 및 day를 얻습니다. 실패할 경우, date present 플래그를 false로 설정합니다.

  6. date present가 true이고 positioninput의 끝을 넘지 않았으며 position의 문자가 U+0054 라틴 대문자 T 문자(T) 또는 U+0020 공백 문자인 경우 positioninput에서 다음 문자로 이동시킵니다.

    그렇지 않다면, date present가 true이고 positioninput의 끝을 넘었거나 position의 문자가 U+0054 라틴 대문자 T 문자(T)도 U+0020 공백 문자도 아닌 경우 time present를 false로 설정합니다.

    그렇지 않다면, date present가 false일 경우 positionstart position과 동일한 위치로 되돌립니다.

  7. 만약 time present 플래그가 true라면 시간 구성 요소를 구문 분석하여 hour, minute, 및 second를 얻습니다. 만약 실패하면, 중단합니다.

  8. date presenttime present 플래그가 모두 true이고 positioninput의 끝을 넘은 경우, 실패합니다.

  9. date presenttime present 플래그가 모두 true일 경우 시간대 오프셋 구성 요소를 구문 분석하여 timezonehourstimezoneminutes를 얻습니다. 실패할 경우, 중단합니다.

  10. positioninput의 끝을 넘지 않았다면, 실패합니다.

  11. date present 플래그가 true이고 time present 플래그가 false인 경우 year, month, day로 구성된 date를 설정하고 date를 반환합니다.

    그렇지 않다면 time present 플래그가 true이고 date present 플래그가 false인 경우 hour, minute, second로 구성된 time을 설정하고 time을 반환합니다.

    그렇지 않다면, year, month, day, hour, minute, second로 구성된 시간을 설정하고 timezonehourstimezoneminutes를 빼서 UTC 시간대에서 해당 시간을 계산합니다. timezonetimezonehourstimezoneminutes로 설정하고 timetimezone을 반환합니다.

2.3.6 레거시 색상

일부 사용되지 않는 레거시 속성은 문자열 input이 주어지면 레거시 색상 값 구문 분석 규칙을 사용하여 색상을 구문 분석합니다. CSS 색상 또는 실패를 반환합니다.

  1. input이 빈 문자열이면 실패를 반환합니다.

  2. input에서 선행 및 후행 ASCII 공백을 제거합니다.

  3. input이 "transparent"와 ASCII 대소문자를 구분하지 않고 일치하면 실패를 반환합니다.

  4. input명명된 색상 중 하나와 ASCII 대소문자를 구분하지 않고 일치하면 해당 키워드에 해당하는 CSS 색상을 반환합니다. [CSSCOLOR]

    CSS2 시스템 색상은 인식되지 않습니다.

  5. input코드 포인트 길이가 4이고 input의 첫 번째 문자가 U+0023 (#)이고 input의 마지막 세 문자가 모두 ASCII 16진수 숫자이면 다음을 수행합니다:

    1. result를 CSS 색상으로 설정합니다.

    2. input의 두 번째 문자를 16진수 숫자로 해석합니다. result의 빨간색 구성 요소를 결과 숫자에 17을 곱한 값으로 설정합니다.

    3. input의 세 번째 문자를 16진수 숫자로 해석합니다. result의 녹색 구성 요소를 결과 숫자에 17을 곱한 값으로 설정합니다.

    4. input의 네 번째 문자를 16진수 숫자로 해석합니다. result의 파란색 구성 요소를 결과 숫자에 17을 곱한 값으로 설정합니다.

    5. result를 반환합니다.

  6. input에서 U+FFFF보다 큰 코드 포인트(즉, 기본 다국어 평면에 없는 모든 문자)를 "00"으로 바꿉니다.

  7. input코드 포인트 길이가 128보다 크면 input을 잘라내어 처음 128자만 남깁니다.

  8. input의 첫 번째 문자가 U+0023 (#)이면 제거합니다.

  9. input에서 ASCII 16진수 숫자가 아닌 모든 문자를 U+0030 (0)으로 바꿉니다.

  10. input코드 포인트 길이가 0이거나 3의 배수가 아닐 때까지 input에 U+0030 (0)을 추가합니다.

  11. input을 동일한 코드 포인트 길이의 세 문자열로 분할하여 세 가지 구성 요소를 얻습니다. length를 해당 모든 구성 요소가 갖는 코드 포인트 길이(input코드 포인트 길이의 1/3)로 설정합니다.

  12. length가 8보다 크면 각 구성 요소에서 선행 length-8 문자를 제거하고 length를 8로 설정합니다.

  13. length가 2보다 크고 각 구성 요소의 첫 번째 문자가 U+0030 (0)인 동안 해당 문자를 제거하고 length를 1씩 줄입니다.

  14. length여전히 2보다 크면 각 구성 요소를 잘라내어 각 구성 요소의 처음 두 문자만 남깁니다.

  15. result를 CSS 색상으로 설정합니다.

  16. 첫 번째 구성 요소를 16진수로 해석합니다. result의 빨간색 구성 요소를 결과 숫자로 설정합니다.

  17. 두 번째 구성 요소를 16진수로 해석합니다. result의 녹색 구성 요소를 결과 숫자로 설정합니다.

  18. 세 번째 구성 요소를 16진수로 해석합니다. result의 파란색 구성 요소를 결과 숫자로 설정합니다.

  19. result를 반환합니다.

2.3.7 공백으로 구분된 토큰

공백으로 구분된 토큰 세트는 하나 이상의 ASCII 공백으로 구분된 0개 이상의 단어(토큰으로 알려짐)를 포함하는 문자열입니다. 여기서 단어는 ASCII 공백이 아닌 하나 이상의 문자로 구성됩니다.

공백으로 구분된 토큰 세트를 포함하는 문자열은 선행 또는 후행 ASCII 공백을 가질 수 있습니다.

순서가 없는 고유한 공백으로 구분된 토큰 세트는 토큰이 중복되지 않는 공백으로 구분된 토큰 세트입니다.

순서가 있는 고유한 공백으로 구분된 토큰 세트는 토큰의 순서가 의미가 있으며, 토큰이 중복되지 않는 공백으로 구분된 토큰 세트입니다.

공백으로 구분된 토큰 세트는 때때로 허용된 값의 정의된 세트를 가집니다. 허용된 값의 세트가 정의된 경우, 토큰은 모두 해당 허용된 값 목록에서 가져와야 합니다. 다른 값은 비준수 값입니다. 그러한 허용된 값의 세트가 제공되지 않으면, 모든 값은 준수합니다.

공백으로 구분된 토큰 세트의 토큰을 비교하는 방법(예: 대소문자 구분 여부)은 세트별로 정의됩니다.

2.3.8 쉼표로 구분된 토큰

쉼표로 구분된 토큰 세트는 0개 이상의 토큰이 포함된 문자열로, 각 토큰은 다음 토큰과 U+002C 쉼표 문자(,)로 구분되며, 토큰은 ASCII 공백으로 시작하거나 끝나지 않으며, U+002C 쉼표 문자(,)를 포함하지 않고, 선택적으로 ASCII 공백으로 둘러싸일 수 있습니다.

예를 들어, 문자열 " a ,b,,d d "는 "a", "b", 빈 문자열, "d d"의 네 개의 토큰으로 구성됩니다. 각 토큰의 앞뒤 공백은 토큰의 일부로 간주되지 않으며, 빈 문자열도 토큰이 될 수 있습니다.

쉼표로 구분된 토큰 세트는 때때로 유효한 토큰을 구성하는 것에 대한 추가 제한이 있습니다. 이러한 제한이 정의된 경우, 토큰은 모두 해당 제한 내에 있어야 합니다. 그렇지 않은 값은 비준수입니다. 그러한 제한이 명시되지 않은 경우, 모든 값이 준수합니다.

2.3.9 참조

type 유형의 요소에 대한 유효한 해시 이름 참조는 U+0023 번호 기호 문자(#)로 시작하고, 동일한 트리 내에서 type 유형의 요소의 name 속성 값과 정확히 일치하는 문자열로 구성된 문자열입니다.

scope라는 컨텍스트 노드를 사용하여 type 유형의 요소에 대한 해시 이름 참조를 구문 분석하는 규칙은 다음과 같습니다:

  1. 구문 분석 중인 문자열에 U+0023 번호 기호 문자가 포함되지 않거나, 문자열 내 첫 번째 해당 문자가 문자열의 마지막 문자라면 null을 반환합니다.

  2. 구문 분석 중인 문자열에서 첫 번째 U+0023 번호 기호 문자 바로 다음 문자부터 해당 문자열의 끝까지의 문자열을 s라고 합니다.

  3. scope트리에서 type 유형의 첫 번째 요소를 트리 순서로 반환하며, 이 요소는 s와 동일한 값을 가진 id 또는 name 속성을 가지고 있어야 합니다. 해당 요소가 없으면 null을 반환합니다.

    id 속성은 구문 분석 시 고려되지만, 값이 유효한 해시 이름 참조인지 여부를 결정할 때는 사용되지 않습니다. 즉, id를 기준으로 요소를 참조하는 해시 이름 참조는 적합성 오류입니다(해당 요소에 동일한 값의 name 속성이 없는 경우).

2.3.10 미디어 쿼리

<media-query-list> 규칙과 일치하는 문자열은 유효한 미디어 쿼리 목록입니다. [MQ]

문자열이 비어 있거나, ASCII 공백 문자로만 이루어져 있거나, Media Queries에 정의된 대로 사용자의 환경과 일치하는 미디어 쿼리 목록이라면, 해당 문자열은 사용자의 환경과 일치합니다. [MQ]

2.3.11 고유 내부 값

고유 내부 값은 직렬화 가능하고, 값으로 비교할 수 있으며, 스크립트에 노출되지 않는 값입니다.

새로운 고유 내부 값을 생성하려면 이 알고리즘에 의해 이전에 반환된 적이 없는 고유 내부 값을 반환합니다.

2.4 URL

2.4.1 용어

문자열이 유효한 비어 있지 않은 URL인 경우, 이는 유효한 URL 문자열이지만, 비어 있는 문자열은 아닙니다.

문자열이 공백으로 둘러싸인 유효한 URL인 경우, 이는 앞뒤 ASCII 공백 제거 후에 유효한 URL 문자열이 됩니다.

문자열이 공백으로 둘러싸인 유효한 비어 있지 않은 URL인 경우, 이는 앞뒤 ASCII 공백 제거 후에 유효한 비어 있지 않은 URL이 됩니다.


이 명세는 URL about:legacy-compat을 예약된, 그러나 해석 불가능한 about: URL로 정의하며, 이는 XML 도구와의 호환성을 위해 DOCTYPEHTML 문서에서 사용됩니다. [ABOUT]

이 명세는 URL about:html-kind을 예약된, 그러나 해석 불가능한 about: URL로 정의하며, 이는 미디어 트랙의 종류를 식별하는 데 사용됩니다. [ABOUT]

이 명세는 URL about:srcdoc을 예약된, 그러나 해석 불가능한 about: URL로 정의하며, 이는 URL로 사용됩니다. 이는 iframe srcdoc 문서[ABOUT]


URL이 다음과 일치하면 about:blank와 일치한다고 합니다: 스킴이 "about"이고, 경로에 "blank"라는 문자열이 하나만 포함되어 있으며, 사용자 이름비밀번호는 빈 문자열이고, 호스트는 null입니다.

이러한 URL의 쿼리프래그먼트는 null이 아닐 수 있습니다. 예를 들어, URL 레코드파싱을 통해 "about:blank?foo#bar"를 생성할 때 about:blank에 일치합니다.

URLabout:srcdoc에 일치합니다. 만약 스킴이 "about", 경로가 오직 하나의 문자열 "srcdoc"를 포함하고, 쿼리가 null이며, 사용자명비밀번호가 빈 문자열이고, 호스트가 null인 경우입니다.

about:srcdoc에 일치URL쿼리가 null임을 보장하는 이유는, iframe srcdoc 문서URL이 null이 아닌 쿼리를 가지는 경우를 생성할 수 없기 때문입니다. 이는 문서URLabout:blank에 일치하는 것과 다릅니다. 즉, URL의 집합 중 about:srcdoc에 일치하는 것들은 오직 프래그먼트만 다릅니다.

2.4.2 URL 파싱

URL을 파싱하는 것은 문자열을 가져와서 이를 나타내는 URL 레코드를 얻는 과정입니다. 이 과정은 URL에서 정의되지만, HTML 표준에서는 기본 URL과 인코딩을 추상화하기 위해 몇 가지 래퍼를 정의합니다. [URL]

대부분의 새로운 API는 URL 파싱을 사용해야 합니다. 오래된 API와 HTML 요소는 인코딩-URL 파싱을 사용할 이유가 있을 수 있습니다. 사용자 지정 기본 URL이 필요하거나 기본 URL이 필요하지 않은 경우에는 URL 파서를 직접 사용할 수도 있습니다.

주어진 문자열 urlDocument 객체 또는 환경 설정 객체 environment를 기준으로 URL을 파싱하려면, 다음 단계를 수행합니다. 이들은 실패 또는 URL을 반환합니다.

  1. environmentDocument 객체인 경우, environment기본 URLbaseURL로 설정하고, 그렇지 않은 경우 environmentAPI 기본 URLbaseURL로 설정합니다.

  2. urlbaseURL을 사용하여 URL 파서를 적용한 결과를 반환합니다.

주어진 문자열 urlDocument 객체 또는 환경 설정 객체 environment를 기준으로 인코딩-URL 파싱하려면, 다음 단계를 수행합니다. 이들은 실패 또는 URL을 반환합니다.

  1. encodingUTF-8로 설정합니다.

  2. environmentDocument 객체인 경우, encodingenvironment문서의 문자 인코딩으로 설정합니다.

  3. 그렇지 않고, environment관련 글로벌 객체Window 객체인 경우, encodingenvironment관련 글로벌 객체관련 Document문자 인코딩으로 설정합니다.

  4. environmentDocument 객체인 경우, environment기본 URLbaseURL로 설정하고, 그렇지 않은 경우 environmentAPI 기본 URLbaseURL로 설정합니다.

  5. urlbaseURLencoding을 사용하여 URL 파서를 적용한 결과를 반환합니다.

주어진 문자열 urlDocument 객체 또는 환경 설정 객체 environment를 기준으로 인코딩-URL 파싱 및 직렬화하려면, 다음 단계를 수행합니다. 이들은 실패 또는 문자열을 반환합니다.

  1. environment를 기준으로 주어진 url에 대해 인코딩-URL 파싱의 결과를 url로 설정합니다.

  2. url이 실패인 경우, 실패를 반환합니다.

  3. url에 대해 URL 직렬화기를 적용한 결과를 반환합니다.

2.4.3 문서 기본 URL

문서 기본 URL문서 documentURL 레코드로, 다음 단계들을 실행하여 얻습니다:

  1. document하위 base 요소 중 href 속성이 없는 것이 없다면, document대체 기본 URL을 반환합니다.

  2. 그렇지 않으면, document에서 href 속성이 있는 첫 번째 base 요소의 고정 기본 URL트리 순서대로 반환합니다.

대체 기본 URL문서 객체 documentURL 레코드로, 다음 단계들을 실행하여 얻습니다:

  1. documentiframe srcdoc 문서라면:

    1. 단언: documentabout 기본 URL이 null이 아님.

    2. documentabout 기본 URL을 반환합니다.

  2. documentURL about:blank에 일치하고 documentabout 기본 URL이 null이 아니라면, documentabout 기본 URL을 반환합니다.

  3. documentURL을 반환합니다.


문서 documentURL 레코드 urlURL로 설정하려면:

  1. documentURLurl로 설정합니다.

  2. document에 대해 기본 URL 변경에 대응을 수행합니다.

문서 document에 대해 기본 URL 변경에 대응하려면:

  1. 사용자 에이전트는 영향을 받는 URL 또는 그러한 URL에서 파생된 데이터를 사용자에게 표시하는 모든 사용자 인터페이스 요소를 업데이트해야 합니다. 이러한 사용자 인터페이스 요소의 예로는 하이퍼링크url을 표시하는 상태 표시줄이나, q, blockquote, ins, del 요소의 cite 속성에 지정된 URL을 표시하는 UI가 있습니다.

  2. CSS :link/:visited/등의 의사 클래스가 적절히 업데이트되도록 합니다.

  3. 각각의 descendant에 대해, document섀도우 포함 자손들:

    1. descendantscript 요소이고, 해당 resultspeculation rules parse result인 경우, 다음을 수행한다:

      1. oldResultelementresult로 설정한다.

      2. newResultelement자식 텍스트 콘텐츠element노드 document를 주어 speculation rules parse result 생성의 결과로 설정한다.

      3. element관련 글로벌 객체, oldResult, newResult를 주어 speculation rules 업데이트를 수행한다.

  4. 사전적 로드 고려document에 대해 수행한다.

이는 기본 URL을 변경해도 예를 들어 img 요소에 표시되는 이미지는 영향을 받지 않는다는 것을 의미합니다. 따라서 스크립트에서 src IDL 속성을 이후에 접근하면 표시 중인 이미지와 더 이상 일치하지 않을 수 있는 새로운 절대 URL을 반환합니다.

2.5 리소스 가져오기

2.5.1 용어

응답유형이 "basic", "cors", 또는 "default"인 경우, 이를 CORS-동일 출처라고 합니다. [FETCH]

응답유형이 "opaque" 또는 "opaqueredirect"인 경우, 이를 CORS-교차 출처라고 합니다.

응답안전하지 않은 응답내부 응답이 존재할 경우 이를 따르며, 그렇지 않으면 해당 응답 자체를 의미합니다.

잠재적인 CORS 요청을 생성하려면, url, destination, corsAttributeState, 및 선택적 동일 출처 대체 플래그를 사용하여 다음 단계를 수행하십시오:

  1. corsAttributeState아무것도 아님일 경우, mode를 "no-cors"로 설정하고, 그렇지 않으면 "cors"로 설정합니다.

  2. 동일 출처 대체 플래그가 설정되어 있고 mode가 "no-cors"인 경우, mode를 "same-origin"으로 설정합니다.

  3. credentialsMode를 "include"로 설정합니다.

  4. corsAttributeState익명인 경우, credentialsMode를 "same-origin"으로 설정합니다.

  5. 새로운 요청을 반환합니다. 이 요청의 URLurl이고, destinationdestination이며, modemode이고, credentials modecredentialsMode이며, use-URL-credentials 플래그가 설정되어 있습니다.

2.5.2 리소스 유형 결정

리소스의 Content-Type 메타데이터MIME Sniffing의 요구 사항과 일치하는 방식으로 획득하고 해석해야 합니다. [MIMESNIFF]

리소스의 계산된 MIME 유형MIME Sniffing의 요구 사항에 따라 찾아야 합니다. [MIMESNIFF]

이미지 전용 스니핑 규칙, 텍스트 또는 바이너리 리소스를 구분하는 규칙, 그리고 오디오 및 비디오 전용 스니핑 규칙MIME Sniffing에서 정의됩니다. 이러한 규칙은 결과로 MIME 유형을 반환합니다. [MIMESNIFF]

사용자 에이전트가 서버가 예상하는 것과 다른 콘텐츠 유형 감지 휴리스틱을 사용할 때 보안 문제가 발생할 수 있으므로, MIME Sniffing의 규칙을 정확하게 따라야 합니다. 자세한 내용은 MIME Sniffing을 참조합니다. [MIMESNIFF]

2.5.3 meta 요소에서 문자 인코딩 추출

meta 요소에서 문자 인코딩을 추출하는 알고리즘은 문자열 s가 주어졌을 때 다음과 같습니다. 이 알고리즘은 문자 인코딩 또는 아무것도 반환하지 않습니다.

  1. positions의 시작을 가리키는 포인터로 설정합니다.

  2. 반복: position 이후 s에서 "charset"이라는 단어와 일치하는 ASCII 대소문자 구분 없이 일치하는 첫 번째 7자를 찾습니다. 일치하는 단어를 찾지 못하면 아무것도 반환하지 않습니다.

  3. "charset" 단어 뒤에 바로 나오는 ASCII 공백 문자를 건너뜁니다(공백이 없을 수도 있음).

  4. 다음 문자가 U+003D EQUALS SIGN(=)이 아니면 position을 다음 문자 바로 앞으로 이동시키고, 반복으로 돌아갑니다.

  5. 등호(=) 뒤에 오는 ASCII 공백 문자를 건너뜁니다(공백이 없을 수도 있음).

  6. 다음 문자를 다음과 같이 처리합니다:

    만약 그것이 U+0022 QUOTATION MARK 문자(")이고 s에 나중에 나타나는 U+0022 QUOTATION MARK 문자가 있을 경우
    만약 그것이 U+0027 APOSTROPHE 문자(')이고 s에 나중에 나타나는 U+0027 APOSTROPHE 문자가 있을 경우
    이 문자와 다음에 나타나는 동일한 문자 사이의 부분 문자열에서 인코딩을 얻는 결과를 반환합니다.
    만약 그것이 일치하지 않는 U+0022 QUOTATION MARK 문자(")일 경우
    만약 그것이 일치하지 않는 U+0027 APOSTROPHE 문자(')일 경우
    다음 문자가 없을 경우
    아무것도 반환하지 않습니다.
    그 외의 경우
    이 문자에서 시작하여 첫 번째 ASCII 공백 문자 또는 U+003B SEMICOLON 문자(;)까지 또는 s의 끝까지의 부분 문자열에서 인코딩을 얻는 결과를 반환합니다.

이 알고리즘은 HTTP 명세의 알고리즘과 다릅니다(예: HTTP는 작은 따옴표 사용을 허용하지 않으며, 이 알고리즘에서는 지원되지 않는 백슬래시 이스케이프 메커니즘을 지원해야 합니다). 이 알고리즘은 역사적으로 HTTP와 관련된 맥락에서 사용되었지만, 구현에 따른 구문은 오래 전에 달라졌습니다. [HTTP]

2.5.4 CORS 설정 속성

Attributes/crossorigin

모든 최신 엔진에서 지원됩니다.

Firefox8+Safari6+Chrome13+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

CORS 설정 속성은 다음 키워드와 상태를 가진 열거된 속성입니다:

키워드 상태 간단한 설명
anonymous 익명 요청 모드는 "cors"로 설정되며, 자격 증명 모드는 "same-origin"으로 설정됩니다.
use-credentials 자격 증명 사용 요청 모드는 "cors"로 설정되며, 자격 증명 모드는 "include"로 설정됩니다.

이 속성의 값 누락 기본값No CORS 상태이고, 잘못된 값 기본값빈 값 기본값은 모두 익명 상태입니다.

대부분의 CORS 설정 속성에 의해 관리되는 페치는 잠재적인 CORS 요청 만들기 알고리즘을 통해 이루어집니다.

보다 현대적인 기능에서는 요청의 모드가 항상 "cors"로 설정되며, 특정 CORS 설정 속성은 약간 다른 의미를 가지도록 재정의되었으며, 이는 요청자격 증명 모드에만 영향을 미칩니다. 이 변환을 수행하기 위해, 우리는 주어진 CORS 설정 속성에 대한 CORS 설정 속성 자격 증명 모드를 다음 상태에 따라 결정합니다:

CORS 없음
익명
"same-origin"
자격 증명 사용
"include"

2.5.5 리퍼러 정책 속성

리퍼러 정책 속성열거된 속성입니다. 이 속성의 각 리퍼러 정책(빈 문자열 포함)은 이 속성의 키워드이며, 동일한 이름의 상태와 매핑됩니다.

속성의 누락된 값 기본값잘못된 값 기본값은 모두 빈 문자열 상태입니다.

이 상태들이 다양한 페치의 처리 모델에 미치는 영향은 이 명세서 전체와 Fetch, Referrer Policy에서 자세히 정의되어 있습니다. [FETCH] [REFERRERPOLICY]

여러 신호들이 주어진 페치에 대해 사용되는 처리 모델에 기여할 수 있으며, 리퍼러 정책 속성은 그 중 하나일 뿐입니다. 일반적으로 이러한 신호들이 처리되는 순서는 다음과 같습니다:

  1. 첫 번째로, `noreferrer` 링크 타입의 존재;

  2. 그 다음으로, 리퍼러 정책 속성의 값;

  3. 그 다음으로, `meta` 요소에 `name` 속성이 `referrer`로 설정된 요소의 존재;

  4. 마지막으로, `Referrer-Policy` HTTP 헤더.

2.5.6 넌스 속성

Global_attributes/nonce

모든 현재 엔진에서 지원됨.

Firefox31+Safari지원됨Chrome지원됨
Opera?Edge지원됨
Edge (Legacy)?Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

nonce 콘텐츠 속성은 Content Security Policy에서 주어진 fetch가 진행될 수 있는지를 결정하기 위해 사용할 수 있는 암호화 넌스("한 번 사용된 숫자")를 나타냅니다. 값은 텍스트입니다. [CSP]

nonce 콘텐츠 속성이 있는 요소는 암호화 넌스가 스크립트에만 노출되고(CSS 속성 선택자와 같은 사이드 채널에는 노출되지 않음) 콘텐츠 속성에서 값을 가져와 [[CryptographicNonce]]라는 내부 슬롯에 넣고, HTMLOrSVGElement 인터페이스 믹스인을 통해 스크립트에 노출하며, 콘텐츠 속성을 빈 문자열로 설정합니다. 별도로 명시되지 않은 한, 슬롯의 값은 빈 문자열입니다.

element.nonce

element의 암호화 넌스에 설정된 값을 반환합니다. 세터가 사용되지 않았다면, 이는 nonce 콘텐츠 속성에서 원래 찾은 값이 될 것입니다.

element.nonce = value

element의 암호화 넌스 값을 업데이트합니다.

HTMLElement/nonce

Firefox75+🔰 10+Chrome61+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

nonce IDL 속성은 가져올 때 이 요소의 [[CryptographicNonce]]의 값을 반환해야 하며, 설정할 때 이 요소의 [[CryptographicNonce]]를 주어진 값으로 설정해야 합니다.

IDL 속성 nonce의 setter가 해당 콘텐츠 속성을 업데이트하지 않는다는 점에 주목하십시오. 이는 요소가 탐색 컨텍스트에 연결될 때 nonce 콘텐츠 속성을 빈 문자열로 설정하는 아래의 동작과 함께, 선택자와 같이 콘텐츠 속성을 쉽게 읽을 수 있는 메커니즘을 통해 nonce 값이 유출되는 것을 방지하기 위한 것입니다. 이 동작은 이슈 #2369에서 도입되었습니다.

다음 속성 변경 단계nonce 콘텐츠 속성에 사용됩니다:

  1. elementHTMLOrSVGElement를 포함하지 않는다면, 반환합니다.

  2. localNamenonce가 아니거나 namespace가 null이 아니라면, 반환합니다.

  3. value가 null이라면, element[[CryptographicNonce]]를 빈 문자열로 설정합니다.

  4. 그렇지 않으면, element[[CryptographicNonce]]value로 설정합니다.

HTMLOrSVGElement를 포함하는 요소가 탐색 컨텍스트에 연결될 때, 사용자 에이전트는 element에 대해 다음 단계를 실행해야 합니다:

  1. CSP listelement그림자 포함 루트정책 컨테이너CSP 목록으로 설정합니다.

  2. 만약 CSP list헤더로 전달된 콘텐츠 보안 정책을 포함하고, elementnonce 콘텐츠 속성이 있으며 그 값이 빈 문자열이 아니면 다음을 수행합니다:

    1. nonceelement[[CryptographicNonce]]로 설정합니다.

    2. element에 대해 "nonce"와 빈 문자열을 사용하여 속성 값을 설정합니다.

    3. element[[CryptographicNonce]]nonce로 설정합니다.

    element[[CryptographicNonce]]가 복원되지 않으면 이 시점에서 빈 문자열이 됩니다.

node, copy, subtree가 주어진 HTMLOrSVGElement포함하는 요소에 대한 복제 단계copy[[CryptographicNonce]]node[[CryptographicNonce]]로 설정하는 것입니다.

`

2.5.7 지연 로딩 속성

Lazy_loading

모든 현재 엔진에서 지원됨.

Firefox75+Safari15.4+Chrome77+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

지연 로딩 속성은 다음과 같은 키워드 및 상태를 가지는 열거형 속성입니다:

키워드 상태 간단한 설명
lazy 지연 일부 조건이 충족될 때까지 리소스 가져오기를 연기하는 데 사용됩니다.
eager 즉시 리소스를 즉시 가져오도록 사용됩니다. 기본 상태입니다.

이 속성은 사용자 에이전트가 리소스를 즉시 가져오도록 지시하거나, 속성의 현재 상태에 따라 요소와 관련된 일부 조건이 충족될 때까지 가져오기를 연기하도록 지시합니다.

속성의 누락된 값 기본값유효하지 않은 값 기본값은 모두 즉시 상태입니다.


지연 로딩 요소 단계는 요소 element가 주어졌을 때 다음과 같은 단계로 진행됩니다:

  1. element에 대해 스크립팅이 비활성화된 경우, false를 반환합니다.

    이것은 추적 방지 조치입니다. 스크립팅이 비활성화된 경우에도 사용자 에이전트가 지연 로딩을 지원하면, 페이지의 마크업에 이미지를 전략적으로 배치하여 서버가 이미지 요청의 수와 시점을 추적함으로써 사용자의 대략적인 스크롤 위치를 추적할 수 있기 때문입니다.

  2. element지연 로딩 속성지연 상태에 있으면, true를 반환합니다.

  3. false를 반환합니다.

imgiframe 요소는 초기에는 null로 설정된 지연 로드 재개 단계를 가집니다.

지연 로드될 imgiframe 요소에 대해, 이러한 단계는 지연 로드 교차 관찰자의 콜백에서 실행되거나, 지연 로딩 속성즉시 상태로 설정될 때 실행됩니다. 이는 요소가 계속 로드되도록 합니다.

document는 초기에는 null로 설정된 지연 로드 교차 관찰자를 가지며, IntersectionObserver 인스턴스로 설정될 수 있습니다.

element를 지연 로딩 요소로 교차 관찰을 시작하기 위해, 다음 단계를 실행합니다:

  1. docelement노드 문서로 설정합니다.

  2. 만약 doc지연 로드 교차 관찰자가 null이라면, 이를 다음과 같이 초기화된 새 IntersectionObserver 인스턴스로 설정합니다:

    이 스펙에서는 JavaScript로 노출된 생성자를 사용할 수밖에 없지만, 원래의 IntersectionObserver 생성자를 사용하려고 합니다. Intersection Observer가 스펙에 사용할 수 있는 저수준의 훅을 노출할 때까지, 이 방식으로 진행합니다. 관련 이슈는 w3c/IntersectionObserver#464에서 확인할 수 있습니다. [INTERSECTIONOBSERVER]

  3. doc지연 로드 교차 관찰자observe 메서드를 element를 인수로 하여 호출합니다.

    원래의 observe 메서드를 사용하려고 합니다. 자세한 내용은 w3c/IntersectionObserver#464를 참조합니다. [INTERSECTIONOBSERVER]

지연 로딩 요소의 교차 관찰을 중지하기 위해 element에 대해 다음 단계를 실행합니다:

  1. docelement노드 문서로 설정합니다.

  2. 확인: doc지연 로드 교차 관찰자가 null이 아님을 확인합니다.

  3. doc지연 로드 교차 관찰자unobserve 메서드를 element를 인수로 하여 호출합니다.

    원래의 unobserve 메서드를 사용하려고 합니다. 자세한 내용은 w3c/IntersectionObserver#464를 참조합니다. [INTERSECTIONOBSERVER]

(이것은 추적 벡터입니다.) 지연 로드 스크롤 여백구현 정의된 값이지만, 다음과 같은 고려 사항이 있습니다:

개인정보 보호를 위해 지연 로드 스크롤 여백이 추가적인 정보를 유출하지 않도록 하는 것이 중요합니다. 예를 들어, 현재 장치에서의 일반적인 스크롤 속도가 새로운 지문 생성 벡터를 도입하지 않도록 부정확할 수 있습니다.

2.5.8 차단 속성

차단 속성은 외부 리소스를 가져오는 작업을 차단해야 함을 명시적으로 나타냅니다. 차단할 수 있는 작업은 다음 표에 나열된 문자열인 가능한 차단 토큰으로 표시됩니다:

가능한 차단 토큰 설명
"render" 이 요소는 렌더링을 차단할 가능성이 있습니다.

미래에는 더 많은 가능한 차단 토큰이 추가될 수 있습니다.

차단 속성정렬되지 않은 고유한 공백으로 구분된 토큰의 집합이어야 하며, 각 토큰은 가능한 차단 토큰 중 하나여야 합니다. 지원되는 토큰가능한 차단 토큰입니다. 하나의 요소는 최대 하나의 차단 속성만 가질 수 있습니다.

요소 el차단 토큰 집합은 다음 단계의 결과입니다:

  1. el차단 속성의 값을 value로 설정하거나, 해당 속성이 없으면 빈 문자열로 설정합니다.

  2. valueASCII 소문자로 변환value로 설정합니다.

  3. rawTokensvalue를 ASCII 공백으로 분할한 결과로 설정합니다.

  4. rawTokens의 요소 중에서 가능한 차단 토큰에 해당하는 요소를 포함하는 집합을 반환합니다.

요소가 렌더링을 차단할 가능성이 있는 경우는 해당 요소의 차단 토큰 집합에 "render"가 포함된 경우이며, 또는 개별 요소에서 정의될 암묵적으로 렌더링을 차단할 가능성이 있는 경우입니다. 기본적으로 요소는 암묵적으로 렌더링을 차단할 가능성이 없습니다.

2.5.9 가져오기 우선순위 속성

가져오기 우선순위 속성은 다음과 같은 키워드와 상태를 가진 열거형 속성입니다:

키워드 상태 간단한 설명
high High 동일한 목적지를 가진 다른 리소스에 비해 높은 우선순위를 나타냅니다.
low Low 동일한 목적지를 가진 다른 리소스에 비해 낮은 우선순위를 나타냅니다.
auto Auto 동일한 목적지를 가진 다른 리소스에 비해 가져오기 우선순위를 자동으로 결정합니다.

이 속성의 값이 없는 경우의 기본값유효하지 않은 값의 기본값은 모두 Auto 상태입니다.

2.6 공통 DOM 인터페이스

2.6.1 IDL 속성에서 콘텐츠 속성 반영

반영의 구성 요소는 다음과 같습니다:

반영된 IDL 속성반영하도록 정의될 수 있습니다. 반영된 콘텐츠 속성 이름을 가진 반영된 대상입니다. 일반적으로 이는 IDL 속성 getter가 콘텐츠 속성의 현재 값을 반환하고, setter는 콘텐츠 속성의 값을 주어진 값으로 변경함을 의미합니다.

반영된 대상은 다음과 같은 관련 알고리즘을 가집니다:

반영된 대상이 요소 element인 경우, 다음과 같이 정의됩니다:

get the element
  1. element를 반환합니다.

get the content attribute
  1. attribute네임스페이스 및 로컬 이름으로 속성 가져오기를 실행한 결과이며, null, 반영된 콘텐츠 속성 이름, element이 주어집니다.

  2. attribute가 null인 경우 null을 반환합니다.

  3. attribute을 반환합니다.

set the content attribute with a string value
  1. 속성 값을 설정하고, element, 반영된 콘텐츠 속성 이름, value를 줍니다.

delete the content attribute
  1. 네임스페이스 및 로컬 이름으로 속성 제거를 실행하며, null, 반영된 콘텐츠 속성 이름, element이 주어집니다.

반영된 대상ElementInternals 객체 elementInternals인 경우, 다음과 같이 정의됩니다:

get the element
  1. elementInternals대상 요소를 반환합니다.

get the content attribute
  1. 만약 elementInternals대상 요소내부 콘텐츠 속성 맵[ 반영된 콘텐츠 속성 이름]이 존재하지 않는다면, null을 반환합니다.

  2. elementInternals대상 요소내부 콘텐츠 속성 맵[ 반영된 콘텐츠 속성 이름]을 반환합니다.

set the content attribute with a string value
  1. 설정하고, elementInternals대상 요소내부 콘텐츠 속성 맵[ 반영된 콘텐츠 속성 이름]을 value로 설정합니다.

delete the content attribute
  1. 제거하고, elementInternals대상 요소내부 콘텐츠 속성 맵[ 반영된 콘텐츠 속성 이름]을 제거합니다.

이는 ElementInternals 객체의 데이터 구조가 다소 중복되는 결과를 낳습니다. 이는 대상 요소내부 콘텐츠 속성 맵이 직접 조작될 수 없으며, 이로 인해 반영이 단일 방향으로만 이루어지기 때문입니다. 그럼에도 불구하고 이는 반영된 대상 간에 공유되는 IDL 속성을 정의할 때 발생할 수 있는 오류를 줄이고, 공통 API 시맨틱의 이점을 얻기 위해 선택된 접근 방식입니다.


IDL 속성 타입이 DOMString 또는 DOMString?이며, 반영열거된 콘텐츠 속성을 가지는 경우, 알려진 값으로만 제한될 수 있습니다. 아래의 처리 모델에 따라, 이러한 IDL 속성의 getter는 해당 열거된 속성에 대한 키워드만 반환하거나, 빈 문자열 또는 null을 반환하게 됩니다.

반영된 IDL 속성DOMString 타입을 가지고 있는 경우:

반영된 IDL 속성DOMString? 타입을 가지고 있는 경우:

만약 반영된 IDL 속성USVString 타입이고, 선택적으로 URL로 간주된다면:

반영된 IDL 속성boolean 타입을 가지고 있는 경우:

이는 부울 콘텐츠 속성에 대한 규칙에 해당합니다.

만약 반영된 IDL 속성long 타입을 가지고 있으며, 선택적으로 음수가 아닌 숫자만으로 제한된 경우, 또는 선택적으로 기본 값 defaultValue를 가진 경우:

만약 반영된 IDL 속성unsigned long 타입을 가지고 있으며, 선택적으로 양수로만 제한된, 양수로만 제한되고 폴백이 있는, 또는 범위로 제한된 [clampedMin, clampedMax] 경우, 그리고 선택적으로 기본 값 defaultValue을 가진 경우:

만약 반영된 IDL 속성double 타입을 가지고 있으며, 선택적으로 양수로만 제한된 경우, 그리고 선택적으로 기본 값 defaultValue을 가진 경우:

무한대(Infinity) 및 숫자가 아님(NaN) 값들은 Web IDL에 정의된 대로 설정 시 예외를 발생시킵니다. [WEBIDL]

만약 반영된 IDL 속성DOMTokenList 타입이라면, getter 단계는 연관된 요소가 this이고 연관된 속성의 지역 이름이 반영된 콘텐츠 속성 이름DOMTokenList 객체를 반환한다. 명세 작성자는 이 타입의 IDL 속성을 ElementInternals 에 반영할 수 없다.

만약 반영된 IDL 속성T? 타입이고, 여기서 TElement 또는 Element 를 상속받는 인터페이스라면, attr반영된 콘텐츠 속성 이름일 때:

이 타입의 반영된 IDL 속성은 일관성을 위해 반드시 식별자가 "Element"로 끝나는 것이 권장된다.

만약 반영된 IDL 속성FrozenArray<T>? 타입이고, TElement 또는 Element 를 상속받는 인터페이스라면, attr반영된 콘텐츠 속성 이름일 때:

이 타입의 반영된 IDL 속성은 일관성을 위해 반드시 식별자가 "Elements"로 끝나는 것이 권장된다.

2.6.2 IDL 확장 속성을 통한 reflect 사용하기

Reflect는 IDL에서 확장 속성을 통해 사용할 수 있습니다. [Reflect], [ReflectSetter], [ReflectURL], [ReflectNonNegative], [ReflectPositive], 그리고 [ReflectPositiveWithFallback] 모두 reflect를 트리거합니다. 이들은 인자를 받지 않거나 문자열을 받을 수 있어야 하며, 인터페이스 멤버 속성 외에는 사용될 수 없습니다. 그리고 한 번에 하나의 속성만 사용할 수 있습니다.

이 주요 reflect 확장 속성 중 하나에 대해, 그 반영된 content 속성 이름은 인자가 제공된다면 그 문자열 값이고, 그렇지 않으면 IDL 속성 이름을 ASCII 소문자로 변환한 값입니다.

[Reflect] 확장 속성이 적용된 IDL 속성은 반영해야 하며, [Reflect]반영된 content 속성 이름을 반영해야 합니다.

[ReflectSetter] 확장 속성이 적용된 IDL 속성은 설정 시 반영되어야 하며, [ReflectSetter]반영된 content 속성 이름을 반영해야 합니다.

[ReflectURL] 확장 속성USVString 타입의 속성에만 등장해야 합니다.

[ReflectURL] 확장 속성이 적용된 IDL 속성은 반영해야 하며, URL로 간주되어야 하며, [ReflectURL]반영된 content 속성 이름을 반영해야 합니다.

[ReflectNonNegative] 확장 속성long 타입의 속성에만 등장해야 합니다.

[ReflectNonNegative] 확장 속성이 적용된 IDL 속성은 반영해야 하며, 음수가 아닌 값만 허용되어야 하며, [ReflectNonNegative]반영된 content 속성 이름을 반영해야 합니다.

[ReflectPositive][ReflectPositiveWithFallback] 확장 속성double 또는 unsigned long 타입의 속성에만 등장해야 합니다.

[ReflectPositive] 확장 속성이 적용된 IDL 속성은 반영해야 하며, 0보다 큰 값만 허용되어야 하며, [ReflectPositive]반영된 content 속성 이름을 반영해야 합니다.

[ReflectPositiveWithFallback] 확장 속성이 적용된 IDL 속성은 반영해야 하며, 0보다 큰 값만 허용하며 fallback 포함되어야 하며, [ReflectPositiveWithFallback]반영된 content 속성 이름을 반영해야 합니다.


위의 확장 속성을 보완하기 위해 [ReflectRange][ReflectDefault]를 추가로 도입합니다. 이들은 reflect 동작을 보강하며, 인터페이스 멤버 속성에만 등장해야 합니다.

[ReflectRange] 확장 속성은 두 개의 값으로 제한된 정수 리스트를 받아야 합니다. unsigned long 타입의 속성에만 사용할 수 있습니다. 또한 [Reflect]와 함께 등장해야 합니다.

[ReflectRange] 확장 속성이 적용된 IDL 속성은 지정된 범위로 고정(clamped)되며, [clampedMin, clampedMax]에서 clampedMin은 첫 번째, clampedMax는 두 번째 인자입니다. 이 값들은 [ReflectRange]에 전달됩니다.

[ReflectDefault] 확장 속성double, long, 또는 unsigned long 타입의 속성에만 등장해야 합니다. double 타입의 속성에 사용될 때는 소수를 받아야 하며, 그 외에는 정수를 받아야 합니다. 또한 [Reflect], [ReflectNonNegative], [ReflectPositive], 또는 [ReflectPositiveWithFallback]와 함께 등장해야 합니다.

[ReflectDefault] 확장 속성이 적용된 IDL 속성은 기본값[ReflectDefault]에 전달된 인자로부터 제공합니다.

2.6.3 명세에서 reflect 사용하기

Reflection은 주로 웹 개발자의 작업 효율성을 높이기 위해 반영된 IDL 속성을 통해 콘텐츠 속성에 타입이 지정된 접근을 제공하는 것입니다. 웹 플랫폼이 기반을 두고 있는 궁극적인 진실의 출처는 바로 콘텐츠 속성들 자체입니다. 즉, 명세 작성자는 반영된 IDL 속성의 getter나 setter 단계를 사용해서는 안 되며, 대신 콘텐츠 속성의 존재 여부와 값을 사용해야 합니다. (또는 열거된 속성과 같은 추상화를 사용할 수 있습니다.)

이와 관련하여 두 가지 중요한 예외는 다음과 같은 타입의 반영된 IDL 속성입니다:

이러한 경우, 명세 작성자는 해당 반영된 대상attr 관련 요소 가져오기attr 관련 요소들 가져오기를 각각 사용해야 합니다. 콘텐츠 속성의 존재 여부와 값은 완전히 동기화될 수 없기 때문에 사용해서는 안 됩니다.

반영된 대상명시적으로 설정된 attr 요소, 명시적으로 설정된 attr 요소들, 캐시된 attr 관련 요소들, 및 캐시된 attr 관련 요소 객체는 내부 구현 세부 사항으로 간주되며, 이를 기반으로 구축해서는 안 됩니다.

2.6.4 컬렉션

HTMLFormControlsCollectionHTMLOptionsCollection 인터페이스는 HTMLCollection 인터페이스에서 파생된 컬렉션입니다. HTMLAllCollection 인터페이스도 컬렉션이지만, 이와 같이 파생된 것은 아닙니다.

2.6.4.1 HTMLAllCollection 인터페이스

HTMLAllCollection 인터페이스는 레거시 document.all 속성을 위해 사용됩니다. 이 인터페이스는 HTMLCollection과 유사하게 동작합니다. 주요 차이점은 메서드의 다양한 (남용된) 사용이 항상 어떤 결과를 반환하도록 허용하며, 속성 접근 외에도 함수로 호출할 수 있다는 점입니다.

모든 HTMLAllCollection 객체는 Document에 루팅되며, 모든 요소와 일치하는 필터를 가지므로 HTMLAllCollection 객체의 컬렉션에 의해 표현된 요소들은 루트 Document의 모든 하위 요소로 구성됩니다.

HTMLAllCollection 인터페이스를 구현하는 객체들은 추가 [[Call]] 내부 메서드가 포함된 레거시 플랫폼 객체이며, [[IsHTMLDDA]] 내부 슬롯도 가집니다.

HTMLAllCollection 인터페이스를 구현하는 객체들은 [[IsHTMLDDA]] 내부 슬롯을 가지기 때문에 몇 가지 특이한 동작을 합니다:

이 특수 동작들은 레거시 콘텐츠와의 호환성을 유지하기 위해 설계되었습니다: 한 쪽은 document.all 객체의 존재를 사용하여 레거시 사용자 에이전트를 감지하고, 다른 한 쪽은 이러한 레거시 사용자 에이전트만 지원하며 document.all 객체의 존재를 확인하지 않고도 이를 사용합니다. [JAVASCRIPT]

[Exposed=Window,
 LegacyUnenumerableNamedProperties]
interface HTMLAllCollection {
  readonly attribute unsigned long length;
  getter Element (unsigned long index);
  getter (HTMLCollection or Element)? namedItem(DOMString name);
  (HTMLCollection or Element)? item(optional DOMString nameOrIndex);

  // Note: HTMLAllCollection objects have a custom [[Call]] internal method and an [[IsHTMLDDA]] internal slot.
};

객체의 지원되는 속성 인덱스HTMLCollection 객체들에 대해 정의된 대로입니다.

지원되는 속성 이름은 컬렉션에 의해 표현된 모든 요소의 id 속성의 비어있지 않은 값들, 그리고 컬렉션에 의해 표현된 모든 "all"-명명된 요소들name 속성의 비어있지 않은 값들로 구성됩니다. 이 값들은 트리 순서에 따라 정렬되며, 중복된 이후 항목들은 무시되고, 요소의 idname을 앞서며, 두 값이 다르고 둘 중 어느 것도 이전 항목의 중복이 아닐 때 그 순서대로 정렬됩니다.

length 게터 단계는 컬렉션에 의해 표현된 노드의 수를 반환하는 것입니다.

인덱스 속성 게터는 전달된 인덱스를 주어진 this에서 모든 인덱스 요소를 가져오는 것의 결과를 반환해야 합니다.

namedItem(name) 메서드 단계는 주어진 name에 대해 모든 명명된 요소를 가져오는 것의 결과를 this에서 반환하는 것입니다.

item(nameOrIndex) 메서드 단계는 다음과 같습니다:

  1. nameOrIndex가 제공되지 않은 경우 null을 반환합니다.

  2. 주어진 nameOrIndex에 대해 모든 인덱스 또는 명명된 요소를 가져오는 것의 결과를 반환합니다.


다음 요소들은 "all"-명명된 요소들입니다: a, button, embed, form, frame, frameset, iframe, img, input, map, meta, object, select, 그리고 textarea

"모든 인덱스 요소를 가져오기"HTMLAllCollection collection에서 주어진 인덱스 index의 요소를 반환하거나, 그런 index 번째 요소가 없는 경우 null을 반환하는 것을 의미합니다.

"모든 명명된 요소를 가져오기"HTMLAllCollection collection에서 주어진 이름 name의 요소를 가져오는 것을 의미합니다.

  1. name이 빈 문자열인 경우 null을 반환합니다.

  2. subCollectioncollection과 같은 Document에 루팅된 HTMLCollection 객체로 정의하고, 이 객체의 필터는 다음 조건을 만족하는 요소들만 일치하도록 합니다:

  3. 만약 subCollection에 요소가 하나만 있다면, 그 요소를 반환합니다.

  4. 그렇지 않고, subCollection이 비어있다면 null을 반환합니다.

  5. 그렇지 않은 경우, subCollection을 반환합니다.

"모든 인덱스 또는 명명된 요소를 가져오기"HTMLAllCollection collection에서 nameOrIndex에 따라 요소를 가져오는 것을 의미합니다:

  1. nameOrIndex가 JavaScript 문자열로 배열 인덱스 속성 이름으로 변환된 경우, 주어진 nameOrIndex에 대해 모든 인덱스 요소를 가져오는 것의 결과를 반환합니다.

  2. 그렇지 않은 경우, 주어진 nameOrIndex에 대해 모든 명명된 요소를 가져오는 것의 결과를 반환합니다.

2.6.4.1.1 [[Call]] ( thisArgument, argumentsList )
  1. 만약 argumentsList크기가 0이거나, argumentsList[0]이 undefined라면 null을 반환합니다.

  2. nameOrIndex변환하는 것의 결과로 설정합니다. argumentsList[0]을 DOMString으로 변환합니다.

  3. result모든 인덱스 또는 명명된 요소를 가져오는 것의 결과로 설정합니다. 이 HTMLAllCollection에서 nameOrIndex에 대해 실행합니다.

  4. result를 ECMAScript 값으로 변환하는 것의 결과를 반환합니다.

thisArgument는 무시되며, 따라서 Function.prototype.call.call(document.all, null, "x")와 같은 코드는 여전히 요소를 검색합니다. (document.all.call은 존재하지 않으며, document.allFunction.prototype에서 상속되지 않기 때문입니다.)

2.6.4.2 The HTMLFormControlsCollection interface

The HTMLFormControlsCollection 인터페이스는 form 요소 내의 컬렉션리스트된 요소들을 위해 사용됩니다.

HTMLFormControlsCollection

현재 모든 엔진에서 지원합니다.

Firefox1+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer지원하지 않음
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

RadioNodeList

현재 모든 엔진에서 지원합니다.

Firefox33+Safari7+Chrome21+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
[Exposed=Window]
interface HTMLFormControlsCollection : HTMLCollection {
// inherits length and item()
getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
};

[Exposed=Window]
interface RadioNodeList : NodeList {
attribute DOMString value;
};
collection.length

collection 내 요소의 수를 반환합니다.

element = collection.item(index)
element = collection[index]

collectionindex에 위치한 항목을 반환합니다. 항목들은 트리 순서로 정렬됩니다.

element = collection.namedItem(name)

HTMLFormControlsCollection/namedItem

현재 모든 엔진에서 지원합니다.

Firefox33+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer지원하지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
radioNodeList = collection.namedItem(name)
element = collection[name]
radioNodeList = collection[name]

collection에서 ID 또는 name name을 가진 항목을 반환합니다.

여러 개의 일치하는 항목이 있는 경우, 그러한 모든 요소들을 포함하는 RadioNodeList 객체를 반환합니다.

radioNodeList.value

radioNodeList에 의해 표현된 첫 번째 선택된 라디오 버튼의 값을 반환합니다.

radioNodeList.value = value

value와 일치하는 값을 가진 radioNodeList에 의해 표현된 첫 번째 라디오 버튼을 선택합니다.

객체의 지원되는 속성 인덱스HTMLCollection 객체에 대해 정의된 것과 동일합니다.

지원되는 속성 이름컬렉션에 의해 표현된 모든 요소의 빈 값이 아닌 idname 속성 값으로 구성됩니다. 이러한 속성 이름들은 트리 순서에 따라 정렬되며, 이후의 중복 항목은 무시됩니다. 요소의 idname보다 우선하여 기여되며, 서로 다르고 이전 항목의 중복이 아닌 경우에 한합니다.

namedItem(name) 메서드는 다음 알고리즘에 따라 동작해야 합니다:

  1. name이 빈 문자열인 경우 null을 반환하고 알고리즘을 중지합니다.
  2. 메서드가 호출될 당시 컬렉션에 name과 일치하는 id 또는 name 속성을 가진 노드가 정확히 하나만 있는 경우, 해당 노드를 반환하고 알고리즘을 중지합니다.
  3. 그렇지 않고, 컬렉션에 name과 일치하는 id 또는 name 속성을 가진 노드가 없는 경우 null을 반환하고 알고리즘을 중지합니다.
  4. 그렇지 않으면, 새로운 RadioNodeList 객체를 생성하여 HTMLFormControlsCollection 객체의 뷰를 필터링합니다. 이 RadioNodeList 객체 내 노드는 name과 일치하는 id 또는 name 속성을 가진 노드들로만 구성됩니다. 이 RadioNodeList 객체 내 노드는 트리 순서에 따라 정렬되어야 합니다.
  5. 해당 RadioNodeList 객체를 반환합니다.

RadioNodeList 인터페이스의 멤버는 NodeList 인터페이스로부터 상속된 동작을 수행해야 합니다.

RadioNodeList/value

현재 모든 엔진에서 지원합니다.

Firefox33+Safari7+Chrome21+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

value IDL 속성은 RadioNodeList 객체에 대해 다음과 같은 단계를 실행하여 값을 반환해야 합니다:

  1. elementinput 요소 중 라디오 버튼 상태에 있는 첫 번째 요소로 설정하고 checkedness가 true인 요소를 RadioNodeList 객체로 반환합니다. 그렇지 않으면 null로 설정합니다.

  2. element가 null인 경우 빈 문자열을 반환합니다.

  3. elementvalue 속성이 없는 요소인 경우 문자열 "on"을 반환합니다.

  4. 그렇지 않으면 elementvalue 속성의 값을 반환합니다.

value IDL 속성을 설정할 때 다음과 같은 단계를 실행해야 합니다:

  1. 새 값이 "on" 문자열인 경우: elementinput 요소 중 라디오 버튼 상태에 있고 새 값이 일치하거나 속성이 없는 첫 번째 요소로 설정합니다. 해당 요소가 없으면 대신 element를 null로 설정합니다.

    그렇지 않은 경우: elementinput 요소 중 라디오 버튼 상태에 있으며, 새 값이 일치하는 속성이 있는 첫 번째 요소로 설정합니다. 해당 요소가 없으면 대신 element를 null로 설정합니다.

  2. element가 null이 아닌 경우 checkedness를 true로 설정합니다.

2.6.4.3 HTMLOptionsCollection 인터페이스

HTMLOptionsCollection

현재 모든 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer6+
Firefox Android?Safari iOS1+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLOptionsCollection 인터페이스는 option 요소의 컬렉션을 나타내며, 항상 select 요소에 루팅되며 해당 요소의 하위 요소를 조작하는 속성과 메서드를 가집니다.

[Exposed=Window]
interface HTMLOptionsCollection : HTMLCollection {
  // 상속받은 item(), namedItem()
  [CEReactions] attribute unsigned long length; // 상속받은 length()를 덮어씁니다.
  [CEReactions] setter undefined (unsigned long index, HTMLOptionElement? option);
  [CEReactions] undefined add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
  [CEReactions] undefined remove(long index);
  attribute long selectedIndex;
};
collection.length

collection에 있는 요소의 수를 반환합니다.

collection.length = value

기존 길이보다 작은 숫자로 설정하면 collection에 해당하는 컨테이너에 있는 option 요소의 수를 줄입니다.

기존 길이보다 큰 숫자로 설정하면 100000 이하일 경우, collection에 해당하는 컨테이너에 빈 option 요소를 추가합니다.

element = collection.item(index)
element = collection[index]

collection에서 인덱스 index에 있는 항목을 반환합니다. 항목들은 트리 순서로 정렬됩니다.

collection[index] = element

indexcollection에 있는 항목 수보다 큰 숫자인 경우, 해당 컨테이너에 빈 option 요소를 추가합니다.

null로 설정하면 collection에서 인덱스 index에 있는 항목을 제거합니다.

option 요소로 설정하면 collectionindex에 해당 요소를 추가하거나 교체합니다.

element = collection.namedItem(name)
element = collection[name]

collection에서 name과 일치하는 ID 또는 name을 가진 항목을 반환합니다.

일치하는 항목이 여러 개 있을 경우, 첫 번째 항목이 반환됩니다.

collection.add(element[, before])

elementbefore로 지정된 노드 앞에 삽입합니다.

before 인수는 숫자일 수 있으며, 이 경우 element가 해당 숫자의 항목 앞에 삽입됩니다. 또는 collection의 요소인 경우, element가 해당 요소 앞에 삽입됩니다.

before이 생략되거나 null이거나 범위를 벗어난 숫자인 경우 element는 목록의 끝에 추가됩니다.

element가 삽입될 요소의 상위 요소인 경우 "HierarchyRequestError" DOMException을 던집니다.

collection.remove(index)

collection에서 인덱스 index에 있는 항목을 제거합니다.

collection.selectedIndex

선택된 첫 번째 항목의 인덱스를 반환하거나, 선택된 항목이 없으면 −1을 반환합니다.

collection.selectedIndex = index

collection에서 인덱스 index에 있는 option 요소를 선택으로 변경합니다.

이 객체의 지원되는 속성 인덱스HTMLCollection 객체에 대해 정의된 것과 동일합니다.

length getter 단계는 컬렉션이 컬렉션으로 표현된 노드 수를 반환합니다.

length setter 단계는 다음과 같습니다:

  1. current를 컬렉션이 컬렉션으로 표현된 노드 수로 설정합니다.

  2. 주어진 값이 current보다 크면:

    1. 주어진 값이 100,000보다 크면 반환합니다.

    2. nvaluecurrent로 설정합니다.

    3. n개의 새로운 option 요소를 속성과 자식 노드 없이 select 요소에 추가합니다. 여기서 this는 루트로 되어 있습니다.

  3. 주어진 값이 current보다 작으면:

    1. ncurrentvalue로 설정합니다.

    2. 컬렉션에서 마지막 n 개의 노드를 부모 노드에서 제거합니다.

length를 설정해도 optgroup 요소를 제거하거나 추가하지 않으며, 기존 optgroup 요소에 새로운 자식을 추가하지 않습니다(자식을 제거할 수는 있습니다).

지원되는 속성 이름은 모든 요소의 비어 있지 않은 idname 속성 값으로 구성됩니다. 이 요소들은 컬렉션으로 표현된 요소들이며, 트리 순서에 따라 배열됩니다. 나중에 중복된 항목은 무시되며, 요소의 idname보다 우선하여 적용됩니다. 이 두 속성이 다르며, 어느 것도 이전 항목의 중복이 아닌 경우에 한합니다.

사용자가 새로운 인덱스 속성의 값을 설정하거나 기존 인덱스 속성의 값을 설정해야 할 때, 다음 알고리즘을 실행해야 합니다:

  1. value가 null이면 remove 메서드의 단계를 index를 인수로 실행하고 반환합니다.

  2. length를 컬렉션이 컬렉션으로 표현된 노드 수로 설정합니다.

  3. nindex 마이너스 length로 설정합니다.

  4. 만약 n이 0보다 크면, 속성과 자식 노드가 없는 option 요소 n-1개로 구성된 DocumentFragmentselect 요소에 추가합니다. 이 요소는 HTMLOptionsCollection의 루트입니다.

  5. 만약 n이 0보다 크거나 같다면, valueselect 요소에 추가합니다. 그렇지 않으면, index번째 요소를 value로 교체합니다.

add(element, before) 메서드는 다음 알고리즘에 따라 작동해야 합니다:

  1. element가 컬렉션이 루팅된 select 요소의 상위 요소이면 "HierarchyRequestError" DOMException을 던져야 합니다.

  2. before가 요소인 경우, 해당 요소가 컬렉션이 루팅된 select 요소의 하위 요소가 아니라면 "NotFoundError" DOMException을 던져야 합니다.

  3. elementbefore가 동일한 요소인 경우, 반환합니다.

  4. before가 노드인 경우 reference를 해당 노드로 설정합니다. 그렇지 않으면, before가 정수이며 컬렉션에 before번째 노드가 있으면 reference를 해당 노드로 설정합니다. 그렇지 않으면 reference를 null로 설정합니다.

  5. reference가 null이 아닌 경우 parentreference의 부모 노드로 설정합니다. 그렇지 않으면 parent를 컬렉션이 루팅된 select 요소로 설정합니다.

  6. 삽입 전 elementparent 노드에 reference 앞에 삽입합니다.

remove(index) 메서드는 다음 알고리즘에 따라 작동해야 합니다:

  1. 컬렉션이 컬렉션으로 표현된 노드 수가 0이면 반환합니다.

  2. index가 0 이상이며 컬렉션이 컬렉션으로 표현된 노드 수보다 작은 수가 아니면 반환합니다.

  3. element를 컬렉션에서 index번째 요소로 설정합니다.

  4. element를 부모 노드에서 제거합니다.

selectedIndex IDL 속성은 select 요소에서 동일한 이름의 속성과 동일하게 동작해야 합니다. 이 속성은 컬렉션이 HTMLOptionsCollection에 루팅된 요소입니다.

2.6.5 DOMStringList 인터페이스

DOMStringList

모든 현재 엔진에서 지원됨.

Firefox1+Safari5.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

DOMStringList 인터페이스는 문자열 목록을 나타내는 구식 레트로 방식입니다.

[Exposed=(Window,Worker)]
            interface DOMStringList {
              readonly attribute unsigned long length;
              getter DOMString? item(unsigned long index);
              boolean contains(DOMString string);
            };

새 API는 sequence<DOMString> 또는 그에 상응하는 것을 사용해야 하며, DOMStringList를 사용해서는 안 됩니다.

strings.length

strings 안의 문자열 개수를 반환합니다.

strings[index]
strings.item(index)

strings에서 index번째 문자열을 반환합니다.

strings.contains(string)

stringsstring을 포함하면 true를, 그렇지 않으면 false를 반환합니다.

DOMStringList 객체는 연관된 리스트를 갖습니다.

DOMStringList 인터페이스는 인덱스 속성을 지원합니다. 지원되는 속성 인덱스this의 연관된 리스트의 인덱스입니다.

DOMStringList/length

모든 최신 엔진에서 지원됨.

Firefox1+Safari5.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

length getter 단계는 this의 연관된 리스트의 크기를 반환하는 것입니다.

DOMStringList/item

모든 최신 엔진에서 지원됨.

Firefox1+Safari5.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

item(index) 메서드 단계는 this의 연관된 리스트에서 index번째 항목을 반환하거나, index + 1이 this의 연관된 리스트의 크기보다 크면 null을 반환합니다.

DOMStringList/contains

모든 최신 엔진에서 지원됨.

Firefox1.5+Safari5.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

contains(string) 메서드 단계는 this의 연관된 리스트가 contains string이면 true를, 그렇지 않으면 false를 반환하는 것입니다.

2.7 구조화된 데이터의 안전한 전달

JavaScript 객체(예: 플랫폼 객체 포함)를 Realm 경계를 넘어 전달하기 위해, 이 명세는 객체를 직렬화 및 역직렬화하기 위한 다음과 같은 인프라를 정의합니다. 일부 경우에는 데이터를 복사하는 대신 기본 데이터를 전송하기도 합니다. 이 직렬화/역직렬화 프로세스는 "구조화된 복제"라고 통칭되지만, 대부분의 API는 별도의 직렬화 및 역직렬화 단계를 수행합니다. (주목할 예외는 structuredClone() 메서드입니다.)

이 섹션에서는 JavaScript 명세의 용어 및 서체 표기법을 사용합니다. [JAVASCRIPT]

2.7.1 직렬화 가능한 객체

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

/developer.mozilla.org/en-US/docs/Glossary/Serializable_object

Firefox103+SafariNoChrome77+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

직렬화 가능한 객체는 특정 realm에 독립적으로 직렬화되고 나중에 역직렬화될 수 있습니다. 이렇게 하면 디스크에 저장되었다가 나중에 복원되거나, agent 및 심지어 agent cluster 경계를 넘어 복제될 수 있습니다.

모든 객체가 직렬화 가능한 객체는 아니며, 직렬화 가능한 객체인 모든 객체의 모든 측면이 직렬화될 때 반드시 보존되는 것은 아닙니다.

플랫폼 객체직렬화 가능한 객체일 수 있으며, 그 주 인터페이스[Serializable] IDL 확장 속성으로 장식된 경우에만 가능합니다. 이러한 인터페이스는 또한 다음 알고리즘을 정의해야 합니다:

직렬화 단계, 플랫폼 객체 value, 기록 serialized, 및 boolean forStorage를 포함하는 단계를 설명합니다.

value의 데이터를 serialized 필드로 직렬화하는 단계입니다. serialized에 직렬화된 결과 데이터는 realm에 독립적이어야 합니다.

이 단계는 직렬화가 불가능한 경우 예외를 발생시킬 수 있습니다.

이 단계는 중첩된 데이터 구조를 직렬화하기 위해 하위 직렬화를 수행할 수 있습니다. memory 인수를 생략하게 되므로 StructuredSerialize를 직접 호출해서는 안 됩니다.

이 단계의 도입에서 forStorage 인수가 알고리즘과 관련이 없는 경우 언급을 생략해야 합니다.

역직렬화 단계, 기록 serialized, 플랫폼 객체 value, 및 realm targetRealm를 포함하는 단계를 설명합니다.

serialized의 데이터를 역직렬화하여 value를 적절하게 설정하는 단계입니다. value는 해당 플랫폼 객체 유형의 새로 생성된 인스턴스가 되며, 내부 데이터가 설정되지 않습니다. 이러한 설정은 이 단계의 작업입니다.

이 단계는 역직렬화가 불가능한 경우 예외를 발생시킬 수 있습니다.

이 단계는 중첩된 데이터 구조를 역직렬화하기 위해 하위 역직렬화를 수행할 수 있습니다. targetRealmmemory 인수를 생략하게 되므로 StructuredDeserialize를 직접 호출해서는 안 됩니다.

개별 플랫폼 객체의 정의에 따라 이러한 단계에서 직렬화 및 역직렬화되는 데이터가 결정됩니다. 일반적으로 단계는 매우 대칭적입니다.

[Serializable] 확장 속성은 인수를 받아들이지 않아야 하며, 인터페이스에만 나타나야 합니다. 인터페이스에 한 번 이상 나타나서는 안 됩니다.

주어진 플랫폼 객체의 경우 (역)직렬화 프로세스에서 고려되는 것은 객체의 주 인터페이스뿐입니다. 따라서 상속이 인터페이스 정의에 관여하는 경우 상속 체인의 각 [Serializable]-주석 인터페이스는 독립적인 직렬화 단계역직렬화 단계를 정의해야 하며, 상속된 인터페이스에서 올 수 있는 중요한 데이터를 고려해야 합니다.

Person이라는 플랫폼 객체를 정의하고, 이에 두 개의 연관된 데이터를 연결한다고 가정해 봅시다:

그런 다음 Person 인스턴스를 직렬화 가능한 객체로 정의할 수 있으며, [Serializable] 확장 속성으로 Person 인터페이스에 주석을 달고, 다음 동반 알고리즘을 정의합니다:

그들의 직렬화 단계, valueserialized가 주어졌을 때:

  1. serialized.[[Name]]을 value의 연관된 이름 값으로 설정합니다.

  2. serializedBestFriend하위 직렬화value의 연관된 최고의 친구 값으로 설정합니다.

  3. serialized.[[BestFriend]]를 serializedBestFriend로 설정합니다.

그들의 역직렬화 단계, serialized, value, 그리고 targetRealm이 주어졌을 때:

  1. value의 연관된 이름 값을 serialized.[[Name]]으로 설정합니다.

  2. deserializedBestFriend하위 역직렬화serialized.[[BestFriend]]로 설정합니다.

  3. value의 연관된 최고의 친구 값을 deserializedBestFriend로 설정합니다.

JavaScript 사양에서 정의된 객체는 구조적 직렬화 추상 연산에 의해 직접 처리됩니다.

원래 이 사양은 "복제 가능한 객체"라는 개념을 정의했으며, 이는 한 영역에서 다른 영역으로 복제될 수 있었습니다. 그러나 더 복잡한 상황의 동작을 명확히 지정하기 위해 모델이 업데이트되어 직렬화와 역직렬화를 명시적으로 만들었습니다.

2.7.2 전송 가능한 객체

전송 가능한 객체agent 간에 전송되는 것을 지원합니다. 전송은 기본 데이터를 공유하면서 객체를 다시 생성한 다음 전송된 객체를 분리하는 것입니다. 이는 비용이 많이 드는 리소스의 소유권을 이전하는 데 유용합니다. 모든 객체가 전송 가능한 객체인 것은 아니며, 전송 가능한 객체의 모든 측면이 전송될 때 반드시 보존되는 것은 아닙니다.

전송은 되돌릴 수 없는 비멱등 연산입니다. 한 번 객체가 전송되면 다시 전송하거나 사용될 수 없습니다.

플랫폼 객체전송 가능한 객체일 수 있으며, 그 주 인터페이스[Transferable] IDL 확장 속성으로 장식된 경우에만 가능합니다. 이러한 인터페이스는 또한 다음 알고리즘을 정의해야 합니다:

전송 단계, 플랫폼 객체 value기록 dataHolder를 포함하는 단계를 설명합니다.

value의 데이터를 dataHolder의 필드로 전송하는 단계입니다. dataHolder에 보관된 결과 데이터는 realm에 독립적이어야 합니다.

이 단계는 전송이 불가능한 경우 예외를 발생시킬 수 있습니다.

전송 수신 단계, 기록 dataHolder플랫폼 객체 value를 포함하는 단계를 설명합니다.

dataHolder의 데이터를 수신하여 value를 적절하게 설정하는 단계입니다. value는 해당 플랫폼 객체 유형의 새로 생성된 인스턴스가 되며, 내부 데이터가 설정되지 않습니다. 이러한 설정은 이 단계의 작업입니다.

이 단계는 전송 수신이 불가능한 경우 예외를 발생시킬 수 있습니다.

개별 플랫폼 객체의 정의에 따라 이 단계에서 전송되는 데이터가 결정됩니다. 일반적으로 단계는 매우 대칭적입니다.

[Transferable] 확장 속성은 인수를 받아들이지 않아야 하며, 인터페이스에만 나타나야 합니다. 인터페이스에 한 번 이상 나타나서는 안 됩니다.

주어진 플랫폼 객체의 경우 전송 프로세스에서 고려되는 것은 객체의 주 인터페이스뿐입니다. 따라서 상속이 인터페이스 정의에 관여하는 경우 상속 체인의 각 [Transferable]-주석 인터페이스는 독립적인 전송 단계전송 수신 단계를 정의해야 하며, 상속된 인터페이스에서 올 수 있는 중요한 데이터를 고려해야 합니다.

플랫폼 객체전송 가능한 객체인 경우 내부 슬롯 [[Detached]]를 가집니다. 이를 통해 한 번 전송된 플랫폼 객체가 다시 전송되지 않도록 보장합니다.

JavaScript 사양에서 정의된 객체는 StructuredSerializeWithTransfer 추상 작업에 의해 직접 처리됩니다.

2.7.3 StructuredSerializeInternal ( value, forStorage [ , memory ] )

StructuredSerializeInternal 추상 연산은 JavaScript 값 value를 입력으로 받아 이를 realm에 독립적인 형태로 직렬화합니다. 여기서는 이를 레코드(Record)로 나타냅니다. 이 직렬화된 형식에는 나중에 다른 realm에서 새 JavaScript 값으로 역직렬화하는 데 필요한 모든 정보가 포함되어 있습니다.

이 과정은 예를 들어 직렬화할 수 없는 객체를 직렬화하려고 할 때 예외를 발생시킬 수 있습니다.

  1. 만약 memory가 제공되지 않았다면, memory를 빈 으로 설정합니다.

    memory 맵의 목적은 객체를 두 번 직렬화하는 것을 방지하는 것입니다. 이는 사이클을 유지하고 그래프 내 중복 객체의 동일성을 유지하게 됩니다.

  2. 만약 memory[value]가 존재한다면 memory[value]를 반환합니다.

  3. deep를 false로 설정합니다.

  4. 만약 value가 undefined, null, 불리언, 숫자, BigInt 또는 문자열이면 { [[Type]]: "primitive", [[Value]]: value }를 반환합니다.

  5. 만약 value심볼이면, "DataCloneError" DOMException을 발생시킵니다.

  6. serialized를 초기화되지 않은 값으로 설정합니다.

  7. 만약 value가 [[BooleanData]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "Boolean", [[BooleanData]]: value.[[BooleanData]] }로 설정합니다.

  8. 그렇지 않다면, 만약 value가 [[NumberData]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "Number", [[NumberData]]: value.[[NumberData]] }로 설정합니다.

  9. 그렇지 않다면, 만약 value가 [[BigIntData]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "BigInt", [[BigIntData]]: value.[[BigIntData]] }로 설정합니다.

  10. 그렇지 않다면, 만약 value가 [[StringData]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "String", [[StringData]]: value.[[StringData]] }로 설정합니다.

  11. 그렇지 않다면, 만약 value가 [[DateValue]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "Date", [[DateValue]]: value.[[DateValue]] }로 설정합니다.

  12. 그렇지 않다면, 만약 value가 [[RegExpMatcher]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "RegExp", [[RegExpMatcher]]: value.[[RegExpMatcher]], [[OriginalSource]]: value.[[OriginalSource]], [[OriginalFlags]]: value.[[OriginalFlags]] }로 설정합니다.

  13. 그렇지 않다면, 만약 value가 [[ArrayBufferData]] 내부 슬롯을 가지고 있다면:

    1. 만약 IsSharedArrayBuffer(value)이 true라면:

      1. 만약 현재 설정 객체교차 출처 고립성 기능이 false라면, "DataCloneError" DOMException을 발생시킵니다.

        이 확인은 직렬화 시에만 필요하며, 역직렬화 시에는 필요하지 않습니다. 이는 교차 출처 고립성 기능은 시간이 지나도 변하지 않으며, SharedArrayBuffer에이전트 클러스터를 벗어날 수 없기 때문입니다.

      2. 만약 forStorage가 true라면, "DataCloneError" DOMException을 발생시킵니다.

      3. 만약 value가 [[ArrayBufferMaxByteLength]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "GrowableSharedArrayBuffer", [[ArrayBufferData]]: value.[[ArrayBufferData]], [[ArrayBufferByteLengthData]]: value.[[ArrayBufferByteLengthData]], [[ArrayBufferMaxByteLength]]: value.[[ArrayBufferMaxByteLength]], [[AgentCluster]]: 주변 에이전트에이전트 클러스터 }로 설정합니다.

      4. 그렇지 않다면, serialized를 { [[Type]]: "SharedArrayBuffer", [[ArrayBufferData]]: value.[[ArrayBufferData]], [[ArrayBufferByteLength]]: value.[[ArrayBufferByteLength]], [[AgentCluster]]: 주변 에이전트에이전트 클러스터 }로 설정합니다.

    2. 그렇지 않다면:

      1. 만약 IsDetachedBuffer(value)이 true라면, "DataCloneError" DOMException을 발생시킵니다.

      2. sizevalue.[[ArrayBufferByteLength]]로 설정합니다.

      3. dataCopy를 ? CreateByteDataBlock(size)으로 설정합니다.

        이는 할당 실패 시 RangeError 예외를 발생시킬 수 있습니다.

      4. CopyDataBlockBytes(dataCopy, 0, value.[[ArrayBufferData]], 0, size)를 수행합니다.

      5. 만약 value가 [[ArrayBufferMaxByteLength]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "ResizableArrayBuffer", [[ArrayBufferData]]: dataCopy, [[ArrayBufferByteLength]]: size, [[ArrayBufferMaxByteLength]]: value.[[ArrayBufferMaxByteLength]] }로 설정합니다.

      6. 그렇지 않다면, serialized를 { [[Type]]: "ArrayBuffer", [[ArrayBufferData]]: dataCopy, [[ArrayBufferByteLength]]: size }로 설정합니다.

  14. 그렇지 않다면, 만약 value가 [[ViewedArrayBuffer]] 내부 슬롯을 가지고 있다면:

    1. 만약 IsArrayBufferViewOutOfBounds(value)이 true라면, "DataCloneError" DOMException을 발생시킵니다.

    2. buffervalue의 [[ViewedArrayBuffer]] 내부 슬롯 값으로 설정합니다.

    3. bufferSerialized를 ? StructuredSerializeInternal(buffer, forStorage, memory)로 설정합니다.

    4. Assert: bufferSerialized.[[Type]]이 "ArrayBuffer", "ResizableArrayBuffer", "SharedArrayBuffer", 또는 "GrowableSharedArrayBuffer"입니다.

    5. 만약 value가 [[DataView]] 내부 슬롯을 가지고 있다면, serialized를 { [[Type]]: "ArrayBufferView", [[Constructor]]: "DataView", [[ArrayBufferSerialized]]: bufferSerialized, [[ByteLength]]: value.[[ByteLength]], [[ByteOffset]]: value.[[ByteOffset]] }로 설정합니다.

    6. 그렇지 않다면:

      1. Assert: value가 [[TypedArrayName]] 내부 슬롯을 가지고 있습니다.

      2. serialized를 { [[Type]]: "ArrayBufferView", [[Constructor]]: value.[[TypedArrayName]], [[ArrayBufferSerialized]]: bufferSerialized, [[ByteLength]]: value.[[ByteLength]], [[ByteOffset]]: value.[[ByteOffset]], [[ArrayLength]]: value.[[ArrayLength]] }로 설정합니다.

  15. 그렇지 않다면, 만약 value가 [[MapData]] 내부 슬롯을 가지고 있다면:

    1. serialized를 { [[Type]]: "Map", [[MapData]]: 새 빈 리스트(List) }로 설정합니다.

    2. deep을 true로 설정합니다.

  16. 그렇지 않다면, 만약 value가 [[SetData]] 내부 슬롯을 가지고 있다면:

    1. serialized를 { [[Type]]: "Set", [[SetData]]: 새 빈 리스트(List) }로 설정합니다.

    2. deep을 true로 설정합니다.

  17. 그렇지 않다면, value가 [[ErrorData]] 내부 슬롯을 가지고 있으며 value플랫폼 객체가 아니라면:

    1. name을 ? Get(value, "name")으로 설정합니다.

    2. 만약 name이 "Error", "EvalError", "RangeError", "ReferenceError", "SyntaxError", "TypeError", 또는 "URIError" 중 하나가 아니라면, name을 "Error"로 설정합니다.

    3. valueMessageDesc을 ? value.[[GetOwnProperty]]("message")로 설정합니다.

    4. 만약 IsDataDescriptor(valueMessageDesc)이 false라면, message를 undefined로 설정하고, 그렇지 않다면 ? ToString(valueMessageDesc.[[Value]])으로 설정합니다.

    5. serialized를 { [[Type]]: "Error", [[Name]]: name, [[Message]]: message }로 설정합니다.

    6. 사용자 에이전트는 serialized에 현재 명시되지 않은, 특히 stack 속성과 같은 흥미로운 동반 데이터를 직렬화된 표현으로 추가해야 합니다.

      이 데이터에 대한 명세 작업이 진행 중인 Error Stacks 제안을 참조합니다. [JSERRORSTACKS]

  18. 그렇지 않다면, value가 배열 이국 객체인 경우:

    1. valueLenDescriptor을 ? OrdinaryGetOwnProperty(value, "length")으로 설정합니다.

    2. valueLenvalueLenDescriptor.[[Value]]로 설정합니다.

    3. serialized를 { [[Type]]: "Array", [[Length]]: valueLen, [[Properties]]: 새 빈 리스트(List) }로 설정합니다.

    4. deep을 true로 설정합니다.

  19. 그렇지 않다면, value플랫폼 객체이며 직렬화 가능한 객체라면:

    1. 만약 value가 [[Detached]] 내부 슬롯이 true인 경우, "DataCloneError" DOMException을 발생시킵니다.

    2. typeStringvalue기본 인터페이스의 식별자로 설정합니다.

    3. serialized를 { [[Type]]: typeString }로 설정합니다.

    4. deep을 true로 설정합니다.

  20. 그렇지 않다면, value플랫폼 객체라면, "DataCloneError" DOMException을 발생시킵니다.

  21. 그렇지 않다면, IsCallable(value)이 true라면, "DataCloneError" DOMException을 발생시킵니다.

  22. 그렇지 않다면, value가 [[Prototype]], [[Extensible]], 또는 [[PrivateElements]]를 제외한 내부 슬롯을 가지고 있다면, "DataCloneError" DOMException을 발생시킵니다.

    예를 들어, [[PromiseState]] 또는 [[WeakMapData]] 내부 슬롯이 있습니다.

  23. 그렇지 않다면, value가 이국 객체이며 value%Object.prototype%와 관련된 어떤 realm의 본질적인 객체가 아니라면, "DataCloneError" DOMException을 발생시킵니다.

    예를 들어, 프록시 객체입니다.

  24. 그렇지 않다면:

    1. serialized를 { [[Type]]: "Object", [[Properties]]: 새 빈 리스트(List) }로 설정합니다.

    2. deep을 true로 설정합니다.

    %Object.prototype%는 이 단계와 후속 단계를 통해 처리됩니다. 최종 결과는 이국 객체 특성이 무시되며, 역직렬화 후 결과는 빈 객체가 될 것입니다( 불변 프로토타입 이국 객체는 아님).

  25. Set memory[value]을 serialized로 설정합니다.

  26. 만약 deep이 true라면:

    1. 만약 value가 [[MapData]] 내부 슬롯을 가지고 있다면:

      1. copiedList를 새 빈 리스트(List)로 설정합니다.

      2. 각각에 대해 레코드(Record) { [[Key]], [[Value]] } entryvalue.[[MapData]]에 포함된 경우:

        1. copiedEntry를 새 레코드(Record) { [[Key]]: entry.[[Key]], [[Value]]: entry.[[Value]] }로 설정합니다.

        2. 만약 copiedEntry.[[Key]]가 특별한 값 empty가 아니라면, append copiedEntrycopiedList에 추가합니다.

      3. 각각에 대해 레코드(Record) { [[Key]], [[Value]] } entrycopiedList에 포함된 경우:

        1. serializedKey를 ? StructuredSerializeInternal(entry.[[Key]], forStorage, memory)으로 설정합니다.

        2. serializedValue를 ? StructuredSerializeInternal(entry.[[Value]], forStorage, memory)으로 설정합니다.

        3. Append { [[Key]]: serializedKey, [[Value]]: serializedValue }를 serialized.[[MapData]]에 추가합니다.

    2. 그렇지 않다면, value가 [[SetData]] 내부 슬롯을 가지고 있다면:

      1. copiedList를 새 빈 리스트(List)로 설정합니다.

      2. 각각에 대해 entryvalue.[[SetData]]에 포함된 경우:

        1. 만약 entry가 특별한 값 empty가 아니라면, append entrycopiedList에 추가합니다.

      3. 각각에 대해 entrycopiedList에 포함된 경우:

        1. serializedEntry를 ? StructuredSerializeInternal(entry, forStorage, memory)으로 설정합니다.

        2. append serializedEntryserialized.[[SetData]]에 추가합니다.

    3. 그렇지 않다면, value플랫폼 객체이며 직렬화 가능한 객체라면, 직렬화 단계를 수행하여 value기본 인터페이스를 주어진 value, serialized, 및 forStorage에 대해 직렬화합니다.

      직렬화 단계하위 직렬화를 수행해야 할 수 있습니다. 이는 값을 입력으로 받아, StructuredSerializeInternal(subValue, forStorage, memory)을 반환하는 연산입니다. (즉, 하위 직렬화는 이 호출 내에서 일관성을 유지하기 위해 StructuredSerializeInternal의 특수화입니다.)

    4. 그렇지 않다면, ! EnumerableOwnProperties(value, key) 내의 각각의 key에 대해:

      1. ! HasOwnProperty(value, key)이 true라면:

        1. inputValue를 ? value.[[Get]](key, value)으로 설정합니다.

        2. outputValue를 ? StructuredSerializeInternal(inputValue, forStorage, memory)으로 설정합니다.

        3. append { [[Key]]: key, [[Value]]: outputValue }를 serialized.[[Properties]]에 추가합니다.

  27. serialized를 반환합니다.

StructuredSerializeInternal에 의해 생성된 레코드(Record)는 다른 레코드로의 "포인터"를 포함하여 순환 참조를 생성할 수 있다는 점을 인식하는 것이 중요합니다. 예를 들어, 다음 JavaScript 객체를 StructuredSerializeInternal에 전달하면:

const o = {};
o.myself = o;

다음과 같은 결과가 생성됩니다:

{
  [[Type]]: "Object",
  [[Properties]]: «
    {
      [[Key]]: "myself",
      [[Value]]: <a pointer to this whole structure>
    }
  »
}

2.7.4 StructuredSerialize ( value )

  1. ? StructuredSerializeInternal(value, false)를 반환합니다.

2.7.5 StructuredSerializeForStorage ( value )

  1. ? StructuredSerializeInternal(value, true)를 반환합니다.

2.7.6 StructuredDeserialize ( serialized, targetRealm [ , memory ] )

StructuredDeserialize 추상 연산은 입력으로 레코드(Record) serialized를 사용하며, 이는 이전에 StructuredSerialize 또는 StructuredSerializeForStorage에 의해 생성되었으며, 이를 사용하여 targetRealm에 새로운 JavaScript 값을 역직렬화합니다.

이 과정은 예를 들어 새로운 객체(특히 ArrayBuffer 객체)의 메모리 할당을 시도할 때 예외를 던질 수 있습니다.

  1. 만약 memory가 제공되지 않았다면, memory를 빈 으로 설정합니다.

    memory 맵의 목적은 객체를 두 번 역직렬화하지 않도록 하는 것입니다. 이는 그래프에서 중복 객체의 순환과 아이덴티티를 유지하게 됩니다.

  2. 만약 memory[serialized]가 존재한다면, memory[serialized]을 반환합니다.

  3. deep을 false로 설정합니다.

  4. value를 초기화되지 않은 값으로 설정합니다.

  5. 만약 serialized.[[Type]]이 "primitive"라면, valueserialized.[[Value]]로 설정합니다.

  6. 그렇지 않으면, serialized.[[Type]]이 "Boolean"인 경우, valuetargetRealm에서 [[BooleanData]] 내부 슬롯 값이 serialized.[[BooleanData]]인 새로운 Boolean 객체로 설정합니다.

  7. 그렇지 않으면, serialized.[[Type]]이 "Number"인 경우, valuetargetRealm에서 [[NumberData]] 내부 슬롯 값이 serialized.[[NumberData]]인 새로운 Number 객체로 설정합니다.

  8. 그렇지 않으면, serialized.[[Type]]이 "BigInt"인 경우, valuetargetRealm에서 [[BigIntData]] 내부 슬롯 값이 serialized.[[BigIntData]]인 새로운 BigInt 객체로 설정합니다.

  9. 그렇지 않으면, serialized.[[Type]]이 "String"인 경우, valuetargetRealm에서 [[StringData]] 내부 슬롯 값이 serialized.[[StringData]]인 새로운 String 객체로 설정합니다.

  10. 그렇지 않으면, serialized.[[Type]]이 "Date"인 경우, valuetargetRealm에서 [[DateValue]] 내부 슬롯 값이 serialized.[[DateValue]]인 새로운 Date 객체로 설정합니다.

  11. 그렇지 않으면, serialized.[[Type]]이 "RegExp"인 경우, valuetargetRealm에서 [[RegExpMatcher]] 내부 슬롯 값이 serialized.[[RegExpMatcher]]이며, [[OriginalSource]] 내부 슬롯 값이 serialized.[[OriginalSource]]이고, [[OriginalFlags]] 내부 슬롯 값이 serialized.[[OriginalFlags]]인 새로운 RegExp 객체로 설정합니다.

  12. 그렇지 않으면, serialized.[[Type]]이 "SharedArrayBuffer"인 경우:

    1. 만약 targetRealm의 대응하는 에이전트 클러스터serialized.[[AgentCluster]]가 아니라면, "DataCloneError" DOMException을 던집니다.

    2. 그렇지 않으면, valuetargetRealm에서 [[ArrayBufferData]] 내부 슬롯 값이 serialized.[[ArrayBufferData]]이며, [[ArrayBufferByteLength]] 내부 슬롯 값이 serialized.[[ArrayBufferByteLength]]인 새로운 SharedArrayBuffer 객체로 설정합니다.

  13. 그렇지 않으면, serialized.[[Type]]이 "GrowableSharedArrayBuffer"인 경우:

    1. 만약 targetRealm의 대응하는 에이전트 클러스터serialized.[[AgentCluster]]가 아니라면, "DataCloneError" DOMException을 던집니다.

    2. 그렇지 않으면, valuetargetRealm에서 [[ArrayBufferData]] 내부 슬롯 값이 serialized.[[ArrayBufferData]]이며, [[ArrayBufferByteLengthData]] 내부 슬롯 값이 serialized.[[ArrayBufferByteLengthData]]이고, [[ArrayBufferMaxByteLength]] 내부 슬롯 값이 serialized.[[ArrayBufferMaxByteLength]]인 새로운 SharedArrayBuffer 객체로 설정합니다.

  14. 그렇지 않으면, serialized.[[Type]]이 "ArrayBuffer"인 경우, valuetargetRealm에서 [[ArrayBufferData]] 내부 슬롯 값이 serialized.[[ArrayBufferData]]이며, [[ArrayBufferByteLength]] 내부 슬롯 값이 serialized.[[ArrayBufferByteLength]]인 새로운 ArrayBuffer 객체로 설정합니다.

    이 단계에서 예외가 발생하면, 이를 catch한 다음, "DataCloneError" DOMException을 던집니다.

    이 단계에서는 메모리가 부족하여 해당 ArrayBuffer 객체를 생성할 수 없는 경우 예외가 발생할 수 있습니다.

  15. 그렇지 않으면, serialized.[[Type]]이 "ResizableArrayBuffer"인 경우, valuetargetRealm에서 [[ArrayBufferData]] 내부 슬롯 값이 serialized.[[ArrayBufferData]]이며, [[ArrayBufferByteLength]] 내부 슬롯 값이 serialized.[[ArrayBufferByteLength]]이고, [[ArrayBufferMaxByteLength]] 내부 슬롯 값이 serialized.[[ArrayBufferMaxByteLength]]인 새로운 ArrayBuffer 객체로 설정합니다.

    이 단계에서 예외가 발생하면, 이를 catch한 다음, "DataCloneError" DOMException을 던집니다.

    이 단계에서는 메모리가 부족하여 해당 ArrayBuffer 객체를 생성할 수 없는 경우 예외가 발생할 수 있습니다.

  16. 그렇지 않으면, serialized.[[Type]]이 "ArrayBufferView"인 경우:

    1. deserializedArrayBuffer를 ? StructuredDeserialize(serialized.[[ArrayBufferSerialized]], targetRealm, memory)로 설정합니다.

    2. 만약 serialized.[[Constructor]]가 "DataView"라면, valuetargetRealm에서 [[ViewedArrayBuffer]] 내부 슬롯 값이 deserializedArrayBuffer이고, [[ByteLength]] 내부 슬롯 값이 serialized.[[ByteLength]]이며, [[ByteOffset]] 내부 슬롯 값이 serialized.[[ByteOffset]]인 새로운 DataView 객체로 설정합니다.

    3. 그렇지 않으면, valuetargetRealm에서 생성자 serialized.[[Constructor]]을 사용하여 생성된 새로운 타입 배열 객체로 설정합니다. 이 객체의 [[ViewedArrayBuffer]] 내부 슬롯 값은 deserializedArrayBuffer, [[TypedArrayName]] 내부 슬롯 값은 serialized.[[Constructor]], [[ByteLength]] 내부 슬롯 값은 serialized.[[ByteLength]], [[ByteOffset]] 내부 슬롯 값은 serialized.[[ByteOffset]], 그리고 [[ArrayLength]] 내부 슬롯 값은 serialized.[[ArrayLength]]입니다.

  17. 그렇지 않으면, serialized.[[Type]]이 "Map"인 경우:

    1. valuetargetRealm에서 [[MapData]] 내부 슬롯 값이 빈 리스트인 새로운 Map 객체로 설정합니다.

    2. deep을 true로 설정합니다.

  18. 그렇지 않으면, serialized.[[Type]]이 "Set"인 경우:

    1. valuetargetRealm에서 [[SetData]] 내부 슬롯 값이 빈 리스트인 새로운 Set 객체로 설정합니다.

    2. deep을 true로 설정합니다.

  19. 그렇지 않으면, serialized.[[Type]]이 "Array"인 경우:

    1. outputPrototargetRealm.[[Intrinsics]].[[%Array.prototype%]]로 설정합니다.

    2. value를 ! ArrayCreate(serialized.[[Length]], outputProto)로 설정합니다.

    3. deep을 true로 설정합니다.

  20. 그렇지 않으면, serialized.[[Type]]이 "Object"인 경우:

    1. valuetargetRealm에서 새로운 객체로 설정합니다.

    2. deep을 true로 설정합니다.

  21. 그렇지 않으면, serialized.[[Type]]이 "Error"인 경우:

    1. prototype%Error.prototype%로 설정합니다.

    2. 만약 serialized.[[Name]]이 "EvalError"라면, prototype%EvalError.prototype%로 설정합니다.

    3. 만약 serialized.[[Name]]이 "RangeError"라면, prototype%RangeError.prototype%로 설정합니다.

    4. 만약 serialized.[[Name]]이 "ReferenceError"라면, prototype%ReferenceError.prototype%로 설정합니다.

    5. 만약 serialized.[[Name]]이 "SyntaxError"라면, prototype%SyntaxError.prototype%로 설정합니다.

    6. 만약 serialized.[[Name]]이 "TypeError"라면, prototype%TypeError.prototype%로 설정합니다.

    7. 만약 serialized.[[Name]]이 "URIError"라면, prototype%URIError.prototype%로 설정합니다.

    8. messageserialized.[[Message]]로 설정합니다.

    9. valueOrdinaryObjectCreate(prototype, « [[ErrorData]] »)로 설정합니다.

    10. messageDescPropertyDescriptor { [[Value]]: message, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }로 설정합니다.

    11. 만약 message가 undefined가 아니라면, ! OrdinaryDefineOwnProperty(value, "message", messageDesc)을 수행합니다.

    12. serialized에 연결된 중요한 동반 데이터는 역직렬화되어 value에 연결되어야 합니다.

  22. 그렇지 않으면:

    1. interfaceNameserialized.[[Type]]으로 설정합니다.

    2. 만약 interfaceName으로 식별된 인터페이스가 targetRealm에서 노출되지 않았다면, "DataCloneError" DOMException을 던집니다.

    3. valueinterfaceName으로 식별된 인터페이스의 새로운 인스턴스로 설정합니다. 이 인스턴스는 targetRealm에서 생성됩니다.

    4. deep을 true로 설정합니다.

  23. Set memory[serialized]를 value로 설정합니다.

  24. 만약 deep이 true라면:

    1. 만약 serialized.[[Type]]이 "Map"이라면:

      1. 각각레코드(Record) { [[Key]], [[Value]] } entry에 대해, serialized.[[MapData]]를 반복합니다:

        1. deserializedKey를 ? StructuredDeserialize(entry.[[Key]], targetRealm, memory)로 설정합니다.

        2. deserializedValue를 ? StructuredDeserialize(entry.[[Value]], targetRealm, memory)로 설정합니다.

        3. Append { [[Key]]: deserializedKey, [[Value]]: deserializedValue }를 value.[[MapData]]에 추가합니다.

    2. 그렇지 않으면, serialized.[[Type]]이 "Set"인 경우:

      1. 각각entry에 대해, serialized.[[SetData]]를 반복합니다:

        1. deserializedEntry를 ? StructuredDeserialize(entry, targetRealm, memory)로 설정합니다.

        2. Append deserializedEntryvalue.[[SetData]]에 추가합니다.

    3. 그렇지 않으면, serialized.[[Type]]이 "Array" 또는 "Object"인 경우:

      1. 각각레코드(Record) { [[Key]], [[Value]] } entry에 대해, serialized.[[Properties]]를 반복합니다:

        1. deserializedValue를 ? StructuredDeserialize(entry.[[Value]], targetRealm, memory)로 설정합니다.

        2. result를 ! CreateDataProperty(value, entry.[[Key]], deserializedValue)로 설정합니다.

        3. Assert: result가 true임을 확인합니다.

    4. 그렇지 않으면:

      1. 적절한 역직렬화 단계를 수행합니다. 이 인터페이스는 serialized.[[Type]]으로 식별되며, serialized, valuetargetRealm을 입력으로 받습니다.

        역직렬화 단계하위 역직렬화를 수행해야 할 수 있습니다. 이는 이전에 직렬화된 레코드(Record) subSerialized을 입력으로 받아 StructuredDeserialize(subSerialized, targetRealm, memory)를 반환합니다. (즉, 하위 역직렬화는 이 호출 내에서 일관성을 유지하기 위해 StructuredDeserialize의 특수화된 버전입니다.)

  25. value를 반환합니다.

2.7.7 StructuredSerializeWithTransfer ( value, transferList )

  1. memory를 빈 맵(map)으로 설정합니다.

    StructuredSerializeInternal에 의해 사용되는 일반적인 방식 외에도, 이 알고리즘에서는 memory를 사용하여 transferList의 항목을 무시하게 하고, 직접 처리할 수 있도록 합니다.

  2. 각각transferable에 대해 transferList를 반복합니다:

    1. 만약 transferable이 [[ArrayBufferData]] 내부 슬롯이나 [[Detached]] 내부 슬롯을 가지고 있지 않다면, "DataCloneError" DOMException을 던집니다.

    2. 만약 transferable이 [[ArrayBufferData]] 내부 슬롯을 가지고 있고 IsSharedArrayBuffer(transferable)가 true라면, "DataCloneError" DOMException을 던집니다.

    3. 만약 memory[transferable]가 존재한다면, "DataCloneError" DOMException을 던집니다.

    4. Set memory[transferable]을 { [[Type]]: 초기화되지 않은 값 }으로 설정합니다.

      transferable은 아직 전송되지 않았습니다. 왜냐하면 전송에는 부작용이 있으며 StructuredSerializeInternal이 먼저 예외를 던질 수 있어야 하기 때문입니다.

  3. serialized를 ? StructuredSerializeInternal(value, false, memory)로 설정합니다.

  4. transferDataHolders를 빈 리스트(List)로 설정합니다.

  5. 각각transferable에 대해 transferList를 반복합니다:

    1. 만약 transferable이 [[ArrayBufferData]] 내부 슬롯을 가지고 있고, IsDetachedBuffer(transferable)가 true라면, "DataCloneError" DOMException을 던집니다.

    2. 만약 transferable[[Detached]] 내부 슬롯을 가지고 있고, transferable.[[Detached]]가 true라면, "DataCloneError" DOMException을 던집니다.

    3. dataHoldermemory[transferable]로 설정합니다.

    4. 만약 transferable이 [[ArrayBufferData]] 내부 슬롯을 가지고 있다면:

      1. 만약 transferable이 [[ArrayBufferMaxByteLength]] 내부 슬롯을 가지고 있다면:

        1. dataHolder.[[Type]]을 "ResizableArrayBuffer"로 설정합니다.

        2. dataHolder.[[ArrayBufferData]]를 transferable.[[ArrayBufferData]]로 설정합니다.

        3. dataHolder.[[ArrayBufferByteLength]]를 transferable.[[ArrayBufferByteLength]]로 설정합니다.

        4. dataHolder.[[ArrayBufferMaxByteLength]]를 transferable.[[ArrayBufferMaxByteLength]]로 설정합니다.

      2. 그렇지 않다면:

        1. dataHolder.[[Type]]을 "ArrayBuffer"로 설정합니다.

        2. dataHolder.[[ArrayBufferData]]를 transferable.[[ArrayBufferData]]로 설정합니다.

        3. dataHolder.[[ArrayBufferByteLength]]를 transferable.[[ArrayBufferByteLength]]로 설정합니다.

      3. ? DetachArrayBuffer(transferable)을 수행합니다.

        명세서는 [[ArrayBufferDetachKey]] 내부 슬롯을 사용하여 ArrayBuffer가 분리되지 않도록 할 수 있습니다. 예를 들어, WebAssembly JavaScript Interface에서 사용됩니다. [WASMJS]

    5. 그렇지 않다면:

      1. Assert: transferable플랫폼 객체(platform object)이며 전송 가능한 객체(transferable object)라는 것을 확인합니다.

      2. interfaceNametransferable주 인터페이스(primary interface)의 식별자로 설정합니다.

      3. dataHolder.[[Type]]을 interfaceName으로 설정합니다.

      4. 식별된 인터페이스에 대해 적절한 전송 단계(transfer steps)를 수행합니다.

      5. transferable.[[Detached]]를 true로 설정합니다.

    6. Append dataHoldertransferDataHolders에 추가합니다.

  6. { [[Serialized]]: serialized, [[TransferDataHolders]]: transferDataHolders }을 반환합니다.

2.7.8 StructuredDeserializeWithTransfer (serializeWithTransferResult, targetRealm)

  1. memory를 빈 맵(map)으로 설정합니다.

    StructuredSerializeWithTransfer와 유사하게, StructuredDeserialize에서 일반적으로 사용되는 방식 외에도, 이 알고리즘에서 memory를 사용하여 serializeWithTransferResult.[[TransferDataHolders]]의 항목을 무시하게 하고, 직접 처리할 수 있도록 합니다.

  2. transferredValues를 새로운 빈 리스트(List)로 설정합니다.

  3. 각각transferDataHolder에 대해 serializeWithTransferResult.[[TransferDataHolders]]를 반복합니다:

    1. value를 초기화되지 않은 값으로 설정합니다.

    2. 만약 transferDataHolder.[[Type]]이 "ArrayBuffer"라면, valuetargetRealm의 새로운 ArrayBuffer 객체로 설정하고, 이 객체의 [[ArrayBufferData]] 내부 슬롯 값은 transferDataHolder.[[ArrayBufferData]]로, [[ArrayBufferByteLength]] 내부 슬롯 값은 transferDataHolder.[[ArrayBufferByteLength]]로 설정합니다.

      [[ArrayBufferData]]에 의해 점유된 원래 메모리가 역직렬화 동안 접근 가능하다면, 이 단계에서 예외가 발생할 가능성은 낮습니다. 이는 새 메모리를 할당할 필요가 없기 때문이며, 대신 [[ArrayBufferData]]에 의해 점유된 메모리가 새 ArrayBuffer로 전송됩니다. 예를 들어, 소스와 대상 realm이 동일한 프로세스 내에 있을 때 이럴 수 있습니다.

    3. 그렇지 않고, 만약 transferDataHolder.[[Type]]이 "ResizableArrayBuffer"라면, valuetargetRealm의 새로운 ArrayBuffer 객체로 설정하고, 이 객체의 [[ArrayBufferData]] 내부 슬롯 값은 transferDataHolder.[[ArrayBufferData]], [[ArrayBufferByteLength]] 내부 슬롯 값은 transferDataHolder.[[ArrayBufferByteLength]], 그리고 [[ArrayBufferMaxByteLength]] 내부 슬롯 값은 transferDataHolder.[[ArrayBufferMaxByteLength]]로 설정합니다.

      이전 단계와 같은 이유로, 이 단계에서도 예외가 발생할 가능성은 낮습니다.

    4. 그렇지 않다면:

      1. interfaceNametransferDataHolder.[[Type]]으로 설정합니다.

      2. 만약 interfaceName으로 식별된 인터페이스가 targetRealm에서 노출되지 않은 경우, "DataCloneError" DOMException을 던집니다.

      3. valueinterfaceName으로 식별된 인터페이스의 targetRealm에 생성된 새로운 인스턴스로 설정합니다.

      4. interfaceName으로 식별된 인터페이스에 대해 적절한 전송 수신 단계transferDataHoldervalue에 대해 수행합니다.

    5. Set memory[transferDataHolder]를 value로 설정합니다.

    6. Append valuetransferredValues에 추가합니다.

  4. deserialized를 ? StructuredDeserialize(serializeWithTransferResult.[[Serialized]], targetRealm, memory)로 설정합니다.

  5. { [[Deserialized]]: deserialized, [[TransferredValues]]: transferredValues }을 반환합니다.

2.7.9 다른 명세에서의 직렬화 및 전송 수행

다른 명세에서 여기에 정의된 추상 연산을 사용할 수 있습니다. 다음은 각 추상 연산이 일반적으로 언제 유용한지, 예제와 함께 제공된 가이드입니다.

StructuredSerializeWithTransfer
StructuredDeserializeWithTransfer

전송 목록과 함께 값을 다른 realm으로 복제하지만, 대상 realm이 미리 알려지지 않은 경우입니다. 이 경우 직렬화 단계는 즉시 수행할 수 있으며, 역직렬화 단계는 대상 realm이 알려질 때까지 지연될 수 있습니다.

messagePort.postMessage()는 이러한 추상 연산 쌍을 사용하며, 대상 realm은 MessagePort전송된 후에야 알 수 있습니다.

StructuredSerialize
StructuredSerializeForStorage
StructuredDeserialize

주어진 값의 realm 독립적인 스냅샷을 생성하여 무기한 저장할 수 있으며, 나중에 JavaScript 값으로 다시 구현할 수 있고, 이를 여러 번 수행할 수 있습니다.

StructuredSerializeForStorage는 직렬화가 realms 간에 전달되는 대신 영구적으로 저장될 것으로 예상되는 상황에 사용할 수 있습니다. 공유 메모리를 저장하는 것은 의미가 없으므로 SharedArrayBuffer 객체를 직렬화하려고 할 때 예외를 발생시킵니다. 마찬가지로, forStorage 인수가 true일 때 사용자 정의 직렬화 단계를 가진 플랫폼 객체가 주어지면 예외를 발생시키거나 다른 동작을 할 수 있습니다.

history.pushState()history.replaceState()는 작성자 제공 상태 객체에 대해 StructuredSerializeForStorage를 사용하여 직렬화된 상태로 저장하고, 적절한 세션 기록 항목에 저장합니다. 그런 다음 StructuredDeserialize를 사용하여 history.state 속성이 원래 제공된 상태 객체의 복제본을 반환할 수 있도록 합니다.

broadcastChannel.postMessage()는 입력에 대해 StructuredSerialize를 사용한 다음, 결과에 대해 StructuredDeserialize를 여러 번 사용하여 각 대상에 브로드캐스트될 새 복제본을 생성합니다. 여러 대상이 있는 상황에서는 전송이 의미가 없습니다.

JavaScript 값을 파일 시스템에 영구 저장하는 모든 API는 입력에 대해 StructuredSerializeForStorage를 사용하고, 출력에 대해 StructuredDeserialize를 사용합니다.

일반적으로 호출 위치는 JavaScript 값 대신 Web IDL 값을 전달할 수 있습니다. 이는 이러한 알고리즘을 호출하기 전에 JavaScript 값으로 암묵적인 변환을 수행하는 것으로 이해해야 합니다.


작성자 코드가 사용자 에이전트 메서드에 동기적으로 호출되는 결과로 호출되지 않는 호출 위치는 임의의 객체에 대해 StructuredSerialize, StructuredSerializeForStorage, 또는 StructuredSerializeWithTransfer 추상 연산을 호출하기 전에 스크립트를 실행할 준비를 하고 콜백을 실행할 준비를 제대로 해야 합니다. 이는 직렬화 프로세스가 최종 깊은 직렬화 단계의 일부로 작성자 정의 접근자를 호출할 수 있으며, 이러한 접근자는 entryincumbent 개념이 적절히 설정되는 작업에 의존할 수 있기 때문에 필요합니다.

window.postMessage()는 인수에 대해 StructuredSerializeWithTransfer를 수행하지만, 알고리즘의 동기화된 부분 내에서 즉시 수행하여 스크립트를 실행할 준비를 하고 콜백을 실행할 준비를 할 필요 없이 이 알고리즘을 사용할 수 있습니다.

대조적으로, 작성자 제공 객체를 주기적으로 직렬화하기 위해 StructuredSerialize를 사용한 가상 API가 작업(task)에서 직접 이벤트 루프에서 수행되었다면, 적절한 준비를 수행해야 합니다. 현재로서는 플랫폼에 이러한 API가 없으며, 일반적으로 직렬화를 작성자 코드의 동기적 결과로 미리 수행하는 것이 더 간단합니다.

2.7.10 구조화된 클로닝 API

result = self.structuredClone(value[, { transfer }])

입력 값을 받아 구조화된 클론 알고리즘을 수행하여 깊은 복사를 반환합니다. 전송 가능한 객체전송 배열에 나열된 경우, 단순히 복제되는 것이 아니라 전송되어 입력 값에서 더 이상 사용할 수 없게 됩니다.

입력 값의 일부가 직렬화 가능하지 않은 경우 "DataCloneError" DOMException을 발생시킵니다.

structuredClone

모든 현재 엔진에서 지원합니다.

Firefox94+Safari15.4+Chrome98+
Opera?Edge98+
Edge (Legacy)?Internet Explorer지원 안 함
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

structuredClone(value, options) 메서드의 단계는 다음과 같습니다:

  1. serialized를 ? StructuredSerializeWithTransfer(value, options["transfer"])로 설정합니다.

  2. deserializeRecord를 ? StructuredDeserializeWithTransfer(serialized, this관련 realm)로 설정합니다.

  3. deserializeRecord.[[Deserialized]]를 반환합니다.

3 HTML 문서의 의미, 구조, 및 API

3.1 문서

HTML UA에서의 모든 XML 및 HTML 문서는 Document 객체로 표현됩니다. [DOM]

문서 객체의 URLDOM에 정의되어 있습니다. 문서 객체가 생성될 때 초기에 설정되지만, 문서 객체의 수명 동안 변경될 수 있습니다. 예를 들어, 사용자가 페이지의 프래그먼트이동하거나 pushState() 메서드가 새로운 URL로 호출될 때 변경됩니다. [DOM]

인터랙티브 사용자 에이전트는 일반적으로 사용자 인터페이스에서 Document 객체의 URL을 노출합니다. 이는 사용자가 사이트가 다른 사이트로 가장하려고 하는지 여부를 확인할 수 있는 주요 메커니즘입니다.

문서 객체의 originDOM에 정의되어 있습니다. 문서 객체가 생성될 때 초기에 설정되며, 문서의 수명 동안 document.domain을 설정하는 경우에만 변경될 수 있습니다. 문서origin은 해당 origin과 다를 수 있습니다. 예를 들어, 자식 탐색 가능 항목생성될 때 해당 활성 문서origin부모활성 문서origin에서 상속되지만, 해당 활성 문서URLabout:blank입니다. [DOM]

Document스크립트에 의해 createDocument() 또는 createHTMLDocument() 메서드를 사용하여 생성될 때, Document는 즉시 로드 후 작업 준비가 됩니다.

문서의 리퍼러URL을 나타내는 문자열로서, Document가 생성될 때 설정될 수 있습니다. 명시적으로 설정되지 않은 경우, 그 값은 빈 문자열입니다.

3.1.1 Document 객체

Document

모든 최신 엔진에서 지원됩니다.

Firefox1+ Safari1+ Chrome1+
Opera3+ Edge79+
Edge (Legacy)12+ Internet Explorer4+
Firefox Android? Safari iOS? Chrome Android? WebView Android37+ Samsung Internet? Opera Android10.1+

DOMDocument 인터페이스를 정의하며, 이 사양은 이를 상당히 확장합니다.

enum DocumentReadyState { "loading", "interactive", "complete" };
enum DocumentVisibilityState { "visible", "hidden" };
typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement;

[LegacyOverrideBuiltIns]
partial interface Document {
  static Document parseHTMLUnsafe((TrustedHTML or DOMString) html);

  // resource metadata management
  [PutForwards=href, LegacyUnforgeable] readonly attribute Location? location;
  attribute USVString domain;
  readonly attribute USVString referrer;
  attribute USVString cookie;
  readonly attribute DOMString lastModified;
  readonly attribute DocumentReadyState readyState;

  // DOM tree accessors
  getter object (DOMString name);
  [CEReactions] attribute DOMString title;
  [CEReactions] attribute DOMString dir;
  [CEReactions] attribute HTMLElement? body;
  readonly attribute HTMLHeadElement? head;
  [SameObject] readonly attribute HTMLCollection images;
  [SameObject] readonly attribute HTMLCollection embeds;
  [SameObject] readonly attribute HTMLCollection plugins;
  [SameObject] readonly attribute HTMLCollection links;
  [SameObject] readonly attribute HTMLCollection forms;
  [SameObject] readonly attribute HTMLCollection scripts;
  NodeList getElementsByName(DOMString elementName);
  readonly attribute HTMLOrSVGScriptElement? currentScript; // classic scripts in a document tree only

  // dynamic markup insertion
  [CEReactions] Document open(optional DOMString unused1, optional DOMString unused2); // both arguments are ignored
  WindowProxy? open(USVString url, DOMString name, DOMString features);
  [CEReactions] undefined close();
  [CEReactions] undefined write((TrustedHTML or DOMString)... text);
  [CEReactions] undefined writeln((TrustedHTML or DOMString)... text);

  // user interaction
  readonly attribute WindowProxy? defaultView;
  boolean hasFocus();
  [CEReactions] attribute DOMString designMode;
  [CEReactions] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
  boolean queryCommandEnabled(DOMString commandId);
  boolean queryCommandIndeterm(DOMString commandId);
  boolean queryCommandState(DOMString commandId);
  boolean queryCommandSupported(DOMString commandId);
  DOMString queryCommandValue(DOMString commandId);
  readonly attribute boolean hidden;
  readonly attribute DocumentVisibilityState visibilityState;

  // special event handler IDL attributes that only apply to Document objects
  [LegacyLenientThis] attribute EventHandler onreadystatechange;
  attribute EventHandler onvisibilitychange;

  // also has obsolete members
};
Document includes GlobalEventHandlers;

Document에는 정책 컨테이너(정책 컨테이너)가 있으며, 초기 상태는 새로운 정책 컨테이너로, Document에 적용되는 정책들을 포함합니다.

Document에는 권한 정책이 있으며, 이는 초기에는 비어 있는 권한 정책입니다.

Document에는 모듈 맵이 있으며, 이는 초기에는 비어 있는 모듈 맵입니다.

Document에는 출처 열기 정책이 있으며, 초기에는 새로운 출처 열기 정책인 열기 정책입니다.

Document에는 초기 about:blank 여부라는 불리언 값이 있으며, 초기 값은 false입니다.

Document에는 WebDriver BiDi용 로딩 중 탐색 ID가 있으며, 이는 초기에는 null인 탐색 ID 또는 null입니다.

이 이름이 나타내듯, 이는 WebDriver BiDi 사양과 인터페이스하기 위해 사용되며, 이 사양은 Document의 생명 주기 초기에 발생하는 특정 사건에 대해 원래 탐색을 생성한 탐색 ID와 연관된 정보를 필요로 합니다. WebDriver BiDi가 로딩 프로세스가 완료되었다고 간주하면 이 값은 다시 null로 설정됩니다. [BIDI]

Document에는 about 기본 URL이 있으며, 이는 초기에는 null인 URL 또는 null입니다.

이 값은 "about:" 스킴이 있는 Document에만 채워집니다.

문서에는 bfcache 차단 세부 정보가 있으며, 이는 복원되지 않은 이유 세부 정보집합이며, 처음에는 비어 있습니다.

문서에는 열린 대화 상자 목록이 있으며, 이는 dialog 요소의 목록이며, 처음에는 비어 있습니다.

3.1.2 DocumentOrShadowRoot 인터페이스

DOM은 이 사양이 확장하는 DocumentOrShadowRoot 믹스인을 정의합니다.

partial interface mixin DocumentOrShadowRoot {
  readonly attribute Element? activeElement;
};

3.1.3 리소스 메타데이터 관리

document.referrer

Document/referrer

모든 최신 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera3+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

사용자가 이 문서로 이동한 출발지 문서의 URL을 반환합니다. 다만, 차단되었거나 그런 문서가 없었던 경우에는 빈 문자열을 반환합니다.

noreferrer 링크 유형을 사용하여 참조자를 차단할 수 있습니다.

referrer 속성은 문서의 참조자를 반환해야 합니다.


document.cookie [ = value ]

document에 적용되는 HTTP 쿠키를 반환합니다. 쿠키가 없거나 이 리소스에 쿠키를 적용할 수 없는 경우 빈 문자열이 반환됩니다.

새 쿠키를 추가하기 위해 설정할 수 있습니다.

내용이 iframesandbox 속성을 사용하여 불투명한 출처로 샌드박스화된 경우 "SecurityError" DOMException이 발생합니다.

Document/cookie

모든 최신 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera3+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

cookie 속성은 문서의 URL로 식별되는 리소스의 쿠키를 나타냅니다.

동기적인 document.cookie API를 사용하면 성능 문제의 원인이 될 수 있습니다. Cookie Store API를 대신 사용할 수 있으며, 이는 쿠키를 비동기적으로 처리하여 성능 문제를 방지할 수 있도록 합니다. 자세한 내용은 Cookie Store API 소개를 참고하세요. [COOKIESTORE]

다음 조건 중 하나에 해당하는 document 객체는 쿠키 비호환 문서 객체입니다:

(이것은 추적 벡터입니다.) 가져올 때, 문서가 쿠키 비호환 문서 객체이면 사용자 에이전트는 빈 문자열을 반환해야 합니다. 그렇지 않은 경우 문서의 기원불투명한 기원이면 사용자 에이전트는 "SecurityError" DOMException을 발생시켜야 합니다. 그렇지 않으면 사용자 에이전트는 문서의 URL에 대한 "비-HTTP" API로 쿠키 문자열을 반환해야 하며, BOM 없이 UTF-8로 디코딩하여 반환해야 합니다. [COOKIES]

설정할 때, 문서가 쿠키 비호환 문서 객체이면 사용자 에이전트는 아무것도 하지 않아야 합니다. 그렇지 않은 경우 문서의 기원불투명한 기원이면 사용자 에이전트는 "SecurityError" DOMException을 발생시켜야 합니다. 그렇지 않으면 사용자 에이전트는 새 값을 포함하여 문서의 URL에 대해 "비-HTTP" API로 UTF-8로 인코딩된 set-cookie 문자열을 수신할 때처럼 작동해야 합니다. [COOKIES] [ENCODING]

cookie 속성은 프레임 간 접근 가능하므로, 쿠키에 대한 경로 제한은 사이트의 어떤 부분에 쿠키를 전송할지 관리하기 위한 도구일 뿐, 보안 기능은 아닙니다.

cookie 속성의 getter와 setter는 공유 상태에 동기적으로 접근합니다. 잠금 메커니즘이 없기 때문에, 멀티프로세스 사용자 에이전트의 다른 탐색 맥락은 스크립트가 실행되는 동안 쿠키를 수정할 수 있습니다. 예를 들어, 사이트가 쿠키를 읽고 값을 증가시킨 다음 다시 기록하여 쿠키의 새 값을 세션의 고유 식별자로 사용하는 경우, 동일한 "고유" 식별자를 두 개의 다른 브라우저 창에서 동시에 두 번 사용할 수 있으며, 이는 잠재적으로 치명적인 영향을 미칠 수 있습니다.


document.lastModified

Document/lastModified

모든 최신 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

서버에서 보고한 대로 사용자의 로컬 시간대로 "MM/DD/YYYY hh:mm:ss" 형식으로 문서의 마지막 수정 날짜를 반환합니다.

마지막 수정 날짜를 알 수 없는 경우 현재 시간이 대신 반환됩니다.

lastModified 속성은 사용자의 로컬 시간대로 document 소스 파일의 마지막 수정 날짜와 시간을 반환해야 합니다. 반환 형식은 다음과 같습니다:

  1. 날짜의 월 구성 요소.

  2. U+002F SOLIDUS 문자 (/).

  3. 날짜의 일 구성 요소.

  4. U+002F SOLIDUS 문자 (/).

  5. 날짜의 년 구성 요소.

  6. U+0020 SPACE 문자.

  7. 시간의 시 구성 요소.

  8. U+003A COLON 문자 (:).

  9. 시간의 분 구성 요소.

  10. U+003A COLON 문자 (:).

  11. 시간의 초 구성 요소.

위의 모든 숫자 구성 요소는 년도를 제외하고는 필요할 경우 0으로 패딩하여 두 자리의 ASCII 숫자로 주어져야 합니다. 년도는 필요할 경우 0으로 패딩된 네 자리 이상의 ASCII 숫자로 주어져야 합니다.

document 소스 파일의 마지막 수정 날짜와 시간은 사용된 네트워킹 프로토콜의 관련 기능에서 파생되어야 합니다. 예를 들어, 문서의 HTTP `Last-Modified` 헤더의 값 또는 로컬 파일의 파일 시스템 메타데이터에서 파생될 수 있습니다. 마지막 수정 날짜와 시간을 알 수 없는 경우 이 속성은 위의 형식으로 현재 날짜와 시간을 반환해야 합니다.

3.1.4 문서 로딩 상태 보고

document.readyState

document가 로딩 중일 때는 "loading"을 반환하고, 파싱이 완료되었지만 하위 리소스를 여전히 로딩 중일 때는 "interactive"을 반환하며, 로딩이 완료되면 "complete"을 반환합니다.

이 값이 변경되면 readystatechange 이벤트가 document 객체에서 발생합니다.

DOMContentLoaded 이벤트는 "interactive"로 전환된 후, "complete"로 전환되기 전에 모든 async 스크립트 요소를 제외한 모든 하위 리소스가 로드된 시점에 발생합니다.

Document/readyState

모든 최신 엔진에서 지원됨.

Firefox3.6+Safari1+Chrome1+
Opera11+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11+

document는 초기값이 "complete"인 현재 문서 준비 상태를 가집니다.

Document 객체는 Document 객체 생성 및 초기화 알고리즘에 의해 생성된 경우, document.readyState 값이 스크립트에 의해 관찰되기 전에 즉시 "loading"으로 재설정됩니다. 이 기본 동작은 초기 about:blank Document 또는 탐색 컨텍스트가 없는 Document의 경우에도 적용됩니다.

readyState getter는 현재 문서 준비 상태를 반환해야 합니다.

document현재 문서 준비 상태 업데이트readinessValue으로 수행하려면:

  1. 만약 document현재 문서 준비 상태readinessValue과 같다면 반환합니다.

  2. document현재 문서 준비 상태readinessValue으로 설정합니다.

  3. documentHTML 파서와 연결되어 있다면:

    1. now현재 고해상도 시간으로 설정하며, document관련 글로벌 객체를 기준으로 합니다.

    2. 만약 readinessValue이 "complete"이고 document로드 타이밍 정보DOM 완료 시간이 0이라면, document로드 타이밍 정보DOM 완료 시간now로 설정합니다.

    3. 그렇지 않고 readinessValue이 "interactive"이고 document로드 타이밍 정보DOM 상호작용 시간이 0이라면, document로드 타이밍 정보DOM 상호작용 시간now로 설정합니다.

  4. 이벤트document에 대해 readystatechange 이름으로 발생시킵니다.


documentHTML 파서 또는 XML 파서와 연결되어 있으며, 아직 중지 또는 중단되지 않은 경우 활성 파서를 가지고 있다고 합니다.


document문서 로드 타이밍 정보라는 로드 타이밍 정보를 가지고 있습니다.

document문서 언로드 타이밍 정보라는 이전 문서 언로드 타이밍을 가지고 있습니다.

document크로스 오리진 리디렉션을 통해 생성됨이라는 부울 값을 가지며, 초기값은 false입니다.

문서 로드 타이밍 정보 구조체에는 다음과 같은 항목이 있습니다:

네비게이션 시작 시간 (기본값 0)
숫자
DOM 상호작용 시간 (기본값 0)
DOM 콘텐츠 로드 이벤트 시작 시간 (기본값 0)
DOM 콘텐츠 로드 이벤트 종료 시간 (기본값 0)
DOM 완료 시간 (기본값 0)
로드 이벤트 시작 시간 (기본값 0)
로드 이벤트 종료 시간 (기본값 0)
DOMHighResTimeStamp 값들

문서 언로드 타이밍 정보 구조체에는 다음과 같은 항목이 있습니다:

언로드 이벤트 시작 시간 (기본값 0)
언로드 이벤트 종료 시간 (기본값 0)
DOMHighResTimeStamp 값들

3.1.5 렌더링 차단 메커니즘

document렌더링 차단 요소 집합을 가지며, 이는 초기에는 비어 있는 집합입니다.

document document렌더링 차단 요소 추가를 허용하며, document콘텐츠 유형이 "text/html"이고, documentbody 요소가 null인 경우에 해당합니다.

document document는 다음 두 조건이 모두 참일 때 렌더링 차단 상태가 됩니다:

요소 elel노드 문서 document렌더링 차단 상태이며, eldocument렌더링 차단 요소 집합에 포함되어 있을 때 렌더링 차단 요소로 간주됩니다.

요소 el에 대해 렌더링 차단을 수행하려면:

  1. el노드 문서document로 설정합니다.

  2. 만약 document렌더링 차단 요소 추가를 허용한다면, append를 사용하여 eldocument렌더링 차단 요소 집합에 추가합니다.

요소 el에 대해 렌더링 차단 해제를 수행하려면:

  1. el노드 문서document로 설정합니다.

  2. 제거를 사용하여 eldocument렌더링 차단 요소 집합에서 제거합니다.

렌더링 차단 요소 el탐색 컨텍스트에서 분리되거나, el차단 속성의 값이 변경되어 el이 더 이상 잠재적 렌더링 차단 요소가 아닌 경우, 렌더링 차단을 해제해야 합니다.

3.1.6 DOM 트리 접근자

문서의 html 요소는 해당 문서의 문서 요소이며, html 요소일 경우에 해당하며, 그렇지 않으면 null입니다.


document.head

Document/head

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome4+
Opera11+Edge79+
Edge (레거시)12+Internet Explorer9+
Firefox Android?Safari iOS4+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+

head 요소를 반환합니다.

문서의 head 요소html 요소의 자식인 첫 번째 head 요소이며, 그렇지 않으면 null입니다.

head 속성은, 가져올 때 문서의 head 요소를 반환해야 합니다 (head 요소 또는 null).


document.title [ = value ]

HTML에서는 title 요소에 의해, SVG에서는 SVG title 요소에 의해 문서의 제목이 반환됩니다.

설정할 때, 문서의 제목을 업데이트합니다. 적절한 요소가 없는 경우 새 값은 무시됩니다.

문서의 title 요소는 문서 내의 첫 번째 title 요소입니다 (트리 순서로), 그렇지 않으면 null입니다.

Document/title

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

다음 알고리즘을 실행할 때 title 속성은 반환되어야 합니다:

  1. 만약 문서 요소SVG svg 요소라면, value첫 번째 자식 텍스트 내용으로 설정합니다.

  2. 그 외의 경우, valuetitle 요소자식 텍스트 내용으로 설정하거나, title 요소가 null이면 빈 문자열로 설정합니다.

  3. ASCII 공백을 제거하고 축소한 다음 value를 반환합니다.

설정할 때, 다음 목록에서 첫 번째 일치 조건에 해당하는 단계를 실행해야 합니다:

만약 문서 요소SVG svg 요소라면
  1. 만약 SVG title 요소가 문서 요소의 자식으로 존재하면, element를 그 요소로 설정합니다.

  2. 그렇지 않은 경우:

    1. element문서 요소노드 문서, "title" 및 SVG 네임스페이스가 주어진 요소 생성의 결과로 설정합니다.

    2. element첫 번째 자식으로 문서 요소에 삽입합니다.

  3. 문자열을 전체 대체하여 주어진 값으로 element 내에서 바꿉니다.

만약 문서 요소HTML 네임스페이스 내에 있다면
  1. title 요소가 null이고 head 요소가 null이면 반환합니다.

  2. title 요소가 null이 아니면, elementtitle 요소로 설정합니다.

  3. 그렇지 않은 경우:

    1. element요소를 생성하여 문서 요소노드 문서로 설정하고, titleHTML 네임스페이스를 사용합니다.

    2. element를 head 요소에 추가합니다.

  4. 문자열을 전체 대체하여 주어진 값으로 element 내에서 바꿉니다.

그 외의 경우

아무 것도 하지 않습니다.


document.body [ = value ]

Document/body

모든 최신 엔진에서 지원됩니다.

Firefox60+Safari1+Chrome1+
Opera9.6+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

body 요소를 반환합니다.

새 값을 설정하여 body 요소를 교체할 수 있습니다.

새로운 값이 body 또는 frameset 요소가 아닌 경우, 이는 "HierarchyRequestError" DOMException을 발생시킵니다.

문서의 body 요소html 요소의 자식 중 첫 번째 body 요소 또는 frameset 요소이며, 그런 요소가 없다면 null입니다.

body 속성은 가져올 때 문서의 body 요소를 반환해야 하며 (이는 body 요소, frameset 요소 또는 null일 수 있음), 설정 시에는 다음 알고리즘을 실행해야 합니다:

  1. 새로운 값이 body 또는 frameset 요소가 아닌 경우, "HierarchyRequestError" DOMException을 발생시킵니다.
  2. 그렇지 않은 경우, 새로운 값이 body 요소와 동일하다면, 반환합니다.
  3. 그렇지 않다면, body 요소가 null이 아니면, 새로운 값으로 교체하고, body 요소의 부모 내에서 새로운 값을 설정하고 반환합니다.
  4. 그렇지 않다면, 문서 요소가 없는 경우, "HierarchyRequestError" DOMException을 발생시킵니다.
  5. 그렇지 않다면, body 요소가 null이지만, 문서 요소가 있는 경우, 새로운 값을 문서 요소에 추가합니다.

body getter에 의해 반환된 값이 setter에 전달된 값과 항상 일치하는 것은 아닙니다.

이 예제에서, setter는 body 요소를 성공적으로 삽입합니다 (그러나 이는 비표준으로, SVG에서는 SVG svg 요소의 자식으로 body 요소를 허용하지 않음). 그러나 getter는 문서 요소가 html이 아니기 때문에 null을 반환합니다.

<svg xmlns="http://www.w3.org/2000/svg">
 <script>
  document.body = document.createElementNS("http://www.w3.org/1999/xhtml", "body");
  console.assert(document.body === null);
 </script>
</svg>

document.images

Document/images

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLCollection을 반환하며, 이는 documentimg 요소를 포함합니다.

document.embeds

Document/embeds

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari10.1+Chrome64+
Opera51+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android47+

HTMLCollection을 반환하며, 이는 documentembed 요소를 포함합니다.

document.plugins

Document/plugins

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari10.1+Chrome64+
Opera51+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS10.3+Chrome Android?WebView Android?Samsung Internet?Opera Android47+

HTMLCollection을 반환하며, 이는 documentaarea 요소 중 href 속성이 있는 요소를 포함합니다.

document.forms

Document/forms

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLCollection을 반환하며, 이는 documentform 요소를 포함합니다.

document.scripts

Document/scripts

모든 최신 엔진에서 지원됩니다.

Firefox9+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer4+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLCollection을 반환하며, 이는 documentscript 요소를 포함합니다.

images 속성은 HTMLCollection을 반환해야 하며, document 노드에서 루팅되고 필터는 img 요소만 일치해야 합니다.

embeds 속성은 HTMLCollection을 반환해야 하며, document 노드에서 루팅되고 필터는 embed 요소만 일치해야 합니다.

plugins 속성은 embeds 속성이 반환하는 것과 동일한 객체를 반환해야 합니다.

links 속성은 HTMLCollection을 반환해야 하며, document 노드에서 루팅되고 필터는 a 요소 중 href 속성이 있는 요소 및 area 요소 중 href 속성이 있는 요소만 일치해야 합니다.

forms 속성은 HTMLCollection을 반환해야 하며, document 노드에서 루팅되고 필터는 form 요소만 일치해야 합니다.

scripts 속성은 HTMLCollection을 반환해야 하며, document 노드에서 루팅되고 필터는 script 요소만 일치해야 합니다.


collection = document.getElementsByName(name)

Document/getElementsByName

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera5+Edge79+
Edge (레거시)12+Internet Explorer5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

NodeList를 반환하며, 이는 document에서 name 속성 값을 가진 요소들을 포함합니다.

getElementsByName(elementName) 메서드 단계는 다음과 같이 live NodeList를 반환합니다. 이 컬렉션은 document에서 elementName 인수와 동일한 값을 가진 name 속성이 있는 모든 HTML 요소를 포함하며, 트리 순서에 따라 정렬됩니다. 동일한 인수를 사용하여 메서드가 다시 호출될 경우, 사용자 에이전트는 이전 호출에서 반환된 것과 동일한 객체를 반환할 수 있습니다. 다른 경우에는 새로운 NodeList 객체를 반환해야 합니다.


document.currentScript

Document/currentScript

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari8+Chrome29+
Opera?Edge79+
Edge (레거시)12+Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

현재 실행 중인 script 요소 또는 SVG script 요소를 반환합니다. 이 요소가 클래식 스크립트를 나타내는 경우에만 해당됩니다. 재진입 스크립트 실행의 경우, 아직 실행이 완료되지 않은 스크립트 중 가장 최근에 시작된 스크립트를 반환합니다.

현재 document에서 스크립트 또는 SVG 스크립트 요소가 실행 중이 아니거나, 현재 실행 중인 스크립트 또는 SVG 스크립트 요소가 모듈 스크립트를 나타내는 경우 null을 반환합니다.

currentScript 속성은 가장 최근에 설정된 값을 반환해야 합니다. document가 생성될 때, currentScript는 null로 초기화되어야 합니다.

이 API는 스크립트 또는 SVG 스크립트 요소를 전역적으로 노출하므로, 구현자 및 표준 커뮤니티에서 더 이상 선호되지 않습니다. 따라서, 모듈 스크립트 실행 시나 섀도우 트리 내에서 스크립트를 실행할 때는 사용할 수 없습니다. 이러한 컨텍스트에서 실행 중인 스크립트를 식별하기 위한 새로운 솔루션을 찾고 있습니다. 이는 전역적으로 노출되지 않으며, 이슈 #1013를 참조합니다.


Document 인터페이스는 이름 있는 속성을 지원합니다. document 객체 document지원되는 속성 이름은 특정 시점에서 다음과 같으며, 요소가 기여한 순서에 따라 트리 순서에 따라 정렬되고, 나중에 중복된 값은 무시되며, 동일한 요소가 id 속성에서 나오는 값이 name 속성에서 나오는 값보다 먼저 나타납니다:

이름 있는 속성의 값을 결정하기 위해 namedocument 객체에서 반환하기 위해 사용자는 다음 단계를 사용하여 얻은 값을 반환해야 합니다:

  1. elementsname 이름을 가진 이름이 지정된 요소들의 목록으로 설정하되, 문서 트리 안에 있으며, 문서루트로 있는 요소들로 설정합니다.

    이 알고리즘이 그렇지 않다면 Web IDL에 의해 호출되지 않았을 것이므로, 적어도 하나의 이러한 요소가 존재할 것입니다.

  2. 만약 elements에 하나의 요소만 있고, 그 요소가 iframe 요소이며, 그 iframe 요소의 content navigable이 null이 아니라면, 그 요소의 content navigable의 활성 WindowProxy를 반환합니다.

  3. 그렇지 않고 elements에 하나의 요소만 있으면, 그 요소를 반환합니다.

  4. 그 외의 경우, name 이름이 지정된 요소들만 필터로 일치하는 HTMLCollection을, 문서 노드를 루트로 하여 반환합니다.

name을 가진 이름 있는 요소는 위 알고리즘의 목적에 따라 다음 중 하나에 해당하는 요소입니다:

embed 또는 object 요소는 상위에 노출된 object 조상이 없고, object 요소의 경우 대체 콘텐츠를 표시하지 않거나 object 또는 embed 하위 요소가 없을 때 노출된 것으로 간주됩니다.


dir 속성은 Document 인터페이스에 dir 콘텐츠 속성과 함께 정의됩니다.

3.2 요소

3.2.1 의미

HTML의 요소, 속성 및 속성 값은 특정 의미(시맨틱)를 가지도록 정의되어 있습니다(이 명세서에 의해). 예를 들어, ol 요소는 순서가 있는 목록을 나타내며, lang 속성은 콘텐츠의 언어를 나타냅니다.

이러한 정의는 웹 브라우저나 검색 엔진과 같은 HTML 프로세서가 저자가 고려하지 않았을 수도 있는 다양한 맥락에서 문서와 애플리케이션을 표시하고 사용할 수 있도록 합니다.

간단한 예로, 데스크탑 웹 브라우저만을 고려하여 작성된 웹 페이지를 생각해 보십시오:

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>My Page</title>
 </head>
 <body>
  <h1>Welcome to my page</h1>
  <p>I like cars and lorries and have a big Jeep!</p>
  <h2>Where I live</h2>
  <p>I live in a small hut on a mountain!</p>
 </body>
</html>

HTML이 의미를 전달하기 때문에 프레젠테이션이 아닌 동일한 페이지는 모바일 폰의 작은 브라우저에서도 변경 없이 사용할 수 있습니다. 예를 들어, 데스크탑에서처럼 헤딩이 큰 글자로 표시되는 대신, 모바일 폰의 브라우저는 페이지 전체에 동일한 크기의 텍스트를 사용하지만 헤딩은 굵게 표시할 수 있습니다.

하지만 이는 화면 크기의 차이만을 의미하지 않습니다. 동일한 페이지는 음성 합성 기반 브라우저를 사용하는 시각 장애 사용자에게도 사용할 수 있습니다. 이 경우 페이지는 화면에 표시되는 대신 사용자의 이어폰을 통해 음성으로 읽어줍니다. 헤딩이 큰 글자로 표시되는 대신, 음성 브라우저는 다른 음량이나 더 느린 목소리를 사용할 수 있습니다.

그것뿐만이 아닙니다. 브라우저가 페이지의 어느 부분이 헤딩인지 알고 있기 때문에, 사용자가 문서 내에서 빠르게 탐색할 수 있도록 문서 개요를 생성할 수 있습니다. "다음 헤딩으로 이동" 또는 "이전 헤딩으로 이동"과 같은 키를 사용하여 쉽게 탐색할 수 있는 기능은 특히 음성 브라우저에서 매우 유용하며, 그렇지 않으면 사용자가 페이지를 빠르게 탐색하기 어렵습니다.

브라우저를 넘어서는 소프트웨어도 이 정보를 활용할 수 있습니다. 검색 엔진은 헤딩을 사용하여 페이지를 더 효과적으로 인덱싱하거나 검색 결과에서 페이지의 하위 섹션으로 빠르게 이동할 수 있는 링크를 제공할 수 있습니다. 도구는 이 헤딩을 사용하여 목차를 생성할 수 있으며, 이 명세서의 목차도 이러한 방식으로 생성됩니다.

이 예시는 헤딩에 집중했지만, HTML의 모든 시맨틱에도 동일한 원칙이 적용됩니다.

저자는 요소, 속성 또는 속성 값을 그들이 의도된 시맨틱 목적 외의 용도로 사용해서는 안 됩니다. 그렇게 하면 소프트웨어가 페이지를 올바르게 처리하는 것을 방해합니다.

예를 들어, 다음 코드 조각은 기업 사이트의 헤딩을 나타내기 위해 작성된 것으로, 두 번째 줄이 하위 섹션의 헤딩이 아니라 단순히 부제목이므로 비표준적입니다(같은 섹션의 보조 헤딩).

<body>
<h1>ACME Corporation</h1>
<h2>The leaders in arbitrary fast delivery since 1920</h2>
...

hgroup 요소는 이러한 상황에 사용할 수 있습니다:

<body>
<hgroup>
<h1>ACME Corporation</h1>
<p>The leaders in arbitrary fast delivery since 1920</p>
</hgroup>
...

다음 예시의 문서도 구문상 올바르더라도 표 형식의 데이터가 명확히 아닌 데이터를 셀에 배치했기 때문에 유사하게 비표준적이며, cite 요소가 잘못 사용되었습니다:

<!DOCTYPE HTML>
<html lang="en-GB">
 <head> <title> Demonstration </title> </head>
 <body>
  <table>
   <tr> <td> My favourite animal is the cat. </td> </tr>
   <tr>
    <td><a href="https://example.org/~ernest/"><cite>Ernest</cite></a>,
     in an essay from 1992
    </td>
   </tr>
  </table>
 </body>
</html>

이렇게 하면 이러한 시맨틱에 의존하는 소프트웨어가 실패할 수 있습니다. 예를 들어, 시각 장애 사용자가 문서의 표를 탐색할 수 있도록 하는 음성 브라우저는 위 인용문을 표로 보고하여 사용자를 혼란스럽게 할 수 있으며, 페이지에서 작업 제목을 추출하는 도구는 "Ernest"를 작업 제목으로 잘못 추출할 수 있습니다. 실제로 이는 사람의 이름일 뿐 제목이 아닙니다.

이 문서의 수정된 버전은 다음과 같을 수 있습니다:

<!DOCTYPE HTML>
<html lang="en-GB">
 <head> <title> Demonstration </title> </head>
 <body>
  <blockquote>
   <p> My favourite animal is the cat. </p>
  </blockquote>
  <p><a href="https://example.org/~ernest/">Ernest</a>,
   in an essay from 1992
  </p>
 </body>
</html>

저자는 이 명세서 또는 다른 적용 가능한 명세서에 의해 허용되지 않은 요소, 속성 또는 속성 값을 사용해서는 안 됩니다. 그렇게 하면 언어를 미래에 확장하는 것이 상당히 어려워집니다.

다음 예시에서는 비표준 속성 값("carpet")과 이 명세서에서 허용되지 않는 비표준 속성("texture")이 있습니다:

<label>Carpet: <input type="carpet" name="c" texture="deep pile"></label>

다음은 이를 수정한 올바른 마크업입니다:

<label>Carpet: <input type="text" class="carpet" name="c" data-texture="deep pile"></label>

DOM 노드의 노드 문서브라우징 컨텍스트가 null인 경우, 문서 적합성 요구 사항에서 HTML 구문 요구 사항 및 XML 구문 요구 사항을 제외한 모든 문서 적합성 요구 사항에서 면제됩니다.

특히, template 요소의 템플릿 내용노드 문서브라우징 컨텍스트는 null입니다. 예를 들어, 콘텐츠 모델 요구 사항과 속성 값 마이크로 구문 요구 사항은 template 요소의 템플릿 내용에 적용되지 않습니다. 이 예시에서 img 요소는 template 요소 외부에서는 유효하지 않은 플레이스홀더 값을 가지고 있습니다.

<template>
 <article>
  <img src="{{src}}" alt="{{alt}}">
  <h1></h1>
 </article>
</template>

그러나 위의 마크업에서 </h1> 종료 태그를 생략하면 HTML 구문을 위반한 것이 되며, 적합성 검사 도구에서 오류로 플래그를 지정합니다.

스크립팅 및 기타 메커니즘을 통해 속성 값, 텍스트 및 문서의 전체 구조가 사용자 에이전트가 처리하는 동안 동적으로 변경될 수 있습니다. 특정 시점에서 문서의 의미는 그 시점에서 문서의 상태에 의해 표현되며, 따라서 문서의 의미는 시간이 지남에 따라 변경될 수 있습니다. 사용자 에이전트는 이러한 변화가 발생할 때마다 문서의 프레젠테이션을 업데이트해야 합니다.

HTML에는 진행 바를 설명하는 progress 요소가 있습니다. 이 요소의 "value" 속성이 스크립트에 의해 동적으로 업데이트되면 사용자 에이전트는 렌더링을 업데이트하여 진행 상황이 변경되는 것을 표시합니다.

3.2.2 DOM의 요소

DOM에서 HTML 요소를 나타내는 노드는 이 명세서의 관련 섹션에 나열된 인터페이스를 구현하고 스크립트에 노출해야 합니다. 여기에는 HTML 요소가 포함되며, XML 문서에서도, 이 문서들이 다른 컨텍스트에 있을 때 (예: XSLT 변환 내)도 마찬가지입니다.

DOM의 요소는 무언가를 나타냅니다. 즉, 요소는 내재적인 의미를 가지며, 이는 시맨틱스라고도 불립니다.

예를 들어, ol 요소는 순서가 있는 목록을 나타냅니다.

요소는 명시적이거나 암시적인 방식으로 참조될 수 있습니다. DOM의 요소가 명시적으로 참조될 수 있는 한 가지 방법은 요소에 id 속성을 부여한 다음, 해당 id 속성 값을 프래그먼트로 사용하는 하이퍼링크를 생성하는 것입니다. 그러나 참조를 위해 하이퍼링크가 반드시 필요한 것은 아닙니다. 해당 요소를 참조하는 어떤 방식도 충분합니다.

다음 figure 요소를 고려해보세요. 이 요소에는 id 속성이 부여되어 있습니다:

<figure id="module-script-graph">
          <img src="module-script-graph.svg"
               alt="Module A depends on module B, which depends
                    on modules C and D.">
          <figcaption>Figure 27: a simple module graph</figcaption>
        </figure>

하이퍼링크 기반 참조a 요소를 사용하여 다음과 같이 생성될 수 있습니다:

As we can see in <a href="#module-script-graph">figure 27</a>, ...

그러나, figure 요소를 참조하는 다른 방법들도 많이 있습니다. 예를 들어:

모든 HTML 요소의 인터페이스가 상속받아야 하는 기본 인터페이스는 HTMLElement 인터페이스이며, 추가 요구 사항이 없는 요소들은 이 인터페이스를 사용해야 합니다.

HTMLElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android1+Samsung Internet?Opera Android10.1+

HTMLElement/title

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLElement/lang

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLElement/inert

Support in all current engines.

Firefox112+Safari15.5+Chrome102+
Opera?Edge102+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLElement/accessKey

Support in all current engines.

Firefox5+Safari6+Chrome17+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLUnknownElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari6+Chrome15+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
[Exposed=Window]
interface HTMLElement : Element {
  [HTMLConstructor] constructor();

  // metadata attributes
  [CEReactions, Reflect] attribute DOMString title;
  [CEReactions, Reflect] attribute DOMString lang;
  [CEReactions] attribute boolean translate;
  [CEReactions] attribute DOMString dir;

  // user interaction
  [CEReactions] attribute (boolean or unrestricted double or DOMString)? hidden;
  [CEReactions, Reflect] attribute boolean inert;
  undefined click();
  [CEReactions, Reflect] attribute DOMString accessKey;
  readonly attribute DOMString accessKeyLabel;
  [CEReactions] attribute boolean draggable;
  [CEReactions] attribute boolean spellcheck;
  [CEReactions, ReflectSetter] attribute DOMString writingSuggestions;
  [CEReactions, ReflectSetter] attribute DOMString autocapitalize;
  [CEReactions] attribute boolean autocorrect;

  [CEReactions] attribute [LegacyNullToEmptyString] DOMString innerText;
  [CEReactions] attribute [LegacyNullToEmptyString] DOMString outerText;

  ElementInternals attachInternals();

  // The popover API
  undefined showPopover(optional ShowPopoverOptions options = {});
  undefined hidePopover();
  boolean togglePopover(optional (TogglePopoverOptions or boolean) options = {});
  [CEReactions] attribute DOMString? popover;

  [CEReactions, Reflect, ReflectRange=(0, 8)] attribute unsigned long headingOffset;
  [CEReactions, Reflect] attribute boolean headingReset;
};

dictionary ShowPopoverOptions {
  HTMLElement source;
};

dictionary TogglePopoverOptions : ShowPopoverOptions {
  boolean force;
};

HTMLElement includes GlobalEventHandlers;
HTMLElement includes ElementContentEditable;
HTMLElement includes HTMLOrSVGElement;

[Exposed=Window]
interface HTMLUnknownElement : HTMLElement {
  // Note: intentionally no [HTMLConstructor]
};

HTMLElement 인터페이스는 여러 가지 다양한 기능과 관련된 메서드 및 속성을 포함하고 있으며, 이 인터페이스의 구성원들은 이 명세서의 여러 다른 섹션에서 설명됩니다.


name을 가진 요소에 대한 요소 인터페이스는 다음과 같이 결정됩니다:

  1. nameapplet, bgsound, blink, isindex, keygen, multicol, nextid, 또는 spacer인 경우, HTMLUnknownElement를 반환합니다.

  2. nameacronym, basefont, big, center, nobr, noembed, noframes, plaintext, rb, rtc, strike, 또는 tt인 경우, HTMLElement를 반환합니다.

  3. namelisting 또는 xmp인 경우, HTMLPreElement를 반환합니다.

  4. 이 명세서가 name에 대응하는 요소 유형에 적합한 인터페이스를 정의한 경우, 해당 인터페이스를 반환합니다.

  5. 다른 관련 명세서name에 적합한 인터페이스를 정의한 경우, 그 인터페이스를 반환합니다.

  6. name유효한 커스텀 요소 이름인 경우, HTMLElement를 반환합니다.

  7. HTMLUnknownElement를 반환합니다.

유효한 커스텀 요소 이름의 경우 HTMLUnknownElement 대신 HTMLElement를 사용하는 이유는, 잠재적인 미래 업그레이드HTMLUnknownElement에서 관련 없는 서브클래스로의 수평적 전환 대신 HTMLElement에서 서브클래스로의 선형 전환만을 초래하도록 보장하기 위해서입니다.

HTML과 SVG 요소가 공유하는 기능들은 HTMLOrSVGElement 인터페이스 믹스인을 사용합니다: [SVG]

Global_attributes/autofocus

Support in one engine only.

Firefox🔰 1+Safari🔰 4+Chrome79+
Opera66+Edge79+
Edge (Legacy)NoInternet Explorer🔰 10+
Firefox Android?Safari iOS?Chrome Android?WebView Android79+Samsung Internet?Opera Android57+
interface mixin HTMLOrSVGElement {
  [SameObject] readonly attribute DOMStringMap dataset;
  attribute DOMString nonce; // intentionally no [CEReactions]

  [CEReactions, Reflect] attribute boolean autofocus;
  [CEReactions, ReflectSetter] attribute long tabIndex;
  undefined focus(optional FocusOptions options = {});
  undefined blur();
};

HTML 또는 SVG 요소가 아닌 요소의 예는 다음과 같이 생성된 요소입니다:

const el = document.createElementNS("some namespace", "example");
console.assert(el.constructor === Element);

3.2.3 HTML 요소 생성자

커스텀 요소 기능을 지원하기 위해, 모든 HTML 요소는 특별한 생성자 동작을 가집니다. 이는 [HTMLConstructor] IDL 확장 속성을 통해 표시됩니다. 이 확장 속성은 주어진 인터페이스 객체가 호출될 때 특정 동작을 가지게 된다는 것을 나타내며, 아래에 자세히 정의되어 있습니다.

[HTMLConstructor] 확장 속성은 인수를 받을 수 없으며, 생성자 작업에서만 나타나야 합니다. 이는 생성자 작업에 단 한 번만 나타나야 하며, 해당 인터페이스는 단일 주석이 달린 생성자 작업만을 포함하고, 그 외에는 아무 것도 포함하지 않아야 합니다. 주석이 달린 생성자 작업은 인수를 받지 않도록 선언되어야 합니다.

[HTMLConstructor] 확장 속성으로 주석이 달린 생성자 작업이 선언된 인터페이스는 다음과 같은 재정의된 생성자 단계를 가집니다:

  1. NewTarget활성 함수 객체와 동일한 경우, TypeError를 발생시킵니다.

    이러한 상황은 생성자를 요소 인터페이스로 정의한 커스텀 요소를 사용할 때 발생할 수 있습니다:

    customElements.define("bad-1", HTMLButtonElement);
    new HTMLButtonElement(); // (1)
    document.createElement("bad-1"); // (2)

    이 경우, HTMLButtonElement의 실행 중 (1번과 같이 명시적으로 또는 2번과 같이 암시적으로) 활성 함수 객체NewTarget이 모두 HTMLButtonElement이 됩니다. 이 검사가 없으면 로컬 이름이 bad-1HTMLButtonElement 인스턴스를 생성할 수 있게 됩니다.

  2. registry를 null로 설정합니다.

  3. 만약 주변 에이전트활성 사용자 정의 요소 생성자 맵[NewTarget]이 존재하면:

    1. registry주변 에이전트활성 사용자 정의 요소 생성자 맵[NewTarget]으로 설정합니다.

    2. 주변 에이전트활성 사용자 정의 요소 생성자 맵[NewTarget]을 제거합니다.

  4. 그렇지 않으면 registry현재 전역 객체연결된 Document사용자 정의 요소 레지스트리로 설정합니다.

  5. registry사용자 정의 요소 정의 집합에서 생성자NewTarget과 같은 항목을 definition으로 설정합니다. 그러한 항목이 없으면 TypeError를 발생시킵니다.

    registry사용자 정의 요소 정의 집합에는 undefined의 생성자를 가진 항목이 있을 수 없으므로, 이 단계는 HTML 요소 생성자가 함수로 호출되는 것을 방지합니다 (이 경우 NewTarget은 undefined가 됩니다).

  6. isValue를 null로 설정합니다.

  7. 만약 definition로컬 이름definition이름과 같으면 (즉, definition자율 사용자 정의 요소용입니다):

    1. 활성 함수 객체HTMLElement가 아닌 경우, TypeError를 발생시킵니다.

      이러한 상황은 커스텀 요소가 로컬 이름을 확장하지 않지만, HTMLElement 클래스가 아닌 클래스를 상속하는 경우에 발생할 수 있습니다:

      customElements.define("bad-2", class Bad2 extends HTMLParagraphElement {});

      이 경우, Bad2 인스턴스를 생성할 때 발생하는 (암시적인) super() 호출 중에 활성 함수 객체HTMLParagraphElement이며, HTMLElement가 아닙니다.

  8. 그 외의 경우 (즉, definition맞춤형 내장 요소인 경우):

    1. valid local names을 이 명세서나 다른 관련 명세서에 정의된 로컬 이름 목록으로 설정합니다. 이 목록은 활성 함수 객체요소 인터페이스로 사용하는 요소를 포함합니다.

    2. valid local namesdefinition로컬 이름이 포함되어 있지 않은 경우, TypeError를 발생시킵니다.

      이 상황은 커스텀 요소가 주어진 로컬 이름을 확장하지만, 잘못된 클래스를 상속하는 경우에 발생할 수 있습니다:

      customElements.define("bad-3", class Bad3 extends HTMLQuoteElement {}, { extends: "p" });

      이 경우, Bad3 인스턴스를 생성할 때 발생하는 (암시적인) super() 호출 중에 유효한 로컬 이름 목록은 qblockquote를 포함하지만, definition로컬 이름은 그 목록에 포함되지 않은 p입니다.

    3. isValuedefinition이름으로 설정합니다.

  9. definition생성 스택이 비어 있는 경우:

    1. element활성 함수 객체가 해당하는 인터페이스를 구현하는 새 객체를 현재 영역NewTarget을 사용하여 내부적으로 생성한 결과로 설정합니다.

    2. element노드 문서현재 전역 객체연결된 Document로 설정합니다.

    3. element네임스페이스HTML 네임스페이스로 설정합니다.

    4. element네임스페이스 접두사를 null로 설정합니다.

    5. element로컬 이름definition로컬 이름으로 설정합니다.

    6. element사용자 정의 요소 레지스트리registry로 설정합니다.

    7. element사용자 정의 요소 상태를 "custom"으로 설정합니다.

    8. element사용자 정의 요소 정의definition으로 설정합니다.

    9. elementisisValue로 설정합니다.

    10. element를 반환합니다.

    이는 작성자 스크립트가 예를 들어 new MyCustomElement()를 통해 새 사용자 정의 요소를 직접 생성할 때 발생합니다.

  10. prototype을 ? Get(NewTarget, "prototype")으로 설정합니다.

  11. 만약 prototype객체가 아니면:

    1. realm을 ? GetFunctionRealm(NewTarget)으로 설정합니다.

    2. prototyperealm인터페이스 프로토타입 객체로 설정합니다. 이 객체의 인터페이스는 활성 함수 객체의 인터페이스와 동일합니다.

    활성 함수 객체의 영역은 realm이 아닐 수 있으므로, 영역 간에 "동일한 인터페이스"라는 더 일반적인 개념을 사용합니다. 인터페이스 객체의 동등성을 찾는 것이 아닙니다. 이 대체 동작은 NewTarget의 영역을 사용하고 거기서 적절한 프로토타입을 찾는 것을 포함하여 JavaScript 내장 기능 및 Web IDL의 인터페이스를 구현하는 새 객체를 내부적으로 생성 알고리즘에 대한 유사한 동작과 일치하도록 설계되었습니다.

  12. elementdefinition생성 스택의 마지막 항목으로 설정합니다.

  13. element이미 생성된 마커인 경우, TypeError를 발생시킵니다.

    이 경우는 작성자가 커스텀 요소 생성자 내에서 비준수하게 super()를 호출하기 전에 생성 중인 클래스의 다른 인스턴스를 생성할 때 발생할 수 있습니다:

    let doSillyThing = true;
    
    class DontDoThis extends HTMLElement {
      constructor() {
        if (doSillyThing) {
          doSillyThing = false;
          new DontDoThis();
          // 이제 생성 스택에 이미 생성된 마커가 포함됩니다.
        }
    
        // 그러면 TypeError가 발생합니다:
        super();
      }
    }

    또한 사용자 코드가 커스텀 요소 생성자 내부에서 super()를 두 번 호출하는 경우에도 발생할 수 있습니다. 이는 JavaScript 명세에 따라 이 알고리즘을 두 번 실행하게 되며, 오류를 발생시키기 전에 수퍼클래스 생성자를 두 번 호출하기 때문입니다:

    class DontDoThisEither extends HTMLElement {
      constructor() {
        super();
    
        // This will throw, but not until it has already called into the HTMLElement constructor
        super();
      }
    }
  14. ? element.[[SetPrototypeOf]](prototype)를 수행합니다.

  15. definition생성 스택의 마지막 항목을 이미 생성됨 표시자로 교체합니다.

  16. element를 반환합니다.

    이 단계는 일반적으로 업그레이드 중에 기존 요소를 반환하는 경우 도달합니다. 이는 커스텀 요소 생성자 내부에서 super() 호출이 해당 기존 요소를 this로 할당하도록 하기 위함입니다.


[HTMLConstructor]로 암시된 생성자 동작 외에도, 일부 요소는 명명된 생성자(실제로는 수정된 prototype 속성을 가진 팩토리 함수)를 가질 수 있습니다.

HTML 요소의 명명된 생성자는 사용자 정의 요소 생성자를 정의할 때 extends 절에서도 사용할 수 있습니다:

class AutoEmbiggenedImage extends Image {
  constructor(width, height) {
    super(width * 10, height * 10);
  }
}

customElements.define("auto-embiggened", AutoEmbiggenedImage, { extends: "img" });

const image = new AutoEmbiggenedImage(15, 20);
console.assert(image.width === 150);
console.assert(image.height === 200);

3.2.4 요소 정의

이 명세서의 각 요소는 다음 정보를 포함하는 정의를 가지고 있습니다:

카테고리

요소가 속하는 카테고리 목록입니다. 이 목록은 각 요소의 콘텐츠 모델을 정의할 때 사용됩니다.

이 요소를 사용할 수 있는 맥락

요소를 사용할 수 있는 위치에 대한 비규범적인 설명입니다. 이 정보는 이 요소를 자식으로 허용하는 요소들의 콘텐츠 모델과 중복되며, 단지 편의성을 위해 제공됩니다.

간단하게 하기 위해, 가장 구체적인 기대 사항만 나열됩니다.

예를 들어, 모든 구문 콘텐츠흐름 콘텐츠입니다. 따라서, 구문 콘텐츠는 "구문 콘텐츠가 예상되는 위치"로만 나열되며, 이는 더 구체적인 기대 사항입니다. 흐름 콘텐츠가 예상되는 모든 곳에서도 구문 콘텐츠가 예상되므로, 이 기대를 충족시킵니다.

콘텐츠 모델

요소의 자식 및 후손으로 포함되어야 하는 콘텐츠에 대한 규범적인 설명입니다.

text/html에서 태그 생략

text/html 구문에서 시작 태그를 생략할 수 있는지에 대한 비규범적인 설명입니다. 이 정보는 선택적 태그 섹션에 주어진 규범적인 요구 사항과 중복되며, 요소 정의에 편의성만을 위해 제공됩니다.

콘텐츠 속성

요소에 지정될 수 있는 속성(달리 금지되지 않은 경우) 목록과 그 속성에 대한 비규범적인 설명이 포함된 규범적인 목록입니다. (대시 왼쪽의 콘텐츠는 규범적이며, 오른쪽의 콘텐츠는 비규범적입니다.)

접근성 고려사항

작성자용: ARIA rolearia-* 속성 사용에 대한 적합성 요구 사항은 ARIA in HTML에 정의되어 있습니다. [ARIA] [ARIAHTML]

구현자용: 접근성 API 시맨틱 구현에 대한 사용자 에이전트 요구 사항은 HTML 접근성 API 매핑에 정의되어 있습니다. [HTMLAAM]

DOM 인터페이스

요소가 구현해야 하는 DOM 인터페이스의 규범적인 정의입니다.

이후 요소가 표현하는 내용에 대한 설명과 저자 및 구현에 적용될 수 있는 추가적인 규범적인 적합성 기준이 따라옵니다. 경우에 따라 예제가 포함될 수 있습니다.

3.2.4.1 속성

속성 값은 문자열입니다. 별도로 명시되지 않는 한, HTML 요소의 속성 값은 빈 문자열을 포함한 모든 문자열 값일 수 있으며, 해당 속성 값에 어떤 텍스트가 지정될 수 있는지에 대한 제한은 없습니다.

3.2.5 콘텐츠 모델

이 명세서에서 정의된 각 요소는 콘텐츠 모델을 가지고 있습니다: 요소의 예상 내용물에 대한 설명입니다. HTML 요소는 해당 요소의 콘텐츠 모델에 설명된 요구 사항과 일치하는 내용물을 가져야 합니다. 요소의 내용물은 DOM에서 그 자식들입니다.

ASCII 공백 문자는 항상 요소 사이에 허용됩니다. 사용자 에이전트는 소스 마크업의 요소 사이에 있는 이 문자를 DOM에서 텍스트 노드로 표시합니다. 빈 텍스트 노드 및 이러한 문자들의 시퀀스로만 구성된 텍스트 노드는 요소 간 공백으로 간주됩니다.

요소 간 공백, 주석 노드 및 처리 명령 노드는 요소의 내용물이 그 요소의 콘텐츠 모델과 일치하는지 여부를 결정할 때 무시해야 하며, 문서 및 요소의 시맨틱을 정의하는 알고리즘을 따를 때도 무시해야 합니다.

따라서, 요소 A는 두 번째 요소 B가 같은 부모 노드를 가지며 그들 사이에 다른 요소 노드 또는 텍스트 노드(다만 요소 간 공백은 제외)가 없는 경우 선행되거나 후행된다고 할 수 있습니다. 마찬가지로, 어떤 노드가 그 요소의 유일한 자식인 경우, 그 요소가 요소 간 공백, 주석 노드 및 처리 명령 노드 외에는 다른 노드를 포함하지 않는 경우입니다.

작성자는 HTML 요소를 각 요소에 대해 정의된 대로 명시적으로 허용된 곳 이외에는 사용해서는 안 되며, 다른 명세서에 의해 명시적으로 요구되는 경우를 제외하고는 사용해서는 안 됩니다. XML 복합 문서의 경우, 이러한 맥락은 관련 맥락을 제공하도록 정의된 다른 네임스페이스의 요소 내에 있을 수 있습니다.

Atom Syndication Formatcontent 요소를 정의합니다. 그 type 속성에 xhtml 값이 있을 때, Atom Syndication Format은 해당 요소가 단일 HTML div 요소를 포함하도록 요구합니다. 따라서 이 맥락에서는 div 요소가 허용되며, 이는 이 명세서에 명시적으로 규범적으로 명시된 것은 아닙니다. [ATOM]

또한, HTML 요소는 고아 노드(즉, 부모 노드가 없는 상태)일 수 있습니다.

예를 들어, td 요소를 생성하고 스크립트에서 전역 변수에 저장하는 것은 규범적이며, td 요소가 tr 요소 내에서만 사용되어야 함에도 불구하고 이를 벗어날 수 있습니다.

var data = {
  name: "Banana",
  cell: document.createElement('td'),
};
3.2.5.1 "nothing" 콘텐츠 모델

요소의 콘텐츠 모델이 nothing일 때, 해당 요소는 텍스트 노드( 요소 간 공백 제외) 및 요소 노드를 포함해서는 안 됩니다.

콘텐츠 모델이 "nothing"인 대부분의 HTML 요소는 편의상 빈 요소(종료 태그가 없는 요소)인 경우가 많습니다. 그러나, 이는 완전히 별개의 개념입니다.

3.2.5.2 콘텐츠 종류

HTML의 각 요소는 유사한 특성을 가진 요소들을 함께 그룹화하는 하나 이상의 카테고리에 속합니다. 이 명세서에서는 다음과 같은 광범위한 카테고리를 사용합니다:

일부 요소는 또한 이 명세서의 다른 부분에서 정의된 다른 카테고리에 속할 수 있습니다.

이 카테고리들은 다음과 같이 관련됩니다:

섹셔닝 콘텐츠, 헤딩 콘텐츠, 문장 콘텐츠, 임베디드 콘텐츠 및 인터랙티브 콘텐츠는 모두 흐름 콘텐츠의 유형입니다. 메타데이터는 때때로 흐름 콘텐츠이기도 합니다. 메타데이터와 인터랙티브 콘텐츠는 때때로 문장 콘텐츠이기도 합니다. 임베디드 콘텐츠는 또한 문장 콘텐츠의 한 유형이며, 때때로 인터랙티브 콘텐츠이기도 합니다.

다른 카테고리들은 특정 목적을 위해 사용되며, 예를 들어 폼 컨트롤은 공통 요구 사항을 정의하기 위해 여러 카테고리를 사용하여 지정됩니다. 일부 요소는 고유한 요구 사항을 가지며 특정 카테고리에 맞지 않을 수 있습니다.

3.2.5.2.1 메타데이터 콘텐츠

메타데이터 콘텐츠는 나머지 콘텐츠의 표현이나 동작을 설정하거나, 문서와 다른 문서들 사이의 관계를 설정하거나, 다른 "대역 외" 정보를 전달하는 콘텐츠입니다.

주로 메타데이터와 관련된 의미론을 가진 다른 네임스페이스의 요소들(예: RDF)도 메타데이터 콘텐츠입니다.

따라서, XML 직렬화에서 다음과 같이 RDF를 사용할 수 있습니다:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xml:lang="en">
 <head>
  <title>Hedral's Home Page</title>
  <r:RDF>
   <Person xmlns="http://www.w3.org/2000/10/swap/pim/contact#"
           r:about="https://hedral.example.com/#">
    <fullName>Cat Hedral</fullName>
    <mailbox r:resource="mailto:hedral@damowmow.com"/>
    <personalTitle>Sir</personalTitle>
   </Person>
  </r:RDF>
 </head>
 <body>
  <h1>My home page</h1>
  <p>I like playing with string, I guess. Sister says squirrels are fun
  too so sometimes I follow her to play with them.</p>
 </body>
</html>

그러나, HTML 직렬화에서는 이것이 불가능합니다.

3.2.5.2.2 플로우 콘텐츠

문서 및 애플리케이션 본문에서 사용되는 대부분의 요소는 플로우 콘텐츠로 분류됩니다.

3.2.5.2.3 구획 콘텐츠

구획 콘텐츠headerfooter 요소의 범위를 정의하는 콘텐츠입니다.

3.2.5.2.4 제목 콘텐츠

제목 콘텐츠는 섹션의 제목을 정의합니다(섹션화 콘텐츠 요소를 사용하여 명시적으로 표시하거나 제목 콘텐츠 자체에 의해 암시됩니다).

3.2.5.2.5 구문 콘텐츠

구문 콘텐츠는 문서의 텍스트와 그 텍스트를 단락 내부에서 마크업하는 요소들입니다. 구문 콘텐츠의 연속은 단락을 형성합니다.

구문 콘텐츠로 분류되는 대부분의 요소는 구문 콘텐츠로 분류된 요소들만 포함할 수 있으며, 흐름 콘텐츠를 포함할 수 없습니다.

텍스트는 콘텐츠 모델의 맥락에서 아무것도 아니거나 텍스트 노드입니다. 텍스트는 때때로 독자적인 콘텐츠 모델로 사용되지만, 구문 콘텐츠이기도 하며, 요소 간 공백이 될 수 있습니다(텍스트 노드가 비어 있거나 단순히 ASCII 공백 문자만 포함하는 경우).

텍스트 노드와 속성 값은 스칼라 값으로 구성되어야 하며, 비문자제어 문자(ASCII 공백 문자 제외)를 제외합니다. 이 명세서는 텍스트 노드와 속성 값의 정확한 값에 대한 추가 제약을 포함합니다.

3.2.5.2.6 임베디드 콘텐츠

임베디드 콘텐츠는 문서에 다른 리소스를 가져오거나, 다른 어휘의 콘텐츠를 문서에 삽입하는 콘텐츠입니다.

HTML 네임스페이스 외의 네임스페이스에서 온 요소로, 콘텐츠를 전달하지만 메타데이터는 아닌 요소들은 이 명세서에서 정의된 콘텐츠 모델의 목적상 임베디드 콘텐츠로 간주됩니다. (예: MathML 또는 SVG)

일부 임베디드 콘텐츠 요소는 대체 콘텐츠를 가질 수 있습니다. 이는 외부 리소스를 사용할 수 없을 때(예: 지원되지 않는 형식일 때) 사용되는 콘텐츠입니다. 요소 정의는 대체 콘텐츠가 있는 경우 그 내용을 명시합니다.

3.2.5.2.7 인터랙티브 콘텐츠

인터랙티브 콘텐츠는 사용자의 상호작용을 위해 특별히 의도된 콘텐츠입니다.

3.2.5.2.8 실체 콘텐츠

일반적으로, 콘텐츠 모델이 flow content 또는 phrasing content를 허용하는 요소는 contentspalpable content가 하나 이상 포함되어야 하며, hidden 속성이 지정되지 않아야 합니다.

Palpable content는 요소를 비어 있지 않게 만들어 주며, 후손에 비어 있지 않은 text를 제공하거나, 사용자가 들을 수 있는 것(audio 요소) 또는 볼 수 있는 것(video, img, 또는 canvas 요소) 또는 다른 방식으로 상호작용할 수 있는 것(예: 인터랙티브 폼 컨트롤)을 제공합니다.

이 요구 사항은 엄격한 요구 사항은 아니며, 요소가 비어 있어도 정당한 경우가 많이 있습니다. 예를 들어, 나중에 스크립트로 채워질 자리 표시자로 사용되는 경우나 템플릿의 일부로 요소가 있으며 대부분의 페이지에서는 채워지지만 일부 페이지에서는 관련이 없는 경우가 있습니다.

적합성 검사기는 작성자 보조 도구로서 이 요구 사항을 충족하지 않는 요소를 찾을 수 있는 메커니즘을 제공하는 것이 좋습니다.

다음 요소들은 palpable content입니다:

3.2.5.2.10 select 요소 내부 콘텐츠 요소

select 요소 내부 콘텐츠 요소select 요소의 자손으로 허용되는 요소들입니다.

다음은 select 요소 내부 콘텐츠 요소입니다:

3.2.5.2.11 optgroup 요소 내부 콘텐츠 요소

optgroup 요소 내부 콘텐츠 요소optgroup 요소의 자손으로 허용되는 요소들입니다.

다음은 optgroup 요소 내부 콘텐츠 요소입니다:

3.2.5.2.12 option 요소 내부 콘텐츠 요소

option 요소 내부 콘텐츠 요소option 요소의 자손으로 허용되는 요소들입니다.

다음은 option 요소 내부 콘텐츠 요소입니다:

다음은 option 요소 내부 콘텐츠 요소에서 제외됩니다:

3.2.5.2.9 스크립트 지원 요소

스크립트 지원 요소는 자체적으로 아무것도 나타내지 않지만(즉, 렌더링되지 않음), 스크립트를 지원하기 위해 사용되는 요소들입니다. 예를 들어, 사용자에게 기능을 제공하기 위해 사용됩니다.

다음 요소들이 스크립트 지원 요소입니다:

3.2.5.3 투명한 콘텐츠 모델

일부 요소는 투명하다고 설명되며, 콘텐츠 모델 설명에 "투명"이라는 용어가 포함됩니다. 투명 요소의 콘텐츠 모델은 부모 요소의 콘텐츠 모델에서 파생됩니다. 투명한 요소가 포함된 부모 요소의 콘텐츠 모델 부분에서 필요한 요소는 투명한 요소의 콘텐츠 모델에서도 동일하게 요구됩니다.

예를 들어, ins 요소가 ruby 요소 안에 있는 경우, rt 요소를 포함할 수 없습니다. 이는 ruby 요소의 콘텐츠 모델에서 ins 요소를 허용하는 부분이 phrasing content를 허용하는 부분이고, rt 요소는 phrasing content가 아니기 때문입니다.

일부 경우 투명한 요소가 서로 중첩된 경우, 이 과정을 반복적으로 적용해야 합니다.

다음 마크업 조각을 고려합니다.

<p><object><ins><map><a href="/">Apples</a></map></ins></object></p>

"Apples"가 a 요소 내부에 허용되는지 확인하려면 콘텐츠 모델을 검사합니다. a 요소의 콘텐츠 모델은 투명하며, map 요소, ins 요소, object 요소의 콘텐츠 모델도 마찬가지입니다. object 요소는 p 요소에서 발견되며, 이 요소의 콘텐츠 모델은 구문 콘텐츠입니다. 따라서 텍스트는 구문 콘텐츠이므로 "Apples"는 허용됩니다.

투명한 요소에 부모가 없을 때, 그 콘텐츠 모델의 "투명한" 부분은 대신에 어떤 flow content라도 허용되는 것으로 취급해야 합니다.

3.2.5.4 문단

이 섹션에서 정의된 문단 용어는 p 요소의 정의에만 사용되는 것이 아니라, 여기서 정의된 문단 개념은 문서를 해석하는 방법을 설명하는 데 사용됩니다. p 요소는 문단을 마크업하는 여러 가지 방법 중 하나일 뿐입니다.

문단은 일반적으로 특정 주제를 다루는 하나 이상의 문장으로 구성된 텍스트 블록을 형성하는 phrasing content의 연속이지만, 보다 일반적인 주제별 그룹화에도 사용할 수 있습니다. 예를 들어, 주소도 문단이고, 양식의 일부, 서명, 또는 시의 연도 문단으로 간주될 수 있습니다.

다음 예제에서는 섹션에 두 개의 문단이 있습니다. 또한 문단이 아닌 phrasing content를 포함하는 제목도 있습니다. 주석과 inter-element whitespace가 문단을 형성하지 않는 것에 유의합니다.

<section>
  <h2>Example of paragraphs</h2>
  This is the <em>first</em> paragraph in this example.
  <p>This is the second.</p>
  <!-- This is not a paragraph. -->
</section>

flow content의 문단은 문서가 a, ins, del, map 요소가 없는 상태로 표시되는 것과 관련하여 정의됩니다. 이러한 요소들은 하이브리드 콘텐츠 모델을 가지고 있어서 문단 경계를 가로지를 수 있기 때문입니다. 아래 첫 번째 두 예제에서 보여주듯이 말입니다.

일반적으로 요소가 문단 경계를 가로지르지 않도록 하는 것이 좋습니다. 이러한 마크업을 유지하는 것은 어렵습니다.

다음 예제는 앞서 예제에서 사용한 마크업에 insdel 요소를 추가하여 일부 마크업이 변경되었음을 나타냅니다(이 경우 변경 사항이 별 의미가 없음을 인정합니다). 이 예제는 ins 요소와 del 요소에도 불구하고 이전 예제와 동일한 문단을 가지고 있습니다. ins 요소는 제목과 첫 번째 문단을 가로지르고, del 요소는 두 문단 사이의 경계를 가로지릅니다.

<section>
  <ins><h2>Example of paragraphs</h2>
  This is the <em>first</em> paragraph in</ins> this example<del>.
  <p>This is the second.</p></del>
  <!-- This is not a paragraph. -->
</section>

view가 DOM의 모든 a, ins, del, map 요소를 해당 contents로 대체한 뷰라고 가정합니다. 그러면 view에서, 문단을 허용하는 요소의 모든 형제 phrasing content 노드들 사이에서 다른 유형의 콘텐츠가 끼어들지 않은 연속된 노드들 중 첫 번째 노드를 first라 하고 마지막 노드를 last라 합니다. 임베디드 콘텐츠(embedded content)나 inter-element whitespace가 아닌 노드로 구성된 각 연속 구간에는 원래 DOM에서 first 바로 앞부터 last 바로 뒤까지 문단이 존재합니다. (따라서 문단은 a, ins, del, map 요소를 가로지를 수 있습니다.)

준수 검사기는 문단이 서로 겹치는 경우 저자에게 경고할 수 있습니다 (이것은 object, video, audio, canvas 요소와 같은 요소를 사용할 때, 또는 HTML을 추가로 포함할 수 있도록 허용하는 다른 네임스페이스의 요소를 통해 간접적으로 발생할 수 있습니다. 예를 들어 SVG svg 또는 MathML math와 같은 요소입니다).

문단은 또한 p 요소에 의해 명시적으로 형성됩니다.

p 요소는 개별 문단을 감싸기 위해 사용할 수 있으며, 그렇지 않으면 각 문단을 서로 구분할 phrasing content 이외의 콘텐츠가 없을 경우에 사용됩니다.

다음 예제에서는 링크가 첫 번째 문단의 절반, 두 문단을 구분하는 제목 전체, 두 번째 문단의 절반을 가로지릅니다. 링크가 문단과 제목을 가로지릅니다.

<header>
 Welcome!
 <a href="about.html">
  This is home of...
  <h1>The Falcons!</h1>
  The Lockheed Martin multirole jet fighter aircraft!
 </a>
 This page discusses the F-16 Fighting Falcon's innermost secrets.
</header>

이 예제를 문단을 명시적으로 표시하고, 하나의 링크 요소를 세 개로 나누어 다시 마크업한 예제는 다음과 같습니다:

<header>
 <p>Welcome! <a href="about.html">This is home of...</a></p>
 <h1><a href="about.html">The Falcons!</a></h1>
 <p><a href="about.html">The Lockheed Martin multirole jet
 fighter aircraft!</a> This page discusses the F-16 Fighting
 Falcon's innermost secrets.</p>
</header>

일부 요소가 대체 콘텐츠를 정의할 때 문단이 중첩될 수 있습니다. 예를 들어 다음 섹션에서:

<section>
 <h2>My Cats</h2>
 You can play with my cat simulator.
 <object data="cats.sim">
  To see the cat simulator, use one of the following links:
  <ul>
   <li><a href="cats.sim">Download simulator file</a>
   <li><a href="https://sims.example.com/watch?v=LYds5xY4INU">Use online simulator</a>
  </ul>
  Alternatively, upgrade to the Mellblom Browser.
 </object>
 I'm quite proud of it.
</section>

여기에 다섯 개의 문단이 있습니다:

  1. "You can play with my cat simulator. object I'm quite proud of it."라고 말하는 문단에서, objectobject 요소입니다.
  2. "To see the cat simulator, use one of the following links:"라고 말하는 문단입니다.
  3. "Download simulator file"라고 말하는 문단입니다.
  4. "Use online simulator"라고 말하는 문단입니다.
  5. "Alternatively, upgrade to the Mellblom Browser."라고 말하는 문단입니다.

첫 번째 문단은 다른 네 문단과 중첩되어 있습니다. "cats.sim" 리소스를 지원하는 사용자 에이전트는 첫 번째 문단만 표시할 것입니다. 하지만 대체 콘텐츠를 보여주는 사용자 에이전트는 첫 번째 문단의 첫 번째 문장을 두 번째 문단과 같은 문단으로 표시하고, 마지막 문단은 첫 번째 문단의 두 번째 문장의 시작 부분처럼 혼란스럽게 표시할 것입니다.

이러한 혼동을 피하기 위해 명시적 p 요소를 사용할 수 있습니다. 예를 들어:

<section>
 <h2>My Cats</h2>
 <p>You can play with my cat simulator.</p>
 <object data="cats.sim">
  <p>To see the cat simulator, use one of the following links:</p>
  <ul>
   <li><a href="cats.sim">Download simulator file</a>
   <li><a href="https://sims.example.com/watch?v=LYds5xY4INU">Use online simulator</a>
  </ul>
  <p>Alternatively, upgrade to the Mellblom Browser.</p>
 </object>
 <p>I'm quite proud of it.</p>
</section>

3.2.6 글로벌 속성

Global_attributes

다음 속성들은 모든 HTML 요소에 공통적으로 지정될 수 있습니다(이 사양에서 정의되지 않은 요소들까지 포함하여):

이 속성들은 오직 이 사양에서 정의된 HTML 요소에 대한 속성으로만 정의됩니다. 이 사양에서 이러한 속성을 가진 것으로 언급된 요소들은, 이 속성들을 가진 것으로 정의되지 않은 네임스페이스의 요소들은 이 속성들을 가진 요소로 간주되어서는 안 됩니다.

예를 들어, 다음 XML 조각에서, "bogus" 요소는 이 사양에서 정의된 dir 속성을 가지고 있지 않습니다, 비록 "dir"이라는 이름을 가진 속성을 가지고 있음에도 불구하고. 따라서, 내부 가장 안쪽의 span 요소의 방향성은 'rtl'로, "bogus" 요소를 통해 간접적으로 div 요소에서 상속받은 것입니다.

<div xmlns="http://www.w3.org/1999/xhtml" dir="rtl">
 <bogus xmlns="https://example.net/ns" dir="ltr"> 
  <span xmlns="http://www.w3.org/1999/xhtml">
  </span>
 </bogus>
</div>

Global_attributes/slot

모든 최신 엔진에서 지원됩니다.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (레거시)아니요Internet Explorer?
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

DOM은 모든 네임스페이스에서 어떤 요소의 class, id, 그리고 slot 속성에 대한 사용자 에이전트 요구 사항을 정의합니다. [DOM]

class, id, 및 slot 속성은 모든 HTML elements에 지정될 수 있습니다.

HTML elements에 지정될 때, class 속성은 요소가 속하는 여러 클래스를 나타내는 공백으로 구분된 토큰 집합의 값을 가져야 합니다.

요소에 클래스를 지정하면 CSS에서 셀렉터의 클래스 매칭, DOM에서 getElementsByClassName() 메서드 및 기타 기능에 영향을 미칩니다.

저자들이 class 속성에 사용할 수 있는 토큰에는 추가적인 제한이 없지만, 저자들은 콘텐츠의 성격을 설명하는 값 대신, 콘텐츠의 원하는 프레젠테이션을 설명하는 값을 사용하도록 권장됩니다.

HTML elements에 지정될 때, id 속성 값은 요소의 IDs 중에서 고유해야 하며, 하나 이상의 문자를 포함해야 합니다. 값에는 ASCII 공백이 포함되지 않아야 합니다.

id 속성은 해당 요소의 고유 식별자(ID)를 지정합니다.

ID가 어떤 형식을 취할 수 있는지에 대한 다른 제한은 없습니다. 특히, ID는 숫자로만 구성될 수 있으며, 숫자로 시작하거나 밑줄로 시작하거나, 단순히 구두점으로 구성될 수도 있습니다.

요소의 고유 식별자는 특정 문서의 특정 부분에 링크하기 위한 방법, 스크립팅 시 요소를 타겟팅하기 위한 방법, CSS에서 특정 요소를 스타일링하는 방법 등 다양한 목적으로 사용할 수 있습니다.

식별자는 불투명한 문자열입니다. id 속성의 값에서 특정 의미를 유추해서는 안 됩니다.

HTML elements에 특정된 slot 속성에 대한 적합성 요구 사항은 없습니다.

slot 속성은 요소에 슬롯을 할당하는 데 사용됩니다. slot 속성이 있는 요소는 slot 요소에 의해 생성된 슬롯에 할당됩니다. 이때 슬롯 요소는 쉐도우 트리 내에서 찾을 수 있어야 하며, 해당 트리의 루트호스트를 가지고 있어야 합니다. 이 호스트는 해당하는 slot 속성 값을 가지고 있습니다.


접근성 기술 제품이 HTML 요소와 속성으로는 노출하기 어려운 세분화된 인터페이스를 제공할 수 있도록, 접근성 기술 제품을 위한 주석(annotations) 세트를 지정할 수 있습니다. 이 주석 세트에는 ARIA rolearia-* 속성이 포함됩니다. [ARIA]


다음 이벤트 핸들러 콘텐츠 속성은 모든 HTML 요소에 지정될 수 있습니다:

별표로 표시된 속성은 body 요소에 지정될 때 다른 의미를 가집니다. 이러한 요소들은 동일한 이름의 Window 객체의 이벤트 핸들러를 노출하기 때문입니다.

이 속성들은 모든 요소에 적용되지만, 모든 요소에서 유용하지는 않습니다. 예를 들어, 오직 미디어 요소만이 사용자 에이전트에 의해 발생된 volumechange 이벤트를 받을 수 있습니다.


사용자 정의 데이터 속성 (예: data-foldername 또는 data-msgid)은 모든 HTML 요소에 지정될 수 있으며, 페이지에 특정한 사용자 데이터, 상태, 주석 등을 저장하는 데 사용됩니다.


HTML 문서에서, HTML 네임스페이스 내의 요소는 "http://www.w3.org/1999/xhtml" 값을 정확히 가질 경우에만 xmlns 속성을 가질 수 있습니다. 이는 XML 문서에는 적용되지 않습니다.

HTML에서 xmlns 속성은 전혀 아무런 효과가 없다. 기본적으로 하나의 부적(talisman)에 불과하다. 이는 XML로부터 또는 XML로의 마이그레이션을 약간 더 쉽게 만들기 위해서만 허용된다. HTML 파서에 의해 파싱될 때 이 속성은 어떤 네임스페이스에도 속하지 않게 된다. XML에서는 이 속성이 네임스페이스 선언 메커니즘의 일부이며 항상 "http://www.w3.org/2000/xmlns/" 네임스페이스에 속하게 된다.


XML은 또한 XML 네임스페이스 내의 모든 요소에 대해 xml:space 속성의 사용을 허용합니다. 이 속성은 HTML 요소에는 영향을 미치지 않으며, HTML의 기본 동작은 공백을 유지하는 것입니다. [XML]

HTML 요소에서 xml:space 속성을 text/html 구문에서 직렬화할 수 있는 방법은 없습니다.

3.2.6.1 title 속성

Global_attributes/title

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

title 속성은 요소에 대한 권고 정보를 나타냅니다. 예를 들어, 링크에서는 대상 리소스의 제목이나 설명이 될 수 있으며, 이미지에서는 이미지 설명이나 크레딧이 될 수 있습니다. 문단에서는 주석이나 텍스트에 대한 설명이 될 수 있으며, 인용에서는 출처에 대한 추가 정보가 될 수 있습니다. 대화형 콘텐츠에서는 요소의 사용에 대한 라벨이나 지침이 될 수 있습니다. 이 속성의 값은 텍스트입니다.

title 속성에 의존하는 것은 현재 권장되지 않습니다. 많은 사용자 에이전트가 이 명세서에서 요구하는 대로 속성을 접근 가능한 방식으로 노출하지 않기 때문입니다 (예: 마우스와 같은 포인팅 장치를 필요로 하여 툴팁을 나타내는 경우, 이는 키보드 전용 사용자와 현대적인 휴대폰이나 태블릿을 사용하는 터치 전용 사용자에게 제외됩니다).

이 속성이 요소에 생략된 경우, 이는 HTML 요소의 가장 가까운 상위 요소에 설정된 title 속성의 권고 정보가 이 요소에도 관련이 있음을 암시합니다. 이 속성을 설정하면 이러한 암시가 무시되며, 상위 요소의 권고 정보가 이 요소와 관련이 없음을 명시적으로 나타냅니다. 속성을 빈 문자열로 설정하면 해당 요소에 권고 정보가 없음을 나타냅니다.

속성의 값에 U+000A 줄 바꿈(LF) 문자가 포함된 경우, 내용이 여러 줄로 나뉩니다. 각 U+000A 줄 바꿈(LF) 문자는 줄 바꿈을 나타냅니다.

title 속성에 줄 바꿈을 사용하는 것에 대해 주의가 필요합니다.

예를 들어, 다음 스니펫은 실제로 줄 바꿈이 포함된 약어의 확장을 정의합니다:

<p>My logs show that there was some interest in <abbr title="Hypertext
Transport Protocol">HTTP</abbr> today.</p>

일부 요소(예: link, abbr, input)는 위에 설명된 의미 외에 title 속성에 대한 추가적인 의미를 정의합니다.

요소의 권고 정보는 다음 알고리즘이 반환하는 값입니다. 알고리즘이 값을 반환하면 즉시 종료됩니다. 알고리즘이 빈 문자열을 반환하면 권고 정보가 없습니다.

  1. 요소에 title 속성이 있으면, 그 값에 대해 줄 바꿈 정규화를 수행한 결과를 반환합니다.

  2. 요소에 상위 요소가 있으면, 상위 요소의 권고 정보를 반환합니다.

  3. 빈 문자열을 반환합니다.

사용자 에이전트는 요소에 권고 정보가 있는 경우 사용자가 이를 인지할 수 있도록 해야 합니다. 그렇지 않으면 정보가 발견되지 않을 것입니다.


3.2.6.2 langxml:lang 속성

Global_attributes/lang

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

lang 속성 (네임스페이스 없음)은 요소의 콘텐츠와 텍스트가 포함된 모든 속성에 대해 기본 언어를 지정합니다. 이 값은 유효한 BCP 47 언어 태그 또는 빈 문자열이어야 합니다. 속성을 빈 문자열로 설정하면 기본 언어가 알 수 없음을 나타냅니다. [BCP47]

lang 속성은 XML 네임스페이스에 정의되어 있습니다. [XML]

이 속성들이 요소에서 생략되면, 이 요소의 언어는 부모 요소의 언어와 동일합니다(부모 요소가 있는 경우). 다만 slot 요소는 쉐도우 트리에서 예외입니다.

네임스페이스 없는 lang 속성은 모든 HTML 요소에서 사용할 수 있습니다.

lang 속성HTML 요소에서 XML 문서뿐만 아니라 관련 사양에서 허용하는 경우 다른 네임스페이스의 요소에도 사용할 수 있습니다 (특히, MathML과 SVG는 lang 속성을 해당 요소에 지정하는 것을 허용합니다). 만약 동일한 요소에 네임스페이스가 없는 lang 속성과 lang 속성이 지정된 경우, 이들은 ASCII 대소문자 구분 없이 비교할 때 정확히 동일한 값을 가져야 합니다.

작성자는 lang 속성(예: XML 네임스페이스)을 HTML 요소에서 사용해서는 안 됩니다. XML로의 마이그레이션을 쉽게 하기 위해, 작성자는 xml:lang이라는 리터럴 로컬 이름을 가진 네임스페이스가 없는 속성을 HTML 요소에서 명시할 수 있지만, 이러한 속성은 lang 속성이 네임스페이스 없이 함께 지정된 경우에만 명시해야 하며, 두 속성은 ASCII 대소문자 구분 없이 동일한 값을 가져야 합니다.

네임스페이스가 없고 접두사가 없으며 리터럴 로컬 이름이 "xml:lang"인 속성은 언어 처리에 영향을 미치지 않습니다.


노드의 언어를 결정하기 위해, 사용자 에이전트는 다음 목록에서 적합한 첫 번째 단계를 사용해야 합니다:

노드가 lang 속성(예: XML 네임스페이스)이 설정된 요소일 경우

해당 속성의 값을 사용합니다.

노드가 HTML 요소이거나 SVG 네임스페이스에 있는 요소이며, 네임스페이스가 없는 lang 속성이 설정된 경우

해당 속성의 값을 사용합니다.

노드의 부모가 쉐도우 루트인 경우

해당 언어쉐도우 루트호스트의 언어로 사용합니다.

노드의 부모 요소가 null이 아닌 경우

해당 언어부모 요소의 언어로 사용합니다.

그 외의 경우

설정된 프래그마 설정 기본 언어가 있다면, 그것이 노드의 언어입니다. 설정된 프래그마 설정 기본 언어가 없다면, 더 높은 수준의 프로토콜(예: HTTP)에서 제공되는 언어 정보를 최종적인 대체 언어로 사용해야 합니다. 이러한 언어 정보가 없는 경우, 그리고 더 높은 수준의 프로토콜에서 여러 언어를 보고하는 경우, 노드의 언어는 알 수 없으며, 해당 언어 태그는 빈 문자열입니다.

결과 값이 인식되지 않는 언어 태그인 경우, 이는 주어진 언어 태그를 가진 알 수 없는 언어로 처리되어야 하며, 다른 모든 언어와 구분됩니다. 라운드트립이나 언어 태그를 기대하는 다른 서비스와의 통신을 위해, 사용자 에이전트는 알려지지 않은 언어 태그를 수정하지 않고 그대로 전달하고, BCP 47 언어 태그로 태그를 지정해야 하며, 이를 통해 이후 서비스가 데이터를 다른 유형의 언어 설명으로 해석하지 않도록 해야 합니다. [BCP47]

따라서, 예를 들어, lang="xyzzy"가 있는 요소는 선택자 :lang(xyzzy)(예: CSS)로 일치되지만, :lang(abcde)로는 일치하지 않습니다. 둘 다 똑같이 잘못되었더라도 말입니다. 마찬가지로, 웹 브라우저와 스크린 리더가 협력하여 요소의 언어를 전달하는 경우, 브라우저는 해당 언어가 잘못되었음을 알고 있더라도 스크린 리더에 "xyzzy" 언어로 알려주어야 합니다. 다른 구문으로 언어 이름을 인코딩할 수 있는 BCP 47 이외의 구문을 지원하는 스크린 리더가 있으며, 그 다른 구문에서 "xyzzy" 문자열이 벨라루스어를 나타내는 방법이라면, 벨라루스어로 텍스트를 처리하기 시작하는 것은 **잘못된** 일입니다. BCP 47 코드에서 벨라루스어는 "be" 코드로 설명되기 때문입니다.

결과 값이 빈 문자열인 경우, 노드의 언어가 명시적으로 알 수 없음을 의미하는 것으로 해석해야 합니다.


사용자 에이전트는 요소의 언어를 사용하여 적절한 처리나 렌더링(예: 적절한 글꼴이나 발음 선택, 사전 선택 또는 날짜 선택기와 같은 폼 컨트롤의 사용자 인터페이스)을 결정할 수 있습니다.

3.2.6.3 translate 속성

Global_attributes/translate

모든 현재 엔진에서 지원됩니다.

Firefox111+Safari6+Chrome19+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

translate 속성은 요소의 속성 값과 그 Text 노드 자식들이 페이지가 지역화될 때 번역되어야 하는지, 아니면 변경하지 않고 그대로 둘 것인지를 지정하는 데 사용됩니다. 이것은 다음의 키워드와 상태를 가지는 열거형 속성입니다:

키워드 상태 간단한 설명
yes 번역 모드번역 활성화됨 상태로 설정합니다.
no 아니오 번역 모드번역 안 함 상태로 설정합니다.

이 속성의 값 누락 기본값잘못된 값 기본값은 모두 상속 상태이고, 빈 값 기본값 상태입니다.

각 요소(HTML이 아닌 요소도 포함)는 번역 모드를 가지며, 번역 활성화됨 상태 또는 번역 안 함 상태 중 하나입니다. HTML 요소translate 속성이 상태인 경우, 해당 요소의 번역 모드번역 활성화됨 상태입니다. 그렇지 않고, 요소의 translate 속성이 아니오 상태인 경우, 해당 요소의 번역 모드번역 안 함 상태입니다. 그렇지 않은 경우, 요소의 translate 속성이 상속 상태이거나, 요소가 HTML 요소가 아니어서 translate 속성이 없는 경우에는, 해당 요소의 번역 모드는 부모 요소(parent element)의 상태와 같으며, 만약 부모 요소(parent element)가 null인 경우에는 번역 활성화됨 상태가 됩니다.

요소가 번역 가능 상태에 있으면, 페이지가 로컬라이즈될 때 요소의 번역 가능한 속성텍스트 노드 자식들의 값이 번역됩니다.

요소가 번역하지 않음 상태에 있으면, 페이지가 로컬라이즈될 때 요소의 속성 값과 텍스트 노드 자식들의 값은 그대로 유지됩니다. 예를 들어, 요소에 사람의 이름이나 컴퓨터 프로그램의 이름이 포함된 경우입니다.

다음 속성들은 번역 가능한 속성입니다:

다른 명세서에서는 번역 가능한 속성으로 정의될 수 있는 다른 속성들을 정의할 수 있습니다. 예를 들어, ARIAaria-label 속성을 번역 가능으로 정의할 수 있습니다.


translate IDL 속성은 가져올 때, 요소의 번역 모드번역 가능 상태인 경우 true를 반환하고, 그렇지 않은 경우 false를 반환해야 합니다. 설정할 때, 콘텐츠 속성의 값을 새 값이 true인 경우 "yes"로, 그렇지 않은 경우 "no"로 설정해야 합니다.

이 예제에서는 페이지가 로컬라이즈될 때 문서의 모든 내용이 번역되어야 하지만, 샘플 키보드 입력과 샘플 프로그램 출력은 번역되지 않아야 합니다:

<!DOCTYPE HTML>
<html lang=en> <!-- default on the document element is translate=yes -->
 <head>
  <title>The Bee Game</title> <!-- implied translate=yes inherited from ancestors -->
 </head>
 <body>
  <p>The Bee Game is a text adventure game in English.</p>
  <p>When the game launches, the first thing you should do is type
  <kbd translate=no>eat honey</kbd>. The game will respond with:</p>
  <pre><samp translate=no>Yum yum! That was some good honey!</samp></pre>
 </body>
</html>
3.2.6.4 dir 속성

Global_attributes/dir

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

dir 속성은 열거형 속성이며 다음과 같은 키워드와 상태가 있습니다:

키워드 상태 간단한 설명
ltr LTR 요소의 내용이 명시적으로 좌에서 우로 방향이 고립된 텍스트입니다.
rtl RTL 요소의 내용이 명시적으로 우에서 좌로 방향이 고립된 텍스트입니다.
auto Auto 요소의 내용이 명시적으로 방향이 고립된 텍스트이지만, 방향은 요소의 내용을 사용하여 프로그래밍 방식으로 결정됩니다 (아래에 설명되어 있습니다).

Auto 상태에서 사용되는 휴리스틱은 매우 단순합니다 (양방향 알고리즘에서 단락 수준 결정과 유사하게 강한 방향성을 가진 첫 번째 문자를 참조합니다). 작성자는 텍스트의 방향이 정말로 알려지지 않았고 더 나은 서버 측 휴리스틱을 적용할 수 없을 때만 이 값을 최후의 수단으로 사용하는 것이 좋습니다. [BIDI]

textareapre 요소의 경우, 휴리스틱은 단락 수준에서 적용됩니다.

이 속성의 누락된 값 기본값잘못된 값 기본값은 모두 Undefined 상태입니다.


요소(HTML 요소뿐만 아니라 HTML 요소)의 방향성은 'ltr' 또는 'rtl' 중 하나입니다. 요소 element에 대해 방향성을 계산하려면 elementdir 속성 상태를 기반으로 합니다:

LTR

'ltr'을 반환합니다.

RTL

'rtl'을 반환합니다.

Auto
  1. result자동 방향성인지 확인합니다.

  2. result가 null이면 'ltr'을 반환합니다.

  3. result를 반환합니다.

Undefined
elementbdi 요소인 경우
  1. result자동 방향성인지 확인합니다.

  2. result가 null이면 'ltr'을 반환합니다.

  3. result를 반환합니다.

elementinput 요소이며 type 속성이 전화 상태에 있는 경우

'ltr'을 반환합니다.

그 외의 경우

element부모 방향성을 반환합니다.

dir 속성은 HTML 요소에 대해서만 정의되므로 다른 네임스페이스의 요소에는 존재할 수 없습니다. 따라서 다른 네임스페이스의 요소는 항상 부모 방향성을 사용하게 됩니다.

자동 방향성 양식 연관 요소는 다음과 같습니다:

요소 element에 대한 자동 방향성을 계산하려면:

  1. element자동 방향성 양식 관련 요소인 경우:

    1. element에 AL 또는 R 유형의 이중 방향 문자 유형이 포함되어 있고, 요소의 에서 그 앞에 L 유형 문자가 없는 경우 'rtl'을 반환합니다. [BIDI]

    2. element이 빈 문자열이 아닌 경우 'ltr'을 반환합니다.

    3. null을 반환합니다.

  2. elementslot 요소이고, rootshadow root이며 element할당된 노드가 비어 있지 않은 경우:

    1. 노드 child에 대해 element할당된 노드 중:

      1. childDirection을 null로 설정합니다.

      2. childText 노드인 경우, childDirection텍스트 노드 방향성으로 설정합니다.

      3. 그 외의 경우:

        1. 확인: childElement 노드입니다.

        2. childDirectionchild포함된 텍스트 자동 방향성으로 설정하고, canExcludeRoot을 true로 설정합니다.

      4. childDirection이 null이 아닌 경우, childDirection을 반환합니다.

    2. null을 반환합니다.

  3. element포함된 텍스트 자동 방향성을 반환합니다. canExcludeRoot가 false로 설정된 경우.

element포함된 텍스트 자동 방향성을 계산하려면, canExcludeRoot라는 불리언 값을 사용합니다:

  1. 노드 descendant에 대해 element하위 요소에서 트리 순서대로:

    1. 다음 중 하나인 경우

      • descendant
      • descendant의 모든 상위 요소 중 element의 하위 요소
      • canExcludeRoot가 true인 경우, element

      다음 중 하나인 경우:

      그렇다면 계속.

    2. descendantslot 요소이고, 그 rootshadow root인 경우, 해당 shadow root의 방향성을 반환합니다. shadow roothost.

    3. descendantText 노드가 아닌 경우, 계속.

    4. descendant텍스트 노드 방향성result로 설정합니다.

    5. result가 null이 아닌 경우, result를 반환합니다.

  2. null을 반환합니다.

텍스트 노드 text텍스트 노드 방향성을 계산하려면:

  1. text데이터에 이중 방향 문자 유형이 L, AL, 또는 R인 코드 포인트가 포함되어 있지 않으면 null을 반환합니다. [BIDI]

  2. text데이터에서 이중 방향 문자 유형이 L, AL, 또는 R인 첫 번째 코드 포인트를 codePoint로 설정합니다.

  3. codePoint가 AL 또는 R 유형의 이중 방향 문자 유형이면 'rtl'을 반환합니다.

  4. codePoint가 L 유형의 이중 방향 문자 유형이면 'ltr'을 반환합니다.

element부모 방향성을 계산하려면:

  1. element의 부모 노드 parentNode를 설정합니다.

  2. parentNodeshadow root인 경우, parentNode방향성을 반환합니다. parentNodehost.

  3. parentNode가 요소인 경우, parentNode방향성을 반환합니다.

  4. 'ltr'을 반환합니다.

이 속성은 양방향 알고리즘과 관련된 렌더링 요구 사항을 포함합니다.


어떤 HTML 요소속성의 방향성은 텍스트가 렌더링에 포함될 때 사용되며, 다음 목록에서 첫 번째 적절한 단계를 기준으로 결정됩니다:

속성이 방향성 지원 속성이고, 요소의 dir 속성이 Auto 상태에 있는 경우

속성 값의 논리 순서에서 양방향 문자 유형이 L, AL 또는 R인 첫 번째 문자를 찾습니다. [BIDI]

이러한 문자가 발견되었고 그것이 양방향 문자 유형 AL 또는 R인 경우, 속성의 방향성은 'rtl'입니다.

그 외의 경우, 속성의 방향성은 'ltr'입니다.

그 외의 경우

속성의 방향성요소의 방향성과 동일합니다.

다음 속성들은 방향성 지원 속성입니다:


document.dir [ = value ]

html 요소의 dir 속성 값이 반환됩니다.

ltr, rtl, 또는 auto를 설정하여 html 요소의 dir 속성 값을 변경할 수 있습니다.

해당 요소가 없으면 빈 문자열을 반환하고 새 값을 무시합니다.

HTMLElement/dir

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

dir IDL 속성은 해당 요소의 dir 내용 속성을 반영해야 하며, 알려진 값만으로 제한됩니다.

Document/dir

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari10.1+Chrome64+
Opera51+Edge79+
Edge (Legacy)12+Internet Explorer5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android47+

dir IDL 속성은 Document 객체의 dir 내용 속성을 반영해야 하며, 알려진 값만으로 제한됩니다. 해당 요소가 없으면 속성은 빈 문자열을 반환하고 설정 시 아무것도 하지 않아야 합니다.

작성자는 CSS를 사용하는 대신 dir 속성을 사용하여 텍스트 방향을 표시하는 것이 권장됩니다. 이렇게 하면 CSS가 없는 경우에도 (예: 검색 엔진에 의해 해석될 때) 문서가 올바르게 렌더링됩니다.

이 마크업 조각은 IM 대화의 일부입니다.

<p dir=auto class="u1"><b><bdi>Student</bdi>:</b> How do you write "What's your name?" in Arabic?</p>
<p dir=auto class="u2"><b><bdi>Teacher</bdi>:</b> ما اسمك؟</p>
<p dir=auto class="u1"><b><bdi>Student</bdi>:</b> Thanks.</p>
<p dir=auto class="u2"><b><bdi>Teacher</bdi>:</b> That's written "شكرًا".</p>
<p dir=auto class="u2"><b><bdi>Teacher</bdi>:</b> Do you know how to write "Please"?</p>
<p dir=auto class="u1"><b><bdi>Student</bdi>:</b> "من فضلك", right?</p>

적절한 스타일 시트와 p 요소에 대한 기본 정렬 스타일, 즉 단락의 시작 가장자리에 텍스트를 정렬하는 스타일을 사용하면, 렌더링 결과는 다음과 같이 될 수 있습니다:

각 단락은 별도의 블록으로 렌더링되며, 첫 번째 단락과 마지막 단락을 제외하고는 단락이 왼쪽에 정렬되고, 마지막 단락은 오른쪽에 정렬됩니다. 사용자 이름('Student'와 'Teacher'가 이 예시에서 사용됨)은 오른쪽에 배치되며, 콜론이 왼쪽에 위치하고, 텍스트는 그 왼쪽에서 시작됩니다.

앞서 언급한 것처럼, auto 값이 만능은 아닙니다. 이 예시에서 마지막 단락은 아랍어 문자로 시작하기 때문에 오른쪽에서 왼쪽으로 쓰여진 텍스트로 오해되어 "right?"가 아랍어 텍스트의 왼쪽에 위치하게 됩니다.

3.2.6.5 style 속성

Global_attributes/style

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

모든 HTML 요소에는 style 내용 속성이 설정될 수 있습니다. 이는 스타일 속성으로, CSS Style Attributes에 정의되어 있습니다. [CSSATTR]

CSS를 지원하는 사용자 에이전트에서는, 속성이 추가되거나 값이 변경될 때, 스타일 속성에 대한 규칙에 따라 속성의 값을 파싱해야 합니다. [CSSATTR]

그러나, 속성의 콘텐츠 보안 정책에 의해 요소의 인라인 동작이 차단되어야 하는지 여부 알고리즘이 속성의 요소에 대해 "Blocked"를 반환하는 경우, 속성의 값에 정의된 스타일 규칙은 해당 요소에 적용되지 않아야 합니다. [CSP]

어떠한 요소에 style 속성을 사용하는 문서라도, 해당 속성이 제거된 경우에도 문서는 이해 가능하고 사용할 수 있어야 합니다.

특히, 콘텐츠를 숨기거나 표시하기 위해 또는 문서에 포함되지 않은 의미를 전달하기 위해 style 속성을 사용하는 것은 비표준입니다. (콘텐츠를 숨기거나 표시하려면 hidden 속성을 사용합니다.)


element.style

해당 요소의 CSSStyleDeclaration 객체를 반환합니다.

style IDL 속성은 CSS Object Model에 정의되어 있습니다. [CSSOM]

다음 예제에서 색상을 나타내는 단어들은 span 요소와 style 속성을 사용하여 시각적 매체에서 관련 색상으로 표시되도록 마크업되었습니다.

<p>My sweat suit is <span style="color: green; background:
transparent">green</span> and my eyes are <span style="color: blue;
background: transparent">blue</span>.</p>
3.2.6.6 data-* 속성을 사용하여비가시적 데이터를 포함하기

Global_attributes/data-*

모든 현재 엔진에서 지원됩니다.

Firefox6+Safari5.1+Chrome7+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

사용자 정의 데이터 속성은 네임스페이스가 없는 속성으로, 이름이 "data-" 문자열로 시작하고, 하이픈 뒤에 최소한 한 글자가 있으며, 유효한 속성 지역 이름이고, ASCII 대문자 알파벳을 포함하지 않는 속성입니다.

HTML 요소의 모든 속성 이름은 HTML 문서에서 자동으로 ASCII 소문자로 변환되므로, 이 규칙은 그러한 문서에 영향을 미치지 않습니다.

사용자 정의 데이터 속성은 페이지나 애플리케이션에 적절한 속성이나 요소가 없는 경우에만 사용자 정의 데이터, 상태, 주석 등을 저장하기 위해 의도되었습니다.

이러한 속성은 속성을 사용하는 사이트의 관리자가 알지 못하는 소프트웨어가 사용하는 것을 의도하지 않았습니다. 여러 독립적인 도구가 사용하는 일반적인 확장 기능의 경우, 이 사양이 기능을 명시적으로 제공하도록 확장되거나 마이크로데이터와 같은 기술(표준화된 어휘와 함께)을 사용해야 합니다.

예를 들어, 음악에 대한 사이트는 앨범의 트랙을 나타내는 목록 항목을 사용자 정의 데이터 속성으로 주석을 달아 각 트랙의 길이를 포함할 수 있습니다. 이 정보는 사이트 자체에서 트랙 길이로 목록을 정렬하거나 특정 길이의 트랙을 필터링하는 데 사용할 수 있습니다.

<ol>
     <li data-length="2m11s">Beyond The Sea</li>
     ...
    </ol>

그러나, 사용자가 해당 음악 사이트와 관련이 없는 일반 소프트웨어를 사용하여 이 데이터를 통해 특정 길이의 트랙을 검색하는 것은 부적절합니다.

이 속성들은 사이트 자체의 스크립트에서 사용하기 위한 것이며, 공용 메타데이터를 위한 일반 확장 메커니즘이 아닙니다.

유사하게, 페이지 작성자는 자신이 사용하려는 번역 도구에 대한 정보를 제공하는 마크업을 작성할 수 있습니다:

<p>The third <span data-mytrans-de="Anspruch">claim</span> covers the case of <span
    translate="no">HTML</span> markup.</p>

이 예에서 "data-mytrans-de" 속성은 MyTrans 제품이 "claim"이라는 문구를 독일어로 번역할 때 사용할 특정 텍스트를 제공합니다. 그러나, 모든 언어에서 "HTML"은 변경되지 않도록 translate 표준 속성이 사용됩니다. 표준 속성이 제공될 때는 사용자 정의 데이터 속성을 사용할 필요가 없습니다.

이 예에서, 사용자 정의 데이터 속성은 PaymentRequest에 대한 기능 검출 결과를 저장하는 데 사용됩니다. 이는 체크아웃 페이지를 다르게 스타일링하기 위해 CSS에서 사용될 수 있습니다.

<script>
     if ('PaymentRequest' in window) {
       document.documentElement.dataset.hasPaymentRequest = '';
     }
    </script>

여기서 "data-has-payment-request" 속성은 효과적으로 불리언 속성으로 사용됩니다. 속성의 존재를 확인하는 것만으로도 충분합니다. 그러나 작성자가 원한다면 나중에 일부 값을 포함시켜 기능의 제한된 기능을 나타낼 수 있습니다.

모든 HTML 요소는 임의의 값으로 사용자 정의 데이터 속성을 지정할 수 있습니다.

작성자는 이러한 확장을 설계할 때 속성이 무시되고 관련 CSS가 제거되더라도 페이지가 여전히 사용 가능하도록 신중하게 설계해야 합니다.

사용자 에이전트는 이러한 속성이나 값에서 구현 동작을 파생해서는 안 됩니다. 사용자 에이전트를 위한 사양에서는 이러한 속성이 의미 있는 값을 갖도록 정의해서는 안 됩니다.

JavaScript 라이브러리는 페이지의 일부로 간주되므로 사용자 정의 데이터 속성을 사용할 수 있습니다. 많은 작성자가 재사용하는 라이브러리 작성자는 충돌 위험을 줄이기 위해 속성 이름에 자신의 이름을 포함하는 것이 좋습니다. 적절한 경우, 라이브러리 작성자는 또한 속성 이름에 사용되는 정확한 이름을 사용자 정의할 수 있는 API를 제공하는 것이 좋습니다. 이렇게 하면 라이브러리 작성자가 모르게 동일한 이름을 선택한 경우 동일한 페이지에서 라이브러리를 사용할 수 있으며, 상호 호환되지 않는 경우에도 특정 라이브러리의 여러 버전을 동일한 페이지에서 사용할 수 있습니다.

예를 들어, "DoQuery"라는 라이브러리는 data-doquery-range와 같은 속성 이름을 사용할 수 있으며, "jJo"라는 라이브러리는 data-jjo-range와 같은 속성 이름을 사용할 수 있습니다. jJo 라이브러리는 또한 J.setDataPrefix('j2')와 같이 속성 이름에 사용할 접두사를 설정하는 API를 제공하여 data-j2-range와 같은 이름을 갖게 할 수 있습니다.


element.dataset

HTMLElement/dataset

모든 현재 엔진에서 지원됨.

Firefox6+Safari5.1+Chrome7+
Opera11+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android11+

SVGElement/dataset

모든 현재 엔진에서 지원됨.

Firefox51+Safari5.1+Chrome55+
Opera41+Edge79+
Edge (Legacy)17+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android41+

요소의 DOMStringMap 객체를 반환합니다.

하이픈으로 연결된 이름은 camel-case로 변환됩니다. 예를 들어, data-foo-bar=""element.dataset.fooBar로 변환됩니다.

dataset IDL 속성은 요소의 모든 data-* 속성에 대해 편리한 접근자를 제공합니다. 가져올 때, dataset IDL 속성은 이 요소와 연결된 DOMStringMap을 반환해야 합니다.

DOMStringMap 인터페이스는 dataset 속성에 사용됩니다. 각 DOMStringMap에는 연결된 요소가 있습니다.

[Exposed=Window,
     LegacyOverrideBuiltIns]
    interface DOMStringMap {
      getter DOMString (DOMString name);
      [CEReactions] setter undefined (DOMString name, DOMString value);
      [CEReactions] deleter undefined (DOMString name);
    };

DOMStringMap의 이름-값 쌍을 가져오기 위해 다음 알고리즘을 실행합니다:

  1. list를 빈 이름-값 쌍 목록으로 설정합니다.

  2. 연결된 요소의 첫 다섯 문자가 "data-"이고, 나머지 문자가 ASCII 대문자를 포함하지 않는 각 내용 속성에 대해, list에 이름-값 쌍을 추가합니다. 이 때 이름은 속성의 이름에서 첫 다섯 문자를 제거한 것이며, 값은 속성의 값입니다.

  3. list에 있는 각 이름에 대해, 이름의 U+002D 하이픈-마이너스 문자(-) 뒤에 ASCII 소문자가 따라오는 경우, U+002D 하이픈-마이너스 문자(-)를 제거하고 뒤따르는 문자를 동일한 문자로 ASCII 대문자로 변환합니다.

  4. list를 반환합니다.

DOMStringMap 객체의 지원되는 속성 이름은 언제나 이 시점에서 DOMStringMap의 이름-값 쌍을 가져올 때 반환된 이름 목록입니다.

이름이 지정된 속성의 값을 결정하려면 nameDOMStringMap에서 반환된 DOMStringMap의 이름-값 쌍을 가져와 이름 구성 요소가 name인 쌍의 값 구성 요소를 반환합니다.

새 이름이 지정된 속성의 값을 설정하려면 또는 기존 이름이 지정된 속성의 값을 설정하려면 name과 새로운 값 value를 가지고 다음 단계를 실행합니다:

  1. name에 U+002D 하이픈-마이너스 문자(-) 뒤에 ASCII 소문자가 포함되어 있으면, "SyntaxError" DOMException을 발생시킵니다.

  2. name의 각 ASCII 대문자 앞에 U+002D 하이픈-마이너스 문자(-)를 삽입하고, 문자를 동일한 문자로 ASCII 소문자로 변환합니다.

  3. name의 앞에 "data-" 문자열을 삽입합니다.

  4. name이(가) 유효한 속성 지역 이름이 아니라면, "InvalidCharacterError" DOMException을(를) 발생시킵니다.

  5. 속성 값을 설정합니다 DOMStringMap연결된 요소namevalue를 사용합니다.

기존 명명된 프로퍼티를 삭제하려면 nameDOMStringMap에서 다음 단계를 수행하십시오:

  1. name에 있는 각 ASCII 대문자 알파벳 앞에 U+002D 하이픈(-) 문자를 삽입하고, 해당 문자를 동일한 문자로 ASCII 소문자로 변환하여 교체합니다.

  2. name 앞에 data- 문자열을 삽입합니다.

  3. 이름으로 속성을 제거합니다. nameDOMStringMap연결된 요소를 사용하여 수행합니다.

이 알고리즘은 DOMStringMap의 이름-값 쌍을 가져오는 이전 알고리즘에서 제공한 이름에 대해서만 Web IDL에 의해 호출됩니다. [WEBIDL]

웹 페이지에서 예를 들어 게임의 일부로서 요소가 우주선을 나타내려면 class 속성과 함께 data-* 속성을 사용해야 합니다:

<div class="spaceship" data-ship-id="92432"
    data-weapons="laser 2" data-shields="50%" data-x="30" data-y="10" data-z="90">
    <button class="fire"
        onclick="spaceships[this.parentNode.dataset.shipId].fire()">
Fire
</button>

하이픈이 있는 속성 이름이 API에서 카멜 케이스로 변환되는 방식을 주목하세요.

다음 조각과 유사한 구조의 요소가 있는 경우:

<img class="tower" id="tower5" data-x="12" data-y="5"
     data-ai="robotarget" data-hp="46" data-ability="flames"
     src="towers/rocket.png" alt="Rocket Tower">

...누군가는 첫 번째 인수로 처리할 요소를 받아들이는 splashDamage() 함수를 상상할 수 있습니다:

function splashDamage(node, x, y, damage) {
  if (node.classList.contains('tower') && // checking the 'class' attribute
      node.dataset.x == x && // reading the 'data-x' attribute
      node.dataset.y == y) { // reading the 'data-y' attribute
    var hp = parseInt(node.dataset.hp); // reading the 'data-hp' attribute
    hp = hp - damage;
    if (hp < 0) {
      hp = 0;
      node.dataset.ai = 'dead'; // setting the 'data-ai' attribute
      delete node.dataset.ability; // removing the 'data-ability' attribute
    }
    node.dataset.hp = hp; // setting the 'data-hp' attribute
  }
}

3.2.7 innerTextouterText 속성

HTMLElement/innerText

모든 최신 엔진에서 지원됨.

Firefox45+Safari1+Chrome1+
Opera9.6+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android1+Samsung Internet?Opera Android10.1+
element.innerText [ = value ]

요소의 "렌더링된" 텍스트 콘텐츠를 반환합니다.

지정된 값으로 요소의 자식을 대체할 수 있지만, 줄 바꿈은 br 요소로 변환됩니다.

element.outerText [ = value ]

요소의 "렌더링된" 텍스트 콘텐츠를 반환합니다.

지정된 값으로 요소를 대체할 수 있지만, 줄 바꿈은 br 요소로 변환됩니다.

HTMLElement element를 주어진 텍스트 가져오기 단계는 다음과 같습니다:

  1. element렌더링되지 않는 경우 또는 사용자 에이전트가 비CSS 사용자 에이전트인 경우, element하위 텍스트 콘텐츠를 반환합니다.

    이 단계는 예상치 못한 결과를 초래할 수 있습니다. 예를 들어, innerText getter가 렌더링되지 않은 요소에서 호출되면 텍스트 콘텐츠가 반환되지만, 렌더링된 요소에서 호출되면 렌더링되지 않은 모든 자식 요소의 텍스트 콘텐츠는 무시됩니다.

  2. results를 새로 비어있는 목록으로 만듭니다.

  3. element의 각 자식 노드 node에 대해:

    1. current목록으로 설정하고, node에 대해 렌더링된 텍스트 수집 단계를 실행한 결과로 설정합니다. results의 각 항목은 문자열이거나 양의 정수(필수 줄 바꿈 수)입니다.

      직관적으로, 필수 줄 바꿈 수 항목은 해당 지점에 특정 수의 줄 바꿈이 나타남을 의미하지만, 인접한 필수 줄 바꿈 수 항목에 의해 유도된 줄 바꿈과 함께 축소될 수 있습니다. 이는 CSS의 여백 축소와 유사합니다.

    2. current의 각 항목 itemresults에 추가합니다.

  4. 비어있는 문자열 항목을 results에서 제거합니다.

  5. 연속된 필수 줄 바꿈 수 항목을 results의 시작이나 끝에서 제거합니다.

  6. 남아있는 연속된 필수 줄 바꿈 수 항목을 해당 항목의 값의 최대값만큼의 U+000A LF 코드 포인트로 이루어진 문자열로 대체합니다.

  7. results의 문자열 항목을 연결하여 반환합니다.

HTMLElement/outerText

모든 최신 엔진에서 지원됩니다.

Firefox98+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android1+Samsung Internet?Opera Android12.1+

innerTextouterText getter 단계는 텍스트 가져오기 단계this로 실행한 결과를 반환하는 것입니다.

주어진 렌더링된 텍스트 수집 단계에서 노드 node는 다음과 같습니다:

  1. node의 각 자식 노드에 대해 렌더링된 텍스트 수집 단계를 실행하여 items를 설정하고, node의 각 자식 노드에서 트리 순서로 실행된 결과를 연결하여 단일 목록으로 설정합니다.

  2. node계산된 값'visibility'가 'visible'이 아닌 경우 items를 반환합니다.

  3. node렌더링되지 않는 경우 items를 반환합니다. 이 단계의 목적은 계산된 값'display' 속성이 'none'이 아닌 경우, 다음과 같은 요소들이 설명된 대로 동작해야 합니다:

    • select 요소는 연관된 교체되지 않은 인라인 CSS 박스를 가지며, 자식 박스에는 optgroupoption 요소의 자손 노드만 포함됩니다;

    • optgroup 요소는 연관된 교체되지 않은 블록 수준 CSS 박스를 가지며, 자식 박스에는 option 요소의 자손 노드만 포함됩니다; 그리고

    • option 요소는 연관된 교체되지 않은 블록 수준 CSS 박스를 가지며, 자식 박스는 교체되지 않은 블록 수준 CSS 박스의 일반적인 경우와 같습니다.

    items는 'display:contents'로 인해 비어있지 않을 수 있습니다.

  4. node텍스트 노드인 경우, 콘텐츠 순서에 따라 node가 생성한 각 CSS 텍스트 박스에 대해 CSS 'white-space' 처리 규칙과 'text-transform' 규칙이 적용된 후의 텍스트를 계산하고, items를 해당 문자열 목록으로 설정한 후 items를 반환합니다. CSS 'white-space' 처리 규칙은 약간 수정되었습니다: 줄 끝의 축소 가능한 공백은 항상 축소되지만, 줄이 블록의 마지막 줄이거나 br 요소로 끝날 때만 제거됩니다. 소프트 하이픈은 유지되어야 합니다. [CSSTEXT]

  5. nodebr 요소인 경우, 단일 U+000A LF 코드 포인트가 포함된 문자열을 items에 추가합니다.

  6. node계산된 값'display' 속성이 'table-cell'이고, nodeCSS 박스가 포함하는 'table-row' 박스의 마지막 'table-cell' 박스가 아닌 경우, 단일 U+0009 TAB 코드 포인트가 포함된 문자열을 items에 추가합니다.

  7. node계산된 값'display' 속성이 'table-row'이고, nodeCSS 박스가 포함하는 가장 가까운 조상 'table' 박스의 마지막 'table-row' 박스가 아닌 경우, 단일 U+000A LF 코드 포인트가 포함된 문자열을 items에 추가합니다.

  8. nodep 요소인 경우, items의 시작과 끝에 2(필수 줄 바꿈 수)를 추가합니다.

  9. node사용된 값'display' 속성이 블록 수준 또는 'table-caption'인 경우, items의 시작과 끝에 1(필수 줄 바꿈 수)을 추가합니다. [CSSDISPLAY]

    부동 요소와 절대 위치 요소는 이 범주에 속합니다.

  10. items를 반환합니다.

대부분의 대체 요소(예: textarea, input, videobutton은 제외)의 하위 노드는 엄밀히 말하면 CSS에 의해 렌더링되지 않으며, 따라서 이 알고리즘의 목적을 위해 CSS 상자가 없습니다.

이 알고리즘은 범위에서 작동하도록 일반화될 수 있습니다. 그런 다음 이를 Selection의 문자열화기 및 범위에 직접 노출시키는 기반으로 사용할 수 있습니다. Bugzilla 버그 10583를 참조합니다.


HTMLElement element와 문자열 value가 주어진 경우, inner text 설정 단계는 다음과 같습니다:

  1. fragmentvalue에 대한 렌더링된 텍스트 조각으로 설정하고, element노드 문서를 사용합니다.

  2. element 내에서 fragment모두 교체합니다.

innerText setter 단계는 inner text 설정 단계를 실행하는 것입니다.

outerText setter 단계는 다음과 같습니다:

  1. this의 부모가 null인 경우, "NoModificationAllowedError" DOMException을 던집니다.

  2. nextthis다음 형제로 설정합니다.

  3. previousthis이전 형제로 설정합니다.

  4. fragment를 주어진 값에 대한 렌더링된 텍스트 조각으로, this노드 문서를 기준으로 설정합니다.

  5. fragment자식이 없는 경우, fragment에 빈 문자열을 가진 새 Text 노드를 추가합니다. 노드 문서는 this노드 문서입니다.

  6. 모두 교체 this의 부모 내에서 fragmentthis로 설정합니다.

  7. next가 null이 아니고 next이전 형제Text 노드인 경우, 다음 텍스트 노드와 병합합니다.

  8. previousText 노드인 경우, 다음 텍스트 노드와 병합합니다.

렌더링된 텍스트 조각document 문서에 대해 주어진 문자열 input을 사용하여 다음 단계들을 실행한 결과입니다:

  1. fragmentdocument 문서를 가진 새로운 DocumentFragment로 설정합니다.

  2. positioninput에 대한 위치 변수로 설정하고, 초기에는 input의 시작을 가리키도록 합니다.

  3. text를 빈 문자열로 설정합니다.

  4. positioninput의 끝을 지나지 않을 때까지 다음을 반복합니다:

    1. U+000A LF 또는 U+000D CR이 아닌 코드 포인트의 시퀀스를 수집하고, 그 결과를 text로 설정합니다.

    2. text가 빈 문자열이 아닌 경우, document 문서의 새로운 Text 노드를 text를 가진 상태로 fragment추가합니다.

    3. positioninput의 끝을 지나지 않았고, position에서의 코드 포인트가 U+000A LF 또는 U+000D CR인 동안:

      1. position에서의 코드 포인트가 U+000D CR이고 다음 코드 포인트가 U+000A LF인 경우, positioninput의 다음 코드 포인트로 이동합니다.

      2. positioninput의 다음 코드 포인트로 이동합니다.

      3. fragmentdocument, "br" 및 HTML 네임스페이스를 사용하여 요소를 생성한 결과를 추가합니다.

  5. fragment를 반환합니다.

주어진 Text 노드 node를 사용하여 다음 텍스트 노드와 병합하는 방법:

  1. nextnode다음 형제로 설정합니다.

  2. nextText 노드가 아닌 경우, 작업을 중지합니다.

  3. 데이터를 대체하여, nodedata길이 0을 nextdata로 대체합니다.

  4. 삭제 next.

3.2.8 양방향 알고리즘과 관련된 요구사항

3.2.8.1 양방향 알고리즘 형식화 문자에 대한 작성 적합성 기준

텍스트 콘텐츠HTML 요소 내의 텍스트 노드에 포함될 수 있으며, 컨텐츠에 존재하며 자유 형식 텍스트를 허용하는 HTML 요소의 속성에서 U+202A에서 U+202E와 U+2066에서 U+2069 사이의 문자(양방향 알고리즘 형식화 문자)를 포함할 수 있습니다. [BIDI]

작성자는 dir 속성, bdo 요소, bdi 요소를 사용하는 것이 권장되며, 양방향 알고리즘 형식화 문자를 수동으로 관리하지 않는 것이 좋습니다. 양방향 알고리즘 형식화 문자는 CSS와 잘 어울리지 않습니다.

3.2.8.2 사용자 에이전트 적합성 기준

사용자 에이전트는 문서 및 문서의 일부를 렌더링할 때 올바른 문자 순서를 결정하기 위해 유니코드 양방향 알고리즘을 구현해야 합니다. [BIDI]

HTML을 유니코드 양방향 알고리즘에 매핑하는 작업은 세 가지 방법 중 하나로 수행되어야 합니다. 사용자 에이전트는 CSS를 구현해야 하며, 특히 CSS 'unicode-bidi', 'direction', 'content' 속성을 포함해야 하며, 사용자 에이전트 스타일 시트에 이 명세서의 렌더링 섹션에서 제공된 속성을 사용한 규칙이 포함되어 있어야 합니다. 또는, 사용자 에이전트는 문서에서 지정된 스타일 시트가 이를 재정의하지 않도록 하면서, 상기 언급된 속성들만 구현하고 상기 언급된 모든 규칙이 포함된 사용자 에이전트 스타일 시트가 있는 것처럼 작동해야 하며, 또는 사용자가 동일한 의미를 가진 다른 스타일 언어를 구현해야 합니다. [CSSGC]

다음 요소 및 속성에는 렌더링 섹션에서 정의된 요구사항이 있으며, 이 섹션의 요구사항에 따라 모든 사용자 에이전트에 적용됩니다(제안된 기본 렌더링을 지원하는 사용자 에이전트에만 적용되는 것이 아닙니다):

3.2.9 ARIA 및 플랫폼 접근성 API와 관련된 요구사항

HTML 요소에서 접근성 API 의미를 구현하기 위한 사용자 에이전트 요구사항은 HTML Accessibility API Mappings에 정의되어 있습니다. 여기서 제시된 규칙 외에도, 커스텀 요소 element의 기본 ARIA 역할 의미는 다음과 같이 결정됩니다: [HTMLAAM]

  1. mapelement내부 콘텐츠 속성 맵으로 설정합니다.

  2. 만약 map["role"]이 존재한다면 이를 반환합니다.

  3. 역할이 없음을 반환합니다.

유사하게, 커스텀 요소 element에 대해, stateOrProperty라는 상태 또는 속성의 기본 ARIA 상태 및 속성 의미는 다음과 같이 결정됩니다:

  1. 만약 element부착된 내부 요소가 null이 아니라면:

    1. 만약 element부착된 내부 요소stateOrProperty와 연관된 요소 가져오기가 존재한다면, 이를 실행한 결과를 반환합니다.

    2. 만약 element부착된 내부 요소stateOrProperty와 연관된 요소들 가져오기가 존재한다면, 이를 실행한 결과를 반환합니다.

  2. 만약 element내부 콘텐츠 속성 맵[stateOrProperty]이 존재한다면 이를 반환합니다.

  3. stateOrProperty의 기본값을 반환합니다.

여기서 언급된 "기본 의미"는 ARIA에서 가끔 "네이티브", "암시적", 또는 "호스트 언어" 의미라고도 불립니다. [ARIA]

이 정의의 한 가지 의미는 기본 의미가 시간이 지남에 따라 변경될 수 있다는 것입니다. 이는 커스텀 요소가 내장된 요소와 동일한 표현력을 가질 수 있도록 합니다. 예를 들어, a 요소의 기본 ARIA 역할 의미가 href 속성이 추가되거나 제거됨에 따라 변경되는 방식과 비교해 보십시오.

이 기능의 예를 보려면 커스텀 요소 섹션을 참조합니다.


HTML 요소에서 ARIA rolearia-* 속성 사용을 확인하기 위한 적합성 검사 요구사항은 ARIA in HTML에 정의되어 있습니다. [ARIAHTML]

4 HTML 요소

4.1 문서 요소

4.1.1 html 요소

Element/html

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLHtmlElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 컨텍스트:
문서의 문서 요소로서.
복합 문서에서 서브문서 조각이 허용되는 곳.
콘텐츠 모델:
head 요소 뒤에 body 요소가 옵니다.
text/html에서 태그 생략:
html 요소의 시작 태그html 요소 안에 있는 첫 번째 내용이 주석이 아닌 경우 생략할 수 있습니다.
html 요소의 종료 태그html 요소 바로 뒤에 주석이 오지 않는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLHtmlElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 또한 사용되지 않는 멤버도 포함되어 있습니다
};

html 요소는 HTML 문서의 루트를 나타냅니다.

작성자는 루트 html 요소에 문서의 언어를 제공하는 lang 속성을 지정하는 것이 권장됩니다. 이는 음성 합성 도구가 사용할 발음을 결정하는 데 도움이 되며, 번역 도구가 사용할 규칙을 결정하는 데에도 도움이 됩니다.

다음 예제의 html 요소는 문서의 언어가 영어임을 선언합니다.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Swapping Songs</title>
</head>
<body>
<h1>Swapping Songs</h1>
<p>Tonight I swapped some of the songs I wrote with some friends, who
gave me some of the songs they wrote. I love sharing my music.</p>
</body>
</html>

4.2 문서 메타데이터

4.2.1 head 요소

Element/head

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLHeadElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 컨텍스트:
html 요소의 첫 번째 요소로서.
콘텐츠 모델:
문서가 iframe srcdoc 문서이거나 상위 프로토콜에서 제목 정보가 제공되는 경우: 최대 하나의 title 요소와 최대 하나의 base 요소를 포함하는 하나 이상의 메타데이터 콘텐츠 요소.
그렇지 않은 경우: 하나 이상의 메타데이터 콘텐츠 요소가 있어야 하며, 이 중 하나는 title 요소이고, 최대 하나는 base 요소여야 합니다.
text/html에서 태그 생략:
head 요소의 시작 태그는 요소가 비어 있거나 head 요소 안의 첫 번째 내용이 요소인 경우 생략할 수 있습니다.
head 요소의 종료 태그head 요소 바로 뒤에 ASCII 공백 또는 주석이 오지 않는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLHeadElement : HTMLElement {
  [HTMLConstructor] constructor();
};

head 요소는 document에 대한 메타데이터 모음을 나타냅니다.

head 요소의 메타데이터 모음은 클 수도 있고 작을 수도 있습니다. 다음은 매우 짧은 예제입니다:

<!doctype html>
<html lang=en>
 <head>
  <title>A document with a short head</title>
 </head>
 <body>
 ...

다음은 더 긴 예제입니다:

<!DOCTYPE HTML>
<HTML LANG="EN">
 <HEAD>
  <META CHARSET="UTF-8">
  <BASE HREF="https://www.example.com/">
  <TITLE>An application with a long head</TITLE>
  <LINK REL="STYLESHEET" HREF="default.css">
  <LINK REL="STYLESHEET ALTERNATE" HREF="big.css" TITLE="Big Text">
  <SCRIPT SRC="support.js"></SCRIPT>
  <META NAME="APPLICATION-NAME" CONTENT="Long headed application">
 </HEAD>
 <BODY>
 ...

title 요소는 대부분의 상황에서 필수 자식 요소이지만, 상위 프로토콜이 제목 정보를 제공하는 경우, 예를 들어 HTML이 이메일 작성 형식으로 사용될 때 이메일의 제목 줄에서 title 요소를 생략할 수 있습니다.

4.2.2 title 요소

Element/title

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer1+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLTitleElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
메타데이터 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
다른 title 요소가 포함되지 않은 head 요소 안에서.
콘텐츠 모델:
텍스트, 단 요소 간 공백은 제외합니다.
text/html에서 태그 생략:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTitleElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] 속성 DOMString text;
};

title 요소는 문서의 제목 또는 이름을 나타냅니다. 작성자는 사용자의 기록, 북마크 또는 검색 결과와 같이 문서가 문맥에서 벗어났을 때에도 문서를 식별할 수 있는 제목을 사용해야 합니다. 문서의 제목은 종종 첫 번째 제목과 다릅니다. 첫 번째 제목은 문맥에서 벗어났을 때도 단독으로 존재할 필요가 없기 때문입니다.

문서당 하나 이상의 title 요소가 있어서는 안 됩니다.

문서에 제목이 없을 가능성이 있는 경우, Document에 대해 title 요소가 필요하지 않을 수 있습니다. 요소가 필요한 경우에 대한 설명은 head 요소의 콘텐츠 모델을 참조합니다.

title.text [ = value ]

요소의 자식 텍스트 콘텐츠를 반환합니다.

값을 설정하여 요소의 자식을 주어진 값으로 교체할 수 있습니다.

text 속성의 getter는 이 title 요소의 자식 텍스트 콘텐츠를 반환해야 합니다.

text 속성의 setter는 이 title 요소 내에서 주어진 값으로 모두 대체해야 합니다.

적절한 제목의 예와 같은 페이지에 사용될 수 있는 최상위 제목과의 대조를 아래에 설명합니다.

  <title>Introduction to The Mating Rituals of Bees</title>
...
  <h1>Introduction</h1>
  <p>This companion guide to the highly successful
  <cite>Introduction to Medieval Bee-Keeping</cite> book is...

다음 페이지는 동일한 사이트의 일부일 수 있습니다. 제목이 주제를 명확하게 설명하는 반면 첫 번째 제목은 독자가 상황을 알고 있다고 가정하고 있으며, 따라서 춤이 살사인지 왈츠인지 궁금해하지 않을 것이라는 점을 주목하십시오:

  <title>Dances used during bee mating rituals</title>
...
  <h1>The Dances</h1>

문서 제목으로 사용할 문자열은 document.title IDL 속성에서 제공합니다.

사용자 에이전트는 사용자 인터페이스에서 문서를 참조할 때 문서의 제목을 사용해야 합니다. title 요소의 내용이 이와 같이 사용될 때, 그 title 요소의 방향성을 사용하여 사용자 인터페이스에서 문서 제목의 방향성을 설정해야 합니다.

4.2.3 base 요소

요소/base

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLBaseElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
범주:
메타데이터 콘텐츠.
이 요소가 사용될 수 있는 문맥:
다른 base 요소가 없는 head 요소 내.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그 없음.
콘텐츠 속성:
전역 속성
href문서 기본 URL
target탐색 가능한 기본 대상 하이퍼링크 탐색폼 제출에 대해.
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLBaseElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectSetter] attribute USVString href;
  [CEReactions, Reflect] attribute DOMString target;
};

base 요소는 작성자가 문서 기본 URL을 지정하고, URL을 파싱하는 목적으로 사용하며, 기본적으로 탐색 가능한 대상으로 하이퍼링크를 따르는 것과 같은 작업을 수행할 때 사용합니다. 이 요소는 이 정보 외의 콘텐츠를 나타내지 않습니다.

문서당 하나의 base 요소만 존재해야 합니다.

base 요소는 href 속성, target 속성 또는 둘 다를 가져야 합니다.

href 콘텐츠 속성은, 지정된 경우, 공백으로 둘러싸일 수 있는 유효한 URL을 포함해야 합니다.

base 요소는 href 속성을 가지고 있는 경우, URL을 사용하는 것으로 정의된 속성을 가진 트리 내의 다른 어떤 요소보다 먼저 와야 합니다.

만약 href 속성을 가진 base 요소가 여러 개 있는 경우, 첫 번째 요소를 제외한 모든 요소는 무시됩니다.

target 속성은, 지정된 경우, 유효한 탐색 대상 이름 또는 키워드를 포함해야 하며, 이는 document 내에서 하이퍼링크탐색을 유발할 때 기본으로 사용할 탐색 가능 대상을 지정합니다.

base 요소는 target 속성을 가지고 있는 경우, 하이퍼링크를 나타내는 요소보다 앞에 와야 합니다.

여러 개의 base 요소에 target 속성이 있을 경우, 첫 번째를 제외한 모든 요소는 무시됩니다.

a, area 또는 요소 element 및 선택적 문자열 또는 null target(기본값 null)이 주어졌을 때, 요소의 target을 가져옵니다:

  1. 만약 target이 null이라면:

    1. elementtarget 속성을 가지고 있다면, target을 그 속성의 값으로 설정합니다.

    2. 그렇지 않으면, element노드 문서base 요소를 가지고 있고 target 속성을 가지고 있다면, target을 첫 번째 해당 base 요소의 target 속성 값으로 설정합니다.

  2. 만약 target이 null이 아니고 ASCII 탭 또는 개행 문자와 U+003C (<)을 포함하고 있다면, target을 "_blank"로 설정합니다.

  3. target을 반환합니다.


base 요소는 href 콘텐츠 속성을 가진 문서 트리의 첫 번째 base 요소인 경우 고정된 기본 URL을 가집니다. 고정된 기본 URL은 다음 상황 중 하나라도 발생할 때마다 요소에 대해 즉시 설정되어야 합니다:

동결된 기본 URL을 설정합니다 element에 대해:

  1. documentelement노드 문서로 설정합니다.

  2. urlRecorddocument파싱을 통해 elementhref 콘텐츠 속성 값을 document대체 기본 URLdocument문서 문자 인코딩과 함께

    (따라서 base 요소는 자체적으로 영향을 받지 않습니다.)

  3. 다음 중 하나가 참이면:

    element동결된 기본 URLdocument대체 기본 URL로 설정하고 반환합니다.

  4. element동결된 기본 URLurlRecord로 설정합니다.

  5. 기본 URL 변경에 대응document에 대해 수행합니다.

IDL 속성 href는, 가져올 때 다음 알고리즘을 실행하여 반환되어야 합니다:

  1. documentelement노드 문서로 설정합니다.

  2. url을, 이 요소가 href 속성을 가지고 있는 경우 해당 속성의 값으로, 그렇지 않은 경우에는 빈 문자열로 설정합니다.

  3. urlRecorddocument파싱을 통해 url대체 기본 URLdocument문서 문자 인코딩과 함께 파싱한 결과로 설정합니다.

    (따라서 base 요소는 다른 base 요소나 자체에 의해 영향을 받지 않습니다.)

  4. urlRecord이 실패인 경우, url을 반환합니다.

  5. urlRecord직렬화를 반환합니다.

이 예제에서 base 요소는 문서 기본 URL을 설정하는 데 사용됩니다:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>This is an example for the &lt;base&gt; element</title>
        <base href="https://www.example.com/news/index.html">
    </head>
    <body>
        <p>Visit the <a href="archives.html">archives</a>.</p>
    </body>
</html>

위 예제의 링크는 "https://www.example.com/news/archives.html"로 연결되는 링크가 될 것입니다.

Element/link

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLLinkElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLLinkElement/rel

Support in all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLLinkElement/relList

Support in all current engines.

Firefox30+Safari9+Chrome50+
Opera?Edge79+
Edge (Legacy)17+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
메타데이터 콘텐츠.
요소가 본문에서 허용되는 경우: 흐름 콘텐츠.
요소가 본문에서 허용되는 경우: 구문 콘텐츠.
이 요소를 사용할 수 있는 맥락:
메타데이터 콘텐츠가 예상되는 곳.
noscript 요소가 head 요소의 자식 요소인 경우.
요소가 본문에서 허용되는 경우: 구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그 없음.
콘텐츠 속성:
전역 속성
href하이퍼링크의 주소
crossorigin — 이 요소가 crossorigin 요청을 처리하는 방법
rel — 문서와 하이퍼링크 목적지 리소스 간의 관계
media — 적용 가능한 미디어
integrity서브리소스 무결성 검사에서 사용되는 무결성 메타데이터 [SRI]
hreflang — 링크된 리소스의 언어
type — 참조된 리소스의 유형에 대한 힌트
referrerpolicy — 이 요소가 시작한 참조 정책 페치에 대해
sizes — 아이콘의 크기 (rel="icon"일 때)
imagesrcset — 다양한 상황에서 사용할 이미지, 예를 들어 고해상도 디스플레이, 작은 모니터 등 (rel="preload"일 때)
imagesizes — 다양한 페이지 레이아웃에 대한 이미지 크기 (rel="preload"일 때)
as — 프리로드 요청에 대한 잠재적 목적지 (rel="preload" 및 rel="modulepreload"일 때)
blocking — 이 요소가 잠재적 렌더링 차단인지 여부
color — 사이트 아이콘을 사용자 정의할 때 사용할 색상 (rel="mask-icon"일 때)
disabled — 링크가 비활성화되었는지 여부
fetchpriority — 이 요소가 시작한 우선 순위 설정 페치에 대해
또한, 이 요소에서 title 속성 특수한 의미를 가집니다: 링크의 제목; CSS 스타일 시트 세트 이름
접근성 고려 사항:
작성자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLLinkElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString href;
  [CEReactions] attribute DOMString? crossOrigin;
  [CEReactions, Reflect] attribute DOMString rel;
  [CEReactions] attribute DOMString as;
  [SameObject, PutForwards=value, Reflect="rel"] readonly attribute DOMTokenList relList;
  [CEReactions, Reflect] attribute DOMString media;
  [CEReactions, Reflect] attribute DOMString integrity;
  [CEReactions, Reflect] attribute DOMString hreflang;
  [CEReactions, Reflect] attribute DOMString type;
  [SameObject, PutForwards=value, Reflect] readonly attribute DOMTokenList sizes;
  [CEReactions, Reflect] attribute USVString imageSrcset;
  [CEReactions, Reflect] attribute DOMString imageSizes;
  [CEReactions] attribute DOMString referrerPolicy;
  [SameObject, PutForwards=value, Reflect] readonly attribute DOMTokenList blocking;
  [CEReactions, Reflect] attribute boolean disabled;
  [CEReactions] attribute DOMString fetchPriority;

  // also has obsolete members
};
HTMLLinkElement includes LinkStyle;

link 요소는 작성자가 문서를 다른 리소스와 연결할 수 있게 해줍니다.

링크의 주소는 href 속성에 의해 제공됩니다. href 속성이 존재하는 경우, 그 값은 유효한 비어 있지 않은 URL(공백으로 둘러싸일 수 있음)이어야 합니다. href 속성이나 imagesrcset 속성 중 하나 또는 둘 다 존재해야 합니다.

href 속성과 imagesrcset 속성이 모두 없으면, 이 요소는 링크를 정의하지 않습니다.

지정된 링크 유형(관계)은 rel 속성의 값으로 제공되며, 이 속성이 존재하는 경우 그 값은 순서가 없는 고유한 공백으로 구분된 토큰 집합이어야 합니다. 허용된 키워드와 그 의미는 후속 섹션에서 정의됩니다. rel 속성이 없거나, 키워드가 없거나, 또는 사용된 키워드가 이 사양에 정의된 대로 허용되지 않는 경우, 이 요소는 링크를 생성하지 않습니다.

rel지원되는 토큰HTML 링크 유형에 정의된 키워드로, link 요소에서 허용되며, 처리 모델에 영향을 미치고 사용자 에이전트에서 지원됩니다. 가능한 지원되는 토큰alternate, dns-prefetch, expect, icon, manifest, modulepreload, next, pingback, preconnect, prefetch, preload, search, 그리고 stylesheet입니다. rel지원되는 토큰은 사용자 에이전트가 처리 모델을 구현하는 이 목록의 토큰만 포함해야 합니다.

이론적으로는 사용자 에이전트가 canonical 키워드에 대한 처리 모델을 지원할 수 있습니다. 만약 그 에이전트가 자바스크립트를 실행하는 검색 엔진이라면요. 하지만 실제로는 매우 드뭅니다. 따라서 대부분의 경우, canonicalrel지원되는 토큰에 포함되지 않아야 합니다.

link 요소는 rel 속성 또는 itemprop 속성을 가져야 하며, 둘 다 가져서는 안 됩니다.

link 요소에 itemprop 속성이 있거나, rel 속성에 body-ok 키워드만 포함되어 있는 경우, 이 요소는 본문에서 허용됨이라고 합니다. 이는 요소가 구문 콘텐츠가 예상되는 곳에 사용될 수 있음을 의미합니다.

rel 속성이 사용되는 경우, 이 요소는 페이지의 body에서 가끔만 사용할 수 있습니다. itemprop 속성이 사용되는 경우, 이 요소는 head 요소와 body 요소에서 모두 사용할 수 있으며, 이는 마이크로데이터 모델의 제약을 받습니다.


link 요소를 사용하여 두 가지 종류의 링크를 생성할 수 있습니다: 외부 리소스 링크하이퍼링크. 링크 유형 섹션에서는 특정 링크 유형 이 외부 리소스인지 하이퍼링크인지 정의합니다. 하나의 link 요소가 여러 개의 링크를 생성할 수 있으며(일부는 외부 리소스 링크일 수 있고, 일부는 하이퍼링크일 수 있음), 생성되는 링크의 정확한 종류와 수는 rel 속성에 제공된 키워드에 따라 다릅니다. 사용자 에이전트는 요소별로가 아니라 링크별로 링크를 처리해야 합니다.

link 요소에 대해 생성된 각 링크는 별도로 처리됩니다. 예를 들어, rel="stylesheet"가 있는 두 개의 link 요소가 있다면, 각각은 별개의 외부 리소스로 간주되며, 각 링크는 독립적으로 속성에 의해 영향을 받습니다. 마찬가지로, rel 속성이 next stylesheet 값을 가진 단일 link 요소는 next 키워드에 대한 하이퍼링크stylesheet 키워드에 대한 외부 리소스 링크를 생성하며, 이들은 다른 속성(media 또는 title와 같은)에 의해 다르게 영향을 받습니다.

예를 들어, 다음 link 요소는 두 개의 하이퍼링크(동일한 페이지로)를 생성합니다:

<link rel="author license" href="/about">

이 요소에 의해 생성된 두 개의 링크는 하나는 현재 페이지의 작성자에 대한 정보를 가지고 있다는 의미를 가지며, 다른 하나는 현재 페이지가 제공되는 라이선스에 대한 정보를 가지고 있다는 의미를 가집니다.

하이퍼링크link 요소와 그 rel 속성으로 생성된 경우 문서 전체에 적용됩니다. 이는 rel 속성이 aarea 요소에 사용되어 문서 내에서 링크의 위치에 따라 링크의 컨텍스트를 나타내는 것과 대조됩니다.

a 요소와 area 요소로 생성된 하이퍼링크와 달리, link 요소로 생성된 하이퍼링크는 기본적으로 사용자 에이전트가 제안된 기본 렌더링을 지원하는 경우 문서의 일부로 표시되지 않습니다. 그리고 CSS를 사용하여 강제로 표시하더라도 활성화 동작이 없습니다. 대신, 이들은 주로 페이지 또는 페이지의 콘텐츠를 소비하는 다른 소프트웨어에 의해 사용될 수 있는 의미론적 정보를 제공합니다. 추가적으로, 사용자 에이전트는 이러한 하이퍼링크를 따를 수 있는 UI를 제공할 수 있습니다.

외부 리소스 링크의 정확한 동작은 관련 링크 유형에 정의된 정확한 관계에 따라 달라집니다.


crossorigin 속성은 CORS 설정 속성입니다. 이는 외부 리소스 링크에서 사용하도록 설계되었습니다.

media 속성은 리소스가 적용되는 미디어를 지정합니다. 값은 유효한 미디어 쿼리 리스트이어야 합니다.

Subresource_Integrity

모든 현재 엔진에서 지원됩니다.

Firefox43+Safari11.1+Chrome45+
Opera?Edge79+
Edge (Legacy)17+Internet Explorer아니오
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

integrity 속성은 이 요소가 담당하는 요청에 대한 무결성 메타데이터를 나타냅니다. 값은 텍스트입니다. 이 속성은 rel 속성에 stylesheet, preload, 또는 modulepreload 키워드가 포함된 link 요소에서만 지정되어야 합니다. [SRI]

hreflang 속성은 link 요소에서 hreflang 속성이 a 요소에서 동일한 의미를 가집니다.

type 속성은 링크된 리소스의 MIME 유형을 제공합니다. 이는 순전히 권고사항입니다. 값은 유효한 MIME 유형 문자열이어야 합니다.

외부 리소스 링크의 경우, type 속성은 사용자 에이전트가 지원하지 않는 리소스를 가져오지 않도록 힌트를 제공하는 데 사용됩니다.

referrerpolicy 속성은 참조 정책 속성입니다. 이는 외부 리소스 링크에서 사용하도록 설계되었으며, 참조 정책을 설정하는 데 도움이 됩니다. [REFERRERPOLICY]

title 속성은 링크의 제목을 제공합니다. 하나의 예외를 제외하고는 순전히 권고사항입니다. 값은 텍스트입니다. 예외는 문서 트리에 포함된 스타일 시트 링크에 해당하며, 이 경우 title 속성은 CSS 스타일 시트 세트를 정의합니다.

title 속성은 대부분의 다른 요소에 대한 전역 title 속성과 달리 link 요소에서 링크에 제목이 없으면 상위 요소의 제목을 상속받지 않습니다. 단순히 제목이 없는 것입니다.


imagesrcset 속성은 존재할 수 있으며, srcset 속성입니다.

imagesrcsethref 속성(너비 설명자가 사용되지 않는 경우)은 함께 이미지 소스소스 세트에 기여합니다.

imagesrcset 속성이 존재하고 이미지 후보 문자열너비 설명자를 사용하는 것이 있는 경우, imagesizes 속성도 존재해야 하며, 이는 sizes 속성입니다. imagesizes 속성은 소스 크기소스 세트에 기여합니다.

imagesrcsetimagesizes 속성은 link 요소에서만 지정되어야 하며, rel 속성에 preload 키워드가 지정되어 있으며, "image" 상태에서 as 속성을 가지고 있어야 합니다.

이 속성들은 나중에 img 요소가 해당하는 srcsetsizes 속성 값을 가진 리소스를 미리 로드할 수 있도록 허용합니다:

<link rel="preload" as="image"
      imagesrcset="wolf_400px.jpg 400w, wolf_800px.jpg 800w, wolf_1600px.jpg 1600w"
      imagesizes="50vw">

<!-- ... later, or perhaps inserted dynamically ... -->
<img src="wolf.jpg" alt="A rad wolf"
     srcset="wolf_400px.jpg 400w, wolf_800px.jpg 800w, wolf_1600px.jpg 1600w"
     sizes="50vw">

href 속성을 생략하는 방법에 주목하세요. 이 속성은 imagesrcset을 지원하지 않는 브라우저에만 관련이 있으며, 이러한 경우 잘못된 이미지가 미리 로드될 가능성이 높기 때문입니다.

imagesrcset 속성은 media 속성과 결합하여 아트 디렉션을 위한 picture 요소의 소스에서 선택된 적절한 리소스를 미리 로드할 수 있습니다:

<link rel="preload" as="image"
      imagesrcset="dog-cropped-1x.jpg, dog-cropped-2x.jpg 2x"
      media="(max-width: 800px)">
<link rel="preload" as="image"
      imagesrcset="dog-wide-1x.jpg, dog-wide-2x.jpg 2x"
      media="(min-width: 801px)">

<!-- ... later, or perhaps inserted dynamically ... -->
<picture>
  <source srcset="dog-cropped-1x.jpg, dog-cropped-2x.jpg 2x"
          media="(max-width: 800px)">
  <img src="dog-wide-1x.jpg" srcset="dog-wide-2x.jpg 2x"
       alt="An awesome dog">
</picture>

sizes 속성은 시각 매체용 아이콘의 크기를 제공합니다. 이 속성이 존재하는 경우, 그 값은 단순히 권고 사항일 뿐입니다. 사용자 에이전트는 여러 아이콘이 사용 가능한 경우 어떤 아이콘을 사용할지 결정하기 위해 이 값을 사용할 수 있습니다. 지정된 경우, 이 속성의 값은 순서 없는 고유한 공백으로 구분된 토큰 집합이어야 하며, 이는 ASCII 대소문자 구분 없이 매치되어야 합니다. 각 값은 문자열 "any"와 ASCII 대소문자 구분 없이 일치하거나, U+0030 숫자 0(0) 문자가 앞에 오지 않고, U+0078 라틴 소문자 X 또는 U+0058 라틴 대문자 X 문자로 구분된 두 개의 유효한 음수가 아닌 정수로 구성되어야 합니다. 이 속성은 link 요소에만 지정되어야 하며, rel 속성에 icon 키워드나 apple-touch-icon 키워드가 지정된 경우에만 사용해야 합니다.

apple-touch-icon 키워드는 미리 정의된 링크 유형 세트에 대한 확장으로 등록된 키워드이지만, 사용자 에이전트가 이를 지원해야 할 의무는 없습니다.


as 속성은 href 속성에 의해 제공된 리소스를 미리 로드할 때의 잠재적 목적지를 지정합니다. 이는 열거형 속성입니다. 각 잠재적 목적지는 이 속성에 대한 키워드로, 동일한 이름의 상태에 매핑됩니다. 이 속성은 link 요소에 지정되어야 하며, rel 속성에 preload 키워드가 포함되어 있어야 합니다. 이 속성은 link 요소에 지정될 수 있으며, rel 속성에 modulepreload 키워드가 포함된 경우, 이 속성은 스크립트와 유사한 목적지를 나타내는 값을 가져야 합니다. 다른 link 요소에 대해서는 이 속성을 지정해서는 안 됩니다.

as 속성이 사용되는 방법에 대한 처리 모델은 각 링크 유형의 리소스 가져오기 및 처리 알고리즘에 제공됩니다.

이 속성은 누락된 값 기본값이나 유효하지 않은 값 기본값을 가지지 않으며, 이는 유효하지 않거나 누락된 속성 값이 상태에 매핑되지 않음을 의미합니다. 이는 처리 모델에서 고려됩니다. preload 링크의 경우, 두 조건 모두 오류로 간주되며, modulepreload 링크의 경우, 누락된 값은 "스크립트"로 처리됩니다.


blocking 속성은 차단 속성입니다. 이 속성은 stylesheetexpect 링크 유형에서 사용되며, 이러한 키워드를 포함하는 rel 속성을 가진 링크 요소에서만 지정되어야 합니다.


color 속성은 mask-icon 링크 유형에서 사용됩니다. 이 속성은 rel 속성에 mask-icon 키워드가 포함된 link 요소에서만 지정되어야 합니다. 이 값은 사용자가 사이트를 고정할 때 사용자 에이전트가 아이콘의 표시를 사용자 정의하는 데 사용할 수 있는 권장 색상을 정의하는 CSS <color> 프로덕션과 일치하는 문자열이어야 합니다.

이 사양에서는 color 속성에 대한 사용자 에이전트 요구 사항이 없습니다.

mask-icon 키워드는 미리 정의된 링크 유형 세트에 대한 확장으로 등록된 키워드이지만, 사용자 에이전트가 이를 지원해야 할 의무는 없습니다.


link 요소에는 관련된 명시적으로 활성화됨 부울이 있습니다. 초기 값은 false입니다.

disabled 속성은 부울 속성이며, stylesheet 링크 유형에서 사용됩니다. 이 속성은 rel 속성에 stylesheet 키워드가 포함된 link 요소에서만 지정되어야 합니다.

disabled 속성이 제거될 때마다 link 요소의 명시적으로 활성화됨 속성을 true로 설정합니다.

예를 들어, disabled 속성을 동적으로 제거하면, 예를 들어 document.querySelector("link").removeAttribute("disabled")을 사용하여 스타일 시트를 가져오고 적용합니다:

<link disabled rel="alternate stylesheet" href="css/pooh">

HTMLLinkElement/fetchPriority

Firefox아니오Safari🔰 프리뷰+Chrome102+
Opera?Edge102+
Edge (Legacy)?Internet Explorer아니오
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

fetchpriority 속성은 페치 우선순위 속성으로, 외부 리소스 링크에서 사용되며, 연결된 리소스를 가져오고 처리할 때 사용되는 우선순위를 설정합니다.


color 속성에 대한 반영 IDL 속성은 없지만, 나중에 추가될 수 있습니다.

HTMLLinkElement/as

모든 현재 엔진에서 지원됩니다.

Firefox56+Safari10+Chrome50+
Opera?Edge79+
Edge (Legacy)17+Internet Explorer아니오
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

as IDL 속성은 as 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.

crossOrigin IDL 속성은 crossorigin 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.

HTMLLinkElement/referrerPolicy

모든 현재 엔진에서 지원됩니다.

Firefox50+Safari14.1+Chrome58+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니오
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

referrerPolicy IDL 속성은 referrerpolicy 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.

fetchPriority IDL 속성은 fetchpriority 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.

relList 속성은 기능 감지(feature detection)에 사용할 수 있으며, supports() 메서드를 호출하여 어떤 링크 유형이 지원되는지 확인할 수 있습니다.

4.2.4.1 media 속성 처리

링크가 하이퍼링크인 경우, media 속성은 순전히 권고 사항이며, 해당 문서가 어떤 미디어를 위해 설계되었는지를 설명합니다.

그러나 링크가 외부 리소스 링크인 경우, media 속성은 규정적입니다. 사용자 에이전트는 media 속성의 값이 환경과 일치하고 기타 관련 조건이 적용될 때 외부 리소스를 적용해야 하며, 그렇지 않은 경우에는 적용하지 않아야 합니다.

media 속성이 생략된 경우 기본값은 "all"이며, 이는 기본적으로 모든 미디어에 링크가 적용됨을 의미합니다.

외부 리소스는 적용 가능성을 제한하는 추가 제한 사항이 정의되어 있을 수 있습니다. 예를 들어, CSS 스타일 시트는 일부 @media 블록을 포함할 수 있습니다. 이 사양은 이러한 추가 제한 사항이나 요구 사항을 무시하지 않습니다.

4.2.4.2 type 속성 처리

type 속성이 존재하는 경우, 사용자 에이전트는 해당 리소스가 지정된 유형(예: 빈 문자열과 같이 유효한 MIME 타입 문자열이 아닐 수도 있음)이라고 가정해야 합니다. 속성이 생략되었지만 외부 리소스 링크 유형에 기본 유형이 정의된 경우, 사용자 에이전트는 해당 리소스가 해당 유형이라고 가정해야 합니다. UA가 지정된 링크 관계에 대해 주어진 MIME 타입을 지원하지 않는 경우, UA는 링크된 리소스를 가져오고 처리해서는 안 됩니다. UA가 지정된 링크 관계에 대해 주어진 MIME 타입을 지원하는 경우, UA는 링크된 리소스를 가져와서 처리해야 하며, 적절한 시점에 외부 리소스 링크의 특정 유형에 대해 지정된 대로 처리해야 합니다. 속성이 생략되고 외부 리소스 링크 유형에 기본 유형이 정의되어 있지 않지만, 유형이 알려져 있고 지원된다고 가정할 경우 사용자 에이전트가 링크된 리소스를 가져와서 처리할 것이라면, 사용자 에이전트는 이를 지원된다고 가정하고 링크된 리소스를 가져와서 처리해야 합니다.

사용자 에이전트는 type 속성을 권위적으로 간주해서는 안 됩니다. 리소스를 가져온 후, 사용자 에이전트는 리소스의 실제 유형을 결정하기 위해 type 속성을 사용해서는 안 됩니다. 실제 유형만이 리소스를 적용할지 여부를 결정하는 데 사용되며, 이는 이전에 가정한 유형과는 다릅니다.

스타일시트 링크 유형은 리소스의 Content-Type 메타데이터를 처리하기 위한 규칙을 정의합니다.

사용자 에이전트가 리소스의 유형을 확인한 후, 해당 리소스가 지원되는 유형이고 기타 관련 조건이 적용되는 경우 리소스를 적용해야 하며, 그렇지 않은 경우 리소스를 무시해야 합니다.

문서에 다음과 같이 레이블이 지정된 스타일시트 링크가 포함된 경우:

<link rel="stylesheet" href="A" type="text/plain">
<link rel="stylesheet" href="B" type="text/css">
<link rel="stylesheet" href="C">

...그러면 CSS 스타일시트만 지원하는 준수하는 UA는 B 및 C 파일을 가져오고, A 파일은 건너뜁니다(이유: text/plain은 CSS 스타일시트의 MIME 타입이 아니기 때문입니다).

B 및 C 파일에 대해서는 서버에서 반환된 실제 유형을 확인합니다. text/css로 전송된 경우 스타일을 적용하지만, text/plain 또는 기타 다른 유형으로 라벨이 지정된 경우 스타일을 적용하지 않습니다.

두 파일 중 하나가 Content-Type 메타데이터 없이 반환되거나 Content-Type: "null"과 같은 구문적으로 잘못된 유형으로 반환된 경우, 스타일시트 링크에 대한 기본 유형이 적용됩니다. 기본 유형이 text/css이므로 스타일시트는 여전히 적용됩니다.

기본 링크된 리소스를 가져와서 처리하는 알고리즘은 link 요소 el을 받았을 때 다음과 같습니다:

  1. optionsel에서 링크 옵션을 생성한 결과로 설정합니다.

  2. requestoptions에서 링크 요청을 생성한 결과로 설정합니다.

  3. request가 null이면, 반환합니다.

  4. request동기 플래그를 설정합니다.

  5. elrequest를 사용하여 링크된 리소스 가져오기 설정 단계를 실행합니다. 결과가 false이면, 반환합니다.

  6. elrel 속성에 stylesheet 키워드가 포함된 경우, request요청 개시자 유형을 "css"로 설정합니다. 그렇지 않으면 "link"로 설정합니다.

  7. 요청 requestprocessResponseConsumeBody를 사용하여 응답 response와 null, 실패 또는 바이트 시퀀스 bodyBytes에 설정합니다:

    1. success를 true로 설정합니다.

    2. 다음 중 하나라도 참인 경우:

      • bodyBytes가 null이거나 실패일 경우

      • response상태ok 상태가 아닌 경우

      그렇다면 success를 false로 설정합니다.

      콘텐츠별 오류, 예: CSS 구문 오류 또는 PNG 디코딩 오류는 success에 영향을 미치지 않습니다.

    3. 그렇지 않으면 링크 리소스중요한 하위 리소스가 로드될 때까지 기다립니다.

      링크 유형의 중요한 하위 리소스를 정의하는 사양(예: CSS)은 이러한 하위 리소스를 가져오고 처리하는 방법을 설명할 것으로 예상됩니다. 그러나 현재 이 부분이 명확하지 않기 때문에 이 사양에서는 링크 리소스중요한 하위 리소스를 가져오고 처리하는 방법을 설명하고 있으며, 올바르게 수행될 것이라고 기대합니다.

    4. el, success, responsebodyBytes을 사용하여 링크된 리소스를 처리합니다.

링크 처리 옵션 options을 받아서 링크 요청을 생성합니다:

  1. 단언: optionshref가 빈 문자열이 아닙니다.

  2. urloptionshref와 상대적으로 URL 인코딩-파싱의 결과로 설정합니다.

    문서나 환경 대신 기본 URL을 전달하는 것은 이슈 #9715에서 추적됩니다.

  3. url이 실패이면, null을 반환합니다.

  4. requesturl, options목적지options교차 출처를 사용하여 잠재적 CORS 요청을 생성한 결과로 설정합니다.

  5. request정책 컨테이너options정책 컨테이너로 설정합니다.

  6. request무결성 메타데이터options무결성으로 설정합니다.

  7. request암호화 논스 메타데이터options암호화 논스 메타데이터로 설정합니다.

  8. request리퍼러 정책options리퍼러 정책으로 설정합니다.

  9. request클라이언트options환경으로 설정합니다.

  10. request우선순위options가져오기 우선순위로 설정합니다.

  11. request을 반환합니다.

사용자 에이전트는 필요할 때 이러한 리소스를 가져와서 처리하도록 선택할 수 있으며, 모든 적용되지 않은 외부 리소스를 미리 가져오는 대신에 이 방법을 사용할 수 있습니다.

링크된 리소스를 가져와서 처리하는 알고리즘과 유사하게, 모든 외부 리소스 링크에는 링크된 리소스를 처리하는 알고리즘이 있으며, 이는 link 요소 el, boolean success, 응답 response, 그리고 바이트 시퀀스 bodyBytes를 가져옵니다. 개별 링크 유형은 자체 링크된 리소스를 처리하는 알고리즘을 제공할 수 있지만, 명시적으로 언급되지 않은 경우 해당 알고리즘은 아무 작업도 하지 않습니다.

주어진 rel 키워드에 대해 달리 명시되지 않은 경우, 요소는 요소의 노드 문서로드 이벤트를 지연시켜야 하며, 모든 시도가 완료될 때까지 기다립니다. 사용자 에이전트가 리소스를 가져와서 처리하려고 시도하지 않은 경우(예: 리소스가 필요할 때까지 기다리는 경우) 로드 이벤트를 지연시키지 않습니다.

외부 리소스 링크가 될 수 있는 모든 링크 유형은 `Link` 응답 헤더에 나타나는 경우에 반응 여부 및 방법을 정의하는 링크 헤더 처리 알고리즘을 정의합니다.

대부분의 링크 유형에서는 이 알고리즘이 아무 작업도 수행하지 않습니다. 링크 유형이 링크 헤더 처리 단계를 정의했는지 빠르게 알 수 있는 좋은 참조는 요약 표입니다.

링크 처리 옵션구조체입니다. 다음과 같은 항목을 포함합니다:

href (기본값은 빈 문자열)
initiator (기본값 "link")
integrity (기본값은 빈 문자열)
type (기본값은 빈 문자열)
암호학적 nonce 메타데이터 (기본값은 빈 문자열)
문자열
destination (기본값은 빈 문자열)
destination type
crossorigin (기본값 No CORS)
CORS 설정 속성 상태
referrer policy (기본값은 빈 문자열)
referrer policy
source set (기본값 null)
Null 또는 source set
base URL
URL
origin
origin
environment
environment
policy container
policy container
document (기본값 null)
Null 또는 Document
on document ready (기본값 null)
Null 또는 Document를 인자로 받는 알고리즘
fetch priority (기본값 Auto)
fetch priority attribute 상태

링크 처리 옵션에는 파싱된 URL 대신 기본 URLhref가 있습니다. 왜냐하면 URL이 옵션의 소스 세트 결과일 수 있기 때문입니다.

link 요소 el을 받아서 링크 옵션을 생성합니다:

  1. documentel노드 문서로 설정합니다.

  2. options을 다음을 사용하여 새 링크 처리 옵션으로 설정합니다:

    crossorigin
    elcrossorigin 콘텐츠 속성 상태.
    리퍼러 정책
    elreferrerpolicy 콘텐츠 속성 상태.
    소스 세트
    el소스 세트.
    기본 URL
    document문서 기본 URL.
    origin
    document원점.
    환경
    document관련 설정 객체.
    정책 컨테이너
    document정책 컨테이너.
    문서
    document.
    암호화 논스 메타데이터
    el[[CryptographicNonce]] 내부 슬롯의 현재 값.
    가져오기 우선순위
    elfetchpriority 콘텐츠 속성 상태.
  3. elhref 속성을 가지고 있다면, optionshrefelhref 속성 값으로 설정합니다.

  4. elintegrity 속성을 가지고 있다면, options무결성elintegrity 콘텐츠 속성 값으로 설정합니다.

  5. eltype 속성을 가지고 있다면, optionstypeeltype 속성 값으로 설정합니다.

  6. 단언: optionshref가 빈 문자열이 아니거나 options소스 세트가 null이 아닙니다.

    link 요소에 href 또는 imagesrcset이 없으면 링크를 나타내지 않습니다.

  7. options을 반환합니다.

헤더 목록headers이 주어졌을 때 헤더에서 링크를 추출합니다:

  1. 리스트links를 설정합니다.

  2. rawLinkHeadersheaders에서 `Link` 헤더를 가져오고, 디코딩하고, 분할한 결과로 설정합니다.

  3. rawLinkHeaderslinkHeader에 대해 다음을 수행합니다:

    1. 파싱 작업의 결과로 linkObject를 설정합니다. [WEBLINK]

    2. 만약 linkObject["target_uri"]가 존재하지 않는다면, 계속 진행합니다.

    3. linkObjectlinks에 추가합니다.

  4. links를 반환합니다.

doc 문서Document, response 응답, 그리고 "pre-media" 또는 "media" phase가 주어졌을 때 링크 헤더를 처리합니다:

  1. response헤더 목록에서 링크를 추출한 결과로 links를 설정합니다.

  2. linkslinkObject에 대해 다음을 수행합니다:

    1. rellinkObject["relation_type"]로 설정합니다.

    2. attribslinkObject["target_attributes"]로 설정합니다.

    3. 만약 "srcset", "imagesrcset", 또는 "media"가 attribs존재한다면 expectedPhase를 "media"로 설정합니다. 그렇지 않으면 "pre-media"로 설정합니다.

    4. 만약 expectedPhasephase와 일치하지 않으면, 계속 진행합니다.

    5. 만약 attribs["media"]가 존재하고, attribs["media"]가 환경과 일치하지 않으면, 계속 진행합니다.

    6. 다음으로 링크 처리 옵션으로 options을 새로 생성합니다:

      href
      linkObject["target_uri"]
      기본 URL
      doc문서 기본 URL
      origin
      doc원점
      환경
      doc관련 설정 객체
      정책 컨테이너
      doc정책 컨테이너
      문서
      doc
    7. 파싱된 헤더 속성에서 링크 옵션 적용options에, attribsrel을 인자로 하여 실행한다. 만약 그 결과가 false라면, 반환한다.

    8. 만약 attribs["imagesrcset"]이 존재하고 attribs["imagesizes"]이 존재한다면, options소스 세트를 다음에 따라 설정합니다: linkObject["target_uri"], attribs["imagesrcset"], attribs["imagesizes"], 그리고 null로 소스 세트 생성을 수행합니다.

    9. 링크 헤더 처리 단계를 rel에 대해 options를 사용하여 실행합니다.

파싱된 헤더 속성에서 링크 옵션 적용링크 처리 옵션 options에, attribs와 문자열 rel을 인자로 하여 수행하려면:

  1. rel이 "preload"인 경우:

    1. attribs["as"]가 존재하지 않으면, false를 반환한다.

    2. destinationpreload 대상 변환의 결과로, attribs["as"]에 대해 설정한다.

    3. destination이 null이면, false를 반환한다.

    4. optionsdestinationdestination으로 설정한다.

  2. attribs["crossorigin"] 존재하고, ASCII 대소문자 구분 없이 CORS 설정 속성 키워드 중 하나와 일치하면, optionscrossorigin을 해당 키워드에 대응하는 CORS 설정 속성 상태로 설정한다.

  3. attribs["integrity"] 존재하면, optionsintegrityattribs["integrity"]로 설정한다.

  4. attribs["referrerpolicy"] 존재하고, ASCII 대소문자 구분 없이 referrer policy와 일치하면, optionsreferrer policy를 해당 referrer policy로 설정한다.

  5. attribs["nonce"] 존재하면, optionsnonceattribs["nonce"]로 설정한다.

  6. attribs["type"] 존재하면, optionstypeattribs["type"]로 설정한다.

  7. attribs["fetchpriority"] 존재하고, ASCII 대소문자 구분 없이 fetch priority attribute 키워드와 일치하면, optionsfetch priority를 그 fetch priority attribute 키워드로 설정한다.

  8. true를 반환한다.

4.2.4.5 사전 힌트

상태/103

Firefox미리보기+Safari아니오Chrome103+
Opera아니오Edge103+
Edge (레거시)?Internet Explorer아니오
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

사전 힌트는 사용자 에이전트가 탐색 요청이 서버에 의해 완전히 처리되고 응답 코드가 제공되기 전에 문서에서 사용할 가능성이 높은 리소스를 사전 로드하는 등의 작업을 수행할 수 있게 합니다. 서버는 최종 응답을 제공하기 전에 103 상태 코드가 포함된 응답을 제공함으로써 사전 힌트를 나타낼 수 있습니다.[RFC8297]

호환성 문제로 인해 사전 힌트는 일반적으로 HTTP/2 이상에서 제공됩니다, 하지만 가독성을 위해 아래에서 HTTP/1.1 스타일 표기법을 사용합니다.

예를 들어, 다음과 같은 응답 순서가 주어졌을 때:

103 Early Hint
Link: </image.png>; rel=preload; as=image
200 OK
Content-Type: text/html

<!DOCTYPE html>
...
<img src="/image.png">

이미지는 HTML 콘텐츠가 도착하기 전에 로드되기 시작할 것입니다.

탐색 중 제공된 첫 번째 사전 힌트 응답만 처리되며, 교차 출처 리디렉션이 뒤따를 경우 폐기됩니다.

103 응답에는 Link 헤더 외에도 콘텐츠 보안 정책 헤더가 포함될 수 있으며, 이는 사전 힌트를 처리할 때 강제됩니다.

예를 들어, 다음과 같은 응답 순서가 주어졌을 때:

103 Early Hint
Content-Security-Policy: style-src: self;
Link: </style.css>; rel=preload; as=style
103 Early Hint
Link: </image.png>; rel=preload; as=image
302 Redirect
Location: /alternate.html
200 OK
Content-Security-Policy: style-src: none;
Link: </font.ttf>; rel=preload; as=font

글꼴과 스타일이 로드되지만, 이미지는 무시됩니다. 최종 리디렉션 체인에서 첫 번째 사전 힌트 응답만 존중되기 때문입니다. 늦게 도착한 콘텐츠 보안 정책 헤더는 스타일을 가져오는 요청이 이미 수행된 후에 도착하지만, 스타일은 문서에서 접근할 수 없습니다.

초기 힌트 헤더를 처리하기 위해 response responseenvironment reservedEnvironment이 주어졌을 때:

초기 힌트 `Link` 헤더는 항상 최종 `Link` 헤더가 response에서 처리되기 전에 처리되고, 그 다음에 link 요소가 처리됩니다. 이는 초기 및 최종 `Link` 헤더의 내용을 Documenthead 요소에 각각의 순서대로 앞에 추가하는 것과 동일합니다.

  1. earlyPolicyContainer를 생성하기 위한 결과를 responsereservedEnvironment에 대해 패치 응답에서 정책 컨테이너 생성으로 설정합니다.

    이 작업은 사전 힌트 응답콘텐츠 보안 정책이 포함되어, 사전 힌트 요청을 가져올 때 적용될 수 있게 합니다.

  2. linksresponse헤더 목록에서 헤더에서 링크 추출의 결과로 설정합니다.

  3. earlyHints를 빈 목록으로 설정합니다.

  4. 각각의 linkObject에 대해 links에서:

    사전 힌트 링크 헤더를 수신하는 순간 earlyRequest를 가져오기를 시작합니다. document가 생성되기 전에 응답이 반환되면, 이를 earlyResponse로 설정합니다. document가 생성되면 이를 커밋하고, 사전 로드된 리소스의 맵에 추가합니다. 문서가 먼저 생성되면, 응답이 사용 가능해지자마자 커밋됩니다.

    1. rellinkObject["relation_type"]로 설정합니다.

    2. options를 새로운 링크 처리 옵션으로 설정합니다. 해당 옵션에:

      href
      linkObject["target_uri"]
      initiator
      "early-hint"
      기본 URL
      responseURL
      origin
      responseURLorigin
      환경
      reservedEnvironment
      정책 컨테이너
      earlyPolicyContainer
    3. attribslinkObject["target_attributes"]로 설정합니다.

      사전 힌트 처리에서는 as, crossorigin, integrity, type 속성만 처리됩니다. 나머지, 특히 blocking, imagesrcset, imagesizes, media 속성은 document가 생성된 후에만 적용됩니다.

    4. 파싱된 헤더 속성에서 링크 옵션 적용options에, attribsrel을 인자로 하여 실행한다. 그 결과가 false이면, 반환한다.

    5. 링크 헤더 처리 단계를 rel에 대해 options을 주어 실행합니다.

    6. 추가 optionsearlyHints에 추가합니다.

  5. document doc이 주어졌을 때, 다음 하위 단계를 반환합니다: 각각의 earlyHints에서 options에 대해:

    1. 만약 options문서 준비 시가 null이면 options문서doc으로 설정합니다.

    2. 그렇지 않으면 options문서 준비 시doc을 주어 호출합니다.

인터랙티브 사용자 에이전트는 사용자에게 link 요소를 사용하여 생성된 하이퍼링크를 따라갈 수 있는 방법을 사용자 인터페이스 내에서 제공할 수 있습니다. 이러한 하이퍼링크를 따르는 알고리즘을 호출할 때는 userInvolvement 인자를 "브라우저 UI"로 설정해야 합니다. 이 명세서는 정확한 인터페이스를 정의하지 않지만, 문서 내의 각 link 요소로 생성된 각 하이퍼링크에 대해 다음과 같은 정보를 (아래 정의된 요소의 속성에서 얻은) 어떤 형태로든 포함할 수 있습니다.

사용자 에이전트는 리소스의 유형(type 속성으로 제공됨)과 같은 다른 정보도 포함할 수 있습니다.

4.2.5 meta 요소

Element/meta

모든 현재 엔진에서 지원.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLMetaElement

모든 현재 엔진에서 지원.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
메타데이터 콘텐츠.
itemprop 속성이 있는 경우: 흐름 콘텐츠.
itemprop 속성이 있는 경우: 구문 콘텐츠.
이 요소를 사용할 수 있는 맥락:
charset 속성이 있거나, 요소의 http-equiv 속성이 인코딩 선언 상태에 있는 경우: head 요소 내.
http-equiv 속성이 있지만 인코딩 선언 상태에 있지 않은 경우: head 요소 내.
http-equiv 속성이 있지만 인코딩 선언 상태에 있지 않은 경우: noscript 요소의 자식 요소인 head 요소 내.
name 속성이 있는 경우: 메타데이터 콘텐츠가 예상되는 곳.
itemprop 속성이 있는 경우: 메타데이터 콘텐츠가 예상되는 곳.
itemprop 속성이 있는 경우: 구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
없음.
text/html에서의 태그 생략:
종료 태그 없음.
콘텐츠 속성:
전역 속성
name — 메타데이터 이름
http-equiv — 프래그마 지시어
content — 요소의 값
charset문자 인코딩 선언
media — 적용 가능한 미디어
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLMetaElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString name;
  [CEReactions, Reflect="http-equiv"] attribute DOMString httpEquiv;
  [CEReactions, Reflect] attribute DOMString content;
  [CEReactions, Reflect] attribute DOMString media;

  // also has obsolete members
};

meta 요소는 title, base, link, style, 그리고 script 요소로 표현할 수 없는 다양한 종류의 메타데이터를 나타냅니다.

meta 요소는 name 속성을 사용하여 문서 수준의 메타데이터를 나타낼 수 있고, http-equiv 속성을 사용하여 프래그마 지시어를 나타낼 수 있으며, HTML 문서를 문자열 형태로 직렬화할 때(예: 네트워크를 통해 전송하거나 디스크에 저장할 때) charset 속성을 사용하여 파일의 문자 인코딩 선언을 나타낼 수 있습니다.

name, http-equiv, charsetitemprop 속성 중 정확히 하나가 지정되어야 합니다.

name, http-equiv, 또는 itemprop 중 하나가 지정된 경우 content 속성도 지정되어야 합니다. 그렇지 않으면 생략해야 합니다.

charset 속성은 문서에 사용된 문자 인코딩을 지정합니다. 이것은 문자 인코딩 선언입니다. 속성이 존재하는 경우 그 값은 문자열 "utf-8"과 ASCII 대소문자 구분 없이 일치해야 합니다.

charset 속성은 XML 문서에서 아무런 효과가 없지만, XML 문서 간의 마이그레이션을 용이하게 하기 위해 XML 문서에서도 허용됩니다.

charset 속성이 있는 meta 요소는 문서당 하나만 있어야 합니다.

content 속성은 문서 메타데이터나 프래그마 지시어로 사용될 때 요소의 값을 제공합니다. 허용되는 값은 이 명세서의 후속 섹션에서 설명된 대로 정확한 맥락에 따라 다릅니다.

meta 요소에 name 속성이 있는 경우, 문서 메타데이터를 설정합니다. 문서 메타데이터는 이름-값 쌍으로 표현되며, name 속성은 이름을, 동일한 요소의 content 속성은 값을 나타냅니다. 이름은 메타데이터의 어느 측면이 설정되고 있는지를 지정합니다. 유효한 이름과 값의 의미는 다음 섹션에서 설명됩니다. meta 요소에 content 속성이 없는 경우 메타데이터 이름-값 쌍의 값 부분은 빈 문자열입니다.

media 속성은 메타데이터가 적용되는 미디어를 나타냅니다. 값은 유효한 미디어 쿼리 목록이어야 합니다. nametheme-color가 아닌 한, media 속성은 처리 모델에 영향을 미치지 않으며, 저자에 의해 사용되지 않아야 합니다.

4.2.5.1 표준 메타데이터 이름

요소/meta/name

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer6+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

이 명세는 name 속성에 대한 몇 가지 이름을 정의합니다.

이름은 대소문자를 구분하지 않으며, ASCII 대소문자 구분 없이 비교되어야 합니다.

application-name

값은 페이지가 나타내는 웹 애플리케이션의 이름을 나타내는 짧은 자유 형식의 문자열이어야 합니다. 페이지가 웹 애플리케이션이 아닌 경우, application-name 메타데이터 이름을 사용해서는 안 됩니다. 웹 애플리케이션의 이름 번역은 lang 속성을 사용하여 각 이름의 언어를 지정할 수 있습니다.

문서 내에서 동일한 언어name 속성 값이 ASCII 대소문자 구분 없이 일치하는 application-name 메타 요소는 하나 이상 존재할 수 없습니다.

사용자 에이전트는 페이지의 title 대신 UI에서 애플리케이션 이름을 사용할 수 있습니다. 제목은 특정 순간에 페이지 상태와 관련된 상태 메시지 등을 포함할 수 있기 때문입니다.

언어 목록이 주어졌을 때 애플리케이션 이름을 찾기 위해 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. languages를 언어 목록으로 설정한다.

  2. default languagelanguage로 설정하는데, Documentdocument element의 언어가 있을 경우, 그리고 해당 언어가 알려진 언어인 경우에만 적용한다.

  3. 만약 default language가 존재하며, languages에 포함된 어떤 언어와도 같지 않다면, 이를 languages에 추가한다.

  4. winning languagelanguages 중 첫 번째 언어로 설정하는데, meta 요소가 Document 내에 존재하고, name 속성 값이 ASCII 대소문자 구분 없이 application-name과 일치하며, language가 해당 언어인 경우에 한한다.

    만약 어떤 언어도 이러한 meta 요소를 가지지 않는다면, 반환한다; 주어진 어플리케이션 이름이 없다.

  5. content 속성의 값을 반환한다. 이는 meta 요소 중에서 Document트리 순서로 첫 번째 요소이고, name 속성 값이 ASCII 대소문자 구분 없이 application-name과 일치하며, languagewinning language인 경우이다.

이 알고리즘은 브라우저가 예를 들어 북마크에 레이블을 붙일 때 페이지 이름이 필요할 때 사용됩니다. 브라우저는 사용자의 선호 언어를 이 알고리즘에 제공합니다.

author

값은 페이지의 저자 중 한 명의 이름을 나타내는 자유 형식의 문자열이어야 합니다.

description

값은 페이지를 설명하는 자유 형식의 문자열이어야 합니다. 값은 예를 들어 검색 엔진과 같은 페이지 디렉토리에 사용하기에 적합해야 합니다. meta 요소는 name 속성 값이 ASCII 대소문자 구분 없이 일치하는 description 요소는 문서에 하나만 존재해야 합니다.

generator

값은 문서를 생성하는 데 사용된 소프트웨어 패키지 중 하나를 식별하는 자유 형식의 문자열이어야 합니다. 이 값은 소프트웨어에 의해 생성되지 않은 페이지에 사용되어서는 안 됩니다. 예를 들어 텍스트 편집기에서 사용자가 직접 작성한 마크업이 있는 페이지에는 사용하지 않습니다.

"Frontweaver"라는 도구가 페이지의 head 요소에 다음과 같이 포함될 수 있습니다. 이를 통해 페이지를 생성하는 데 사용된 도구를 식별할 수 있습니다:

<meta name=generator content="Frontweaver 8.2">
keywords

값은 페이지와 관련된 쉼표로 구분된 토큰 세트여야 합니다.

이 페이지는 영국 고속도로의 서체에 대해 설명하며, 검색을 위한 몇 가지 키워드를 meta 요소에 지정합니다:

<!DOCTYPE HTML>
<html lang="en-GB">
 <head>
  <title>Typefaces on UK motorways</title>
  <meta name="keywords" content="british,type face,font,fonts,highway,highways">

많은 검색 엔진이 이와 같은 키워드를 고려하지 않습니다. 이는 역사적으로 검색 엔진 결과를 스팸으로 채우는 데 사용되었으며 사용자에게 도움이 되지 않는 방식으로 사용되었기 때문입니다.

페이지에 적용 가능한 키워드 목록을 얻으려면, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. keywords 목록을 비웁니다.

  2. 속성 이름이 name이고, content 속성이 있으며, 속성 값이 keywordsASCII 대소문자 구분 없이 일치하는 모든 meta 요소에 대해:

    1. 요소의 content 속성 값을 쉼표로 분리합니다.

    2. 결과 토큰을 keywords에 추가합니다.

  3. 중복된 키워드를 제거합니다.

  4. keywords를 반환합니다. 이것이 저자가 페이지에 적용했다고 지정한 키워드 목록입니다.

사용자 에이전트는 값의 신뢰성이 불충분하다고 판단되면 이 정보를 사용해서는 안 됩니다.

예를 들어, 콘텐츠 관리 시스템은 시스템 내 페이지의 키워드 정보를 사용하여 사이트 내 검색 엔진의 인덱스를 채울 수 있지만, 대규모 콘텐츠 집계자는 부적절한 키워드를 사용하여 순위를 조작하려는 사용자가 있을 수 있습니다.

referrer

값은 referrer 정책이어야 하며, 이는 document의 기본 referrer 정책을 정의합니다. [REFERRERPOLICY]

어떠한 meta 요소가 문서에 삽입되거나, name 또는 content 속성이 변경된 경우, 사용자 에이전트는 다음 알고리즘을 실행해야 합니다:

  1. 해당 요소가 문서 트리 내에 있지 않으면 반환합니다.

  2. 해당 요소에 name 속성이 없고, 그 값이 "referrer"와 ASCII 대소문자 구분 없이 일치하지 않으면 반환합니다.

  3. 해당 요소에 content 속성이 없거나, 그 속성 값이 비어 있으면 반환합니다.

  4. valueelementcontent 속성 값으로 설정하고, 이를 ASCII 소문자로 변환합니다.

  5. value가 다음 표의 첫 번째 열에 있는 값 중 하나인 경우, value를 두 번째 열에 주어진 값으로 설정합니다:

    레거시 값 referrer 정책
    never no-referrer
    default 기본 referrer 정책
    always unsafe-url
    origin-when-crossorigin origin-when-cross-origin
  6. valuereferrer 정책인 경우, element노드 문서정책 컨테이너referrer 정책policy로 설정합니다.

역사적인 이유로, 다른 표준 메타데이터 이름과 달리, referrer의 처리 모델은 요소 제거에 응답하지 않으며, 트리 순서를 사용하지 않습니다. 이 상태에서 가장 최근에 삽입되었거나 가장 최근에 수정된 meta 요소만 효과를 미칩니다.

theme-color

요소/meta/name/theme-color

Firefox아니요Safari15+Chrome🔰 73+
Opera아니요Edge🔰 79+
Edge (레거시)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android80+WebView Android아니요Samsung Internet6.2+Opera Android아니요

값은 CSS <color> 프로덕션과 일치하는 문자열이어야 하며, 페이지나 주변 사용자 인터페이스의 표시를 사용자 지정하는 데 사용자 에이전트가 사용해야 하는 제안된 색상을 정의합니다. 예를 들어, 브라우저는 페이지의 제목 표시줄을 지정된 값으로 색칠하거나 탭 표시줄 또는 작업 전환기에 색상 하이라이트로 사용할 수 있습니다.

HTML 문서 내에서, media 속성 값은 meta 요소의 name 속성 값이 ASCII 대소문자 구분 없이 theme-color와 일치하는 경우, 고유해야 합니다.

이 표준 자체는 "WHATWG 그린"을 테마 색상으로 사용합니다:

<!DOCTYPE HTML>
<title>HTML Standard</title>
<meta name="theme-color" content="#3c790a">

media 속성은 제공된 색상이 사용되어야 하는 컨텍스트를 설명하는 데 사용될 수 있습니다.

이 표준의 테마 색상으로 "WHATWG 그린"을 다크 모드에서만 사용하고자 할 경우, prefers-color-scheme 미디어 기능을 사용할 수 있습니다:

<!DOCTYPE HTML>
<title>HTML Standard</title>
<meta name="theme-color" content="#3c790a" media="(prefers-color-scheme: dark)">

페이지의 테마 색상을 얻으려면, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. candidate elements를 다음 기준을 충족하는 모든 meta 요소 목록으로 설정합니다. 이 목록은 트리 순서로 작성됩니다:

  2. candidate elements 목록의 각 element에 대해:

    1. elementmedia 속성이 있고, elementmedia 속성 값이 환경과 일치하지 않는다면, 계속 진행합니다.

    2. elementcontent 속성 값에서 앞뒤의 ASCII 공백을 제거한 결과를 value으로 설정합니다.

    3. valueCSS 색상 값으로 파싱한 결과를 color으로 설정합니다.

    4. color이 실패하지 않았다면, color을 반환합니다.

  3. 아무 것도 반환하지 않습니다 (페이지에 테마 색상이 없음).

어떠한 meta 요소가 문서에 삽입되거나 문서에서 제거되거나, 기존 meta 요소의 name, content 또는 media 속성이 변경되거나, 환경이 변경되어 meta 요소의 media 속성 값이 환경과 일치할 수도 있고 일치하지 않을 수도 있는 경우, 사용자 에이전트는 위의 알고리즘을 다시 실행하고 결과를 관련 UI에 적용해야 합니다.

UI에서 테마 색상을 사용할 때, 사용자 에이전트는 이를 구현에 특정한 방식으로 조정하여 해당 UI에 더 적합하게 만들 수 있습니다. 예를 들어, 사용자 에이전트가 테마 색상을 배경으로 사용하고 그 위에 흰색 텍스트를 표시하려는 경우, 충분한 대비를 보장하기 위해 해당 UI 부분에서 테마 색상의 어두운 변형을 사용할 수 있습니다.

color-scheme

사용자 에이전트가 페이지의 모든 CSS를 로드하기 전에 원하는 색상 체계를 즉시 렌더링할 수 있도록 돕기 위해, 'color-scheme' 값을 meta 요소에 제공할 수 있습니다.

값은 CSS 'color-scheme' 속성 값 구문과 일치하는 문자열이어야 합니다. 이는 페이지가 지원하는 색상 체계를 결정합니다.

문서당 meta 요소에 대해 name 속성 값이 color-schemeASCII 대소문자 구분 없이 일치하는 속성이 하나 이상 존재할 수 없습니다.

다음 선언은 페이지가 어두운 배경 색상과 밝은 전경 색상을 가진 색상 체계를 처리할 수 있음을 나타냅니다:

<meta name="color-scheme" content="dark">

페이지가 지원하는 색상 체계를 얻으려면, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. candidate elements를 다음 기준을 충족하는 모든 meta 요소 목록으로 설정합니다. 이 목록은 트리 순서로 작성됩니다:

  2. candidate elements 목록의 각 element에 대해:

    1. elementcontent 속성 값을 주어진 구성 요소 목록을 파싱하여 parsed으로 설정합니다.
    2. parsed이 유효한 CSS 'color-scheme' 속성 값인 경우, parsed을 반환합니다.
  3. 아무 것도 반환하지 않습니다 (페이지에 지원되는 색상 체계가 없음).

어떠한 meta 요소가 문서에 삽입되거나 문서에서 제거되거나, 기존 meta 요소의 name 또는 content 속성이 변경된 경우, 사용자 에이전트는 위의 알고리즘을 다시 실행해야 합니다.

이 규칙은 연속적인 요소를 검사하여 일치하는 것을 찾을 때까지 적용되므로, 저자는 레거시 사용자 에이전트를 처리하기 위해 여러 값을 제공할 수 있습니다. CSS 속성의 폴백이 작동하는 방식과 반대로, 레거시 값은 새로운 값 이후에 배치해야 합니다.

4.2.5.2 다른 메타데이터 이름

누구나 미리 정의된 메타데이터 이름 집합에 대한 확장을 생성하고 사용할 수 있습니다. 이러한 확장을 등록할 필요는 없습니다.

그러나 다음의 경우에는 새로운 메타데이터 이름을 생성하지 않아야 합니다:

또한, 새로운 메타데이터 이름을 생성하고 사용하기 전에 WHATWG Wiki MetaExtensions 페이지를 참고하여 이미 사용 중인 이름을 선택하지 않도록 하고, 이미 사용 중인 메타데이터 이름의 목적을 복제하지 않도록 하며, 새로운 표준화된 이름과 충돌하지 않도록 하는 것이 좋습니다. [WHATWGWIKI]

누구나 언제든지 WHATWG Wiki MetaExtensions 페이지를 편집하여 메타데이터 이름을 추가할 수 있습니다. 새로운 메타데이터 이름은 다음 정보를 사용하여 지정할 수 있습니다:

키워드

정의된 실제 이름입니다. 이름은 다른 정의된 이름과 혼동되지 않도록 해야 합니다 (예: 대소문자만 다른 경우 등).

간단한 설명

메타데이터 이름의 의미에 대한 간단한 비표준 설명으로, 값이 필요한 형식도 포함합니다.

명세서
메타데이터 이름의 의미와 요구 사항에 대한 자세한 설명으로 연결되는 링크입니다. 이는 위키의 다른 페이지이거나 외부 페이지로의 링크일 수 있습니다.
동의어

처리 요구 사항이 정확히 동일한 다른 이름 목록입니다. 저자는 동의어로 정의된 이름을 사용해서는 안 됩니다 (이는 구식 콘텐츠와의 호환성을 위해 사용자 에이전트가 지원해야 하는 이름을 의미합니다). 실제로 사용되지 않는 동의어는 누구든지 제거할 수 있습니다. 호환성을 위해 동의어로 처리해야 하는 이름만 이 방식으로 등록해야 합니다.

상태

다음 중 하나입니다:

제안됨
이 이름은 광범위한 동료 검토와 승인을 받지 않았습니다. 누군가가 이를 제안했으며, 곧 사용할 예정이거나 사용 중입니다.
비준됨
이 이름은 광범위한 동료 검토와 승인을 받았습니다. 잘못된 방식으로 사용되었을 때 이를 처리하는 방법을 명확하게 정의하는 명세서가 있습니다.
중단됨
이 메타데이터 이름은 광범위한 동료 검토를 받았으며, 부족한 것으로 판명되었습니다. 기존 페이지에서는 이 메타데이터 이름을 사용하고 있지만, 새로운 페이지에서는 이를 피해야 합니다. "간단한 설명"과 "명세서" 항목에서 저자가 대신 사용해야 하는 것을 설명합니다.

메타데이터 이름이 기존 값과 중복된 것으로 판명되면 제거하고 기존 값의 동의어로 나열해야 합니다.

메타데이터 이름이 "제안됨" 상태로 한 달 이상 추가되었으나 사용되거나 명세화되지 않은 경우, WHATWG Wiki MetaExtensions 페이지에서 제거될 수 있습니다.

메타데이터 이름이 "제안됨" 상태로 추가되었으나 기존 값과 중복된 것으로 판명된 경우, 제거하고 기존 값의 동의어로 나열해야 합니다. 메타데이터 이름이 "제안됨" 상태로 추가되었으나 유해한 것으로 판명된 경우, "중단됨" 상태로 변경해야 합니다.

누구나 언제든지 상태를 변경할 수 있지만, 위의 정의에 따라 변경해야 합니다.

4.2.5.3 프래그마 지시문

meta 요소에 http-equiv 속성이 지정된 경우, 해당 요소는 프래그마 지시문이 됩니다.

http-equiv라는 이름에도 불구하고, 프래그마 지시문은 HTTP 헤더와 거의 관련이 없습니다. 구현자와 웹 개발자는 이를 완전히 별개의 것으로 생각하는 것이 가장 좋으며, 이 이름은 역사적 사고임을 인지해야 합니다.

좀 더 자세히 보면, refresh 키워드는 해당 `Refresh` 헤더와 동일한 처리 모델을 가지고 있지만, 그 외의 모든 표준화된 프래그마 지시문은 유사한 이름의 헤더와 적어도 약간은 다른 동작을 합니다. (그리고 보통은 매우 다른 동작을 합니다.)

새로운 문서 수준 프래그마나 HTTP 헤더로 제어되는 스위치를 추가하려는 구현자나 명세 작성자는 이러한 불일치에 주의해야 하며, HTTP 헤더와 http-equiv 프래그마 모두에 동일하거나 유사한 동작을 추가하여 기존의 혼란을 지속시키는 것을 피해야 합니다. 대신, HTTP 헤더만 제공하거나, 문서 내 프래그마가 필요하다면 metacharset 속성에서 사용된 모델과 유사한 새 속성을 추가하는 것을 고려하십시오. (문서 내 프래그마를 피하는 것이 더 나은 선택인 경우가 많은데, DOM은 변경 가능하기 때문입니다. 즉, 개발자가 meta 요소를 추가, 제거, 변경하지 않더라도, 정책은 파싱 중에 미적용 상태에서 적용 상태로 전환되어 복잡한 영향을 줄 수 있습니다.)

http-equiv 속성은 다음의 키워드와 상태를 가지는 열거형 속성입니다:

키워드 적합 여부 상태 간단한 설명
content-language 아니오 콘텐츠 언어 프래그마 설정 기본 언어를 설정합니다.
content-type 인코딩 선언 charset을 설정하는 대체 형태입니다.
default-style 기본 스타일 기본 CSS 스타일 시트 집합이름을 설정합니다.
refresh 새로고침 타이머가 설정된 리디렉트 역할을 합니다.
set-cookie 아니오 Set-Cookie 효과가 없습니다.
x-ua-compatible X-UA-Compatible 실제로는 Internet Explorer가 표준에 더 가깝게 따르도록 권장합니다.
content-security-policy 콘텐츠 보안 정책 콘텐츠 보안 정책document에 적용합니다.

meta 요소가 문서에 삽입될 때, 만약 그 요소에 http-equiv 속성이 존재하고 위의 상태 중 하나를 나타내는 경우, 사용자 에이전트는 해당 상태에 맞는 알고리즘을 실행해야 합니다. 이 알고리즘은 아래 목록에 설명되어 있습니다:

콘텐츠 언어 상태 (http-equiv="content-language")

이 기능은 비표준입니다. 저자들은 대신 lang 속성을 사용하는 것이 권장됩니다.

이 프래그마는 프래그마 설정 기본 언어를 설정합니다. 이 프래그마가 성공적으로 처리될 때까지는 프래그마 설정 기본 언어가 없습니다.

  1. 만약 meta 요소에 content 속성이 없다면, 반환합니다.

  2. 만약 요소의 content 속성이 U+002C 콤마(,) 문자를 포함하고 있다면, 반환합니다.

  3. input을 요소의 content 속성 값으로 설정합니다.

  4. positioninput의 첫 번째 문자로 설정합니다.

  5. ASCII 공백input에서 position으로 건너뜁니다.

  6. 코드 포인트 시퀀스 수집input에서 position으로 수행하여 ASCII 공백이 아닌 시퀀스를 수집합니다.

  7. candidate를 이전 단계에서 생성된 문자열로 설정합니다.

  8. 만약 candidate가 빈 문자열이라면, 반환합니다.

  9. 프래그마 설정 기본 언어candidate로 설정합니다.

    값이 여러 공백으로 구분된 토큰으로 구성된 경우, 첫 번째 토큰 이후의 토큰은 무시됩니다.

이 프래그마는 HTTP `Content-Language` 헤더와 거의 비슷하지만, 완전히 같지는 않습니다. [HTTP]

인코딩 선언 상태 (http-equiv="content-type")

인코딩 선언 상태charset 속성을 설정하는 대체 형태로, 문자 인코딩 선언입니다. 이 상태의 사용자 에이전트 요구 사항은 모두 명세서의 파싱 섹션에서 처리됩니다.

meta 요소에 인코딩 선언 상태http-equiv 속성이 지정된 경우, content 속성은 다음과 같은 ASCII 대소문자 구분 없이 일치하는 문자열 값을 가져야 합니다: "text/html;", 선택적으로 뒤따르는 모든 수의 ASCII 공백, 뒤따라 "charset=utf-8"이 포함됩니다.

문서에는 meta 요소에 인코딩 선언 상태http-equiv 속성이 지정된 요소와 meta 요소에 charset 속성이 함께 존재해서는 안 됩니다.

인코딩 선언 상태HTML 문서에서 사용할 수 있지만, 해당 상태로 http-equiv 속성이 있는 요소는 XML 문서에서 사용해서는 안 됩니다.

기본 스타일 상태 (http-equiv="default-style")

Alternative_style_sheets

하나의 엔진에서만 지원됩니다.

Firefox3+Safari?Chrome1–48
OperaYesEdgeNo
Edge (Legacy)?Internet Explorer8+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

이 프래그마는 기본 CSS 스타일 시트 집합의 이름을 설정합니다.

  1. meta 요소에 content 속성이 없거나, 해당 속성의 값이 빈 문자열인 경우 반환합니다.

  2. 선호하는 CSS 스타일 시트 집합 이름 변경을 요소의 content 속성 값으로 설정합니다. [CSSOM]

새로고침 상태 (http-equiv="refresh")

이 프래그마는 타이머가 설정된 리디렉트 역할을 합니다.

document 객체는 선언적으로 새로고침을 수행합니다 (부울 값)과 연관됩니다. 초기 값은 false입니다.

  1. meta 요소에 content 속성이 없거나, 해당 속성의 값이 빈 문자열인 경우 반환합니다.

  2. input을 요소의 content 속성 값으로 설정합니다.

  3. 공유 선언적 새로고침 단계meta 요소의 노드 문서, input, 및 meta 요소와 함께 실행합니다.

공유 선언적 새로고침 단계document 객체 document, 문자열 input 및 선택적으로 meta 요소 meta를 인수로 하여 다음과 같이 진행됩니다:

  1. 만약 document선언적으로 새로고침을 수행이 true인 경우, 반환합니다.

  2. positioninput의 첫 번째 코드 포인트로 설정합니다.

  3. ASCII 공백input에서 position으로 건너뜁니다.

  4. time을 0으로 설정합니다.

  5. 코드 포인트 시퀀스를 수집하여 ASCII 숫자인 것을 input에서 position을 기준으로 수집하고, 그 결과를 timeString으로 설정합니다.

  6. 만약 timeString이 빈 문자열인 경우:

    1. 만약 input에서 position이 가리키는 코드 포인트가 U+002E (.)가 아닌 경우, 반환합니다.

  7. 그렇지 않으면, timetimeString을 사용하여 음수가 아닌 정수를 구문 분석하는 규칙에 따라 구문 분석한 결과로 설정합니다.

  8. 코드 포인트 시퀀스 수집input에서 position으로 수행하여 ASCII 숫자 및 U+002E FULL STOP 문자를 수집합니다. 수집된 문자는 무시합니다.

  9. urlRecorddocumentURL로 설정합니다.

  10. 만약 positioninput의 끝을 지나지 않은 경우:

    1. 만약 input에서 position이 가리키는 코드 포인트가 U+003B (;), U+002C (,), 또는 ASCII 공백이 아닌 경우, 반환합니다.

    2. ASCII 공백input에서 position으로 건너뜁니다.

    3. 만약 input에서 position이 가리키는 코드 포인트가 U+003B (;) 또는 U+002C (,)인 경우, position을 다음 코드 포인트로 이동합니다.

    4. ASCII 공백input에서 position으로 건너뜁니다.

  11. 만약 positioninput의 끝을 지나지 않은 경우:

    1. urlStringposition에서 input의 끝까지의 하위 문자열로 설정합니다.

    2. 만약 position에서 input코드 포인트가 U+0055 (U) 또는 U+0075 (u)인 경우, position을 다음 코드 포인트로 이동합니다. 그렇지 않으면, 따옴표 건너뛰기로 이동합니다.

    3. 만약 position에서 input코드 포인트가 U+0052 (R) 또는 U+0072 (r)인 경우, position을 다음 코드 포인트로 이동합니다. 그렇지 않으면, 구문 분석 단계로 이동합니다.

    4. 만약 position에서 input코드 포인트가 U+004C (L) 또는 U+006C (l)인 경우, position을 다음 코드 포인트로 이동합니다. 그렇지 않으면, 구문 분석 단계로 이동합니다.

    5. ASCII 공백input에서 position으로 건너뜁니다.

    6. 만약 position에서 input코드 포인트가 U+003D (=)인 경우, position을 다음 코드 포인트로 이동합니다. 그렇지 않으면, 구문 분석 단계로 이동합니다.

    7. ASCII 공백input에서 position으로 건너뜁니다.

    8. 따옴표 건너뛰기: 만약 position에서 input코드 포인트가 U+0027 (') 또는 U+0022 (")인 경우, quote를 해당 코드 포인트로 설정하고, position을 다음 코드 포인트로 이동합니다. 그렇지 않으면, quote를 빈 문자열로 설정합니다.

    9. urlStringposition에서 input의 끝까지의 하위 문자열로 설정합니다.

    10. 만약 quote가 빈 문자열이 아니고, urlStringquote와 동일한 코드 포인트가 있는 경우, urlString을 해당 코드 포인트 이후의 모든 코드 포인트가 제거되도록 잘라냅니다.

    11. 구문 분석: urlRecordurlString을 사용하여 URL을 인코딩하여 구문 분석한 결과로 설정합니다. document를 기준으로 합니다.

    12. 만약 urlRecord가 실패인 경우, 반환합니다.

  12. document선언적으로 새로고침을 수행을 true로 설정합니다.

  13. 다음 단계 중 하나 이상을 수행합니다:

    • 새로고침이 완료된 후(아래에서 정의됨), 사용자가 리디렉트를 취소하지 않았고, meta가 지정된 경우 document활성 샌드박싱 플래그 세트샌드박스된 자동 기능 브라우징 컨텍스트 플래그를 설정하지 않은 경우, document노드 네비게이블을 사용하여 urlRecord탐색합니다. 이때, historyHandling은 "replace"로 설정됩니다.

      이전 단락의 목적을 위해, 새로고침은 다음 두 조건 중 더 나중에 발생한 시점에서 완료된 것으로 간주됩니다:

      • document완전히 로드된 시간 이후 최소 time 초가 경과하고, 사용자 또는 사용자 에이전트의 선호도를 고려한 경우.
      • meta가 지정된 경우, documentmeta문서에 삽입된 시간 이후 최소 time 초가 경과하고, 사용자 또는 사용자 에이전트의 선호도를 고려한 경우.

      여기서 meta노드 문서가 새로고침이 완료되기 전 단계와는 다를 수 있으므로, document를 사용해야 하며, meta는 항상 지정되는 것은 아닙니다(HTTP `새로고침` 헤더의 경우).

    • 사용자가 선택할 수 있는 인터페이스를 제공하여, document노드 네비게이블urlRecorddocument를 사용하여 탐색합니다.

    • 아무것도 하지 않습니다.

    또한, 사용자 에이전트는 타이머 상태, 타이머가 설정된 리디렉트의 목적지 등을 포함한 작동의 모든 측면을 사용자에게 알릴 수 있습니다.

meta 요소에 http-equiv 속성이 새로고침 상태로 지정된 경우, content 속성의 값은 다음 중 하나로 구성되어야 합니다:

첫 번째 경우, 정수는 페이지가 다시 로드되기 전의 시간을 초 단위로 나타냅니다. 두 번째 경우, 정수는 페이지가 지정된 URL로 교체되기 전의 시간을 초 단위로 나타냅니다.

뉴스 조직의 첫 페이지는 페이지의 head 요소에 다음과 같은 마크업을 포함시켜, 페이지가 5분마다 자동으로 서버에서 다시 로드되도록 할 수 있습니다:

<meta http-equiv="Refresh" content="300">

일련의 페이지를 사용하여 각 페이지가 일정 시간 후에 다음 페이지로 새로고침되는 자동 슬라이드 쇼를 만들 수 있습니다. 이를 위해 다음과 같은 마크업을 사용할 수 있습니다:

<meta http-equiv="Refresh" content="20; URL=page4.html">
Set-Cookie 상태 (http-equiv="set-cookie")

이 프래그마는 비표준이며, 효과가 없습니다.

사용자 에이전트는 이 프래그마를 무시해야 합니다.

X-UA-Compatible 상태 (http-equiv="x-ua-compatible")

실제로, 이 프래그마는 Internet Explorer가 표준을 더 잘 따르도록 권장합니다.

meta 요소에 X-UA-Compatible 상태http-equiv 속성이 지정된 경우, content 속성의 값은 "IE=edge"와 ASCII 대소문자 구분 없이 일치해야 합니다.

사용자 에이전트는 이 프래그마를 무시해야 합니다.

콘텐츠 보안 정책 상태 (http-equiv="content-security-policy")

이 프래그마는 정책을 강제하고, 콘텐츠 보안 정책document에 적용합니다. [CSP]

  1. meta 요소가 head 요소의 자식이 아닌 경우, 반환합니다.

  2. meta 요소에 content 속성이 없거나, 해당 속성의 값이 빈 문자열인 경우 반환합니다.

  3. 정책을 meta 요소의 content 속성 값을 사용하여 콘텐츠 보안 정책의 직렬화된 콘텐츠 보안 정책 구문 분석 알고리즘을 실행한 결과로 설정합니다. 소스는 "meta"로, 배치(disposition)는 "enforce"로 설정합니다.

  4. 정책에서 report-uri, frame-ancestors, sandbox 지시문을 모두 제거합니다.

  5. 정책을 강제합니다.

meta 요소에 콘텐츠 보안 정책 상태http-equiv 속성이 지정된 경우, content 속성의 값은 유효한 콘텐츠 보안 정책으로 구성되어야 하지만, report-uri, frame-ancestors, sandbox 지시문을 포함해서는 안 됩니다. content 속성에 지정된 콘텐츠 보안 정책이 현재 문서에 적용됩니다. [CSP]

meta 요소를 문서에 삽입하는 시점에는 일부 리소스가 이미 가져와졌을 수 있습니다. 예를 들어, 이미지는 사용 가능한 이미지 목록에 동적으로 meta 요소와 http-equiv 속성을 콘텐츠 보안 정책 상태로 삽입하기 전에 저장될 수 있습니다. 이미 가져와진 리소스는 콘텐츠 보안 정책늦게 적용될 경우 차단된다는 보장이 없습니다.

페이지는 다음과 같은 정책을 사용하여 교차 사이트 스크립팅 공격의 위험을 줄이고, 모든 플러그인 콘텐츠를 차단할 수 있습니다:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'">

문서에 동시에 특정 상태와 일치하는 meta 요소는 하나만 있어야 합니다.

4.2.5.4 문서의 문자 인코딩 지정

문자 인코딩 선언은 문서를 저장하거나 전송할 때 사용되는 문자 인코딩을 지정하는 메커니즘입니다.

Encoding 표준에서는 UTF-8 문자 인코딩의 사용을 요구하며, "utf-8" 인코딩 레이블을 사용하여 이를 식별하도록 요구합니다. 이러한 요구 사항은 문서의 문자 인코딩 선언이 존재하는 경우, ASCII 대소문자 구분 없이 "utf-8"와 일치하는 인코딩 레이블을 지정해야 함을 의미합니다. 문자 인코딩 선언이 존재하든지 않든지 간에, 문서 인코딩에 사용되는 실제 문자 인코딩UTF-8이어야 합니다. [ENCODING]

위의 규칙을 적용하기 위해 저작 도구는 새로 생성된 문서에 대해 기본적으로 UTF-8을 사용해야 합니다.

다음 제한 사항도 적용됩니다:

또한, meta 요소에 대한 여러 제한 사항 때문에, 문서당 하나의 meta 기반 문자 인코딩 선언만 허용됩니다.

만약 HTML 문서가 BOM으로 시작하지 않고, 인코딩이 Content-Type 메타데이터에 명시되지 않으며, 문서가 iframe srcdoc 문서가 아닌 경우, meta 요소와 charset 속성을 사용하여 인코딩을 지정해야 하며, 또는 meta 요소와 http-equiv 속성을 사용하여 인코딩 선언 상태에서 인코딩을 지정해야 합니다.

모든 문자가 ASCII 범위 내에 있더라도 Content-Type 메타데이터 또는 파일에 명시적으로 문서 인코딩 선언이 필요합니다. 왜냐하면, 사용자 입력 양식에서 비-ASCII 문자를 처리하거나, 스크립트에 의해 생성된 URL을 처리하는 데 문자 인코딩이 필요하기 때문입니다.

비-UTF-8 인코딩을 사용하는 경우, 양식 제출 및 URL 인코딩에서 예상치 못한 결과를 초래할 수 있습니다. 이러한 경우 기본적으로 문서의 문자 인코딩이 사용되기 때문입니다.

문서가 iframe srcdoc 문서인 경우, 해당 문서에는 문자 인코딩 선언이 없어야 합니다. (이 경우, 소스는 이미 디코딩되어 있으며, iframe을 포함하는 문서의 일부로서 제공됩니다.)

XML에서는 필요한 경우, 인라인 문자 인코딩 정보를 위해 XML 선언을 사용해야 합니다.

HTML에서 UTF-8 문자 인코딩을 선언하기 위해, 작성자는 문서의 상단 근처에 다음과 같은 마크업을 포함시킬 수 있습니다. (즉, head 요소 안에):

<meta charset="utf-8">

XML에서는, XML 선언을 대신 사용하여 다음과 같이 마크업의 가장 상단에 선언합니다:

<?xml version="1.0" encoding="utf-8"?>

4.2.6 style 요소

Element/style

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera3.5+Edge79+
Edge (Legacy)12+Internet Explorer3+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

HTMLStyleElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLStyleElement/media

Support in all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
메타데이터 콘텐츠.
이 요소가 사용될 수 있는 문맥:
메타데이터 콘텐츠가 예상되는 곳.
noscript 요소 내에서, head 요소의 자식인 경우.
내용 모델:
텍스트, 해당 텍스트는 준수하는 스타일 시트이어야 합니다.
텍스트/HTML에서의 태그 생략:
태그를 생략할 수 없습니다.
내용 속성:
전역 속성
media — 적용 가능한 미디어
blocking — 요소가 렌더링을 차단할 가능성이 있는지 여부
또한, title 속성은 이 요소에서 특별한 의미를 가집니다: CSS 스타일 시트 세트 이름
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLStyleElement : HTMLElement {
  [HTMLConstructor] constructor();

  attribute boolean disabled;
  [CEReactions, Reflect] attribute DOMString media;
  [SameObject, PutForwards=value, Reflect] readonly attribute DOMTokenList blocking;

  // also has obsolete members
};
HTMLStyleElement includes LinkStyle;

style 요소를 사용하면 저자가 문서에 CSS 스타일 시트를 포함할 수 있습니다. style 요소는 스타일 처리 모델에 대한 여러 입력 중 하나입니다. 이 요소는 사용자에게 콘텐츠를 표시하지 않습니다.

HTMLStyleElement/disabled

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)13+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

disabled 게터 단계는 다음과 같습니다:

  1. this연결된 CSS 스타일 시트가 없으면 false를 반환합니다.

  2. this연결된 CSS 스타일 시트비활성화 플래그가 설정된 경우 true를 반환합니다.

  3. false를 반환합니다.

disabled 세터 단계는 다음과 같습니다:

  1. this연결된 CSS 스타일 시트가 없는 경우, return.

  2. 주어진 값이 true이면 this연결된 CSS 스타일 시트비활성화 플래그를 설정합니다. 그렇지 않으면 this연결된 CSS 스타일 시트비활성화 플래그를 해제합니다.

중요하게도, disabled 속성 할당은 style 요소가 연결된 CSS 스타일 시트를 가지고 있을 때만 적용됩니다:

const style = document.createElement('style');
style.disabled = true;
style.textContent = 'body { background-color: red; }';
document.body.append(style);
console.log(style.disabled); // false

media 속성은 스타일이 적용될 미디어를 지정합니다. 이 값은 유효한 미디어 쿼리 목록이어야 합니다. 사용자 에이전트는 media 속성의 값이 환경에 맞는 경우 및 기타 관련 조건이 적용될 때 스타일을 적용해야 하며, 그렇지 않은 경우 스타일을 적용하지 않아야 합니다.

스타일은 예를 들어 CSS의 @media 블록을 사용하여 범위가 더 제한될 수 있습니다. 이 사양은 이러한 추가 제한이나 요구사항을 무효화하지 않습니다.

기본값은 media 속성이 생략된 경우 "all"이며, 이는 기본적으로 모든 미디어에 스타일이 적용된다는 의미입니다.

blocking 속성은 차단 속성입니다.

Alternative_style_sheets

하나의 엔진에서만 지원됨.

Firefox3+Safari?Chrome1–48
OperaYesEdgeNo
Edge (Legacy)?Internet Explorer8+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

title 속성이 style 요소에 있으면 CSS 스타일 시트 세트가 정의됩니다. style 요소에 title 속성이 없으면 제목이 없습니다. 조상 요소의 title 속성은 style 요소에 적용되지 않습니다. style 요소가 문서 트리에 없으면 title 속성은 무시됩니다. [CSSOM]

title 속성은 style 요소에 있으며, title 속성은 link 요소에 있으며, 전역 title 속성과 다릅니다. 제목이 없는 style 블록은 부모 요소의 제목을 상속하지 않고, 제목이 없습니다.

style 요소의 자식 텍스트 내용준수하는 스타일 시트이어야 합니다.

style 요소는 암묵적으로 렌더링을 차단할 가능성이 있는 요소입니다. 이 요소는 노드 문서의 파서에 의해 생성된 경우 암묵적으로 렌더링을 차단할 가능성이 있습니다.


사용자 에이전트는 다음 조건 중 하나가 발생할 때마다 style 블록 업데이트 알고리즘을 실행해야 합니다:

style 블록 업데이트 알고리즘은 다음과 같습니다:

  1. elementstyle 요소로 지정합니다.

  2. element연결된 CSS 스타일 시트가 있으면 해당 CSS 스타일 시트를 제거합니다.

  3. element연결되지 않은 경우, 반환합니다.

  4. elementtype 속성이 존재하며 값이 빈 문자열이 아니거나 ASCII 대소문자 구분을 하지 않는 "text/css"와 일치하지 않는 경우, 반환합니다.

    특히 "text/css; charset=utf-8"과 같은 매개변수가 있는 type 값은 이 알고리즘을 일찍 반환하게 만듭니다.

  5. 요소의 인라인 동작이 콘텐츠 보안 정책에 의해 차단되어야 하는지 여부 알고리즘이 style 요소, "style", 및 style 요소의 자식 텍스트 내용을 대상으로 실행할 때 "차단됨"을 반환하는 경우, 반환합니다. [CSP]

  6. 다음 속성으로 CSS 스타일 시트를 만듭니다:

    type

    text/css

    소유 노드

    element

    미디어

    elementmedia 속성.

    이는 속성의 현재 값을 복사한 것이 아닌, (이 시점에서 부재할 수 있는) 속성에 대한 참조입니다. CSSOM은 속성이 동적으로 설정, 변경 또는 제거될 때 어떻게 되는지를 정의합니다.

    제목

    element문서 트리에 있으면 elementtitle 속성, 그렇지 않으면 빈 문자열.

    다시 말하지만, 이것은 속성에 대한 참조입니다.

    대체 플래그

    설정하지 않음.

    원점 정리 플래그

    설정됨.

    위치
    부모 CSS 스타일 시트
    소유 CSS 규칙

    null

    비활성화 플래그

    기본값으로 유지.

    CSS 규칙

    초기화되지 않음.

    이것은 맞지 않습니다. 아마도 요소의 자식 텍스트 내용을 사용해야 할 것입니다? 문제 #2997로 추적되었습니다.

  7. element스크립트 차단 스타일 시트를 기여하는 경우, element추가하고, element노드 문서스크립트 차단 스타일 시트 세트에 추가합니다.

  8. elementmedia 속성 값이 환경에 맞는 경우이며 element렌더링을 차단할 가능성이 있는 경우, element에서 렌더링을 차단합니다.

스타일 시트의 중요한 하위 리소스(있는 경우)를 얻으려는 시도가 완료되거나, 스타일 시트에 중요한 하위 리소스가 없으면 스타일 시트가 구문 분석되고 처리된 후에 사용자 에이전트는 다음 단계를 실행해야 합니다:

중요한 하위 리소스를 가져오는 것은 명확하지 않으며, 아마도 문제 #968가 가장 좋은 해결책일 것입니다. 그동안, 중요한 하위 리소스 요청style 요소가 현재 렌더링을 차단하는지 여부에 따라 설정되어야 합니다.

  1. element를 스타일 시트와 연결된 style 요소로 지정합니다.

  2. success를 true로 설정합니다.

  3. 스타일 시트의 중요한 하위 리소스를 얻으려는 시도가 어떤 이유로든 실패한 경우(DNS 오류, HTTP 404 응답, 연결이 조기에 닫힌 경우, 지원되지 않는 콘텐츠 유형 등), success를 false로 설정합니다.

    CSS 구문 분석 오류나 PNG 디코딩 오류와 같은 콘텐츠 관련 오류는 success에 영향을 미치지 않습니다.

  4. element와 다음 단계를 주어진 요소 작업을 큐에 추가합니다:

    1. success가 true이면, element에서 load라는 이름의 이벤트를 발생시킵니다.

    2. 그렇지 않으면, element에서 error라는 이름의 이벤트를 발생시킵니다.

    3. element스크립트 차단 스타일 시트를 기여하는 경우:

      1. element노드 문서스크립트 차단 스타일 시트 세트element포함하고 있는지 확인합니다.

      2. element제거하고, element노드 문서스크립트 차단 스타일 시트 세트에서 제거합니다.

    4. element에서 렌더링 차단 해제를 수행합니다.

이 요소는 해당 요소의 로드 이벤트를 지연 시켜야 하며, 스타일 시트의 노드 문서중요 하위 리소스를 모두 가져올 때까지 기다려야 합니다.

이 사양은 스타일 시스템을 명시하지 않지만 대부분의 웹 브라우저에서 CSS가 지원될 것으로 예상됩니다. [CSS]

LinkStyle 인터페이스도 이 요소에 의해 구현됩니다. [CSSOM]

다음 문서는 스트레스 강조 표시가 기울임체 텍스트 대신 밝은 빨간색 텍스트로 스타일링되며, 제목과 라틴어 단어는 기본 기울임체로 유지됩니다. 이는 적절한 요소를 사용하여 문서를 쉽게 다시 스타일링하는 방법을 보여줍니다.

<!DOCTYPE html>
<html lang="en-US">
 <head>
  <title>My favorite book</title>
  <style>
   body { color: black; background: white; }
   em { font-style: normal; color: red; }
  </style>
 </head>
 <body>
  <p>My <em>favorite</em> book of all time has <em>got</em> to be
  <cite>A Cat's Life</cite>. It is a book by P. Rahmel that talks
  about the <i lang="la">Felis catus</i> in modern human society.</p>
 </body>
</html>

4.2.7 스타일링과 스크립팅의 상호작용

스타일 시트가 다른 리소스를 참조하지 않은 경우(예: style 요소에 의해 제공된 내부 스타일 시트로 @import 규칙이 없는 경우), 스타일 규칙은 스크립트에서 즉시 사용할 수 있어야 합니다. 그렇지 않은 경우, 스타일 규칙은 이벤트 루프렌더링 업데이트 단계에 도달한 후에만 스크립트에서 사용할 수 있어야 합니다.

HTML 파서 또는 XML 파서의 문맥에서 document에 있는 요소 el이 다음 조건이 모두 참일 때 스크립트를 차단하는 스타일 시트에 기여합니다:

위의 규칙에 상응하는 규칙이 <?xml-stylesheet?> PI에도 적용될 것으로 예상됩니다. 그러나 이것은 아직 철저히 조사되지 않았습니다.

document는 초기에는 비어 있는 순서가 지정된 세트스크립트 차단 스타일 시트 세트를 가지고 있습니다.

document document가 다음 단계가 참이면 스크립트를 차단하는 스타일 시트가 있는 것으로 간주됩니다:

  1. 만약 document스크립트 차단 스타일 시트 세트비어 있지 않다면 true를 반환합니다.

  2. 만약 document탐색 가능한 노드가 null이라면 false를 반환합니다.

  3. containerDocumentdocument탐색 가능한 노드컨테이너 문서로 설정합니다.

  4. 만약 containerDocument가 null이 아니고 containerDocument스크립트 차단 스타일 시트 세트비어 있지 않다면 true를 반환합니다.

  5. false를 반환합니다.

document스크립트를 차단하는 스타일 시트가 없는 경우에 스크립트를 차단하는 스타일 시트가 없는 것으로 간주됩니다.

4.3 섹션

Introduction_to_HTML/Document_and_website_structure#HTML_for_structuring_content

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+

4.3.1 body 요소

Element/body

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLBodyElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
html 요소의 두 번째 요소로.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서 태그 생략:
요소가 비어 있거나 body 요소 안의 첫 번째 내용이 ASCII 공백 또는 주석이 아닌 경우, body 요소의 시작 태그를 생략할 수 있습니다. 단, meta, noscript, link, script, style, 또는 template 요소가 첫 번째 내용인 경우는 제외됩니다.
body 요소의 종료 태그body 요소 바로 뒤에 주석이 없는 경우 생략할 수 있습니다.
콘텐츠 속성:
글로벌 속성
onafterprint
onbeforeprint
onbeforeunload
onhashchange
onlanguagechange
onmessage
onmessageerror
onoffline
ononline
onpageswap
onpagehide
onpagereveal
onpageshow
onpopstate
onrejectionhandled
onstorage
onunhandledrejection
onunload
접근성 고려 사항:
저자를 위한 지침.
구현자를 위한 지침.
DOM 인터페이스:
[Exposed=Window]
interface HTMLBodyElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 더 이상 사용되지 않는 멤버도 포함합니다.
};

HTMLBodyElement 포함합니다 WindowEventHandlers;

body 요소는 문서의 내용을 나타냅니다.

준수 문서에는 하나의 body 요소만 존재합니다. document.body IDL 속성은 스크립트에 문서의 body 요소에 쉽게 접근할 수 있게 해줍니다.

일부 DOM 작업(예: 드래그 앤 드롭 모델의 일부)은 "body 요소"로 정의됩니다. 이는 용어의 정의에 따라 DOM의 특정 요소를 참조하며, 임의의 body 요소를 의미하지 않습니다.

body 요소는 이벤트 핸들러 콘텐츠 속성으로 Window 객체의 여러 이벤트 핸들러를 노출합니다. 또한 이러한 이벤트 핸들러는 이벤트 핸들러 IDL 속성을 반영합니다.

이벤트 핸들러Window 객체에서 Window-반영 body 요소 이벤트 핸들러 세트로 명명된 이벤트 핸들러를 body 요소에 노출하며, 일반적인 이벤트 핸들러를 대체합니다.

따라서, 예를 들어, 오류 이벤트가 documentbody 요소의 자식에서 버블링되면, 먼저 해당 요소의 onerror 이벤트 핸들러 콘텐츠 속성이 트리거되고, 그 다음으로 루트 html 요소의 해당 속성이 트리거됩니다. 이 이벤트는 타겟에서 body로, html로, document로, Window로 버블링되며, 이벤트 핸들러Window가 아닌 body에서 이를 감지합니다. 그러나 bodyaddEventListener()를 사용하여 추가된 일반 이벤트 리스너는 이벤트가 body를 통해 버블링할 때 실행되며, Window 객체에 도달할 때는 실행되지 않습니다.

이 페이지는 사용자가 온라인 상태인지 여부를 표시하는 표시기를 업데이트합니다:

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>Online or offline?</title>
  <script>
   function update(online) {
     document.getElementById('status').textContent =
       online ? 'Online' : 'Offline';
   }
  </script>
 </head>
 <body ononline="update(true)"
       onoffline="update(false)"
       onload="update(navigator.onLine)">
  <p>You are: <span id="status">(Unknown)</span></p>
 </body>
</html>

4.3.2 article 요소

Element/article

모든 최신 엔진에서 지원됨.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+
카테고리:
플로우 콘텐츠.
섹션 콘텐츠.
확실한 콘텐츠.
이 요소를 사용할 수 있는 문맥:
섹션 콘텐츠가 예상되는 곳.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서 태그 생략:
어느 태그도 생략할 수 없음.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
저자를 위한 지침.
구현자를 위한 지침.
DOM 인터페이스:
HTMLElement 사용.

article 요소는 문서, 페이지, 애플리케이션 또는 사이트 내에서 완결된 또는 자립적인 구성을 나타내며, 원칙적으로 독립적으로 배포되거나 재사용될 수 있습니다. 예시로는 포럼 게시물, 잡지나 신문 기사, 블로그 글, 사용자 제출 댓글, 대화형 위젯 또는 장치, 또는 기타 독립적인 콘텐츠 항목이 있습니다.

article 요소가 중첩될 때, 내부 article 요소는 원칙적으로 외부 기사와 관련된 기사를 나타냅니다. 예를 들어, 사용자 제출 댓글을 허용하는 사이트의 블로그 글은 댓글을 블로그 글에 대한 article 요소 내에 중첩된 article 요소로 나타낼 수 있습니다.

article 요소와 관련된 저자 정보(예를 들어 address 요소)는 중첩된 article 요소에는 적용되지 않습니다.

특히 콘텐츠를 배포하려는 경우 article 요소는 Atom의 entry 요소와 목적이 유사합니다. [ATOM]

schema.org 마이크로데이터 어휘를 사용하여 article 요소에 대한 출판 날짜를 제공할 수 있습니다. CreativeWork 서브타입 중 하나를 사용하여 제공합니다.

페이지의 주요 콘텐츠(푸터, 헤더, 탐색 블록 및 사이드바 제외)가 하나의 자립적인 구성인 경우, 해당 콘텐츠는 article로 표시될 수 있지만, 이 경우 기술적으로 중복됩니다(단일 문서이므로 페이지가 단일 구성임이 자명하기 때문입니다).

이 예제는 article 요소를 사용하는 블로그 게시물과 몇 가지 schema.org 주석을 보여줍니다:

<article itemscope itemtype="http://schema.org/BlogPosting">
 <header>
  <h2 itemprop="headline">The Very First Rule of Life</h2>
  <p><time itemprop="datePublished" datetime="2009-10-09">3 days ago</time></p>
  <link itemprop="url" href="?comments=0">
 </header>
 <p>If there's a microphone anywhere near you, assume it's hot and
 sending whatever you're saying to the world. Seriously.</p>
 <p>...</p>
 <footer>
  <a itemprop="discussionUrl" href="?comments=1">Show comments...</a>
 </footer>
</article>

다음은 동일한 블로그 게시물이지만 일부 댓글을 표시한 것입니다:

<article itemscope itemtype="http://schema.org/BlogPosting">
 <header>
  <h2 itemprop="headline">The Very First Rule of Life</h2>
  <p><time itemprop="datePublished" datetime="2009-10-09">3 days ago</time></p>
  <link itemprop="url" href="?comments=0">
 </header>
 <p>If there's a microphone anywhere near you, assume it's hot and
 sending whatever you're saying to the world. Seriously.</p>
 <p>...</p>
 <section>
  <h1>Comments</h1>
  <article itemprop="comment" itemscope itemtype="http://schema.org/Comment" id="c1">
   <link itemprop="url" href="#c1">
   <footer>
    <p>Posted by: <span itemprop="creator" itemscope itemtype="http://schema.org/Person">
     <span itemprop="name">George Washington</span>
    </span></p>
    <p><time itemprop="dateCreated" datetime="2009-10-10">15 minutes ago</time></p>
   </footer>
   <p>Yeah! Especially when talking about your lobbyist friends!</p>
  </article>
  <article itemprop="comment" itemscope itemtype="http://schema.org/Comment" id="c2">
   <link itemprop="url" href="#c2">
   <footer>
    <p>Posted by: <span itemprop="creator" itemscope itemtype="http://schema.org/Person">
     <span itemprop="name">George Hammond</span>
    </span></p>
    <p><time itemprop="dateCreated" datetime="2009-10-10">5 minutes ago</time></p>
   </footer>
   <p>Hey, you have the same first name as me.</p>
  </article>
 </section>
</article>

각 댓글에 대한 정보(작성자와 작성 시간 등)를 제공하기 위해 footer 요소를 사용하는 것을 주목하세요. footer 요소는 적절한 경우, 이 예시에서처럼 해당 섹션의 시작 부분에 나타날 수도 있습니다. (이 경우에 header를 사용하는 것도 잘못된 것은 아닙니다. 이는 주로 작성자의 선호에 따라 다릅니다.)

이 예시에서는 article 요소들이 포털 페이지에 위젯을 호스팅하기 위해 사용됩니다. 위젯은 특정 스타일링과 스크립팅된 동작을 얻기 위해 커스텀 내장 요소로 구현되었습니다.

<!DOCTYPE HTML>
<html lang=en>
<title>eHome Portal</title>
<script src="/scripts/widgets.js"></script>
<link rel=stylesheet href="/styles/main.css">
<article is="stock-widget">
 <h2>Stocks</h2>
 <table>
  <thead> <tr> <th> Stock <th> Value <th> Delta
  <tbody> <template> <tr> <td> <td> <td> </template>
 </table>
 <p> <input type=button value="Refresh" onclick="this.parentElement.refresh()">
</article>
<article is="news-widget">
 <h2>News</h2>
 <ul>
  <template>
   <li>
    <p><img> <strong></strong>
    <p>
  </template>
 </ul>
 <p> <input type=button value="Refresh" onclick="this.parentElement.refresh()">
</article>

4.3.3 section 요소

Element/section

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (레거시)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+
카테고리:
플로우 콘텐츠.
섹션 콘텐츠.
눈에 보이는 콘텐츠.
이 요소가 사용할 수 있는 컨텍스트:
섹션 콘텐츠가 예상되는 곳에서 사용 가능.
콘텐츠 모델:
플로우 콘텐츠.
텍스트/HTML에서 태그 생략:
태그를 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자를 위한 가이드라인.
구현자를 위한 가이드라인.
DOM 인터페이스:
HTMLElement을 사용.

section 요소는 문서나 애플리케이션의 일반적인 섹션을 나타냅니다. 이 컨텍스트에서 섹션은 일반적으로 제목이 있는 콘텐츠의 주제별 그룹화입니다.

섹션의 예로는 챕터, 탭이 있는 대화 상자의 여러 탭 페이지 또는 논문의 번호가 매겨진 섹션이 있습니다. 웹사이트의 홈페이지는 소개, 뉴스 항목, 연락처 정보 등으로 나눌 수 있습니다.

작성자는 article 요소의 콘텐츠를 배포하는 것이 합리적일 때 section 요소 대신 사용할 것을 권장합니다.

section 요소는 일반적인 컨테이너 요소가 아닙니다. 요소가 스타일링 목적이나 스크립팅 편의를 위해서만 필요한 경우, 작성자는 div 요소를 사용하는 것이 좋습니다. 일반적인 규칙은 section 요소가 적합한 경우는 해당 요소의 콘텐츠가 문서의 개요에 명시적으로 나열되는 경우에만 해당된다는 것입니다.

다음 예시는 사과에 관한 기사(더 큰 웹 페이지의 일부)로, 두 개의 짧은 섹션을 포함하고 있습니다.

<article>
 <hgroup>
  <h2>Apples</h2>
  <p>Tasty, delicious fruit!</p>
 </hgroup>
 <p>The apple is the pomaceous fruit of the apple tree.</p>
 <section>
  <h3>Red Delicious</h3>
  <p>These bright red apples are the most common found in many
  supermarkets.</p>
 </section>
 <section>
  <h3>Granny Smith</h3>
  <p>These juicy, green apples make a great filling for
  apple pies.</p>
 </section>
</article>

다음은 졸업 프로그램의 예로, 졸업자 명단과 행사 설명 두 개의 섹션으로 구성되어 있습니다. (이 예시의 마크업은 요소 간 공백을 최소화하기 위해 가끔 사용되는 비정형 스타일을 포함하고 있습니다.)

<!DOCTYPE Html>
<Html Lang=En
 ><Head
   ><Title
     >Graduation Ceremony Summer 2022</Title
   ></Head
 ><Body
   ><H1
     >Graduation</H1
   ><Section
     ><H2
       >Ceremony</H2
     ><P
       >Opening Procession</P
     ><P
       >Speech by Valedictorian</P
     ><P
       >Speech by Class President</P
     ><P
       >Presentation of Diplomas</P
     ><P
       >Closing Speech by Headmaster</P
   ></Section
   ><Section
     ><H2
       >Graduates</H2
     ><Ul
       ><Li
         >Molly Carpenter</Li
       ><Li
         >Anastasia Luccio</Li
       ><Li
         >Ebenezar McCoy</Li
       ><Li
         >Karrin Murphy</Li
       ><Li
         >Thomas Raith</Li
       ><Li
         >Susan Rodriguez</Li
     ></Ul
   ></Section
 ></Body
></Html>

이 예시에서는 책 저자가 몇몇 섹션을 장(chapters)으로, 몇몇을 부록(appendices)으로 표시하였으며, CSS를 사용하여 이 두 종류의 섹션에 속하는 헤더를 다르게 스타일링하고 있습니다.

<style>
 section { border: double medium; margin: 2em; }
 section.chapter h2 { font: 2em Roboto, Helvetica Neue, sans-serif; }
 section.appendix h2 { font: small-caps 2em Roboto, Helvetica Neue, sans-serif; }
</style>
<header>
 <hgroup>
  <h1>My Book</h1>
  <p>A sample with not much content</p>
 </hgroup>
 <p><small>Published by Dummy Publicorp Ltd.</small></p>
</header>
<section class="chapter">
 <h2>My First Chapter</h2>
 <p>This is the first of my chapters. It doesn't say much.</p>
 <p>But it has two paragraphs!</p>
</section>
<section class="chapter">
 <h2>It Continues: The Second Chapter</h2>
 <p>Bla dee bla, dee bla dee bla. Boom.</p>
</section>
<section class="chapter">
 <h2>Chapter Three: A Further Example</h2>
 <p>It's not like a battle between brightness and earthtones would go
 unnoticed.</p>
 <p>But it might ruin my story.</p>
</section>
<section class="appendix">
 <h2>Appendix A: Overview of Examples</h2>
 <p>These are demonstrations.</p>
</section>
<section class="appendix">
 <h2>Appendix B: Some Closing Remarks</h2>
 <p>Hopefully this long example shows that you <em>can</em> style
 sections, so long as they are used to indicate actual sections.</p>
</section>

4.3.4 nav 요소

Element/nav

현재 모든 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+
카테고리:
플로우 콘텐츠.
섹셔닝 콘텐츠.
유의미한 콘텐츠.
이 요소를 사용할 수 있는 맥락:
섹셔닝 콘텐츠가 예상되는 곳.
콘텐츠 모델:
플로우 콘텐츠.
텍스트/HTML에서 태그 생략:
어느 태그도 생략할 수 없음.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
저자를 위한 가이드.
구현자를 위한 가이드.
DOM 인터페이스:
HTMLElement을 사용함.

nav 요소는 페이지 내에서 다른 페이지로 또는 페이지 내 다른 부분으로 연결하는 링크가 포함된 섹션을 나타냅니다.

모든 링크 그룹이 nav 요소 내에 있을 필요는 없습니다. 이 요소는 주로 주요 탐색 블록을 포함하는 섹션을 대상으로 합니다. 특히, 사이트의 푸터에 서비스 약관, 홈페이지, 저작권 페이지 등의 짧은 링크 목록이 있는 경우가 일반적입니다. 이러한 경우에는 footer 요소만으로도 충분하며, nav 요소를 사용할 수는 있지만, 보통은 불필요합니다.

화면 읽기 장치와 같은 사용자 에이전트는 내비게이션 정보를 초기 렌더링에서 생략하거나 요청 시 제공할 수 있습니다. 이러한 요소는 페이지에서 건너뛸 콘텐츠를 식별하거나 필요에 따라 정보를 즉시 제공하는 데 도움이 될 수 있습니다.

다음 예에서 두 개의 nav 요소가 있습니다. 하나는 사이트의 주요 탐색을 위한 것이고, 다른 하나는 페이지 자체의 부차적인 탐색을 위한 것입니다.

<body>
 <h1>The Wiki Center Of Exampland</h1>
 <nav>
  <ul>
   <li><a href="/">Home</a></li>
   <li><a href="/events">Current Events</a></li>
   ...more...
  </ul>
 </nav>
 <article>
  <header>
   <h2>Demos in Exampland</h2>
   <p>Written by A. N. Other.</p>
  </header>
  <nav>
   <ul>
    <li><a href="#public">Public demonstrations</a></li>
    <li><a href="#destroy">Demolitions</a></li>
    ...more...
   </ul>
  </nav>
  <div>
   <section id="public">
    <h2>Public demonstrations</h2>
    <p>...more...</p>
   </section>
   <section id="destroy">
    <h2>Demolitions</h2>
    <p>...more...</p>
   </section>
   ...more...
  </div>
  <footer>
   <p><a href="?edit">Edit</a> | <a href="?delete">Delete</a> | <a href="?Rename">Rename</a></p>
  </footer>
 </article>
 <footer>
  <p><small>© copyright 1998 Exampland Emperor</small></p>
 </footer>
</body>

다음 예에서는 페이지에 여러 링크가 있지만, 그중 하나만 내비게이션 섹션으로 간주됩니다.

<body itemscope itemtype="http://schema.org/Blog">
 <header>
  <h1>Wake up sheeple!</h1>
  <p><a href="news.html">News</a> -
     <a href="blog.html">Blog</a> -
     <a href="forums.html">Forums</a></p>
  <p>Last Modified: <span itemprop="dateModified">2009-04-01</span></p>
  <nav>
   <h2>Navigation</h2>
   <ul>
    <li><a href="articles.html">Index of all articles</a></li>
    <li><a href="today.html">Things sheeple need to wake up for today</a></li>
    <li><a href="successes.html">Sheeple we have managed to wake</a></li>
   </ul>
  </nav>
 </header>
 <main>
  <article itemprop="blogPosts" itemscope itemtype="http://schema.org/BlogPosting">
   <header>
    <h2 itemprop="headline">My Day at the Beach</h2>
   </header>
   <div itemprop="articleBody">
    <p>Today I went to the beach and had a lot of fun.</p>
    ...more content...
   </div>
   <footer>
    <p>Posted <time itemprop="datePublished" datetime="2009-10-10">Thursday</time>.</p>
   </footer>
  </article>
  ...more blog posts...
 </main>
 <footer>
  <p>Copyright ©
   <span itemprop="copyrightYear">2010</span>
   <span itemprop="copyrightHolder">The Example Company</span>
  </p>
  <p><a href="about.html">About</a> -
     <a href="policy.html">Privacy Policy</a> -
     <a href="contact.html">Contact Us</a></p>
 </footer>
</body>

위 예에서 블로그 게시물의 발행 날짜와 기타 메타데이터를 제공하기 위해 schema.org 어휘를 사용하는 마이크로데이터 주석도 볼 수 있습니다.

nav 요소는 반드시 목록을 포함해야 하는 것은 아니며, 다른 종류의 콘텐츠도 포함할 수 있습니다. 이 내비게이션 블록에서는 링크가 산문 형태로 제공됩니다:

<nav>
 <h1>Navigation</h1>
 <p>You are on my home page. To the north lies <a href="/blog">my
 blog</a>, from whence the sounds of battle can be heard. To the east
 you can see a large mountain, upon which many <a
 href="/school">school papers</a> are littered. Far up thus mountain
 you can spy a little figure who appears to be me, desperately
 scribbling a <a href="/school/thesis">thesis</a>.</p>
 <p>To the west are several exits. One fun-looking exit is labeled <a
 href="https://games.example.com/">"games"</a>. Another more
 boring-looking exit is labeled <a
 href="https://isp.example.net/">ISP™</a>.</p>
 <p>To the south lies a dark and dank <a href="/about">contacts
 page</a>. Cobwebs cover its disused entrance, and at one point you
 see a rat run quickly out of the page.</p>
</nav>

이 예시에서는 nav가 이메일 애플리케이션에서 사용되어 사용자가 폴더를 전환할 수 있도록 합니다:

<p><input type=button value="Compose" onclick="compose()"></p>
<nav>
 <h1>Folders</h1>
 <ul>
  <li> <a href="/inbox" onclick="return openFolder(this.href)">Inbox</a> <span class=count></span>
  <li> <a href="/sent" onclick="return openFolder(this.href)">Sent</a>
  <li> <a href="/drafts" onclick="return openFolder(this.href)">Drafts</a>
  <li> <a href="/trash" onclick="return openFolder(this.href)">Trash</a>
  <li> <a href="/customers" onclick="return openFolder(this.href)">Customers</a>
 </ul>
</nav>

4.3.5 aside 요소

Element/aside

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+
카테고리:
흐름 콘텐츠.
구획 콘텐츠.
명확한 콘텐츠.
이 요소를 사용할 수 있는 맥락:
구획 콘텐츠가 예상되는 곳.
콘텐츠 모델:
흐름 콘텐츠.
태그 생략:
두 태그 모두 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement 사용.

aside 요소는 페이지의 일부분을 나타내며, 해당 요소 주위의 콘텐츠와 간접적으로 관련된 콘텐츠로 구성되며, 해당 콘텐츠와는 분리된 것으로 간주될 수 있습니다. 이러한 구획은 인쇄된 타이포그래피에서 종종 사이드바로 표현됩니다.

이 요소는 인용구나 사이드바와 같은 타이포그래피 효과, 광고, nav 요소 그룹, 페이지의 주요 콘텐츠와 별개로 간주되는 기타 콘텐츠에 사용할 수 있습니다.

단순히 괄호 안의 내용을 나타내기 위해 aside 요소를 사용하는 것은 적절하지 않습니다. 이들은 문서의 주요 흐름의 일부로 간주되기 때문입니다.

다음 예시는 유럽에 대한 훨씬 긴 뉴스 기사에서 스위스에 대한 배경 정보를 표시하기 위해 aside가 사용되는 방식을 보여줍니다.

<aside>
 <h2>Switzerland</h2>
 <p>Switzerland, a land-locked country in the middle of geographic
 Europe, has not joined the geopolitical European Union, though it is
 a signatory to a number of European treaties.</p>
</aside>

다음 예시는 더 긴 기사에서 인용문을 마크업하기 위해 aside가 사용되는 방식을 보여줍니다.

...

<p>He later joined a large company, continuing on the same work.
<q>I love my job. People ask me what I do for fun when I'm not at
work. But I'm paid to do my hobby, so I never know what to
answer. Some people wonder what they would do if they didn't have to
work... but I know what I would do, because I was unemployed for a
year, and I filled that time doing exactly what I do now.</q></p>

<aside>
 <q>People ask me what I do for fun when I'm not at work. But I'm
 paid to do my hobby, so I never know what to answer.</q>
</aside>

<p>Of course his work — or should that be hobby? —
isn't his only passion. He also enjoys other pleasures.</p>

...

다음 발췌문은 블로그롤과 블로그의 기타 사이드 콘텐츠에 대해 aside를 사용하는 방법을 보여줍니다:

<body>
 <header>
  <h1>My wonderful blog</h1>
  <p>My tagline</p>
 </header>
 <aside>
  <!-- this aside contains two sections that are tangentially related
  to the page, namely, links to other blogs, and links to blog posts
  from this blog -->
  <nav>
   <h2>My blogroll</h2>
   <ul>
    <li><a href="https://blog.example.com/">Example Blog</a>
   </ul>
  </nav>
  <nav>
   <h2>Archives</h2>
   <ol reversed>
    <li><a href="/last-post">My last post</a>
    <li><a href="/first-post">My first post</a>
   </ol>
  </nav>
 </aside>
 <aside>
  <!-- this aside is tangentially related to the page also, it
  contains twitter messages from the blog author -->
  <h1>Twitter Feed</h1>
  <blockquote cite="https://twitter.example.net/t31351234">
   I'm on vacation, writing my blog.
  </blockquote>
  <blockquote cite="https://twitter.example.net/t31219752">
   I'm going to go on vacation soon.
  </blockquote>
 </aside>
 <article>
  <!-- this is a blog post -->
  <h2>My last post</h2>
  <p>This is my last post.</p>
  <footer>
   <p><a href="/last-post" rel=bookmark>Permalink</a>
  </footer>
 </article>
 <article>
  <!-- this is also a blog post -->
  <h2>My first post</h2>
  <p>This is my first post.</p>
  <aside>
   <!-- this aside is about the blog post, since it's inside the
   <article> element; it would be wrong, for instance, to put the
   blogroll here, since the blogroll isn't really related to this post
   specifically, only to the page as a whole -->
   <h2>Posting</h2>
   <p>While I'm thinking about it, I wanted to say something about
   posting. Posting is fun!</p>
  </aside>
  <footer>
   <p><a href="/first-post" rel=bookmark>Permalink</a>
  </footer>
 </article>
 <footer>
  <p><a href="/archives">Archives</a> -
   <a href="/about">About me</a> -
   <a href="/copyright">Copyright</a></p>
 </footer>
</body>

4.3.6 h1, h2, h3, h4, h5, 및 h6 요소들

요소/Heading_Elements

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

요소/Heading_Elements

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

요소/Heading_Elements

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

요소/Heading_Elements

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

요소/Heading_Elements

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

요소/Heading_Elements

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLHeadingElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
헤딩 콘텐츠.
실체 콘텐츠.
이 요소를 사용할 수 있는 문맥:
hgroup 요소의 자식으로.
헤딩 콘텐츠가 예상되는 곳에서.
콘텐츠 모델:
구문 콘텐츠.
태그 생략 (text/html):
태그 생략 불가능.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자를 위한 가이드.
구현자를 위한 가이드.
DOM 인터페이스:
[Exposed=Window]
interface HTMLHeadingElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 구식 멤버도 포함됨
};

이 요소들은 그들의 섹션에 대한 제목을 나타냅니다.

이 요소들의 의미와 정의는 제목과 개요 섹션에서 정의됩니다.

이 요소들은 이름에 있는 숫자로 주어진 제목 수준을 가지고 있습니다. 제목 수준은 중첩된 섹션의 레벨과 대응됩니다. h1 요소는 최상위 섹션을 위한 것이고, h2 는 하위 섹션을 위한 것이며, h3 는 하위의 하위 섹션을 위한 것이며, 계속해서 이어집니다.

각각의 문서 개요(제목 및 섹션 구조)와 관련하여, 이 두 스니펫은 의미적으로 동일합니다:

<body>
<h1>Let's call it a draw(ing surface)</h1>
<h2>Diving in</h2>
<h2>Simple shapes</h2>
<h2>Canvas coordinates</h2>
<h3>Canvas coordinates diagram</h3>
<h2>Paths</h2>
</body>
<body>
 <h1>Let's call it a draw(ing surface)</h1>
 <section>
  <h2>Diving in</h2>
 </section>
 <section>
  <h2>Simple shapes</h2>
 </section>
 <section>
  <h2>Canvas coordinates</h2>
  <section>
   <h3>Canvas coordinates diagram</h3>
  </section>
 </section>
 <section>
  <h2>Paths</h2>
 </section>
</body>

작성자는 전자의 스타일을 간결함 때문에 선호할 수 있고, 후자의 스타일을 추가적인 스타일링 훅 때문에 선호할 수 있습니다. 어느 것이 더 좋은지는 순전히 선호하는 작성 스타일의 문제입니다.

4.3.7 hgroup 요소

요소/hgroup

모든 현재 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android2.2+Samsung Internet?Opera Android11.1+
카테고리:
플로우 콘텐츠.
헤딩 콘텐츠.
실체 콘텐츠.
이 요소를 사용할 수 있는 문맥:
헤딩 콘텐츠가 예상되는 곳에서.
콘텐츠 모델:
하나 이상의 p 요소들로 시작하고, 그 다음에 하나의 h1, h2, h3, h4, h5, 또는 h6 요소가 있으며, 그 다음에 선택적으로 스크립트 지원 요소와 섞일 수 있는 하나 이상의 p 요소들이 옵니다.
태그 생략 (text/html):
태그 생략 불가능.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자를 위한 가이드.
구현자를 위한 가이드.
DOM 인터페이스:
HTMLElement을 사용.

hgroup 요소는 제목과 관련된 콘텐츠를 나타냅니다. 이 요소는 h1h6 요소를 하나 이상의 p 요소와 함께 그룹화하여, 부제목, 대체 제목 또는 태그라인을 나타내는 콘텐츠를 포함할 수 있습니다.

hgroup 요소에 포함된 유효한 제목의 예가 있습니다.

<hgroup>
 <h1>The reality dysfunction</h1>
 <p>Space is not the only void</p>
</hgroup>
<hgroup>
 <h1>Dr. Strangelove</h1>
 <p>Or: How I Learned to Stop Worrying and Love the Bomb</p>
</hgroup>

4.3.8 header 요소

요소/header

모든 현재 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+
카테고리:
플로우 콘텐츠.
실체 콘텐츠.
이 요소를 사용할 수 있는 문맥:
플로우 콘텐츠가 예상되는 곳에서.
콘텐츠 모델:
플로우 콘텐츠, 하지만 하위 요소로 header 또는 footer 요소가 없어야 합니다.
태그 생략 (text/html):
태그 생략 불가능.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
상위 요소에 섹션 콘텐츠 요소가 있는 경우: 작성자를 위한 가이드; 구현자를 위한 가이드.
그 외의 경우: 작성자를 위한 가이드; 구현자를 위한 가이드.
DOM 인터페이스:
HTMLElement을 사용.

header 요소는 소개 또는 탐색 도구의 그룹을 나타냅니다.

header 요소는 일반적으로 제목 (h1h6 요소 또는 hgroup 요소)을 포함하도록 되어 있지만, 이는 필수가 아닙니다. header 요소는 또한 섹션의 목차, 검색 양식 또는 관련 로고를 감싸는 데 사용할 수 있습니다.

다음은 몇 가지 샘플 헤더입니다. 첫 번째 예시는 게임용 헤더입니다:

<header>
 <p>Welcome to...</p>
 <h1>Voidwars!</h1>
</header>

다음 스니펫은 요소가 사양의 헤더를 마크업하는 데 어떻게 사용될 수 있는지를 보여줍니다:

<header>
 <hgroup>
  <h1>Fullscreen API</h1>
  <p>Living Standard — Last Updated 19 October 2015<p>
 </hgroup>
 <dl>
  <dt>Participate:</dt>
  <dd><a href="https://github.com/whatwg/fullscreen">GitHub whatwg/fullscreen</a></dd>
  <dt>Commits:</dt>
  <dd><a href="https://github.com/whatwg/fullscreen/commits">GitHub whatwg/fullscreen/commits</a></dd>
 </dl>
</header>

header 요소는 섹션 콘텐츠가 아닙니다. 이 요소는 새로운 섹션을 도입하지 않습니다.

이 예에서, 페이지는 h1 요소에 의해 주어진 페이지 제목과, h2 요소들에 의해 주어진 두 개의 하위 섹션을 가지고 있습니다. header 요소 이후의 콘텐츠는 여전히 header 요소에서 시작된 마지막 하위 섹션의 일부입니다. 이는 header 요소가 개요 알고리즘에 참여하지 않기 때문입니다.

<body>
 <header>
  <h1>Little Green Guys With Guns</h1>
  <nav>
   <ul>
    <li><a href="/games">Games</a>
    <li><a href="/forum">Forum</a>
    <li><a href="/download">Download</a>
   </ul>
  </nav>
  <h2>Important News</h2> <!-- this starts a second subsection -->
  <!-- this is part of the subsection entitled "Important News" -->
  <p>To play today's games you will need to update your client.</p>
  <h2>Games</h2> <!-- this starts a third subsection -->
 </header>
 <p>You have three active games:</p>
 <!-- this is still part of the subsection entitled "Games" -->
 ...

요소/footer

모든 현재 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome5+
Opera11.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11.1+
카테고리:
플로우 콘텐츠.
실체 콘텐츠.
이 요소를 사용할 수 있는 문맥:
플로우 콘텐츠가 예상되는 곳에서.
콘텐츠 모델:
플로우 콘텐츠, 하지만 하위 요소로 header 또는 footer 요소가 없어야 합니다.
태그 생략 (text/html):
태그 생략 불가능.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
상위 요소에 섹션 콘텐츠 요소가 있는 경우: 작성자를 위한 가이드; 구현자를 위한 가이드.
그 외의 경우: 작성자를 위한 가이드; 구현자를 위한 가이드.
DOM 인터페이스:
HTMLElement을 사용.

footer 요소는 가장 가까운 상위 섹션 콘텐츠 요소나 그러한 상위 요소가 없을 경우 body 요소에 대한 푸터를 나타냅니다. 푸터에는 일반적으로 섹션의 작성자에 대한 정보, 관련 문서 링크, 저작권 정보 등이 포함됩니다.

footer 요소가 전체 섹션을 포함하는 경우, 그것은 부록, 인덱스, 긴 판권 페이지, 상세한 라이선스 계약서, 또는 이와 유사한 내용을 나타냅니다.

섹션의 작성자 또는 편집자에 대한 연락처 정보는 address 요소에 속하며, 이는 footer 내부에 있을 수 있습니다. 작성자에 대한 정보나 기타 정보는 header 또는 footer에 배치할 수 있습니다(또는 그 어느 곳에도 배치하지 않을 수 있습니다). 이 요소들의 주요 목적은 단지 작성자가 유지 관리 및 스타일링하기 쉬운 자기 설명적인 마크업을 작성할 수 있도록 돕는 것입니다. 이 요소들은 작성자에게 특정한 구조를 강요하려는 의도가 아닙니다.

푸터는 보통 섹션의 에 나타나지만, 반드시 그렇게 해야 하는 것은 아닙니다.

상위에 섹션 콘텐츠 요소가 없을 경우, 페이지 전체에 적용됩니다.

footer 요소는 자체적으로 섹션 콘텐츠가 아닙니다. 이 요소는 새로운 섹션을 도입하지 않습니다.

여기에 동일한 내용으로 상단과 하단에 두 개의 푸터가 있는 페이지가 있습니다:

<body>
 <footer><a href="../">Back to index...</a></footer>
 <hgroup>
  <h1>Lorem ipsum</h1>
  <p>The ipsum of all lorems</p>
 </hgroup>
 <p>A dolor sit amet, consectetur adipisicing elit, sed do eiusmod
 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
 veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
 ea commodo consequat. Duis aute irure dolor in reprehenderit in
 voluptate velit esse cillum dolore eu fugiat nulla
 pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
 culpa qui officia deserunt mollit anim id est laborum.</p>
 <footer><a href="../">Back to index...</a></footer>
</body>

다음은 footer 요소가 사이트 전체의 푸터와 섹션 푸터 모두에 사용된 예시입니다.

<!DOCTYPE HTML>
<HTML LANG="en"><HEAD>
<TITLE>The Ramblings of a Scientist</TITLE>
<BODY>
<H1>The Ramblings of a Scientist</H1>
<ARTICLE>
 <H1>Episode 15</H1>
 <VIDEO SRC="/fm/015.ogv" CONTROLS PRELOAD>
  <P><A HREF="/fm/015.ogv">Download video</A>.</P>
 </VIDEO>
 <FOOTER> <!-- footer for article -->
  <P>Published <TIME DATETIME="2009-10-21T18:26-07:00">on 2009/10/21 at 6:26pm</TIME></P>
 </FOOTER>
</ARTICLE>
<ARTICLE>
 <H1>My Favorite Trains</H1>
 <P>I love my trains. My favorite train of all time is a Köf.</P>
 <P>It is fun to see them pull some coal cars because they look so
 dwarfed in comparison.</P>
 <FOOTER> <!-- footer for article -->
  <P>Published <TIME DATETIME="2009-09-15T14:54-07:00">on 2009/09/15 at 2:54pm</TIME></P>
 </FOOTER>
</ARTICLE>
<FOOTER> <!-- site wide footer -->
 <NAV>
  <P><A HREF="/credits.html">Credits</A><A HREF="/tos.html">Terms of Service</A><A HREF="/index.html">Blog Index</A></P>
 </NAV>
 <P>Copyright © 2009 Gordon Freeman</P>
</FOOTER>
</BODY>
</HTML>

일부 사이트 디자인에는 "fat footers"라고 불리는 푸터가 포함되어 있습니다. 이러한 푸터는 이미지, 다른 기사로의 링크, 피드백을 보낼 수 있는 페이지로의 링크, 특별 제안 등 많은 자료를 포함하고 있어, 어떤 면에서는 푸터에 "전체 첫 페이지"가 있는 것과 같습니다.

이 조각은 "fat footer"가 있는 사이트 페이지의 하단을 보여줍니다:

...
 <footer>
  <nav>
   <section>
    <h1>Articles</h1>
    <p><img src="images/somersaults.jpeg" alt=""> Go to the gym with
    our somersaults class! Our teacher Jim takes you through the paces
    in this two-part article. <a href="articles/somersaults/1">Part
    1</a> · <a href="articles/somersaults/2">Part 2</a></p>
    <p><img src="images/kindplus.jpeg"> Tired of walking on the edge of
    a clif<!-- sic -->? Our guest writer Lara shows you how to bumble
    your way through the bars. <a href="articles/kindplus/1">Read
    more...</a></p>
    <p><img src="images/crisps.jpeg"> The chips are down, now all
    that's left is a potato. What can you do with it? <a
    href="articles/crisps/1">Read more...</a></p>
   </section>
   <ul>
    <li> <a href="/about">About us...</a>
    <li> <a href="/feedback">Send feedback!</a>
    <li> <a href="/sitemap">Sitemap</a>
   </ul>
  </nav>
  <p><small>Copyright © 2015 The Snacker —
  <a href="/tos">Terms of Service</a></small></p>
 </footer>
</body>

4.3.10 address 요소

요소/address

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
실체 콘텐츠.
이 요소를 사용할 수 있는 문맥:
플로우 콘텐츠가 예상되는 곳에서.
콘텐츠 모델:
플로우 콘텐츠, 하지만 하위 요소로 헤딩 콘텐츠, 섹션 콘텐츠, header, footer, 또는 address 요소가 없어야 합니다.
태그 생략 (text/html):
태그 생략 불가능.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자를 위한 가이드.
구현자를 위한 가이드.
DOM 인터페이스:
HTMLElement을 사용.

address 요소는 가장 가까운 상위 article 또는 body 요소의 연락처 정보를 나타냅니다. 만약 그것이 body 요소라면, 이 연락처 정보는 문서 전체에 적용됩니다.

예를 들어, W3C 웹사이트의 HTML 관련 페이지에는 다음과 같은 연락처 정보가 포함될 수 있습니다:

<ADDRESS>
 <A href="../People/Raggett/">Dave Raggett</A>,
 <A href="../People/Arnaud/">Arnaud Le Hors</A>,
 contact persons for the <A href="Activity">W3C HTML Activity</A>
</ADDRESS>

address 요소는 그 주소가 실제로 관련된 연락처 정보가 아닌 경우 임의의 주소(예: 우편 주소)를 나타내는 데 사용해서는 안 됩니다. (우편 주소를 마크업하는 데는 p 요소가 적절한 요소입니다.)

address 요소에는 연락처 정보 이외의 정보가 포함되어서는 안 됩니다.

예를 들어, 다음은 address 요소의 비준수 사용 사례입니다:

<ADDRESS>Last Modified: 1999/12/24 23:37:50</ADDRESS>

일반적으로 address 요소는 다른 정보와 함께 footer 요소에 포함됩니다.

노드 node의 연락처 정보는 다음 목록에서 처음 해당하는 항목으로 정의된 address 요소들의 집합입니다:

만약 nodearticle 요소라면
만약 nodebody 요소라면

연락처 정보는 node를 상위 요소로 가지며 node의 하위 요소가 아닌 다른 body 또는 article 요소를 상위 요소로 가지지 않는 모든 address 요소들로 구성됩니다.

만약 nodearticle 요소를 상위 요소로 가진다면
만약 nodebody 요소를 상위 요소로 가진다면

node의 연락처 정보는 가장 가까운 article 또는 body 요소 상위 요소의 연락처 정보와 동일합니다.

만약 node노드 문서body 요소를 가진다면

node의 연락처 정보는 documentbody 요소의 연락처 정보와 동일합니다.

그 외의 경우

node에 대한 연락처 정보가 없습니다.

사용자 에이전트는 사용자가 노드의 연락처 정보를 노출하거나, 섹션의 연락처 정보를 기반으로 섹션을 인덱싱하는 등의 다른 목적으로 사용할 수 있습니다.

이 예제에서는 푸터에 연락처 정보와 저작권 고지가 포함되어 있습니다.

<footer>
 <address>
  For more details, contact
  <a href="mailto:js@example.com">John Smith</a>.
 </address>
 <p><small>© copyright 2038 Example Corp.</small></p>
</footer>

4.3.11 제목과 개요

h1h6 요소는 제목 수준을 가지며, 이는 해당 요소의 계산된 제목 수준 가져오기에 의해 결정됩니다.

이 요소들은 제목나타냅니다. 제목제목 수준이 낮을수록, 해당 제목이 갖는 상위 섹션의 수가 적습니다.

개요는 문서의 모든 제목트리 순서로 포함합니다.

개요는 예를 들어, 목차를 생성할 때와 같이 문서 개요를 생성하는 데 사용되어야 합니다. 인터랙티브한 목차를 만들 때, 항목은 사용자를 관련 제목으로 이동시켜야 합니다.

문서에 하나 이상의 제목이 있는 경우, 개요 내의 적어도 하나의 제목은 1의 제목 수준을 가져야 합니다.

또한, 개요에서 다른 제목을 따르는 각 제목은 선행 lead제목 수준보다 낮거나, 같거나, 1만큼 높은 제목 수준을 가져야 합니다.

다음 예시는 비준수 사례입니다:

<body>
 <h1>Apples</h1>
 <p>Apples are fruit.</p>
 <section>
  <h3>Taste</h3>
  <p>They taste lovely.</p>
 </section>
</body>

다음과 같이 작성하면 준수하게 됩니다:

<body>
 <h1>Apples</h1>
 <p>Apples are fruit.</p>
 <section>
  <h2>Taste</h2>
  <p>They taste lovely.</p>
 </section>
</body>
4.3.11.1 제목 수준 & 오프셋

headingoffset 콘텐츠 속성을 사용하면 작성자가 하위 요소들의 제목 수준을 오프셋할 수 있습니다.

headingreset 콘텐츠 속성을 사용하면 작성자가 제목 오프셋 계산이 해당 속성을 가진 요소를 넘어 탐색하지 않도록 막을 수 있습니다.

요소의 계산된 제목 수준을 가져오기: 요소 element가 주어졌을 때,

  1. level을 0으로 설정한다.

  2. element의 local name이 h1이면, level을 1로 설정한다.

  3. element의 local name이 h2이면, level을 2로 설정한다.

  4. element의 local name이 h3이면, level을 3으로 설정한다.

  5. element의 local name이 h4이면, level을 4로 설정한다.

  6. element의 local name이 h5이면, level을 5로 설정한다.

  7. element의 local name이 h6이면, level을 6으로 설정한다.

  8. Assert: level이 0이 아님을 보장한다.

  9. level요소의 계산된 제목 오프셋 가져오기 결과를 더한다. element를 인자로 사용한다.

  10. level이 9보다 크면 9를 반환한다.

  11. level을 반환한다.

요소의 계산된 제목 오프셋 가져오기: 요소 element가 주어졌을 때 다음 단계를 수행한다. 반환값은 0 이상의 정수이다.

  1. offset을 0으로 설정한다.

  2. inclusiveAncestorelement로 설정한다.

  3. inclusiveAncestor가 null이 아닐 동안:

    1. nextOffset을 0으로 설정한다.

    2. inclusiveAncestorHTML 요소이고, headingoffset 속성을 가지고 있으면, 그 값을 음이 아닌 정수 구문 분석 규칙으로 파싱한다.

      파싱 결과가 에러가 아니면 nextOffset을 그 값으로 설정한다.

    3. offsetnextOffset을 더한다.

    4. inclusiveAncestorHTML 요소이고 headingreset 속성을 가지고 있으면 offset을 반환한다.

    5. inclusiveAncestor플랫 트리에서의 부모 노드로 설정한다.

  4. offset을 반환한다.

이 예제는 headingoffset, headingreset, 그리고 aria-level 속성들의 조합을 보여주며, 주석을 통해 해당 제목 수준을 시연합니다. 이 예제는 다양한 조합을 설명하기 위한 것이며, 모범 사례 예시는 아닙니다.

<body>
  <main>
   <h1>This is a heading level 1</h1>
   <article headingoffset="1">
    <h1>This is a heading level 2</h1>
    <section headingoffset="1">
     <h1>This is a heading level 3</h1>
     <dialog headingreset>
      <h1>This is a heading level 1</h1>
     </dialog>
    </section>
   </article>
   <h1 aria-level="2">This is a heading level 2</h1>
  </main>
</body>
4.3.11.2 샘플 개요

다음 마크업 조각:

<body>
  <hgroup id="document-title">
    <h1>HTML: Living Standard</h1>
    <p>Last Updated 12 August 2016</p>
  </hgroup>
  <p>Some intro to the document.</p>
  <h2>Table of contents</h2>
  <ol id=toc>...</ol>
  <h2>First section</h2>
  <p>Some intro to the first section.</p>
</body>

...는 3개의 문서 제목을 생성합니다:

  1. <h1>HTML: Living Standard</h1>

  2. <h2>Table of contents</h2>.

  3. <h2>First section</h2>.

개요의 렌더링된 뷰는 다음과 같이 보일 수 있습니다:

상위 섹션 제목이 "HTML: Living Standard"이고, 두 개의 하위 섹션이 "Table of contents"와 "First section"인 문서 개요입니다.

먼저, 다음은 장과 하위 섹션이 매우 짧은 책으로 구성된 문서입니다:

<!DOCTYPE HTML>
<html lang=en>
<title>The Tax Book (all in one page)</title>
<h1>The Tax Book</h1>
<h2>Earning money</h2>
<p>Earning money is good.</p>
<h3>Getting a job</h3>
<p>To earn money you typically need a job.</p>
<h2>Spending money</h2>
<p>Spending is what money is mainly used for.</p>
<h3>Cheap things</h3>
<p>Buying cheap things often not cost-effective.</p>
<h3>Expensive things</h3>
<p>The most expensive thing is often not the most cost-effective either.</p>
<h2>Investing money</h2>
<p>You can lend your money to other people.</p>
<h2>Losing money</h2>
<p>If you spend money or invest money, sooner or later you will lose money.
<h3>Poor judgement</h3>
<p>Usually if you lose money it's because you made a mistake.</p>

개요는 다음과 같이 표현될 수 있습니다:

  1. The Tax Book
    1. Earning money
      1. Getting a job
    2. Spending money
      1. Cheap things
      2. Expensive things
    3. Investing money
    4. Losing money
      1. Poor judgement

title 요소는 제목이 아님에 유의하세요.

문서에는 여러 개의 최상위 제목이 포함될 수 있습니다:

<!DOCTYPE HTML>
<html lang=en>
<title>Alphabetic Fruit</title>
<h1>Apples</h1>
<p>Pomaceous.</p>
<h1>Bananas</h1>
<p>Edible.</p>
<h1>Carambola</h1>
<p>Star.</p>

문서의 개요는 다음과 같이 표현될 수 있습니다:

  1. Apples
  2. Bananas
  3. Carambola

header 요소는 문서의 개요에 영향을 주지 않습니다:

<!DOCTYPE HTML>
<html lang="en">
<title>We're adopting a child! — Ray's blog</title>
<h1>Ray's blog</h1>
<article>
 <header>
  <nav>
   <a href="?t=-1d">Yesterday</a>;
   <a href="?t=-7d">Last week</a>;
   <a href="?t=-1m">Last month</a>
  </nav>
  <h2>We're adopting a child!</h2>
 </header>
 <p>As of today, Janine and I have signed the papers to become
 the proud parents of baby Diane! We've been looking forward to
 this day for weeks.</p>
</article>
</html>

문서의 개요는 다음과 같이 표현될 수 있습니다:

  1. Ray's blog
    1. We're adopting a child!

다음 예제는 준수하지만, 제목 수준이 1인 제목이 없기 때문에 권장되지는 않습니다:

<!DOCTYPE HTML>
<html lang=en>
<title>Alphabetic Fruit</title>
<section>
 <h2>Apples</h2>
 <p>Pomaceous.</p>
</section>
<section>
 <h2>Bananas</h2>
 <p>Edible.</p>
</section>
<section>
 <h2>Carambola</h2>
 <p>Star.</p>
</section>

문서의 개요는 다음과 같이 표현될 수 있습니다:

    1. Apples
    2. Bananas
    3. Carambola

다음 예제는 준수하지만, 첫 번째 제목제목 수준이 1이 아니기 때문에 권장되지는 않습니다:

<!DOCTYPE HTML>
<html lang=en>
<title>Feathers on The Site of Encyclopedic Knowledge</title>
 <h2>A plea from our caretakers</h2>
 <p>Please, we beg of you, send help! We're stuck in the server room!</p>
<h1>Feathers</h1>
<p>Epidermal growths.</p>

문서의 개요는 다음과 같이 표현될 수 있습니다:

    1. A plea from our caretakers
  1. Feathers
4.3.11.3 사용자에게 개요 노출

사용자 에이전트는 페이지 개요를 사용자에게 노출하여 탐색을 돕도록 권장됩니다. 이는 특히 스크린 리더와 같은 비시각적 미디어에 해당됩니다.

예를 들어, 사용자 에이전트는 화살표 키를 다음과 같이 매핑할 수 있습니다:

Shift + ← Left
이전 제목으로 이동
Shift + → Right
다음 제목으로 이동
Shift + ↑ Up
현재 제목의 레벨보다 하나 낮은 레벨의 다음 제목으로 이동
Shift + ↓ Down
현재 제목과 같은 레벨의 다음 제목으로 이동

4.3.12 사용 요약

이 섹션은 규범적이지 않습니다.

요소 목적
예시
body 문서의 내용.
<!DOCTYPE HTML>
<html lang="en">
 <head> <title>Steve Hill's Home Page</title> </head>
 <body> <p>Hard Trance is My Life.</p> </body>
</html>
article 문서, 페이지, 애플리케이션 또는 사이트 내에서 완전하거나 독립적인 구성을 가지며 원칙적으로 독립적으로 배포되거나 재사용될 수 있는 콘텐츠, 예를 들어 배포용으로 사용될 수 있는 포럼 게시물, 잡지 또는 신문 기사, 블로그 게시물, 사용자가 제출한 댓글, 인터랙티브 위젯 또는 도구, 또는 기타 독립적인 콘텐츠 항목을 의미합니다.
<article>
 <img src="/tumblr_masqy2s5yn1rzfqbpo1_500.jpg" alt="Yellow smiley face with the caption 'masif'">
 <p>My fave Masif tee so far!</p>
 <footer>Posted 2 days ago</footer>
</article>
<article>
 <img src="/tumblr_m9tf6wSr6W1rzfqbpo1_500.jpg" alt="">
 <p>Happy 2nd birthday Masif Saturdays!!!</p>
 <footer>Posted 3 weeks ago</footer>
</article>
section 문서 또는 애플리케이션의 일반적인 섹션. 이 문맥에서 섹션은 일반적으로 제목이 있는 내용의 주제별 그룹화를 의미합니다.
<h1>Biography</h1>
<section>
 <h1>The facts</h1>
 <p>1500+ shows, 14+ countries</p>
</section>
<section>
 <h1>2010/2011 figures per year</h1>
 <p>100+ shows, 8+ countries</p>
</section>
nav 다른 페이지 또는 페이지 내의 부분으로 연결되는 섹션: 내비게이션 링크가 있는 섹션.
<nav>
 <p><a href="/">Home</a>
 <p><a href="/biog.html">Bio</a>
 <p><a href="/discog.html">Discog</a>
</nav>
aside 페이지의 섹션으로, 주변 콘텐츠와 간접적으로 관련된 콘텐츠로 구성되며, 해당 콘텐츠와 분리될 수 있는 섹션입니다. 이러한 섹션은 인쇄된 활자에서 사이드바로 자주 표현됩니다.
<h1>Music</h1>
<p>As any burner can tell you, the event has a lot of trance.</p>
<aside>You can buy the music we played at our <a href="buy.html">playlist page</a>.</aside>
<p>This year we played a kind of trance that originated in Belgium, Germany, and the Netherlands in the mid-90s.</p>
h1h6 제목
<h1>The Guide To Music On The Playa</h1>
<h2>The Main Stage</h2>
<p>If you want to play on a stage, you should bring one.</p>
<h2>Amplified Music</h2>
<p>Amplifiers up to 300W or 90dB are welcome.</p>
hgroup 제목 및 관련 콘텐츠. 이 요소는 h1h6 요소와 하나 이상의 p 요소를 그룹화하여 하위 제목, 대체 제목 또는 태그라인을 나타내는 콘텐츠를 포함할 수 있습니다.
<hgroup>
 <h1>Burning Music</h1>
 <p>The Guide To Music On The Playa</p>
</hgroup>
<section>
 <hgroup>
  <h1>Main Stage</h1>
  <p>The Fiction Of A Music Festival</p>
 </hgroup>
 <p>If you want to play on a stage, you should bring one.</p>
header 소개 또는 내비게이션 요소의 그룹.
<article>
 <header>
  <h1>Hard Trance is My Life</h1>
  <p>By DJ Steve Hill and Technikal</p>
 </header>
 <p>The album with the amusing punctuation has red artwork.</p>
footer 가장 가까운 상위 섹션 콘텐츠 요소나, 그러한 상위 요소가 없을 경우 body 요소에 대한 푸터입니다. 푸터에는 보통 해당 섹션에 대한 정보, 작성자 정보, 관련 문서로의 링크, 저작권 데이터 등이 포함됩니다.
<article>
 <h1>Hard Trance is My Life</h1>
 <p>The album with the amusing punctuation has red artwork.</p>
 <footer>
  <p>Artists: DJ Steve Hill and Technikal</p>
 </footer>
</article>
4.3.12.1 아티클 또는 섹션?

이 섹션은 비규범적입니다.

섹션은 다른 것의 일부를 형성합니다. 아티클은 그 자체로 독립된 것입니다. 하지만 어떤 것이 섹션이고 어떤 것이 아티클인지 어떻게 알 수 있을까요? 대부분의 경우, 진짜 답은 "작성자의 의도에 달려 있다"입니다.

예를 들어, "이 즙이 많은 녹색 사과는 애플 파이 속을 채우기에 좋습니다."라고만 적힌 "그래니 스미스" 챕터가 있는 책을 상상해볼 수 있습니다. 이 경우 다른 종류의 사과에 대한 여러 챕터가 있을 것이므로 이는 섹션입니다.

반면에 "그래니 스미스. 이 즙이 많은 녹색 사과는 애플 파이 속을 채우기에 좋습니다."라고만 적힌 트윗이나 레딧 댓글, 텀블러 게시물, 신문 광고를 상상할 수도 있습니다. 이 경우 이는 전체 내용을 담고 있기 때문에 아티클이 됩니다.

아티클에 대한 댓글은 그 아티클의 일부가 아니므로, 이는 독립된 아티클입니다.

4.4 내용 그룹화

4.4.1 p 요소

Element/p

모든 최신 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLParagraphElement

모든 최신 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
hgroup 요소의 자식인 경우.
콘텐츠 모델:
문구 콘텐츠.
텍스트/HTML에서 태그 생략:
p 요소의 끝 태그address, article, aside, blockquote, details, div, dl, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, main, menu, nav, ol, p, pre, search, section, table, 또는 ul 요소가 바로 뒤따라오거나, 부모 요소에 더 이상 콘텐츠가 없고 부모 요소가 a, audio, del, ins, map, noscript, 또는 video 요소가 아닌 HTML 요소일 경우 생략될 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLParagraphElement : HTMLElement {
[HTMLConstructor] constructor();

// 더 이상 사용되지 않는 멤버가 있습니다.
};

p 요소는 단락표현합니다.

단락은 일반적으로 인접한 블록과 빈 줄 또는 첫 줄 들여쓰기로 물리적으로 구분된 텍스트 블록으로 시각적 매체에서 표현되지만, 스타일 시트나 사용자 에이전트는 예를 들어 줄바꿈 기호(¶)를 사용하여 단락 구분을 다르게 표시하는 것도 가능합니다.

다음 예시는 적합한 HTML 조각입니다:

<p>작은 새끼 고양이가 조심스럽게 카펫 조각 위에 앉았습니다. 나중에 이 순간은 고양이가 매트 위에 앉아 있었던 시간으로 기억될 것입니다.</p>
<fieldset>
<legend>개인 정보</legend>
<p>
<label>이름: <input name="n"></label>
<label><input name="anon" type="checkbox"> 다른 사용자로부터 숨기기</label>
</p>
<p><label>주소: <textarea name="a"></textarea></label></p>
</fieldset>
<p>한때 펨리에서 나온 예제가 있었는데, <br>
마크업의 품질이 의심스러웠다. <br>
검증기는 불평했고, <br>
저자는 고통을 겪었다, <br>
오류를 마크업에서 운율로 이동시키는 것에 대해. </p>

p 요소는 더 적합한 요소가 있을 때 사용하지 않아야 합니다.

다음 예제는 기술적으로는 맞지만:

<section>
<!-- ... -->
<p>마지막 수정일: 2001-04-23</p>
<p>저자: fred@example.com</p>
</section>

더 좋은 마크업은 다음과 같습니다:

<section>
<!-- ... -->
<footer>마지막 수정일: 2001-04-23</footer>
<address>저자: fred@example.com</address>
</section>

또는:

<section>
<!-- ... -->
<footer>
<p>마지막 수정일: 2001-04-23</p>
<address>저자: fred@example.com</address>
</footer>
</section>

리스트 요소(특히 olul 요소)는 p 요소의 자식이 될 수 없습니다. 따라서 문장에 불릿 목록이 포함될 경우, 어떻게 마크업해야 할지 궁금할 수 있습니다.

예를 들어, 이 환상적인 문장은 다음과 관련된 불릿을 포함합니다:

그리고 아래에서 더 자세히 설명됩니다.

해결책은 단락이 HTML 용어에서는 논리적 개념이 아니라 구조적 개념이라는 점을 이해하는 것입니다. 위의 환상적인 예에서, 실제로는 다섯 개의 단락이 이 사양에 따라 정의됩니다: 목록 전 하나, 각 불릿마다 하나씩, 그리고 목록 후 하나.

위의 예제에 대한 마크업은 다음과 같습니다:

<p>예를 들어, 이 환상적인 문장은 다음과 관련된 불릿을 포함합니다:</p>
<ul>
<li>마법사,
<li>광속 여행, 및
<li>텔레파시,
</ul>
<p>그리고 아래에서 더 자세히 설명됩니다.</p>

이와 같은 "논리적" 단락을 여러 개의 "구조적" 단락으로 간편하게 스타일링하려는 저자는 div 요소를 p 요소 대신 사용할 수 있습니다.

따라서 예를 들어 위의 예제는 다음과 같이 변환될 수 있습니다:

<div>예를 들어, 이 환상적인 문장은 다음과 관련된 불릿을 포함합니다.
<ul>
<li>마법사,
<li>광속 여행, 및
<li>텔레파시,
</ul>
그리고 아래에서 더 자세히 설명됩니다.</div>

이 예제는 여전히 다섯 개의 구조적 단락을 가지고 있지만, 이제 저자는 예제를 개별적으로 고려할 필요 없이 div만 스타일링할 수 있습니다.

4.4.2 hr 요소

요소/hr

현재 모든 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
select 요소 내부 콘텐츠 요소.
이 요소가 사용될 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
select 요소의 자식으로 사용될 수 있습니다.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그가 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLHRElement : HTMLElement {
  [HTMLConstructor] constructor();

// 더 이상 사용되지 않는 멤버가 있습니다.
};

hr 요소는 단락 수준의 주제적 구분을 나타냅니다. 예를 들어, 이야기에서 장면 전환, 참고 서적의 섹션 내에서 주제 전환 등을 나타낼 수 있습니다. 또는 select 요소의 옵션 집합 사이의 구분선 역할을 할 수도 있습니다.

다음 가상의 프로젝트 매뉴얼 발췌는 섹션 내에서 주제를 구분하기 위해 hr 요소를 사용하는 두 개의 섹션을 보여줍니다.

<section>
 <h1>Communication</h1>
 <p>There are various methods of communication. This section
 covers a few of the important ones used by the project.</p>
 <hr>
 <p>Communication stones seem to come in pairs and have mysterious
 properties:</p>
 <ul>
  <li>They can transfer thoughts in two directions once activated
  if used alone.</li>
  <li>If used with another device, they can transfer one's
  consciousness to another body.</li>
  <li>If both stones are used with another device, the
  consciousnesses switch bodies.</li>
 </ul>
 <hr>
 <p>Radios use the electromagnetic spectrum in the meter range and
 longer.</p>
 <hr>
 <p>Signal flares use the electromagnetic spectrum in the
 nanometer range.</p>
</section>
<section>
 <h1>Food</h1>
 <p>All food at the project is rationed:</p>
 <dl>
  <dt>Potatoes</dt>
  <dd>Two per day</dd>
  <dt>Soup</dt>
  <dd>One bowl per day</dd>
 </dl>
 <hr>
 <p>Cooking is done by the chefs on a set rotation.</p>
</section>

섹션들 자체 사이에는 hr 요소가 필요하지 않습니다. section 요소와 h1 요소가 자체적으로 주제 변화를 암시하기 때문입니다.

Peter F. Hamilton의 Pandora's Star에서 발췌한 다음 내용은 장면 전환을 앞두고 있는 두 개의 단락과 전환 이후의 단락을 보여줍니다. 장면 전환은 인쇄된 책에서 두 번째와 세 번째 단락 사이에 별 하나가 중앙에 배치된 공백으로 표현되며, 여기서는 hr 요소를 사용해 표현되었습니다.

<p>Dudley was ninety-two, in his second life, and fast approaching
time for another rejuvenation. Despite his body having the physical
age of a standard fifty-year-old, the prospect of a long degrading
campaign within academia was one he regarded with dread. For a
supposedly advanced civilization, the Intersolar Commonwealth could be
appallingly backward at times, not to mention cruel.</p>
<p><i>Maybe it won't be that bad</i>, he told himself. The lie was
comforting enough to get him through the rest of the night's
shift.</p>
<hr>
<p>The Carlton AllLander drove Dudley home just after dawn. Like the
astronomer, the vehicle was old and worn, but perfectly capable of
doing its job. It had a cheap diesel engine, common enough on a
semi-frontier world like Gralmond, although its drive array was a
thoroughly modern photoneural processor. With its high suspension and
deep-tread tyres it could plough along the dirt track to the
observatory in all weather and seasons, including the metre-deep snow
of Gralmond's winters.</p>

hr 요소는 문서의 개요에 영향을 미치지 않습니다.

4.4.3 pre 요소

요소/pre

현재 모든 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (레거시)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
유의미한 콘텐츠.
이 요소가 사용될 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
문장 콘텐츠.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성.
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLPreElement : HTMLElement {
  [HTMLConstructor] constructor();

// 더 이상 사용되지 않는 멤버가 있습니다.
};

pre 요소는 미리 서식화된 텍스트의 블록을 나타내며, 이 텍스트는 요소 대신 전형적인 타이포그래픽 관습에 의해 구조화됩니다.

HTML 구문에서, pre 요소 시작 태그 바로 뒤에 오는 선행 개행 문자는 제거됩니다.

다음은 pre 요소를 사용할 수 있는 몇 가지 사례입니다:

저자들은 서식이 손실될 때(예: 음성 합성기, 점자 디스플레이 등 사용자에게) 미리 서식화된 텍스트가 어떻게 표시될지 고려하는 것이 좋습니다. ASCII 아트와 같은 경우에는 텍스트 설명과 같은 대체 표현이 문서의 독자들에게 더 보편적으로 접근 가능할 수 있습니다.

컴퓨터 코드 블록을 나타내기 위해 pre 요소와 code 요소를 함께 사용할 수 있으며, 컴퓨터 출력 블록을 나타내기 위해서는 pre 요소와 samp 요소를 함께 사용할 수 있습니다. 마찬가지로, 사용자가 입력해야 하는 텍스트를 표시하기 위해 kbd 요소를 pre 요소 내에 사용할 수 있습니다.

이 요소는 양방향 알고리즘과 관련된 렌더링 요구 사항을 포함합니다.

다음 스니펫에서는 컴퓨터 코드 샘플이 제시됩니다.

<p>This is the <code>Panel</code> constructor:</p>
<pre><code>function Panel(element, canClose, closeHandler) {
  this.element = element;
  this.canClose = canClose;
  this.closeHandler = function () { if (closeHandler) closeHandler() };
}</code></pre>

다음 스니펫에서는 sampkbd 요소가 pre 요소의 내용에 섞여서 Zork I 세션을 보여줍니다.

<pre><samp>You are in an open field west of a big white house with a boarded
front door.
There is a small mailbox here.

></samp> <kbd>open mailbox</kbd>

<samp>Opening the mailbox reveals:
A leaflet.

></samp></pre>

다음 예시는 pre 요소를 사용하여 특이한 서식이 본래 시 자체의 일부를 이루는 현대 시를 보여줍니다.

<pre>                maxling

it is with a          heart
               heavy

that i admit loss of a feline
        so           loved

a friend lost to the
        unknown
                                (night)

~cdr 11dec07</pre>

4.4.4 blockquote 요소

요소/blockquote

현재 모든 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (레거시)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

<blockquote>

현재 모든 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer6+
Firefox Android?Safari iOS1+Chrome Android?WebView Android37+Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
유의미한 콘텐츠.
이 요소가 사용될 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
cite — 인용문의 출처 또는 수정에 대한 추가 정보를 연결
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLQuoteElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString cite;
};

HTMLQuoteElement 인터페이스는 q 요소에서도 사용됩니다.

blockquote 요소는 다른 출처에서 인용된 섹션을 나타냅니다.

blockquote 내의 콘텐츠는 다른 출처에서 인용된 것이어야 하며, 해당 출처의 주소가 있는 경우 cite 속성에서 인용할 수 있습니다.

cite 속성이 존재하는 경우, 유효한 URL이어야 합니다. 해당 속성 값은 요소의 노드 문서에 상대적으로 구문 분석되어야 합니다. 사용자 에이전트는 사용자가 이러한 인용 링크를 따라가도록 허용할 수 있지만, 이는 주로 개인적인 용도(예: 사이트의 인용문 사용 통계 수집을 위한 서버 측 스크립트)로 사용되며, 독자를 위한 것이 아닙니다.

blockquote의 내용은 생략되거나 해당 언어의 전통적인 방식으로 문맥이 추가될 수 있습니다.

예를 들어, 영어에서는 일반적으로 대괄호를 사용합니다. "Jane ate the cracker. She then said she liked apples and fish."라는 문장이 있는 페이지가 있다고 가정하면 다음과 같이 인용될 수 있습니다:

<blockquote>
 <p>[Jane] then said she liked [...] fish.</p>
</blockquote>

인용문의 출처는 blockquote 요소 외부에 배치해야 합니다.

예를 들어, 인용문 뒤에 단락으로 출처가 제공되는 예시입니다:

<blockquote>
 <p>I contend that we are both atheists. I just believe in one fewer god than you do. When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours.</p>
</blockquote>
<p>— Stephen Roberts</p>

아래의 다른 예시에서는 출처를 표시하는 다양한 방법을 보여줍니다.

여기서는 blockquote 요소가 figure 요소 및 figcaption과 함께 사용되어, 인용문을 그 출처와 명확하게 연결하는 방법을 보여줍니다(이는 인용문의 일부가 아니므로 blockquote 내부에 포함되지 않아야 합니다):

<figure>
 <blockquote>
  <p>The truth may be puzzling. It may take some work to grapple with.
  It may be counterintuitive. It may contradict deeply held
  prejudices. It may not be consonant with what we desperately want to
  be true. But our preferences do not determine what's true. We have a
  method, and that method helps us to reach not absolute truth, only
  asymptotic approaches to the truth — never there, just closer
  and closer, always finding vast new oceans of undiscovered
  possibilities. Cleverly designed experiments are the key.</p>
 </blockquote>
 <figcaption>Carl Sagan, in "<cite>Wonder and Skepticism</cite>", from
 the <cite>Skeptical Inquirer</cite> Volume 19, Issue 1 (January-February
 1995)</figcaption>
</figure>

다음 예시에서는 citeblockquote를 함께 사용하는 방법을 보여줍니다:

<p>His next piece was the aptly named <cite>Sonnet 130</cite>:</p>
<blockquote cite="https://quotes.example.org/s/sonnet130.html">
  <p>My mistress' eyes are nothing like the sun,<br>
  Coral is far more red, than her lips red,<br>
  ...

이 예시는 포럼 게시물에서 사용자가 응답하는 게시물을 보여주는 blockquote의 사용 방법을 보여줍니다. article 요소는 각 게시물을 나타내는 데 사용되어 스레드를 마크업합니다.

<article>
 <h1><a href="https://bacon.example.com/?blog=109431">Bacon on a crowbar</a></h1>
 <article>
  <header><strong>t3yw</strong> 12 포인트 1시간 전</header>
  <p>저것을 보고 나르왈이 참 좋아할 거야.</p>
  <footer><a href="?pid=29578">퍼머링크</a></footer>
  <article>
   <header><strong>greg</strong> 8 포인트 1시간 전</header>
   <blockquote><p>저것을 보고 나르왈이 참 좋아할 거야.</p></blockquote>
   <p>나르왈은 베이컨을 먹지 않아.</p>
   <footer><a href="?pid=29579">퍼머링크</a></footer>
   </article>
    <header><strong>t3yw</strong> 15 포인트 1시간 전</header>
    <blockquote>
     <blockquote><p>저것을 보고 나르왈이 참 좋아할 거야.</p></blockquote>
     <p>나르왈은 베이컨을 먹지 않아.</p>
    </blockquote>
    <p>다음으로 그들은 바나나를 깠다고 할 것 같아!</p>
    <footer><a href="?pid=29580">퍼머링크</a></footer>
    </article>
   </article>
  </article>
  </article>
   <header><strong>fred</strong> 1 포인트 23분 전</header>
   <blockquote><p>저것을 보고 나르왈이 참 좋아할 거야.</p></blockquote>
   <p>그들은 아마도 바나나를 까는 것도 좋아할 거야.</p>
   <footer><a href="?pid=29582">퍼머링크</a></footer>
  </article>
 </article>

다음 예시는 짧은 인용문을 보여주는 blockquote의 사용 방법을 보여줍니다. 이 예시는 p 요소를 blockquote 요소 안에 넣을 필요가 없음을 보여줍니다:

<p>He began his list of "lessons" with the following:</p>
<blockquote>One should never assume that his side of the issue will be recognized, let alone that it will be conceded to have merits.</blockquote>
<p>He continued with a number of similar points, ending with:</p>
<blockquote>Finally, one should be prepared for the threat of breakdown in negotiations at any given moment and not be cowed by the possibility.</blockquote>
<p>We shall now discuss these points...

대화 표현 방법 예시가 후반부 섹션에 나와 있으며, 이를 위해 citeblockquote 요소를 사용하는 것은 적절하지 않습니다.

4.4.5 ol 요소

Element/ol

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLOListElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
범주:
플로우 콘텐츠.
요소의 자식에 적어도 하나의 li 요소가 포함되어 있는 경우: 만져질 수 있는 콘텐츠.
이 요소를 사용할 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
제로 또는 그 이상의 li스크립트 지원 요소.
text/html에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
reversed — 리스트를 역순으로 번호 매기기
start — 리스트의 시작 값
type — 리스트 마커의 종류
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLOListElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute boolean reversed;
  [CEReactions, Reflect, ReflectDefault=1] attribute long start;
  [CEReactions, Reflect] attribute DOMString type;

  // 폐기된 멤버도 있습니다
};

ol 요소는 의미를 나타내며, 항목들이 의도적으로 순서가 지정된 목록을 의미합니다. 항목의 순서를 변경하면 문서의 의미가 달라집니다.

목록의 항목들은 li 요소 자식 노드로, ol 요소 내에서 트리 순서로 나열됩니다.

Element/ol#attr-reversed

모든 최신 엔진에서 지원됨.

Firefox18+Safari6+Chrome18+
Opera?Edge79+
Edge (Legacy)≤79+Internet Explorer지원되지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

reversed 속성은 불리언 속성입니다. 이 속성이 있으면 목록이 내림차순 목록임을 나타냅니다 (..., 3, 2, 1). 속성이 생략되면 목록은 오름차순(1, 2, 3, ...)입니다.

start 속성이 존재할 경우, 유효한 정수여야 합니다. 이 속성은 목록의 시작 값을 결정하는 데 사용됩니다.

ol 요소는 시작 값을 가지며, 이는 다음과 같이 결정됩니다:

  1. ol 요소에 start 속성이 있는 경우:

    1. 해당 속성 값을 정수로 파싱한 결과parsed로 정의합니다.

    2. 만약 parsed가 오류가 아닌 경우, parsed를 반환합니다.

  2. ol 요소에 reversed 속성이 있는 경우, 소유된 li 요소들의 수를 반환합니다.

  3. 1을 반환합니다.

목록에서 사용할 마커 종류를 지정해야 하는 경우(예: 항목이 숫자/문자로 참조될 수 있기 때문에) type 속성을 사용할 수 있습니다. 지정된 경우, 속성 값은 아래 표의 첫 번째 열에 주어진 문자 중 하나와 일치해야 합니다. type 속성은 첫 번째 셀이 속성 값과 일치하는 행의 두 번째 열에 표시된 상태를 나타냅니다. 셀이 일치하지 않거나 속성이 생략된 경우, 속성은 십진수 상태를 나타냅니다.

키워드 상태 설명 값 1-3 및 3999-4001의 예
1 (U+0031) 십진법 십진수 1. 2. 3. ... 3999. 4000. 4001. ...
a (U+0061) 소문자 알파벳 소문자 라틴 알파벳 a. b. c. ... ewu. ewv. eww. ...
A (U+0041) 대문자 알파벳 대문자 라틴 알파벳 A. B. C. ... EWU. EWV. EWW. ...
i (U+0069) 소문자 로마 숫자 소문자 로마 숫자 i. ii. iii. ... mmmcmxcix. i̅v̅. i̅v̅i. ...
I (U+0049) 대문자 로마 숫자 대문자 로마 숫자 I. II. III. ... MMMCMXCIX. I̅V̅. I̅V̅I. ...

사용자 에이전트는 type 속성의 상태와 일치하는 방식으로 목록 항목을 렌더링해야 합니다. 0 이하의 숫자는 type 속성과 상관없이 항상 십진법을 사용해야 합니다.

CSS 사용자 에이전트를 위한 이 속성의 매핑은 'list-style-type' CSS 속성에 대한 매핑이 렌더링 섹션에 제공됩니다(매핑은 간단합니다: 위의 상태는 해당하는 CSS 값과 동일한 이름을 가집니다).

이 속성을 구현하는 기본 CSS 목록 스타일을 재정의할 수 있으며, 이를 통해 목록 항목이 렌더링되는 방식을 변경할 수 있습니다.

[ReflectDefault] 때문에, start IDL 속성은 start 콘텐츠 속성이 생략되고, reversed 콘텐츠 속성이 지정된 경우에는 리스트의 시작 값과 반드시 일치하지 않을 수 있습니다.

다음 마크업은 순서가 중요한 목록을 보여주며, ol 요소가 적절하게 사용된 예입니다. 이 목록을 ul 섹션의 동일한 항목으로 구성된 목록과 비교하여, ul 요소를 사용하는 예를 볼 수 있습니다.

<p>나는 다음 나라에 살았었다 (거주 시작 순서대로 나열됨):</p>
<ol>
 <li>스위스
 <li>영국
 <li>미국
 <li>노르웨이
</ol>

목록의 순서를 변경하면 문서의 의미가 어떻게 달라지는지 주목합니다. 다음 예에서는 첫 두 항목의 순서를 바꿈으로써 작성자의 출생지가 바뀌었습니다:

<p>나는 다음 나라에 살았었다 (거주 시작 순서대로 나열됨):</p>
<ol>
 <li>영국
 <li>스위스
 <li>미국
 <li>노르웨이
</ol>

4.4.6 ul 요소

요소/ul

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구 버전)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
요소의 자식들이 최소한 하나의 li 요소를 포함하고 있다면: Palpable content.
이 요소가 사용될 수 있는 컨텍스트:
Flow content가 예상되는 곳.
컨텐츠 모델:
영(0)개 이상의 li 요소들과 스크립트 지원 요소들.
text/html에서의 태그 생략:
태그 생략 불가.
내용 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLUListElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 폐기된 멤버도 있습니다
};

ul 요소는 항목의 순서가 중요하지 않은 목록을 나타냅니다 — 즉, 순서를 변경해도 문서의 의미에 큰 영향을 주지 않는 경우입니다.

목록의 항목들은 li 요소 자식 노드이며, ul 요소의 자식 노드입니다.

다음 마크업은 순서가 중요하지 않은 목록을 보여주며, ul 요소가 적절하게 사용된 예입니다. 이 목록을 ol 섹션의 동일한 항목으로 구성된 목록과 비교하여, ol 요소를 사용하는 예를 볼 수 있습니다.

<p>나는 다음 나라에 살았었다:</p>
<ul>
 <li>노르웨이
 <li>스위스
 <li>영국
 <li>미국
</ul>

목록의 순서를 변경해도 문서의 의미가 변하지 않는다는 점에 주목합니다. 위의 예에서는 항목들이 알파벳 순으로 나열되어 있지만, 아래의 예에서는 2007년 현재 계좌 잔고 크기 순으로 나열되어 있으며, 문서의 의미에는 전혀 변화가 없습니다:

<p>나는 다음 나라에 살았었다:</p>
<ul>
 <li>스위스
 <li>노르웨이
 <li>영국
 <li>미국
</ul>

4.4.7 menu 요소

요소/menu

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구 버전)12+Internet Explorer6+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLMenuElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구 버전)12+Internet Explorer6+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
Flow content.
요소의 자식들이 최소한 하나의 li 요소를 포함하고 있다면: Palpable content.
이 요소가 사용될 수 있는 컨텍스트:
Flow content가 예상되는 곳.
컨텐츠 모델:
영(0)개 이상의 li 요소들과 스크립트 지원 요소들.
text/html에서의 태그 생략:
태그 생략 불가.
내용 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLMenuElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 폐기된 멤버도 있습니다
};

menu 요소는 그 안에 포함된 항목들로 이루어진 툴바를 나타냅니다. 이 항목들은 li 요소들로 표현되며, 각 항목은 사용자가 수행하거나 활성화할 수 있는 명령을 나타냅니다.

menu 요소는 명령 목록을 표현하기 위해 ul의 의미적 대안일 뿐입니다(즉, "툴바"를 나타냅니다).

이 예에서는 텍스트 편집 애플리케이션이 menu 요소를 사용하여 일련의 편집 명령을 제공합니다:

<menu>
 <li><button onclick="copy()"><img src="copy.svg" alt="Copy"></button></li>
 <li><button onclick="cut()"><img src="cut.svg" alt="Cut"></button></li>
 <li><button onclick="paste()"><img src="paste.svg" alt="Paste"></button></li>
</menu>

이것을 전통적인 툴바 메뉴로 보이도록 스타일링하는 것은 애플리케이션에 달려 있습니다.

4.4.8 li 요소

요소/li

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구 버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLLIElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (구 버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소가 사용될 수 있는 컨텍스트:
ol 요소 내부.
ul 요소 내부.
menu 요소 내부.
컨텐츠 모델:
Flow content.
text/html에서의 태그 생략:
li 요소의 끝 태그li 요소가 즉시 다음 li 요소나 부모 요소의 더 이상의 컨텐츠가 없을 때 생략할 수 있습니다.
내용 속성:
전역 속성
요소가 ul 또는 menu 요소의 자식이 아닌 경우: value — 목록 항목의 순번 값.
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLLIElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute long value;

  // also has obsolete members
};

li 요소는 목록 항목을 표현합니다. 부모 요소가 ol, ul, 또는 menu 요소인 경우, 이 요소는 정의된 대로 부모 요소의 목록 항목입니다. 그렇지 않으면 목록 항목은 다른 li 요소와 정의된 목록 관련 관계가 없습니다.

value 속성이 존재하는 경우, 이는 유효한 정수여야 하며, 목록 항목의 순번 값을 결정하는 데 사용됩니다. 이는 li목록 소유자ol 요소일 때 적용됩니다.


‘display’ 속성의 계산된 값이 ‘list-item’인 요소는 다음과 같이 결정되는 목록 소유자를 가집니다:

  1. 요소가 렌더링 중이 아니라면, null을 반환하고, 요소는 목록 소유자를 가지지 않습니다.

  2. ancestor를 요소의 부모로 설정합니다.

  3. 요소에 ol, ul, 또는 menu 조상이 있는 경우, ancestor를 가장 가까운 조상 요소로 설정합니다.

  4. 가장 가까운 포함 조상인 ancestor를 반환하고, 이 요소는 CSS 상자를 생성합니다.

    이러한 요소는 항상 존재하며, 최소한 문서 요소는 항상 CSS 상자를 생성합니다.

주어진 목록 소유자 owner에 의해 소유된 각 요소의 순번 값을 결정하려면 다음 단계를 수행합니다:

  1. i를 1로 설정합니다.

  2. ownerol 요소인 경우, numberingowner시작 값으로 설정합니다. 그렇지 않으면 numbering을 1로 설정합니다.

  3. 반복: i목록 소유자가 소유한 owner의 목록 항목 수를 초과하면 종료합니다; owner의 모든 소유 목록 항목순번 값을 할당받았습니다.

  4. itemi번째 owner소유 목록 항목으로 설정하며, 이는 트리 순서에 따릅니다.

  5. itemli 요소이며 value 속성을 가지고 있다면:

    1. parsed정수로 속성 값을 구문 분석한 결과로 설정합니다.

    2. parsed가 오류가 아니라면 numberingparsed로 설정합니다.

  6. item순번 값numbering입니다.

  7. ownerol 요소이고, ownerreversed 속성이 있으면 numbering을 1 감소시키고, 그렇지 않으면 numbering을 1 증가시킵니다.

  8. i를 1 증가시킵니다.

  9. loop으로 이동합니다.


이 요소의 value IDL 속성은 순서 값과 직접적으로 대응하지 않고, 단순히 콘텐츠 속성을 반영합니다. 예를 들어, 다음과 같은 리스트가 있을 때:

<ol>
 <li>Item 1
 <li value="3">Item 3
 <li>Item 4
</ol>

순서 값은 1, 3, 4이고, value IDL 속성을 get하면 0, 3, 0이 반환됩니다.

다음 예에서는, 역순으로 상위 10개의 영화가 나열됩니다. 목록은 figure 요소와 그 figcaption 요소를 사용하여 제목을 부여받습니다.

<figure>
 <figcaption>역대 최고의 영화 10편</figcaption>
 <ol>
  <li value="10"><cite>Josie and the Pussycats</cite>, 2001</li>
  <li value="9"><cite lang="sh">Црна мачка, бели мачор</cite>, 1998</li>
  <li value="8"><cite>A Bug's Life</cite>, 1998</li>
  <li value="7"><cite>Toy Story</cite>, 1995</li>
  <li value="6"><cite>Monsters, Inc</cite>, 2001</li>
  <li value="5"><cite>Cars</cite>, 2006</li>
  <li value="4"><cite>Toy Story 2</cite>, 1999</li>
  <li value="3"><cite>Finding Nemo</cite>, 2003</li>
  <li value="2"><cite>The Incredibles</cite>, 2004</li>
  <li value="1"><cite>Ratatouille</cite>, 2007</li>
 </ol>
</figure>

마크업은 또한 reversed 속성을 사용하여 다음과 같이 작성될 수 있습니다:

<figure>
 <figcaption>역대 최고의 영화 10편</figcaption>
 <ol reversed>
  <li><cite>Josie and the Pussycats</cite>, 2001</li>
  <li><cite lang="sh">Црна мачка, бели мачор</cite>, 1998</li>
  <li><cite>A Bug's Life</cite>, 1998</li>
  <li><cite>Toy Story</cite>, 1995</li>
  <li><cite>Monsters, Inc</cite>, 2001</li>
  <li><cite>Cars</cite>, 2006</li>
  <li><cite>Toy Story 2</cite>, 1999</li>
  <li><cite>Finding Nemo</cite>, 2003</li>
  <li><cite>The Incredibles</cite>, 2004</li>
  <li><cite>Ratatouille</cite>, 2007</li>
 </ol>
</figure>

li 요소 내부에 제목 요소(e.g. h1)를 포함하는 것이 합법적이지만, 이는 저자가 의도한 의미를 전달하지 않을 수 있습니다. 제목은 새로운 섹션을 시작하므로, 목록의 제목이 목록을 여러 섹션으로 암묵적으로 분할합니다.

4.4.9 dl 요소

Element/dl

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLDListElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
요소의 자식에 하나 이상의 이름-값 그룹이 포함된 경우: 구체적 콘텐츠.
이 요소를 사용할 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
다음 중 하나: 하나 이상의 dt 요소에 이어 하나 이상의 dd 요소로 구성된 그룹, 스크립트 지원 요소와 혼합 가능.
또는: 하나 이상의 div 요소, 스크립트 지원 요소와 혼합 가능.
text/html에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자를 위한.
구현자를 위한.
DOM 인터페이스:
[Exposed=Window]
interface HTMLDListElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 이전 멤버도 포함
};

dl 요소는 하나 이상의 이름-값 그룹(설명 목록)으로 구성된 연관 목록을 나타냅니다. 이름-값 그룹은 하나 이상의 이름(dt 요소로, 자식 div 요소일 수 있음)과 하나 이상의 값(dd 요소로, 자식 div 요소일 수 있음)으로 구성되며, dtdd 요소 외에는 모든 노드를 무시합니다. 하나의 dl 요소 내에서 각 이름에 대해 하나 이상의 dt 요소가 존재해서는 안 됩니다.

이름-값 그룹은 용어와 정의, 메타데이터 주제와 값, 질문과 답변 또는 기타 이름-값 데이터의 그룹일 수 있습니다.

그룹 내의 값은 대안입니다. 같은 값을 구성하는 여러 단락은 동일한 dd 요소 내에 모두 포함되어야 합니다.

그룹 목록의 순서와 각 그룹 내의 이름과 값의 순서가 중요할 수 있습니다.

마이크로데이터 속성 또는 그룹 전체에 적용되는 다른 전역 속성을 주석으로 달거나 스타일링 목적으로 dl 요소의 각 그룹을 div 요소로 감쌀 수 있습니다. 이것은 dl 요소의 의미를 변경하지 않습니다.

dl 요소의 이름-값 그룹 dl은 다음 알고리즘을 사용하여 결정됩니다. 이름-값 그룹은 이름(처음에는 비어 있는 dt 요소 목록)과 값(처음에는 비어 있는 dd 요소 목록)으로 구성됩니다.

  1. groups를 비어 있는 이름-값 그룹 목록으로 설정합니다.

  2. current를 새로운 이름-값 그룹으로 설정합니다.

  3. seenDd를 false로 설정합니다.

  4. childdl첫 번째 자식으로 설정합니다.

  5. grandchild를 null로 설정합니다.

  6. child가 null이 아닐 때까지:

    1. childdiv 요소인 경우:

      1. grandchildchild첫 번째 자식으로 설정합니다.

      2. grandchild가 null이 아닐 때까지:

        1. dt 또는 ddgrandchild에 대해 처리합니다.

        2. grandchildgrandchild다음 형제로 설정합니다.

    2. 그렇지 않으면, dt 또는 ddchild에 대해 처리합니다.

    3. childchild다음 형제로 설정합니다.

  7. current가 비어 있지 않으면, currentgroups에 추가합니다.

  8. groups를 반환합니다.

dt 또는 ddnode에 대해 처리하는 것은 다음 단계를 따릅니다:

  1. groups, current, 및 seenDd는 이 단계를 호출한 알고리즘에서 같은 이름을 가진 변수와 동일합니다.

  2. nodedt 요소인 경우:

    1. seenDd가 true이면, currentgroups에 추가하고, current를 새로운 이름-값 그룹으로 설정하며, seenDd를 false로 설정합니다.

    2. nodecurrent의 이름에 추가합니다.

  3. 그렇지 않고, nodedd 요소인 경우, nodecurrent의 값에 추가하고 seenDd를 true로 설정합니다.

이름 또는 값이 빈 목록인 이름-값 그룹은 dd 요소를 dt 요소로 잘못 사용했거나 그 반대의 경우가 많습니다. 적합성 검사기는 이러한 실수를 발견할 수 있으며 저자에게 올바른 마크업 사용 방법을 조언할 수 있습니다.

다음 예에서는 하나의 항목("저자")이 두 개의 값("John"과 "Luke")에 연결됩니다.

<dl>
 <dt> 저자
 <dd> John
 <dd> Luke
 <dt> 편집자
 <dd> Frank
</dl>

다음 예에서는 하나의 정의가 두 개의 용어에 연결됩니다.

<dl>
 <dt lang="en-US"> <dfn>color</dfn> </dt>
 <dt lang="en-GB"> <dfn>colour</dfn> </dt>
 <dd> 인간의 경우, 눈의 정밀한 구조가 시야를 세 가지 다른 필터로 분석하여 구별할 수 있는 능력에서 파생된 감각. </dd>
</dl>

다음 예는 dl 요소를 사용하여 일종의 메타데이터를 마크업하는 방법을 보여줍니다. 예제 끝에는 하나의 그룹에 두 개의 메타데이터 레이블("저자"와 "편집자")과 두 개의 값("Robert Rothman"과 "Daniel Jackson")이 있습니다. 이 예제는 또한 스타일링을 돕기 위해 div 요소를 dtdd 요소 그룹 주위에 사용합니다.

<dl>
 <div>
  <dt> 마지막 수정 시간 </dt>
  <dd> 2004-12-23T23:33Z </dd>
 </div>
 <div>
  <dt> 권장 업데이트 간격 </dt>
  <dd> 60초 </dd>
 </div>
 <div>
  <dt> 저자 </dt>
  <dt> 편집자 </dt>
  <dd> Robert Rothman </dd>
  <dd> Daniel Jackson </dd>
 </div>
</dl>

다음 예는 dl 요소를 사용하여 지시 사항 집합을 제공합니다. 여기서 지시 사항의 순서는 중요합니다(다른 예에서는 블록의 순서가 중요하지 않았습니다).

<p>다음과 같이 승리 포인트를 결정하십시오(일치하는 첫 번째 경우를 사용):</p>
<dl>
 <dt> 금화가 정확히 다섯 개 있는 경우 </dt>
 <dd> 다섯 개의 승리 포인트를 얻습니다 </dd>
 <dt> 금화가 하나 이상 있고 은화도 하나 이상 있는 경우 </dt>
 <dd> 두 개의 승리 포인트를 얻습니다 </dd>
 <dt> 은화가 하나 이상 있는 경우 </dt>
 <dd> 하나의 승리 포인트를 얻습니다 </dd>
 <dt> 그렇지 않은 경우 </dt>
 <dd> 승리 포인트를 얻지 못합니다 </dd>
</dl>

다음 코드 스니펫은 dl 요소가 용어집으로 사용되는 모습을 보여줍니다. 정의된 단어를 나타내기 위해 dfn이 사용된 점에 주목합니다.

<dl>
 <dt><dfn>아파트</dfn>, 명사.</dt>
 <dd>하나 이상의 스레드와 하나 이상의 COM 개체를 그룹화하는 실행 컨텍스트.</dd>
 <dt><dfn>평평함</dfn>, 명사.</dt>
 <dd>공기가 빠진 타이어.</dd>
 <dt><dfn></dfn>, 명사.</dt>
 <dd>사용자의 로그인 디렉터리.</dd>
</dl>

이 예제는 dl 요소와 함께 div 요소를 사용하여 프랑스 레스토랑에서 아이스크림 디저트를 주석으로 다는 마이크로데이터 속성을 사용합니다.

<dl>
 <div itemscope itemtype="http://schema.org/Product">
  <dt itemprop="name">Café ou Chocolat Liégeois
  <dd itemprop="offers" itemscope itemtype="http://schema.org/Offer">
   <span itemprop="price">3.50</span>
   <data itemprop="priceCurrency" value="EUR"></data>
  <dd itemprop="description">2개의 카페 또는 초콜릿, 1개의 바닐라, 카페 또는 초콜릿 소스, 휘핑 크림
 </div>

 <div itemscope itemtype="http://schema.org/Product">
  <dt itemprop="name">Américaine
  <dd itemprop="offers" itemscope itemtype="http://schema.org/Offer">
   <span itemprop="price">3.50</span>
   <data itemprop="priceCurrency" value="EUR"></data>
  <dd itemprop="description">1개의 크렘 브륄레, 1개의 바닐라, 1개의 카라멜, 휘핑 크림
 </div>

</dl>

div 요소가 없으면 마크업은 itemref 속성을 사용하여 dd 요소의 데이터를 항목과 연결해야 합니다. 다음과 같이 됩니다.

<dl>
 <dt itemscope itemtype="http://schema.org/Product" itemref="1-offer 1-description">
  <span itemprop="name">Café ou Chocolat Liégeois</span>
 <dd id="1-offer" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
  <span itemprop="price">3.50</span>
  </data itemprop="priceCurrency" value="EUR"></data>

 <dd id="1-description" itemprop="description">
  2개의 카페 또는 초콜릿, 1개의 바닐라, 카페 또는 초콜릿 소스, 휘핑 크림

 <dt itemscope itemtype="http://schema.org/Product" itemref="2-offer 2-description">
  <span itemprop="name">Américaine</span>
 <dd id="2-offer" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
  <span itemprop="price">3.50</span>
  </data itemprop="priceCurrency" value="EUR"></data>

 <dd id="2-description" itemprop="description">1개의 크렘 브륄레, 1개의 바닐라, 1개의 카라멜, 휘핑 크림
</dl>

dl 요소는 대화를 마크업하는 데 적합하지 않습니다. 대화 마크업 예제를 참조하세요.

4.4.10 dt 요소

Element/dt

모든 현재 엔진에서 지원.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
없음.
이 요소가 사용될 수 있는 맥락:
dd 또는 dt 요소들 앞에, dl 요소 내에서 사용됩니다.
dd 또는 dt 요소들 앞에, div 요소 내에서, dl 요소의 자식으로 사용됩니다.
콘텐츠 모델:
플로우 콘텐츠, 하지만 header, footer, 섹셔닝 콘텐츠 또는 헤딩 콘텐츠 자손을 포함하지 않습니다.
텍스트/HTML에서 태그 생략:
dt 요소의 끝 태그dt 요소 바로 뒤에 다른 dt 요소 또는 dd 요소가 있을 경우 생략할 수 있습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려 사항:
작성자를 위한 안내.
구현자를 위한 안내.
DOM 인터페이스:
HTMLElement를 사용합니다.

dt 요소는 설명 목록(dl 요소)에서 용어 또는 이름 부분을 나타냅니다.

dt 요소 자체는 dl 요소 내에서 사용될 때 그 내용이 정의된 용어임을 나타내지 않지만, 이는 dfn 요소를 사용하여 나타낼 수 있습니다.

이 예제는 dt 요소를 질문에 사용하고 dd 요소를 답변에 사용하여 마크업된 자주 묻는 질문(FAQ) 목록을 보여줍니다.

<article>
 <h1>FAQ</h1>
 <dl>
  <dt>우리가 원하는 것은 무엇입니까?</dt>
  <dd>우리의 데이터입니다.</dd>
  <dt>언제 그것을 원합니까?</dt>
  <dd>지금.</dd>
  <dt>그것은 어디에 있습니까?</dt>
  <dd>우리는 확신할 수 없습니다.</dd>
 </dl>
</article>

4.4.11 dd 요소

Element/dd

모든 현재 엔진에서 지원.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
없음.
이 요소가 사용될 수 있는 맥락:
dt 또는 dd 요소들 뒤에, dl 요소 내에서 사용됩니다.
dt 또는 dd 요소들 뒤에, div 요소 내에서, dl 요소의 자식으로 사용됩니다.
콘텐츠 모델:
플로우 콘텐츠.
텍스트/HTML에서 태그 생략:
dd 요소의 끝 태그dd 요소 바로 뒤에 다른 dd 요소 또는 dt 요소가 있을 경우, 또는 부모 요소에 더 이상 콘텐츠가 없을 경우 생략할 수 있습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려 사항:
작성자를 위한 안내.
구현자를 위한 안내.
DOM 인터페이스:
HTMLElement를 사용합니다.

dd 요소는 설명 목록(dl 요소)에서 용어-설명 그룹의 설명, 정의 또는 값을 나타냅니다.

dl은 사전과 같은 어휘 목록을 정의하는 데 사용될 수 있습니다. 다음 예제에서, dtdfn에 의해 주어진 각 항목에는 여러 개의 dd가 있어 정의의 다양한 부분을 보여줍니다.

<dl>
 <dt><dfn>행복</dfn></dt>
 <dd class="발음">/ˈhæpinəs/</dd>
 <dd class="품사"><i><abbr>n.</abbr></i></dd>
 <dd>행복한 상태.</dd>
 <dd>행운; 성공. <q><b>행복</b>이여! 그것이 성공했습니다!</q></dd>
 <dt><dfn>기쁨</dfn></dt>
 <dd class="발음">/rɪˈdʒɔɪs/</dd>
 <dd><i class="품사"><abbr>v.intr.</abbr></i> 스스로 기뻐하다.</dd>
 <dd><i class="품사"><abbr>v.tr.</abbr></i> 남을 기쁘게 하다.</dd>
</dl>

4.4.12 figure 요소

Element/figure

모든 현재 엔진에서 지원.

Firefox4+Safari5.1+Chrome8+
Opera11+Edge79+
Edge (Legacy)12+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11+
카테고리:
플로우 콘텐츠.
명백한 콘텐츠.
이 요소가 사용될 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
다음 중 하나: 하나의 figcaption 요소가 뒤따르는 플로우 콘텐츠.
또는: 플로우 콘텐츠가 뒤따르는 하나의 figcaption 요소.
또는: 플로우 콘텐츠.
텍스트/HTML에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려 사항:
작성자를 위한 안내.
구현자를 위한 안내.
DOM 인터페이스:
HTMLElement를 사용합니다.

figure 요소는 플로우 콘텐츠를 나타내며, 선택적으로 캡션과 함께 자체적으로 포함된 콘텐츠를 나타내며(완전한 문장과 같은) 문서의 주 흐름에서 단일 단위로 참조됩니다.

이 문맥에서 "자체 포함"이 반드시 독립적이라는 것을 의미하는 것은 아닙니다. 예를 들어, 단락의 각 문장은 자체 포함되어 있습니다. 문장의 일부인 이미지는 figure에 적합하지 않지만, 이미지로 구성된 전체 문장은 적합할 수 있습니다.

이 요소는 따라서 일러스트레이션, 다이어그램, 사진, 코드 목록 등을 주석으로 달 때 사용할 수 있습니다.

figure가 문서의 주요 콘텐츠에서 캡션(예: 그림 번호)으로 식별되어 참조되는 경우, 이러한 콘텐츠를 페이지의 측면, 전용 페이지 또는 부록으로 이동시켜도 문서의 흐름에 영향을 미치지 않고 쉽게 이동할 수 있습니다.

figure 요소가 상대적인 위치로 참조되는 경우, 예를 들어 "위의 사진에서" 또는 "다음 그림에서 보여주는 것처럼"이라면, 그림을 이동하면 페이지의 의미가 혼란스러워집니다. 작성자는 페이지를 쉽게 다시 스타일링할 수 있도록 상대적 참조 대신 라벨을 사용하여 그림을 참조하는 것을 고려해야 합니다.

첫 번째 figcaption 요소 자식 요소는, 만약 있다면, figure 요소의 콘텐츠의 캡션을 나타냅니다. 자식 figcaption 요소가 없는 경우 캡션은 존재하지 않습니다.

figure 요소의 내용은 주변 흐름의 일부입니다. 예를 들어 이미지 공유 사이트에서 사진을 표시하는 것이 페이지의 목적이라면, figurefigcaption 요소를 사용하여 해당 figure에 대한 캡션을 명시적으로 제공할 수 있습니다. 주변 흐름과는 관련이 없거나 별도의 목적을 가지는 콘텐츠의 경우, aside 요소를 사용해야 하며(그리고 figure를 감쌀 수 있습니다). 예를 들어, article에서 내용을 반복하는 인용문은 콘텐츠의 일부가 아니라 독자를 유도하거나 주요 주제를 강조하기 위한 반복이므로 figure보다는 aside에 포함하는 것이 더 적절합니다.

이 예제는 코드 목록을 마크업하는 데 사용된 figure 요소를 보여줍니다.

<p><a href="#l4">리스트 4</a>에서 우리는 기본 핵심 인터페이스 API 선언을 봅니다.</p>
<figure id="l4">
 <figcaption>리스트 4. 기본 핵심 인터페이스 API 선언.</figcaption>
 <pre><code>interface PrimaryCore {
 boolean verifyDataLine();
 undefined sendData(sequence&lt;byte> data);
 undefined initSelfDestruct();
}</code></pre>
</figure>
<p>API는 UTF-8을 사용하도록 설계되었습니다.</p>

여기에서 우리는 페이지의 주요 콘텐츠인 사진을 마크업하는 데 사용된 figure 요소를 봅니다(갤러리와 같은).

<!DOCTYPE HTML>
<html lang="en">
<title>일하는 거품들 — 내 갤러리™</title>
<figure>
 <img src="bubbles-work.jpeg"
      alt="거품이 사무실 의자에 앉아 그의 최신 프로젝트에 열중하고 있습니다.">
 <figcaption>일하는 거품들</figcaption>
</figure>
<nav><a href="19414.html">이전</a><a href="19416.html">다음</a></nav>

이 예에서 우리는 figure가 아닌 이미지와 figure 요소로 마크업된 이미지 및 비디오를 봅니다. 첫 번째 이미지는 예제의 두 번째 문장의 일부이므로 독립된 단위가 아니며 figure에 적합하지 않습니다.

<h2>Malinko의 만화</h2>

<p>이 사건은 만화와 관련된 어떤 "지적 재산권" 침해에 중점을 두었습니다 (참조: Exhibit A). 이 소송은 이러한 말로 끝나는 예고편 이후 시작되었습니다:

<blockquote>
 <img src="promblem-packed-action.png" alt="ROUGH COPY! Promblem-Packed Action!">
</blockquote>

<p>...방영되었습니다. 더 큰 노트북을 들고 있는 변호사가 눈덩이를 사용하여 선제공격을 시작했습니다. 예고편의 전체 사본은 Exhibit B와 함께 포함되어 있습니다.

<figure>
 <img src="ex-a.png" alt="더러운 종이에 그려진 두 개의 낙서.">
 <figcaption>Exhibit A. 소위 <cite>rough copy</cite> 만화.</figcaption>
</figure>

<figure>
 <video src="ex-b.mov"></video>
 <figcaption>Exhibit B. <cite>Rough Copy</cite> 예고편.</figcaption>
</figure>

<p>이 사건은 법정 밖에서 해결되었습니다.

여기서 시의 일부가 figure를 사용하여 마크업되었습니다.

<figure>
 <p>'Twas brillig, and the slithy toves<br>
 Did gyre and gimble in the wabe;<br>
 All mimsy were the borogoves,<br>
 And the mome raths outgrabe.</p>
 <figcaption><cite>Jabberwocky</cite> (첫 번째 절). 루이스 캐롤, 1832-98</figcaption>
</figure>

이 예제에서는, 더 큰 작업의 일부일 수 있는 예로서, 성을 다루는 텍스트에서 중첩된 figure 요소들이 그룹 캡션과 각 figure에 대한 개별 캡션을 제공합니다:

<figure>
 <figcaption>세월에 따른 성의 모습: 각각 1423년, 1858년, 1999년.</figcaption>
 <figure>
  <figcaption>에칭. 익명, 약 1423년.</figcaption>
  <img src="castle1423.jpeg" alt="성에는 하나의 탑과 그 주위를 둘러싼 높은 벽이 있습니다.">
 </figure>
 <figure>
  <figcaption>유화. 마리아 타울, 1858년.</figcaption>
  <img src="castle1858.jpeg" alt="성에는 이제 두 개의 탑과 두 개의 벽이 있습니다.">
 </figure>
 <figure>
  <figcaption>필름 사진. 피터 얀클, 1999년.</figcaption>
  <img src="castle1999.jpeg" alt="성은 폐허가 되었고, 원래의 탑만이 온전하게 남아 있습니다.">
 </figure> 
</figure>

이전 예제는 다음과 같이 더 간결하게 작성될 수 있습니다 (중첩된 figure/figcaption 쌍 대신 title 속성을 사용하여):

<figure>
 <img src="castle1423.jpeg" title="에칭. 익명, 약 1423년."
      alt="성에는 하나의 탑과 그 주위를 둘러싼 높은 벽이 있습니다.">
 <img src="castle1858.jpeg" title="유화. 마리아 타울, 1858년."
      alt="성에는 이제 두 개의 탑과 두 개의 벽이 있습니다."> 
 <img src="castle1999.jpeg" title="필름 사진. 피터 얀클, 1999년."
      alt="성은 폐허가 되었고, 원래의 탑만이 온전하게 남아 있습니다."> 
 <figcaption>세월에 따른 성의 모습: 각각 1423년, 1858년, 1999년.</figcaption> 
</figure>

때때로 figure는 콘텐츠에서 암시적으로만 참조됩니다:

<article>
 <h1>의회에서 재정 협상이 난항을 겪으며 기한이 다가옵니다</h1> 
 <figure>
  <img src="obama-reid.jpeg" alt="오바마와 리드가 함께 앉아 웃고 있는 모습입니다.">
  <figcaption>바락 오바마와 해리 리드. 백악관 언론 사진.</figcaption>
 </figure>
 <p>의회에서 재정 교착 상태를 해결하기 위한 협상이 화요일에 중단되어 양쪽 의회 모두 정부를 재개하고 국가의 차입 권한을 확장하기 위한 방법을 모색하고 있습니다. 기한은 목요일로 다가오고 있습니다.</p> 
 ...
</article>

4.4.13 figcaption 요소

Element/figcaption

모든 현재 엔진에서 지원됩니다.

Firefox4+Safari5.1+Chrome8+
Opera11+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android11+
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
figure 요소의 첫 번째 또는 마지막 자식 요소로 사용될 수 있습니다.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려 사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용합니다.

figcaption 요소는 figure 요소의 나머지 내용을 설명하는 캡션이나 레전드를 나타냅니다.

이 요소는 소스에 대한 추가 정보를 포함할 수 있습니다:

<figcaption>
 <p>오리입니다.</p>
 <p><small>사진 제공: 🌟 뉴스.</small></p>
</figcaption>
<figcaption>
 <p>3룸 아파트의 평균 임대료, 비영리 아파트 제외</p>
 <p>취리히 통계청 — <time datetime=2017-11-14>2017년 11월 14일</time></p>
</figcaption>

4.4.14 main 요소

Element/main

모든 현재 엔진에서 지원됩니다.

Firefox21+Safari7+Chrome26+
Opera16+Edge79+
Edge (Legacy)12+Internet Explorer지원하지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
감지할 수 있는 콘텐츠.
이 요소를 사용할 수 있는 문맥:
플로우 콘텐츠가 예상되는 곳, 단, 계층적으로 올바른 main 요소여야 합니다.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려 사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용합니다.

main 요소는 문서의 주요 콘텐츠를 나타냅니다.

문서에는 main 요소가 hidden 속성이 지정되지 않은 경우 하나만 있어야 합니다.

계층적으로 올바른 main 요소는 조상 요소가 html, body, div, form (접근 가능한 이름이 없는 경우), 및 자율 커스텀 요소로 제한된 요소입니다. 각 main 요소는 계층적으로 올바른 main 요소여야 합니다.

이 예에서 작성자는 페이지의 각 구성 요소가 상자에 렌더링되는 프레젠테이션을 사용했습니다. 페이지의 주요 콘텐츠를 감싸기 위해 (헤더, 푸터, 탐색 표시줄 및 사이드바와는 반대로), main 요소가 사용됩니다.

<!DOCTYPE html>
<html lang="en">
<title>RPG System 17</title>
<style>
 header, nav, aside, main, footer {
   margin: 0.5em; border: thin solid; padding: 0.5em;
   background: #EFF; color: black; box-shadow: 0 0 0.25em #033;
 }
 h1, h2, p { margin: 0; }
 nav, main { float: left; }
 aside { float: right; }
 footer { clear: both; }
</style>
<header>
 <h1>System Eighteen</h1>
</header>
<nav>
 <a href="../16/">← System 17</a>
 <a href="../18/">RPXIX →</a>
</nav>
<aside>
 <p>이 시스템에는 HP 메커니즘이 없으므로 치유가 없습니다.</p>
</aside>
<main>
 <h2>캐릭터 생성</h2>
 <p>속성(마법, 힘, 민첩성)은 레벨당 한 포인트의 비용으로 구매할 수 있습니다.</p>
 <h2>주사위 굴리기</h2>
 <p>각 만남 시 모든 스킬에 대해 주사위를 굴리세요. 상대보다 높은 수를 굴리면 승리합니다.</p>
</main>
<footer>
 <p>Copyright © 2013</footer>
</html>

다음 예에서 여러 main 요소가 사용되며 스크립트가 사용되어 탐색이 서버 라운드트립 없이 작동하고 현재가 아닌 요소에 hidden 속성을 설정합니다:

<!doctype html>
<html lang=en-CA>
<meta charset=utf-8>
<title></title>
<link rel=stylesheet href=spa.css>
<script src=spa.js async></script>
<nav>
 <a href=/>Home</a>
 <a href=/about>About</a>
 <a href=/contact>Contact</a>
</nav>
<main>
 <h1>Home</h1></main>
<main hidden>
 <h1>About</h1></main>
<main hidden>
 <h1>Contact</h1></main>
<footer>Made with ❤️ by <a href=https://example.com/>Example 👻</a>.</footer>

4.4.15 search 요소

요소/search

현재 엔진에서 지원되지 않음.

Firefox아니오Safari아니오Chrome아니오
Opera아니오Edge아니오
Edge (Legacy)아니오Internet Explorer아니오
Firefox Android?Safari iOS?Chrome Android아니오WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
인식 가능한 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서의 태그 생략:
어떤 태그도 생략할 수 없음.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement을 사용합니다.

search 요소는 검색 또는 필터링 작업과 관련된 양식 제어나 기타 콘텐츠를 포함하는 문서 또는 애플리케이션의 일부를 나타냅니다. 이는 웹사이트나 애플리케이션에 대한 검색, 현재 웹 페이지에서의 검색 또는 필터링 방법, 또는 전체 인터넷 또는 그 하위 섹션에 대한 전역 검색 기능일 수 있습니다.

search 요소는 검색 결과를 단순히 표시하는 데 사용하는 것이 적절하지 않지만, '빠른 검색' 결과의 일부로서 제안 및 링크를 포함할 수 있습니다. 반면에 검색 결과가 포함된 웹 페이지는 해당 웹 페이지의 주요 콘텐츠로 제시될 것으로 예상됩니다.

다음 예에서 작성자는 웹 페이지의 header에 검색 양식을 포함하고 있습니다:

<header>
  <h1><a href="/">내 멋진 블로그</a></h1>
  ...
  <search>
    <form action="search.php">
      <label for="query">기사 찾기</label>
      <input id="query" name="q" type="search">
      <button type="submit">검색</button>
    </form>
  </search>
</header>

이 예에서 작성자는 웹 애플리케이션의 검색 기능을 JavaScript만으로 구현했습니다. 서버 측 제출을 수행하기 위해 form 요소를 사용하지 않았지만, 포함된 search 요소는 하위 콘텐츠의 목적이 검색 기능을 나타낸다고 의미적으로 식별합니다.

<search>
  <label>
    검색 및 필터링
    <input type="search" id="query">
  </label>
  <label>
    <input type="checkbox" id="exact-only">
    정확한 일치만 검색
  </label>

  <section>
    <h3>검색 결과:</h3>
    <ul id="results">
      <li>
        <p><a href="services/consulting">컨설팅 서비스</a></p>
        <p>
          당사의 통합 컨설턴트 Bob과 Bob을 통해 비즈니스를 개선할 수 있는 방법을 알아보세요.
        </p>
      </li>
      ...
    </ul>
    <!--
      쿼리 결과가 없거나 모든 결과가 필터링된 경우
      여기에 결과 없음 메시지를 렌더링합니다.
    -->
    <output id="no-results"></output>
  </section>
</search>

다음 예에서 페이지에는 두 가지 검색 기능이 있습니다. 첫 번째는 웹 페이지의 header에 위치하여 웹사이트의 콘텐츠를 검색하는 전역 메커니즘 역할을 합니다. 그 목적은 지정된 title 속성으로 표시됩니다. 두 번째는 현재 페이지의 콘텐츠를 검색 및 필터링하는 메커니즘으로, 페이지의 주요 콘텐츠의 일부로 포함됩니다. 이 메커니즘의 목적을 나타내기 위해 헤딩을 포함하고 있습니다.

<body>
  <header>
    ...
    <search title="Website">
      ...
    </search>
  </header>
  <main>
    <h1>귀하의 위치 근처 호텔</h1>
     <search>
       <h2>결과 필터링</h2>
       ...
     </search>
     <article>
      <!-- 검색 결과 콘텐츠 -->
    </article>
  </main>
</body>

4.4.16 div 요소

Element/div

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
감지 가능한 콘텐츠.
select 요소 내부 콘텐츠 요소.
optgroup 요소 내부 콘텐츠 요소.
option 요소 내부 콘텐츠 요소.
이 요소를 사용할 수 있는 컨텍스트:
플로우 콘텐츠가 예상되는 곳.
dl 요소의 자식으로.
콘텐츠 모델:
이 요소가 dl 요소의 자식인 경우: 하나 이상의 dt 요소 다음에 하나 이상의 dd 요소, 그리고 선택적으로 스크립트 지원 요소가 섞여 있을 수 있습니다.
그 외에, 이 요소가 option 요소의 자손인 경우: 0개 이상의 option 요소 내부 콘텐츠 요소.
그 외에, 이 요소가 optgroup 요소의 자손인 경우: 0개 이상의 optgroup 요소 내부 콘텐츠 요소.
그 외에, 이 요소가 select 요소의 자손인 경우: 0개 이상의 select 요소 내부 콘텐츠 요소.
그 외의 경우: 플로우 콘텐츠.
text/html에서 태그 생략:
태그를 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLDivElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 또한 사용되지 않는 멤버 포함
};

div 요소는 특별한 의미가 없습니다. 자식 요소를 나타냅니다. class, lang, title 속성을 사용하여 연속된 요소 그룹에 공통적인 의미를 마크업하는 데 사용할 수 있습니다. 또한 dl 요소 내에서 dtdd 요소 그룹을 감싸는 데 사용할 수 있습니다.

작성자는 div 요소를 최후의 수단으로 생각하고, 다른 적합한 요소가 없을 때만 사용하는 것이 좋습니다. 더 적합한 요소를 사용하면 독자의 접근성이 향상되고 작성자가 더 쉽게 유지 관리할 수 있습니다.

예를 들어, 블로그 게시물은 article 요소로 마크업되고, 장은 section 요소로 마크업되며, 페이지의 내비게이션 도구는 nav 요소로, 양식 컨트롤 그룹은 fieldset 요소로 마크업됩니다.

반면, div 요소는 스타일 목적이나 섹션 내에서 여러 단락을 동일한 방식으로 주석을 달기 위해 유용할 수 있습니다. 다음 예에서는 div 요소를 사용하여 두 단락의 언어를 설정하는 방법을 보여줍니다.

<article lang="en-US">
<h1>나의 언어 사용과 나의 고양이들</h1>
<p>내 고양이의 행동은 그녀의 부재 이후 크게 변하지 않았지만, 그녀는 이웃들에게 종종 새로운 외모를 자랑합니다.</p>
<div lang="en-GB">
<p>내 다른 고양이는 검정색과 흰색으로, 매우 귀엽습니다. 오늘 우리는 그와 함께 도로를 걸어 수영장으로 갔습니다. 어제는 이웃을 방문했다고 합니다. 아마도 우리의 아파트가 그들의 아파트와 거울 이미지라는 것을 인식하고 있는 것 같습니다.</p>
<p>음, 방금 전 단락에서 영국 영어를 사용한 것을 눈치챘습니다. 하지만 저는 미국 영어로 작성해야 합니다. 그래서 "pavement"나 "flat" 또는 "colour"라고 말해서는 안 됩니다...</p>
</div>
<p>"sidewalk", "apartment", "color"라고 말해야겠네요!</p>
</article>

4.5 텍스트 수준의 시맨틱

4.5.1 a 요소

요소/a

현재 모든 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAnchorElement

현재 모든 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLAnchorElement/download

Support in all current engines.

Firefox20+Safari10.1+Chrome15+
Opera?Edge79+
Edge (Legacy)13+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAnchorElement/rel

Support in all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLAnchorElement/relList

Support in all current engines.

Firefox30+Safari9+Chrome65+
Opera?Edge79+
Edge (Legacy)18Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
요소에 href 속성이 있는 경우: Interactive content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
투명, 그러나 인터랙티브 콘텐츠 하위 요소나 a 요소의 하위 요소, 또는 tabindex 속성이 지정된 하위 요소가 없어야 함.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
href하이퍼링크의 주소
target내비게이블하이퍼링크 내비게이션을 위해
download — 리소스를 탐색 대신 다운로드할 것인지 여부와 이 경우 파일 이름
ping핑할 URL
rel — 문서 내의 하이퍼링크와 목적지 리소스 사이의 관계
hreflang — 링크된 리소스의 언어
type — 참조된 리소스 유형에 대한 힌트
referrerpolicy — 요소가 시작한 가리키는 정책fetches
접근성 고려사항:
요소에 href 속성이 있는 경우: 작성자용; 구현자용.
그 외의 경우: 작성자용; 구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLAnchorElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString target;
  [CEReactions, Reflect] attribute DOMString download;
  [CEReactions, Reflect] attribute USVString ping;
  [CEReactions, Reflect] attribute DOMString rel;
  [SameObject, PutForwards=value, Reflect="rel"] readonly attribute DOMTokenList relList;
  [CEReactions, Reflect] attribute DOMString hreflang;
  [CEReactions, Reflect] attribute DOMString type;

  [CEReactions] attribute DOMString text;

  [CEReactions] attribute DOMString referrerPolicy;

  // also has obsolete members
};
HTMLAnchorElement includes HTMLHyperlinkElementUtils;

a 요소에 href 속성이 있다면, 이는 다음을 나타냅니다. 하이퍼링크 (하이퍼텍스트 앵커)로, 요소의 내용에 의해 레이블이 지정됩니다.

a 요소에 href 속성이 없다면, 해당 요소는 링크가 있을 경우를 위해 자리 표시자를 나타냅니다. 이 자리 표시자는 요소의 내용으로만 구성됩니다.

target, download, ping, rel, hreflang, type, 및 referrerpolicy 속성은 href 속성이 없는 경우 생략해야 합니다.

itemprop 속성이 a 요소에 지정된 경우, href 속성도 반드시 지정되어야 합니다.

사이트가 모든 페이지에 일관된 탐색 툴바를 사용하는 경우, 해당 페이지로 연결되는 링크는 a 요소를 사용하여 표시할 수 있습니다:

<nav>
<ul>
<li> <a href="/"></a> </li>
<li> <a href="/news">뉴스</a> </li>
<li> <a>예제</a> </li>
<li> <a href="/legal">법률</a> </li>
</ul>
</nav>

href, target, download, ping, 및 referrerpolicy 속성은 사용자가 하이퍼링크를 따라갈 때 또는 하이퍼링크를 다운로드할 때 생성된 a 요소의 동작에 영향을 미칩니다. rel, hreflang, 및 type 속성은 사용자가 링크를 따라가기 전에 대상 리소스의 성격을 사용자에게 나타내는 데 사용할 수 있습니다.

a.text

textContent와 동일.

HTMLAnchorElement/referrerPolicy

현재 모든 엔진에서 지원됨.

Firefox50+Safari14+Chrome52+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

IDL 속성 referrerPolicyreferrerpolicy 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.

속성 text의 getter는 이 요소의 하위 텍스트 콘텐츠를 반환해야 합니다.

text 속성의 setter는 주어진 값으로 이 요소 내부의 모든 문자열을 교체해야 합니다.

a 요소는 전체 문단, 목록, 표 등으로 감쌀 수 있으며, 다른 링크나 버튼과 같은 인터랙티브 콘텐츠가 없을 경우 전체 섹션을 포함할 수도 있습니다. 이 예제는 광고 블록 전체를 링크로 만들 수 있는 방법을 보여줍니다:

<aside class="광고">
<h1>광고</h1>
<a href="https://ad.example.com/?adid=1929&amp;pubid=1422">
<section>
<h1>Mellblomatic 9000!</h1>
<p>모든 위젯을 멜블롬으로 변환하십시오!</p>
<p>배송비 별도 9.99달러에 구매할 수 있습니다.</p>
</section>
</a>
<a href="https://ad.example.com/?adid=375&amp;pubid=1422">
<section>
<h1>Mellblom 브라우저</h1>
<p>빛의 속도로 웹 브라우징을 즐기세요.</p>
</p>다른 어떤 브라우저도 더 빠르지 않습니다!</p>
</section>
</a>
</aside>

다음 예제는 스크립트를 사용하여 구직 공고 표의 전체 행을 효과적으로 하이퍼링크로 만드는 방법을 보여줍니다:

<table>
<tr>
<th>직위
<th><th>위치
</tr>
<td><a href="/jobs/manager">매니저</a>
<td>원격
<td>원격
</tr>
<td><a href="/jobs/director">디렉터</a>
<td>원격
<td>원격
</tr>
<td><a href="/jobs/astronaut">우주비행사</a>
<td>건축
<td>원격
</table>
<script>
document.querySelector("table").onclick = ({ target }) => {
if (target.parentElement.localName === "tr") {
const link = target.parentElement.querySelector("a");
if (link) {
link.click();
}
}
}
</script>

4.5.2 em 요소

요소/em

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

em 요소는 내용의 강한 강조를 나타냅니다.

특정 내용이 가지는 강도의 수준은 상위 em 요소의 수에 따라 결정됩니다.

강조의 위치는 문장의 의미를 바꿉니다. 따라서 이 요소는 콘텐츠의 중요한 부분을 형성합니다. 이러한 방식으로 강조가 사용되는 정확한 방법은 언어에 따라 다릅니다.

다음 예제는 강조의 위치를 변경하면 의미가 어떻게 달라지는지를 보여줍니다. 먼저, 아무런 강조가 없는 일반적인 사실을 나타내는 문장입니다:

<p>고양이는 귀여운 동물입니다.</p>

첫 단어를 강조함으로써 논의되고 있는 동물의 종류가 의문임을 암시합니다 (아마도 누군가가 개가 귀엽다고 주장하고 있을 때):

<p><em>고양이</em>는 귀여운 동물입니다.</p>

강조를 동사로 옮기면 전체 문장의 진실성이 의문임을 강조합니다 (아마도 누군가가 고양이가 귀엽지 않다고 말하고 있을 때):

<p>고양이는 <em>귀엽습니다</em>.</p>

강조를 형용사로 옮기면 고양이의 정확한 성격이 재확인됩니다 (아마도 누군가가 고양이가 사나운 동물이라고 제안했을 때):

<p>고양이는 <em>귀여운</em> 동물입니다.</p>

마찬가지로, 누군가가 고양이가 채소라고 주장했다면, 이를 수정하려는 사람은 마지막 단어를 강조할 것입니다:

<p>고양이는 귀여운 <em>동물입니다</em>.</p>

문장 전체를 강조함으로써 화자가 주장을 강하게 펼치려는 것이 명확해집니다. 이와 같은 유형의 강조는 일반적으로 구두점에도 영향을 미치며, 여기서도 느낌표를 사용한 이유가 바로 그것입니다.

<p><em>고양이는 귀여운 동물입니다!</em></p>

분노와 함께 귀여움을 강조하려면 다음과 같은 마크업을 사용할 수 있습니다:

<p><em>고양이는 <em>귀여운</em> 동물입니다!</em></p>

em 요소는 일반적인 "이탤릭체" 요소가 아닙니다. 때로는 텍스트가 다른 단락과 차별화되어야 할 때가 있으며, 마치 다른 분위기나 목소리를 가진 것처럼 보이도록 합니다. 이러한 경우 i 요소가 더 적합합니다.

em 요소는 중요성을 전달하려는 것이 아닙니다. 이러한 목적에는 strong 요소가 더 적합합니다.

4.5.3 strong 요소

요소/strong

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

strong 요소는 내용의 강한 중요성, 진지함 또는 긴급성을 나타냅니다.

중요성: strong 요소는 제목, 캡션, 또는 문단에서 다른 부분에 비해 정말로 중요한 부분을 구별하기 위해 사용할 수 있습니다. (이는 hgroup 요소로 마크업할 수 있는 하위 제목과는 다릅니다.)

예를 들어, 이전 문단의 첫 번째 단어는 나머지 세부 내용보다 중요성을 구별하기 위해 strong으로 마크업되어 있습니다.

진지함: strong 요소는 경고나 주의 문구를 마크업하는 데 사용할 수 있습니다.

긴급성: strong 요소는 사용자가 문서의 다른 부분보다 먼저 보아야 하는 내용을 나타내는 데 사용할 수 있습니다.

콘텐츠의 상대적 중요도는 상위 strong 요소의 수에 따라 결정됩니다. 각 strong 요소는 그 내용의 중요성을 증가시킵니다.

strong 요소로 텍스트의 중요성을 변경해도 문장의 의미는 바뀌지 않습니다.

여기서 "장"이라는 단어와 실제 장 번호는 일반적인 텍스트일 뿐이며, 실제 장의 이름은 strong으로 마크업되어 있습니다:

<h1>1장: <strong>프락시스</strong></h1>

다음 예제에서, 캡션에 있는 다이어그램의 이름은 strong으로 마크업되어 있어, 일반 텍스트(이전) 및 설명(이후)과 구별됩니다:

<figcaption>그림 1. <strong>개미 군집의 역학</strong>. 이 군집의 개미들은 열원(왼쪽 상단)과 음식원(오른쪽 하단)에 영향을 받습니다.</figcaption>

이 예제에서, 제목은 실제로 "꽃, 벌, 그리고 꿀"이지만, 저자는 제목에 가벼운 추가 내용을 포함시켰습니다. strong 요소는 따라서 첫 번째 부분을 나머지와 구별하기 위해 사용되었습니다.

<h1><strong>꽃, 벌, 그리고 꿀</strong> 및 이해할 수 없는 다른 것들</h1>

여기 게임에서 경고 문구의 예가 있으며, 각 부분은 중요도에 따라 마크업되어 있습니다:

<p><strong>경고.</strong> 이 던전은 위험합니다.
<strong>오리를 피하세요.</strong> 발견한 금은 가져가세요.
<strong><strong>다이아몬드는 절대 가져가지 마세요</strong>, 
그것들은 폭발하며 <strong>10미터 이내의 모든 것을 파괴할 것입니다.</strong></strong> 경고를 받았습니다.</p>

이 예제에서, strong 요소는 사용자가 먼저 읽어야 할 부분을 나타내기 위해 사용되었습니다.

<p>Remy에 오신 것을 환영합니다, 알림 시스템입니다.</p>
<p>오늘의 작업:</p>
<ul>
<li><p><strong>오븐을 끄세요.</strong></p></li>
<li><p>쓰레기를 내놓으세요.</p></li>
<li><p>세탁을 하세요.</p></li>
</ul>

4.5.4 small 요소

요소/small

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

small 요소는 작은 글씨로 부가 설명을 나타냅니다.

작은 글씨는 일반적으로 면책 조항, 주의사항, 법적 제한 또는 저작권에 사용됩니다. 또한, 저작권 표시나 라이센스 요구사항을 충족시키기 위해 사용되기도 합니다.

small 요소는 em 요소로 강조된 텍스트나 strong 요소로 중요한 것으로 표시된 텍스트의 중요성을 "감소시키지" 않습니다. 강조되지 않거나 중요한 것으로 표시되지 않은 텍스트를 표시하려면 em 또는 strong 요소로 마크업하지 마십시오.

small 요소는 여러 단락, 목록, 또는 텍스트 섹션과 같은 확장된 텍스트에 사용되어서는 안 됩니다. 이 요소는 짧은 텍스트에만 사용하도록 설계되었습니다. 예를 들어, 이용 약관을 나열하는 페이지의 텍스트는 small 요소에 적합하지 않습니다. 이러한 경우, 텍스트는 부가 설명이 아니라 페이지의 주요 내용입니다.

small 요소는 소제목에 사용되어서는 안 됩니다. 소제목에는 hgroup 요소를 사용합니다.

이 예제에서는 small 요소를 사용하여 호텔 객실의 가격에 부가가치세가 포함되지 않았음을 나타냅니다:

<dl>
 <dt>싱글 룸
 <dd>199 € <small>조식 포함, VAT 미포함</small>
 <dt>더블 룸
 <dd>239 € <small>조식 포함, VAT 미포함</small>
</dl>

두 번째 예제에서는 small 요소가 기사 내의 부가 설명에 사용되었습니다.

<p>Example Corp은 오늘 2분기 실적이 사상 최고치를 기록했다고 발표했습니다 <small>(전체 공시: Foo News는 Example Corp의 자회사입니다)</small>, 이는 3분기 Demo Group과의 합병에 대한 추측을 낳고 있습니다.</p>

이는 사이드바와는 다릅니다. 사이드바는 여러 단락 길이일 수 있으며, 본문 텍스트의 주 흐름에서 벗어난 것입니다. 다음 예제에서는 동일한 기사에서 사이드바를 볼 수 있습니다. 이 사이드바에는 사이드바의 정보 출처를 나타내는 작은 글씨가 포함되어 있습니다.

<aside>
 <h1>Example Corp</h1>
 <p>이 회사는 주로 소프트웨어 및 웹사이트를 만듭니다.</p>
 <p>Example Corp의 회사 미션은 "샘플을 기반으로 한 엔터테인먼트 및 뉴스를 제공하는 것"입니다.</p>
 <p><small>정보는 <a
 href="https://example.com/about.html">example.com</a> 홈페이지에서 얻었습니다.</small></p>
</aside>

마지막 예제에서는 small 요소가 중요한 작은 글씨로 마크업되었습니다.

<p><strong><small>이 서비스를 계속 사용하면 키스가 발생합니다.</small></strong></p>

4.5.5 s 요소

요소/s

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

s 요소는 더 이상 정확하지 않거나 유효하지 않은 내용을 나타냅니다.

s 요소는 문서 편집을 나타낼 때 적절하지 않습니다. 문서에서 텍스트를 삭제된 것으로 표시하려면 del 요소를 사용합니다.

이 예제에서는 특정 제품의 새로운 판매 가격이 책정되면서 권장 소매 가격이 더 이상 유효하지 않게 표시되었습니다.

<p>우리의 아이스 티와 레모네이드를 구매하세요!</p>
<p><s>권장 소매 가격: 병당 $3.99</s></p>
<p><strong>이제 병당 단 $2.99에 판매 중!</strong></p>

4.5.6 cite 요소

요소/cite

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

cite 요소는 작품의 제목을 나타냅니다(예: 책, 논문, 에세이, 시, 악보, 노래, 대본, 영화, TV 프로그램, 게임, 조각, 회화, 연극 공연, 오페라, 뮤지컬, 전시회, 법적 사건 보고서, 컴퓨터 프로그램 등). 이것은 인용되거나 상세히 참조된 작품일 수도 있고, 혹은 그냥 지나가며 언급된 작품일 수도 있습니다.

사람의 이름은 작품의 제목이 아니며 — 사람을 "작품"이라고 부르는 경우가 있더라도 — 따라서 이 요소를 사람의 이름을 마크업하는 데 사용해서는 안 됩니다. (어떤 경우에는 b 요소가 이름을 마크업하는 데 적합할 수 있습니다; 예를 들어 유명인들의 이름이 키워드로서 스타일을 달리하여 눈에 띄도록 표시되는 가십 기사에서. 다른 경우에는 정말로 요소가 필요하다면 span 요소를 사용할 수 있습니다.)

다음 예제는 cite 요소의 일반적인 사용 예를 보여줍니다:

<p>내가 가장 좋아하는 책은 Peter F. Hamilton의 <cite>The Reality Dysfunction</cite>입니다. 내가 가장 좋아하는 만화는 Stephan Pastis의 <cite>Pearls Before Swine</cite>입니다. 내가 가장 좋아하는 곡은 Cannonball Adderley Sextet의 <cite>Jive Samba</cite>입니다.</p>

이것은 올바른 사용 예입니다:

<p>Wikipedia의 <cite>HTML</cite> 문서에 따르면, 2008년 2월 중순 기준으로, 속성 값을 따옴표 없이 남겨두는 것은 안전하지 않습니다. 이는 분명히 지나치게 단순화된 설명입니다.</p>

그러나 다음은 잘못된 사용 예입니다. 여기서 cite 요소는 작품의 제목보다 훨씬 많은 내용을 포함하고 있습니다:

<!-- 이 예제는 잘못된 사용 예를 보여주는 것으로, 복사하지 마세요! -->
<p>According to <cite>the Wikipedia article on HTML</cite>, as it
stood in mid-February 2008, leaving attribute values unquoted is
unsafe. This is obviously an over-simplification.</p>

cite 요소는 서지 정보의 인용에서 중요한 부분이지만, 제목만을 마크업하는 데 사용됩니다:

<p><cite>Universal Declaration of Human Rights</cite>, United Nations,
1948년 12월. 총회 결의 217 A (III)에서 채택됨.</p>

인용인용문과 다릅니다(인용문에는 q 요소가 적합합니다).

이것은 잘못된 사용 예입니다, 왜냐하면 cite 요소는 인용문을 위한 것이 아니기 때문입니다:

<p><cite>이것은 잘못되었습니다!</cite>, 이안이 말했습니다.</p>

이것도 잘못된 사용 예입니다, 왜냐하면 사람이 작품이 아니기 때문입니다:

<p><q>이것도 잘못되었습니다!</q>, <cite>이안</cite>이 말했습니다.</p>

올바른 사용 예에서는 cite 요소를 사용하지 않습니다:

<p><q>이것이 맞습니다</q>, 이안이 말했습니다.</p>

위에서 언급한 것처럼, b 요소가 특정 유형의 문서에서 이름을 키워드로 표시하는 데 유용할 수 있습니다:

<p>그리고 나서 <b>이안</b><q>이것이 가십 칼럼에서는 맞을 수도 있다고 말했습니다.</q>.</p>

4.5.7 q 요소

요소/q

현재 모든 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
cite — 인용문의 출처나 편집에 대한 추가 정보에 대한 링크
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLQuoteElement를 사용.

q 요소는 다른 출처에서 인용된 phrasing content를 나타냅니다.

요소의 내용을 인용하는 인용 구두점(따옴표 등)은 q 요소 바로 앞, 뒤, 또는 내부에 나타나지 않아야 하며, 사용자 에이전트가 렌더링 시 삽입합니다.

q 요소 내부의 콘텐츠는 다른 출처에서 인용된 것이어야 하며, 그 출처의 주소가 있는 경우 cite 속성에 명시될 수 있습니다. 출처는 소설이나 대본에서 인용된 가상의 것일 수도 있습니다.

cite 속성이 존재하는 경우, 그것은 유효한 URL이어야 합니다. 해당 속성의 값은 요소의 노드 문서에 상대적으로 파싱되어야 합니다. 사용자 에이전트는 사용자가 이러한 인용 링크를 따를 수 있도록 허용할 수 있지만, 이러한 링크는 주로 개인적인 용도(예: 사이트의 인용문 사용 통계를 수집하는 서버 측 스크립트 등)를 위한 것이며, 독자를 위한 것은 아닙니다.

q 요소는 인용문을 나타내지 않는 따옴표 대신 사용되어서는 안 됩니다. 예를 들어, q 요소를 사용하여 비꼬는 말을 마크업하는 것은 부적절합니다.

q 요소를 사용하여 인용문을 마크업하는 것은 전적으로 선택 사항이며, q 요소 없이 명시적인 인용 구두점을 사용하는 것도 마찬가지로 올바릅니다.

다음은 q 요소를 사용한 간단한 예제입니다:

<p>그 남자는 <q>불가능한 일은 시간이 더 걸린다</q>고 말했다. 나는 그와 동의하지 않았다.</p>

다음은 q 요소 내에 명시적 인용 링크와 외부 인용을 모두 포함한 예제입니다:

<p>W3C 페이지 <cite>About W3C</cite>에서는 W3C의
미션이 <q cite="https://www.w3.org/Consortium/">웹의 장기적인 성장을 보장하는 프로토콜과
지침을 개발하여 월드 와이드 웹을 최대한으로 발전시키는 것</q>이라고 말합니다. 나는 이 미션에 동의하지 않습니다.</p>

다음 예제에서는 인용문 자체에 인용문이 포함된 경우를 보여줍니다:

<p><cite>Example One</cite>에서 그는 <q>그 남자는
불가능한 일은 시간이 더 걸린다고 말했다</q>고 썼습니다. 나는 그와 더 동의하지 않았습니다</q>. 음, 나는 더 동의하지 않습니다!</p>

다음 예제에서는 q 요소 대신 따옴표가 사용되었습니다:

<p>그의 가장 좋은 주장은 ❝나는 동의하지 않는다❞였고,
나는 그것이 웃기다고 생각했습니다.</p>

다음 예제에서는 인용문이 없으며, 따옴표는 단어를 지칭하는 데 사용됩니다. 이 경우 q 요소를 사용하는 것은 부적절합니다.

<p>"ineffable"이라는 단어는 그 캠페인의 잘못된 관리로 인한
재난을 묘사하는 데 사용될 수 있었습니다.</p>

4.5.8 dfn 요소

요소/dfn

현재 모든 엔진에서 지원됨.

Firefox1+Safari6+Chrome15+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content, 그러나 하위 요소에 dfn 요소가 없어야 합니다.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
또한, 이 요소에서는 title 속성이 특별한 의미를 가집니다: 약어의 전체 용어 또는 확장
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

dfn 요소는 용어의 정의 인스턴스를 나타냅니다. dfn 요소의 가장 가까운 상위 요소인 단락, 설명 목록 그룹, 또는 섹션dfn 요소에 의해 정의된 용어의 정의를 포함해야 합니다.

정의 용어: dfn 요소에 title 속성이 있으면, 그 속성의 정확한 값이 정의되는 용어입니다. 그렇지 않고 요소에 정확히 하나의 자식 요소 노드만 있고 텍스트 노드가 없으며, 그 자식 요소가 abbr 요소이고 title 속성이 있는 경우, 그 속성의 정확한 값이 정의되는 용어입니다. 그렇지 않으면, dfn 요소의 하위 텍스트 콘텐츠가 정의되는 용어를 제공합니다.

title 속성이 dfn 요소에 존재하는 경우, 그것은 정의되는 용어만을 포함해야 합니다.

title 속성은 상위 요소에서 dfn 요소에 영향을 미치지 않습니다.

a 요소가 dfn 요소로 연결될 때, 그것은 dfn 요소에 의해 정의된 용어의 인스턴스를 나타냅니다.

다음 조각에서는 "Garage Door Opener" 용어가 첫 번째 단락에서 처음 정의된 후, 두 번째 단락에서 사용됩니다. 두 경우 모두 실제로 표시되는 것은 그 약어입니다.

<p>The <dfn><abbr title="Garage Door Opener">GDO</abbr></dfn>
is a device that allows off-world teams to open the iris.</p>
<!-- ... later in the document: -->
<p>Teal'c activated his <abbr title="Garage Door Opener">GDO</abbr>
and so Hammond ordered the iris to be opened.</p>

a 요소를 추가하면, 참조를 명시적으로 할 수 있습니다:

<p>The <dfn id=gdo><abbr title="Garage Door Opener">GDO</abbr></dfn>
is a device that allows off-world teams to open the iris.</p>
<!-- ... later in the document: -->
<p>Teal'c activated his <a href=#gdo><abbr title="Garage Door Opener">GDO</abbr></a>
and so Hammond ordered the iris to be opened.</p>

4.5.9 abbr 요소

요소/abbr

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome2+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer7+
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
phrasing content.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
또한, 이 요소에서는 title 속성이 특별한 의미를 가집니다: 약어의 전체 용어 또는 확장
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

abbr 요소는 약어 또는 두문자어를 나타내며, 선택적으로 그 확장을 포함할 수 있습니다. title 속성은 약어의 확장을 제공하는 데 사용될 수 있습니다. 이 속성이 지정된 경우, 약어의 확장을 포함해야 하며, 다른 내용은 포함할 수 없습니다.

아래 단락에는 abbr 요소로 표시된 약어가 포함되어 있습니다. 이 단락은 "Web Hypertext Application Technology Working Group"이라는 용어를 정의합니다.

<p>The <dfn id=whatwg><abbr
title="Web Hypertext Application Technology Working Group">WHATWG</abbr></dfn>
is a loose unofficial collaboration of web browser manufacturers and
interested parties who wish to develop new technologies designed to
allow authors to write and deploy Applications over the World Wide
Web.</p>

이를 다르게 작성하는 방법은 다음과 같습니다:

<p>The <dfn id=whatwg>Web Hypertext Application Technology
Working Group</dfn> (<abbr
title="Web Hypertext Application Technology Working Group">WHATWG</abbr>)
is a loose unofficial collaboration of web browser manufacturers and
interested parties who wish to develop new technologies designed to
allow authors to write and deploy Applications over the World Wide
Web.</p>

이 단락에는 두 개의 약어가 있습니다. 한 개의 약어만 정의되었으며, 확장이 지정되지 않은 다른 약어는 abbr 요소를 사용하지 않았습니다.

<p>The
<abbr title="Web Hypertext Application Technology Working Group">WHATWG</abbr>
started working on HTML5 in 2004.</p>

이 단락은 약어를 정의에 연결합니다.

<p>The <a href="#whatwg"><abbr
title="Web Hypertext Application Technology Working Group">WHATWG</abbr></a>
community does not have much representation from Asia.</p>

이 단락은 확장을 제공하지 않고 약어를 표시하며, 약어에 스타일을 적용하기 위한 후크로 사용될 수 있습니다(예: 소문자 대문자 변환).

<p>Philip` and Dashiva both denied that they were going to
get the issue counts from past revisions of the specification to
backfill the <abbr>WHATWG</abbr> issue graph.</p>

약어가 복수형일 경우, 확장의 문법적 수(복수 vs 단수)는 요소 내용의 문법적 수와 일치해야 합니다.

여기서 복수형은 요소 밖에 있으므로 확장은 단수입니다:

<p>Two <abbr title="Working Group">WG</abbr>s worked on
this specification: the <abbr>WHATWG</abbr> and the
<abbr>HTMLWG</abbr>.</p>

여기서 복수형은 요소 안에 있으므로 확장은 복수형입니다:

<p>Two <abbr title="Working Groups">WGs</abbr> worked on
this specification: the <abbr>WHATWG</abbr> and the
<abbr>HTMLWG</abbr>.</p>

약어는 반드시 이 요소를 사용해 표시할 필요는 없습니다. 다음과 같은 경우에 유용할 것으로 예상됩니다:

한 번 title 속성에 확장을 제공한다고 해서 동일한 내용을 가진 다른 abbr 요소가 동일한 확장을 가진 것처럼 동작하지는 않을 것입니다. 각 abbr 요소는 독립적입니다.

4.5.10 ruby 요소

요소/ruby

현재 모든 엔진에서 지원됨.

Firefox38+Safari5+Chrome5+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 문맥:
phrasing content이 예상되는 곳.
콘텐츠 모델:
설명 참조.
text/html에서 태그 생략:
태그 생략 불가.
콘텐츠 속성:
전역 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용.

ruby 요소는 하나 이상의 phrasing content를 루비 주석과 함께 표시할 수 있도록 합니다. 루비 주석은 주로 동아시아 타이포그래피에서 발음을 안내하거나 다른 주석을 추가하기 위해 기본 텍스트 옆에 표시되는 짧은 텍스트입니다. 일본어에서는 이 형태의 타이포그래피를 후리가나라고도 합니다.

ruby 요소의 콘텐츠 모델은 다음과 같은 시퀀스 중 하나 이상으로 구성됩니다:

  1. 다음 중 하나:

  2. 다음 중 하나:

rubyrt 요소는 다양한 종류의 주석에 사용할 수 있으며, 특히 (하지만 이에 국한되지 않음) 아래에 설명된 주석에 사용됩니다. 일본어 루비에 관한 자세한 내용과 일본어 루비를 렌더링하는 방법은 일본어 텍스트 레이아웃 요구 사항을 참조하세요. [JLREQ]

이 글을 작성할 당시, CSS는 HTML ruby 요소의 렌더링을 완전히 제어할 수 있는 방법을 아직 제공하지 않습니다. CSS가 아래에 설명된 스타일을 지원하도록 확장되기를 기대합니다.

일본어 개별 문자에 대한 단일 루비

하나 이상의 히라가나 또는 가타카나 문자(루비 주석)가 각 한자 문자(기본 텍스트)에 배치됩니다. 이는 한자 문자의 읽는 법을 제공하기 위해 사용됩니다.

<ruby>B<rt>annotation</ruby>

이 예에서, 각 주석이 개별 기본 문자와 어떻게 일치하는지 확인할 수 있습니다.

<ruby><rt>くん</ruby><ruby><rt></ruby><ruby><rt></ruby>して<ruby><rt>どう</ruby>ぜず。

くんしてどうぜず。

이 예는 다음과 같이 쓸 수도 있습니다. 두 개의 기본 텍스트 세그먼트와 두 개의 주석이 포함된 하나의 ruby 요소를 사용하여 각각 하나의 기본 텍스트 세그먼트와 주석을 포함한 두 개의 연속 ruby 요소로 마크업한 것 대신 다음과 같이 쓸 수 있습니다:

<ruby><rt>くん</rt><rt></ruby><ruby><rt></ruby>して<ruby><rt>どう</ruby>ぜず。
복합어에 대한 단일 루비(주쿠고)

이는 이전 사례와 유사합니다. 복합어(기본 텍스트)의 각 한자 문자에는 히라가나 또는 가타카나 문자(루비 주석)가 읽는 법으로 제공됩니다. 차이점은 기본 텍스트 세그먼트가 서로 분리되지 않고 복합어를 형성한다는 것입니다.

<ruby>B<rt>annotation</rt>B<rt>annotation</ruby>

이 예에서, 각 주석이 개별 기본 문자와 다시 일치하는지 확인할 수 있습니다. 이 예에서는 각 복합어(주쿠고)가 단일 ruby 요소에 해당합니다.

여기에서 예상되는 렌더링은 각 주석이 해당하는 기본 문자 위(또는 수직 텍스트의 경우 옆)에 배치되고, 주석이 인접한 문자와 겹치지 않도록 하는 것입니다.

<ruby><rt></rt><rt>もん</rt></ruby><ruby><rt>ほう</rt><rt>がく</rt></ruby><ruby><rt>ぎょう</rt></rt></ruby>する

もんほうがくぎょうする

주쿠고 루비

이는 이전 사례와 의미적으로 동일합니다(기본 복합어의 각 한자 문자에 히라가나 또는 가타카나 문자로 읽는 법을 주석으로 제공). 그러나 렌더링은 더 복잡한 주쿠고 루비 렌더링입니다.

이는 복합어에 대한 단일 루비의 이전 예제와 동일합니다. 다른 렌더링은 다른 스타일링(예: CSS)을 사용하여 달성할 것으로 예상되며, 여기서는 표시되지 않습니다.

<ruby><rt></rt><rt>もん</rt></ruby><ruby><rt>ほう</rt></rt>がく</rt></ruby><ruby><rt>ぎょう</rt></rt></ruby>する

주쿠고 루비 렌더링에 대한 자세한 내용은 Jukugo Ruby 렌더링을 참조하세요. 일본어 텍스트 레이아웃 요구 사항의 부록 F를 참조하세요. [JLREQ]

의미 설명을 위한 그룹 루비

주석은 발음보다는 (또는 발음과 함께) 기본 텍스트의 의미를 설명합니다. 따라서 기본 텍스트와 주석 모두 여러 문자로 구성될 수 있습니다.

<ruby>BASE<rt>annotation</ruby>

여기서 복합 한자 단어는 주석으로 해당 가타카나를 가지고 있습니다.

<ruby>境界面<rt>インターフェース</ruby>

境界面インターフェース

여기서 복합 한자 단어는 주석으로 영어 번역을 가지고 있습니다.

<ruby lang="ja">編集者<rt lang="en">editor</ruby>

編集者editor

주쿠지 발음을 위한 그룹 루비

일대일 대응이 어려운 경우, 여러 기본 문자에 해당하는 발음 읽기가 있습니다. (영어에서는 "Colonel"과 "Lieutenant"라는 단어가 발음과 개별 문자 간의 직접적인 대응이 다소 불분명한 예입니다.)

이 예에서는 꽃 종 이름에 그룹 루비를 사용하여 발음 읽기가 제공됩니다.

<ruby>紫陽花<rt>あじさい</ruby>

紫陽花あじさい

발음 및 의미 주석을 동시에 포함한 텍스트(양면 루비)

때로는 위에서 설명한 루비 스타일이 결합됩니다.

이로 인해 동일한 기본 세그먼트를 커버하는 두 개의 주석이 생성되면, 주석을 연달아 배치할 수 있습니다.

<ruby>BASE<rt>annotation 1</rt>annotation 2</ruby>
<ruby>B<rt>a</rt>a</ruby><ruby>A<rt>a</rt>a</ruby><ruby>S<rt>a</rt>a</ruby><ruby>E<rt>a</rt>a</ruby>

이 예시에서는 몇 가지 기호에 영어와 프랑스어로 이름이 지정되어 있습니다.

<ruby><rt> Heart <rt lang=fr> Cœur </rt><rt> Shamrock <rt lang=fr> Trèfle </rt><rt> Star <rt lang=fr> Étoile </rt>
</ruby>

다음과 같은 더 복잡한 상황에서는, 내부 주석을 제공하기 위해 중첩된 ruby 요소를 사용하고, 그런 다음 전체 ruby에 "외부" 수준에서 주석을 추가합니다.

<ruby><ruby>B<rt>a</rt>A<rt>n</rt>S<rt>t</rt>E</rt>n</rt></ruby><rt>annotation</ruby>

여기서는 발음과 의미가 루비 주석으로 제공됩니다. 중첩된 ruby 요소의 주석은 각 기본 문자를 위한 단일 루비 발음 주석을 제공하며, 외부 ruby 요소의 자식 요소인 rt 요소의 주석은 히라가나로 의미를 제공합니다.

<ruby><ruby><rt>とう</rt><rt>なん</rt></ruby><rt>たつみ</rt></ruby>

とうなん たつみ の方角

이것은 동일한 예이지만, 의미가 일본어 대신 영어로 제공됩니다:

<ruby><ruby><rt>とう</rt><rt>なん</rt></ruby><rt lang=en>Southeast</rt></ruby>

とうなん Southeast の方角


루비 요소 조상이 없는 루비 요소 내에서는 콘텐츠가 세 가지 범주로 분할됩니다: 기본 텍스트 세그먼트, 주석 세그먼트, 무시된 세그먼트. 무시된 세그먼트는 문서의 의미론에 포함되지 않으며, 일부 요소 간 공백rp 요소로 구성됩니다. 후자는 루비를 전혀 지원하지 않는 레거시 사용자 에이전트를 위해 사용됩니다. 기본 텍스트 세그먼트는 중첩될 수 있으며(하나의 위치에서 두 개의 세그먼트만 중첩될 수 있으며, 중첩된 세그먼트는 겹치는 세그먼트보다 시작점이 앞서거나 종료점이 같거나 늦어야 하고, 종료점이 늦어야 하는 세그먼트는 시작점이 같거나 앞서야 합니다). 주석 세그먼트는 rt 요소와 대응됩니다. 각 주석 세그먼트는 기본 텍스트 세그먼트와 연결될 수 있으며, 각 기본 텍스트 세그먼트는 주석 세그먼트와 연결될 수 있습니다. (적합한 문서에서 각 기본 텍스트 세그먼트는 적어도 하나의 주석 세그먼트와 연결되어 있으며, 각 주석 세그먼트는 하나의 기본 텍스트 세그먼트와 연결되어 있습니다.) 루비 요소는 포함된 기본 텍스트 세그먼트의 집합과 그 기본 텍스트 세그먼트와 주석 세그먼트 간의 매핑을 나타냅니다. 세그먼트는 DOM 범위로 설명되며, 주석 세그먼트 범위는 항상 정확히 하나의 요소로 구성됩니다. [DOM]

특정 시점에서 루비 요소의 콘텐츠 분할 및 범주화는 다음 알고리즘을 실행하여 얻은 결과입니다:

  1. base text segments를 빈 기본 텍스트 세그먼트 목록으로 설정하며, 각 세그먼트는 잠재적으로 기본 텍스트 하위 세그먼트 목록을 가질 수 있습니다.

  2. annotation segments를 빈 주석 세그먼트 목록으로 설정하며, 각 세그먼트는 잠재적으로 기본 텍스트 세그먼트나 하위 세그먼트와 연결될 수 있습니다.

  3. root를 알고리즘이 실행되는 루비 요소로 설정합니다.

  4. root루비 요소 조상이 있는 경우, end로 레이블된 단계로 건너뜁니다.

  5. current parentroot로 설정합니다.

  6. index를 0으로 설정합니다.

  7. start index를 null로 설정합니다.

  8. saved start index를 null로 설정합니다.

  9. current base text를 null로 설정합니다.

  10. 시작 모드: indexcurrent parent의 자식 노드 수보다 크거나 같은 경우, end mode로 레이블된 단계로 건너뜁니다.

  11. index 번째 노드가 current parent에서 rt 또는 rp 요소인 경우, 주석 모드로 레이블된 단계로 건너뜁니다.

  12. start indexindex 값을 설정합니다.

  13. 기본 모드: index 번째 노드가 current parent에서 루비 요소이며, current parentroot와 동일한 요소인 경우, 루비 레벨을 추가한 후 시작 모드로 레이블된 단계로 건너뜁니다.

  14. index 번째 노드가 current parent에서 rt 또는 rp 요소인 경우, 현재 기본 텍스트를 설정한 후 주석 모드로 레이블된 단계로 건너뜁니다.

  15. index 값을 1 증가시킵니다.

  16. 기본 모드 후 증가: indexcurrent parent의 자식 노드 수보다 크거나 같은 경우, end mode로 레이블된 단계로 건너뜁니다.

  17. 기본 모드로 레이블된 단계로 돌아갑니다.

  18. 주석 모드: index 번째 노드가 current parent에서 rt 요소인 경우, 루비 주석 추가한 후 주석 모드 증가로 레이블된 단계로 건너뜁니다.

  19. index 번째 노드가 current parent에서 rp 요소인 경우, 주석 모드 증가로 레이블된 단계로 건너뜁니다.

  20. index 번째 노드가 current parent에서 Text 노드가 아니거나, Text 노드이지만 요소 간 공백이 아닌 경우, 기본 모드로 레이블된 단계로 건너뜁니다.

  21. 주석 모드 증가: lookahead indexindex 더하기 1의 값을 설정합니다.

  22. 주석 모드 공백 건너뛰기: lookahead indexcurrent parent의 자식 노드 수와 같은 경우, end mode로 레이블된 단계로 건너뜁니다.

  23. lookahead index 번째 노드가 current parent에서 rt 요소 또는 rp 요소인 경우, indexlookahead index 값을 설정한 후 주석 모드로 레이블된 단계로 건너뜁니다.

  24. lookahead index 번째 노드가 current parent에서 Text 노드가 아니거나, Text 노드이지만 요소 간 공백이 아닌 경우, index를 더 이상 증가시키지 않고 기본 모드로 레이블된 단계로 건너뜁니다(지금까지 본 요소 간 공백이 다음 기본 텍스트 세그먼트의 일부가 됩니다).

  25. lookahead index 값을 1 증가시킵니다.

  26. 주석 모드 공백 건너뛰기로 레이블된 단계로 건너뜁니다.

  27. end 모드: current parentroot와 동일한 요소가 아닌 경우, 루비 레벨을 팝한 후 기본 모드 후 증가로 레이블된 단계로 건너뜁니다.

  28. 종료: base text segmentsannotation segments를 반환합니다. 루비 요소의 설명되지 않은 콘텐츠는 암묵적으로 무시된 세그먼트에 포함됩니다.

위 단계에서 현재 기본 텍스트를 설정하라는 지시는 알고리즘의 해당 시점에서 다음 단계를 실행함을 의미합니다:

  1. text range시작current parent, start index경계점이고, 종료current parent, index경계점인 DOM 범위입니다.

  2. new text segmenttext range 범위로 설명된 기본 텍스트 세그먼트입니다.

  3. new text segmentbase text segments에 추가합니다.

  4. current base textnew text segment로 설정합니다.

  5. start index를 null로 설정합니다.

위 단계에서 루비 레벨을 추가하라는 지시는 알고리즘의 해당 시점에서 다음 단계를 실행함을 의미합니다:

  1. current parentcurrent parentindex 번째 노드로 설정합니다.

  2. index를 0으로 설정합니다.

  3. saved start indexstart index 값을 설정합니다.

  4. start index를 null로 설정합니다.

위 단계에서 루비 레벨을 팝하라는 지시는 알고리즘의 해당 시점에서 다음 단계를 실행함을 의미합니다:

  1. indexcurrent parentroot에서의 위치로 설정합니다.

  2. current parentroot로 설정합니다.

  3. index 값을 1 증가시킵니다.

  4. start indexsaved start index 값을 설정합니다.

  5. saved start index를 null로 설정합니다.

위 단계에서 루비 주석 추가하라는 지시는 알고리즘의 해당 시점에서 다음 단계를 실행함을 의미합니다:

  1. rtcurrent parentindex 번째 노드인 rt 요소로 설정합니다.

  2. annotation rangecurrent parent, index경계점이며, current parent, index 더하기 1의 경계점인 DOM 범위입니다(i.e. rt만 포함합니다).

  3. new annotation segmentannotation range 범위로 설명된 주석 세그먼트입니다.

  4. current base text가 null이 아닌 경우, new annotation segmentcurrent base text와 연결합니다.

  5. new annotation segmentannotation segments에 추가합니다.

이 예제에서는 일본어 텍스트 漢字의 각 한자가 히라가나로 읽기가 주석으로 추가됩니다.

...
<ruby><rt>かん</rt><rt></rt></ruby>
...

이는 다음과 같이 렌더링될 수 있습니다:

두 개의 주요 한자가 있으며, 각 한자 위에 더 작은 글꼴로 히라가나 주석이 렌더링되어 있습니다.

이 예제에서는 전통 중국어 텍스트 漢字의 각 한자가 보포모포로 읽기가 주석으로 추가됩니다.

<ruby><rt>ㄏㄢˋ</rt><rt>ㄗˋ</rt></ruby>

이는 다음과 같이 렌더링될 수 있습니다:

두 개의 주요 한자가 있으며, 각 한자 옆에 더 작은 글꼴로 보포모포 주석이 렌더링되어 있습니다.

이 예제에서는 간체 중국어 텍스트 汉字의 각 한자가 병음으로 읽기가 주석으로 추가됩니다.

...<ruby><rt>hàn</rt><rt></rt></ruby>...

이는 다음과 같이 렌더링될 수 있습니다:

두 개의 주요 한자가 있으며, 각 한자 위에 더 작은 글꼴로 병음 주석이 렌더링되어 있습니다.

이 예제에서는 "HTML" 약어에 네 가지 주석이 있습니다: 전체 약어에 대한 주석으로, 그 의미를 간략히 설명한 것입니다. "HT" 문자는 "Hypertext"로 확장되고, "M" 문자는 "Markup"으로, "L" 문자는 "Language"로 확장됩니다.

<ruby>
 <ruby>HT<rt>Hypertext</rt>M<rt>Markup</rt>L<rt>Language</rt></ruby>
 <rt>문서 및 애플리케이션을 설명하는 추상적 언어입니다
</ruby>

4.5.11 rt 요소

요소/rt

모든 최신 엔진에서 지원됨.

Firefox38+Safari5+Chrome5+
Opera?Edge79+
Edge (Legacy)?Internet Explorer5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
범주:
없음.
이 요소가 사용될 수 있는 맥락:
루비 요소의 자식으로.
콘텐츠 모델:
구 조 콘텐츠.
text/html에서의 태그 생략:
rt 요소의 종료 태그rt 요소가 바로 뒤따르거나 rp 요소가 뒤따르거나, 부모 요소에 더 이상 콘텐츠가 없는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용합니다.

rt 요소는 루비 주석의 루비 텍스트 구성 요소를 표시합니다. 루비 요소의 자식인 경우, 루비 요소가 그것을 결정하는 데 사용하는 일부로서만 존재하며, 자체적으로는 아무것도 표현하지 않습니다.

rt 요소가 루비 요소의 자식이 아닌 경우, 자식 요소와 동일한 것을 표현합니다.

4.5.12 rp 요소

요소/rp

모든 최신 엔진에서 지원됨.

Firefox38+Safari5+Chrome5+
Opera?Edge79+
Edge (Legacy)?Internet Explorer5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
범주:
없음.
이 요소가 사용될 수 있는 맥락:
루비 요소의 자식으로, rt 요소 바로 전이나 바로 후에 사용될 수 있습니다.
콘텐츠 모델:
텍스트.
text/html에서의 태그 생략:
rp 요소의 종료 태그rp 요소가 rt 또는 rp 요소 바로 뒤따르거나, 부모 요소에 더 이상 콘텐츠가 없는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement를 사용합니다.

rp 요소는 루비 주석의 루비 텍스트 구성 요소 주위에 괄호나 다른 콘텐츠를 제공하여 루비 주석을 지원하지 않는 사용자 에이전트에 표시할 수 있습니다.

rp 요소가 루비 요소의 자식인 경우, 아무것도 표현하지 않습니다. rp 요소의 부모 요소가 루비 요소가 아닌 경우, 자식 요소를 표현합니다.

위의 예제에서 텍스트 漢字의 각 한자에 대해 발음이 주석으로 추가된 경우, rp를 사용하여 레거시 사용자 에이전트에서 괄호 안에 읽기가 표시되도록 확장할 수 있습니다:

...
<ruby><rp></rp><rt>かん</rt><rp></rp><rp></rp><rt></rt><rp></rp></ruby>
...

적합한 사용자 에이전트에서는 렌더링이 위와 같이 되겠지만, 루비를 지원하지 않는 사용자 에이전트에서는 다음과 같이 렌더링됩니다:

... 漢(かん)字(じ)...

세그먼트에 여러 주석이 있는 경우, rp 요소는 주석 사이에 배치될 수도 있습니다. 다음은 이전에 만든 예제를 다시 보여주는 것으로, 영어와 프랑스어로 이름이 주어진 몇 가지 기호를 포함하고 있습니다. 이번에는 rp 요소도 포함되었습니다:

<ruby><rp>: </rp><rt>Heart</rt><rp>, </rp><rt lang=fr>Cœur</rt><rp>.</rp><rp>: </rp><rt>Shamrock</rt><rp>, </rp><rt lang=fr>Trèfle</rt><rp>.</rp><rp>: </rp><rt>Star</rt><rp>, </rp><rt lang=fr>Étoile</rt><rp>.</rp>
</ruby>

이 예제는 루비를 지원하지 않는 사용자 에이전트에서 다음과 같이 렌더링됩니다:

♥: Heart, Cœur. ☘: Shamrock, Trèfle. ✶: Star, Étoile.

4.5.13 data 요소

요소/data

모든 최신 엔진에서 지원됨.

Firefox22+Safari10+Chrome62+
Opera?Edge79+
Edge (Legacy)18Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLDataElement

모든 최신 엔진에서 지원됨.

Firefox22+Safari10+Chrome62+
Opera?Edge79+
Edge (Legacy)14+Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLDataElement/value

Support in all current engines.

Firefox22+Safari10+Chrome62+
Opera?Edge79+
Edge (Legacy)14+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
범주:
플로우 콘텐츠.
구조 콘텐츠.
인식 가능한 콘텐츠.
이 요소가 사용될 수 있는 맥락:
구조 콘텐츠가 기대되는 곳에서 사용될 수 있습니다.
콘텐츠 모델:
구조 콘텐츠.
text/html에서의 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
value — 기계가 읽을 수 있는 값
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLDataElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString value;
};

data 요소는 콘텐츠와 함께 value 속성에 있는 해당 콘텐츠의 기계가 읽을 수 있는 형태를 표현합니다.

value 속성은 반드시 있어야 합니다. 이 속성의 값은 요소의 콘텐츠를 기계가 읽을 수 있는 형식으로 나타내야 합니다.

값이 날짜 또는 시간과 관련된 경우, 더 구체적인 time 요소를 대신 사용할 수 있습니다.

이 요소는 여러 용도로 사용될 수 있습니다.

마이크로포맷 또는 이 명세서에서 정의된 마이크로데이터 속성과 결합된 경우, 이 요소는 데이터 처리기용 기계가 읽을 수 있는 값과 웹 브라우저에서 렌더링하기 위한 사람이 읽을 수 있는 값을 모두 제공합니다. 이 경우 value 속성에 사용할 형식은 사용 중인 마이크로포맷 또는 마이크로데이터 어휘에 의해 결정됩니다.

그러나 이 요소는 페이지의 스크립트와 함께 사용될 수도 있으며, 스크립트가 사람이 읽을 수 있는 값과 함께 저장할 리터럴 값을 가지고 있을 때 유용합니다. 이러한 경우 사용해야 할 형식은 스크립트의 필요에만 따릅니다. (data-* 속성도 이러한 상황에서 유용할 수 있습니다.)

여기에는 짧은 테이블이 있으며, 각 열에 대해 텍스트 형식으로 숫자가 표시되고 다른 열에는 분해된 형식으로 표시되지만, data 요소를 사용하여 테이블 정렬 자바스크립트 라이브러리가 각 열에 대해 정렬 메커니즘을 제공할 수 있도록 숫자 값이 인코딩되었습니다.

<script src="sortable.js"></script>
<table class="sortable">
 <thead> <tr> <th> 게임 <th> 회사 <th> 맵 크기
 <tbody>
  <tr> <td> 1830 <td> <data value="8">여덟</data> <td> <data value="93">19+74 헥스 (총 93개)</data>
  <tr> <td> 1856 <td> <data value="11">열하나</data> <td> <data value="99">12+87 헥스 (총 99개)</data>
  <tr> <td> 1870 <td> <data value="10"></data> <td> <data value="149">4+145 헥스 (총 149개)</data>
</table>

4.5.14 time 요소

요소/time

모든 현재 엔진에서 지원됨.

Firefox22+Safari7+Chrome62+
Opera49+Edge79+
Edge (구버전)18Internet Explorer미지원
Firefox Android?Safari iOS4+Chrome Android?WebView Android?Samsung Internet?Opera Android46+

HTMLTimeElement

모든 현재 엔진에서 지원됨.

Firefox22+Safari10+Chrome62+
Opera49+Edge79+
Edge (구버전)14+Internet Explorer미지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android46+

HTMLTimeElement/dateTime

Support in all current engines.

Firefox22+Safari10+Chrome62+
Opera49+Edge79+
Edge (Legacy)14+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android46+
카테고리:
흐름 콘텐츠.
구문 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
요소에 datetime 속성이 있는 경우: 구문 콘텐츠.
그 외의 경우: 텍스트, 그러나 아래에 서술된 요구 사항과 일치해야 합니다.
태그 생략 in text/html:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
datetime — 기계가 읽을 수 있는 값
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTimeElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString dateTime;
};

time 요소는 그 내용과 함께 datetime 속성에 기계가 읽을 수 있는 형태로 포함된 내용을 나타냅니다. 아래에 설명된 바와 같이, 내용의 종류는 다양한 날짜, 시간, 시간대 오프셋 및 기간으로 제한됩니다.

datetime 속성은 존재할 수 있습니다. 존재하는 경우, 그 값은 요소의 내용을 기계가 읽을 수 있는 형식으로 표현해야 합니다.

time 요소에 datetime 콘텐츠 속성이 없으면, 자식 요소를 가질 수 없습니다.

datetime 값time 요소의 datetime 콘텐츠 속성의 값입니다. 해당 속성이 없으면, time 요소의 자식 텍스트 콘텐츠입니다.

time 요소의 datetime 값은 다음 중 하나의 문법과 일치해야 합니다.

유효한 월 문자열
<time>2011-11</time>
유효한 날짜 문자열
<time>2011-11-18</time>
유효한 연도 없는 날짜 문자열
<time>11-18</time>
유효한 시간 문자열
<time>14:54</time>
<time>14:54:39</time>
<time>14:54:39.929</time>
유효한 로컬 날짜 및 시간 문자열
<time>2011-11-18T14:54</time>
<time>2011-11-18T14:54:39</time>
<time>2011-11-18T14:54:39.929</time>
<time>2011-11-18 14:54</time>
<time>2011-11-18 14:54:39</time>
<time>2011-11-18 14:54:39.929</time>

날짜는 있으나 시간대 오프셋이 없는 시간은 하루 동안 각 시간대에서 동일한 특정 시간에 관찰되는 이벤트를 지정하는 데 유용합니다. 예를 들어, 2020년 새해는 모든 시간대에서 2020-01-01 00:00에 축하되며, 전 세계 시간대에서 같은 순간에 축하되지 않습니다. 모든 시간대에서 동일한 시간에 발생하는 이벤트의 경우, 예를 들어 화상회의, 유효한 글로벌 날짜 및 시간 문자열이 더 유용할 수 있습니다.

유효한 시간대 오프셋 문자열
<time>Z</time>
<time>+0000</time>
<time>+00:00</time>
<time>-0800</time>
<time>-08:00</time>

날짜가 없는 시간(또는 여러 날짜에 걸쳐 발생하는 이벤트를 나타내는 시간)의 경우 시간대 오프셋을 지정하는 것보다 시간을 제어하는 지리적 위치를 지정하는 것이 더 유용합니다. 이는 지리적 위치가 일광 절약 시간제로 인해 시간대 오프셋을 변경하기 때문입니다. 경우에 따라 지리적 위치가 시간대를 변경하기도 합니다. 예를 들어, 2011년 말 사모아에서 일어난 일과 같이 시간대 경계가 재조정되는 경우가 있습니다. 이러한 시간대의 경계를 설명하고 각 시간대 내에서 적용되는 규칙을 설명하는 데이터베이스가 있으며, 이는 시간대 데이터베이스로 알려져 있습니다. [TZDATABASE] 참조

유효한 글로벌 날짜 및 시간 문자열
<time>2011-11-18T14:54Z</time>
<time>2011-11-18T14:54:39Z</time>
<time>2011-11-18T14:54:39.929Z</time>
<time>2011-11-18T14:54+0000</time>
<time>2011-11-18T14:54:39+0000</time>
<time>2011-11-18T14:54:39.929+0000</time>
<time>2011-11-18T14:54+00:00</time>
<time>2011-11-18T14:54:39+00:00</time>
<time>2011-11-18T14:54:39.929+00:00</time>
<time>2011-11-18T06:54-0800</time>
<time>2011-11-18T06:54:39-0800</time>
<time>2011-11-18T06:54:39.929-0800</time>
<time>2011-11-18T06:54-08:00</time>
<time>2011-11-18T06:54:39-08:00</time>
<time>2011-11-18T06:54:39.929-08:00</time>

날짜 및 시간대 오프셋이 있는 시간은 특정 이벤트나 시간대에 고정되지 않은 반복적인 가상 이벤트를 지정하는 데 유용합니다. 예를 들어 소행성 충돌의 정확한 시간이나 일광 절약 시간제에 관계없이 매일 1400 UTC에 열리는 회의의 특정 시간 등을 지정할 수 있습니다. 시간대 오프셋이 특정 지리적 위치의 현지 시간대 오프셋에 따라 달라지는 이벤트의 경우, 지리적 위치와 결합된 유효한 로컬 날짜 및 시간 문자열이 더 유용할 수 있습니다.

유효한 주 문자열
<time>2011-W47</time>
네 자 이상의 ASCII 숫자, 그중 하나는 U+0030 숫자 0(0)이 아닙니다
<time>2011</time>
<time>0001</time>
유효한 기간 문자열
<time>PT4H18M3S</time>
<time>4h 18m 3s</time>

요소 내용의 기계가 읽을 수 있는 동등 항목은 요소의 datetime 값을 사용하여 다음 알고리즘으로 얻어야 합니다:

  1. 요소의 월 문자열을 파싱하여 datetime 값을 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  2. 요소의 날짜 문자열을 파싱하여 datetime 값날짜를 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  3. 요소의 연도 없는 날짜 문자열을 파싱하여 datetime 값연도 없는 날짜를 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  4. 요소의 시간 문자열을 파싱하여 datetime 값시간을 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  5. 요소의 로컬 날짜 및 시간 문자열을 파싱하여 datetime 값로컬 날짜 및 시간을 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  6. 요소의 시간대 오프셋 문자열을 파싱하여 datetime 값시간대 오프셋을 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  7. 요소의 글로벌 날짜 및 시간 문자열을 파싱하여 datetime 값글로벌 날짜 및 시간을 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  8. 요소의 주 문자열을 파싱하여 datetime 값를 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  9. 요소의 ASCII 숫자만으로 구성되어 있고, 그중 하나가 U+0030 숫자 0(0)이 아닌 경우, 기계가 읽을 수 있는 동등 항목은 이러한 숫자의 십진수 해석으로, 연도를 나타냅니다. 반환합니다.

  10. 요소의 기간 문자열을 파싱하여 datetime 값기간을 반환하면, 그것이 기계가 읽을 수 있는 동등 항목입니다. 반환합니다.

  11. 기계가 읽을 수 있는 동등 항목이 없습니다.

위 알고리즘은 임의의 문자열 s에 대해 오직 하나의 알고리즘만이 값을 반환하도록 설계되어야 합니다. 더 효율적인 접근 방식은 이러한 데이터 유형을 한 번에 파싱하는 단일 알고리즘을 만드는 것일 수 있습니다. 그러한 알고리즘 개발은 독자에게 맡겨져 있습니다.

time 요소는 예를 들어 마이크로포맷에서 날짜를 인코딩하는 데 사용할 수 있습니다. 아래는 time 요소를 사용하는 hCalendar 변형을 사용하여 이벤트를 인코딩하는 가상의 방법을 보여줍니다:

<div class="vevent">
 <a class="url" href="http://www.web2con.com/">http://www.web2con.com/</a>
 <span class="summary">Web 2.0 Conference</span>:
 <time class="dtstart" datetime="2005-10-05">October 5</time> -
 <time class="dtend" datetime="2005-10-07">7</time>,
 at the <span class="location">Argent Hotel, San Francisco, CA</span>
</div>

여기서는 Atom 어휘를 기반으로 한 가상의 마이크로데이터 어휘가 사용되어 time 요소와 함께 블로그 게시물의 게시 날짜를 표시합니다.

<article itemscope itemtype="https://n.example.org/rfc4287">
 <h1 itemprop="title">Big tasks</h1>
 <footer>Published <time itemprop="published" datetime="2009-08-29">이틀 전</time>.</footer>
 <p itemprop="content">오늘, 나는 내 아이를 위해 자전거를 사러 나갔다.</p>
</article>

이 예제에서는 time 요소를 사용하여 다른 기사 게시 날짜를 schema.org 마이크로데이터 어휘를 사용하여 표시합니다:

<article itemscope itemtype="http://schema.org/BlogPosting">
 <h1 itemprop="headline">Small tasks</h1>
 <footer>Published <time itemprop="datePublished" datetime="2009-08-30">어제</time>.</footer>
 <p itemprop="articleBody">나는 자전거에 자전거 벨을 달았다.</p>
</article>

다음 스니펫에서는 time 요소를 사용하여 ISO8601 형식으로 날짜를 인코딩하여 나중에 스크립트로 처리합니다:

<p>Our first date was <time datetime="2006-09-23">a Saturday</time>.</p>

이 두 번째 스니펫에서는 값에 시간이 포함되어 있습니다:

<p>We stopped talking at <time datetime="2006-09-24T05:00-07:00">5am the next morning</time>.</p>

페이지에 로드된 스크립트(따라서 time 요소를 사용하여 날짜와 시간을 표시하는 페이지의 내부 규칙을 따름)는 페이지를 스캔하여 time 요소를 모두 찾아 날짜와 시간의 인덱스를 생성할 수 있습니다.

예를 들어, 이 요소는 "금요일"이라는 문자열과 함께 2011년 11월 18일이 "금요일"에 해당한다는 추가 의미를 전달합니다:

Today is <time datetime="2011-11-18">금요일</time>.

이 예제에서는 태평양 표준시 시간대를 지정하여 특정 시간을 나타냅니다:

Your next meeting is at <time datetime="2011-11-18T15:00-08:00">3pm</time>.

4.5.15 code 요소

요소/code

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구버전)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
흐름 콘텐츠.
구문 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
태그 생략 in text/html:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

code 요소는 컴퓨터 코드 조각을 나타냅니다. 이는 XML 요소 이름, 파일 이름, 컴퓨터 프로그램 또는 컴퓨터가 인식할 수 있는 기타 문자열일 수 있습니다.

컴퓨터 코드의 언어를 표시하는 공식적인 방법은 없습니다. 문법 강조 스크립트가 올바른 규칙을 사용할 수 있도록 예를 들어 code 요소에 사용된 언어를 표시하고자 하는 저자는 class 속성을 사용할 수 있으며, 예를 들어 요소에 "language-"로 시작하는 클래스를 추가할 수 있습니다.

다음 예제는 요소 이름과 컴퓨터 코드를 포함한 구두점 등을 문단 내에서 마크업하는 방법을 보여줍니다.

<p>The <code>code</code> 요소는 컴퓨터
코드 조각을 나타냅니다.</p>

<p>When you call the <code>activate()</code> 메서드를
<code>robotSnowman</code> 객체에서 호출하면 눈이 빛납니다.</p>

<p>The example below uses the <code>begin</code> 키워드를 사용하여
문장 블록의 시작을 나타냅니다. 이 키워드는 <code>end</code> 키워드와 쌍을 이루며, 그 뒤에는 프로그램의 끝을 나타내는 <code>.</code> 구두점 문자가 옵니다.</p>

다음 예제는 precode 요소를 사용하여 코드 블록을 마크업하는 방법을 보여줍니다.

<pre><code class="language-pascal">var i: Integer;
begin
   i := 1;
end.</code></pre>

이 예제에서는 사용된 언어를 표시하기 위해 클래스를 사용합니다.

자세한 내용은 pre 요소를 참조합니다.

4.5.16 var 요소

요소/var

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구버전)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
흐름 콘텐츠.
구문 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
태그 생략 in text/html:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

var 요소는 변수를 나타냅니다. 이는 수학적 표현식이나 프로그래밍 문맥에서 실제 변수일 수 있으며, 상수를 나타내는 식별자, 물리적 양을 나타내는 기호, 함수 매개변수, 또는 산문에서 사용되는 대체 용어일 수 있습니다.

아래 문단에서는 문자 "n"이 산문에서 변수로 사용되고 있습니다:

<p>If there are <var>n</var> pipes leading to the ice
cream factory then I expect at <em>least</em> <var>n</var>
flavors of ice cream to be available for purchase!</p>

수학에서는, 특히 가장 간단한 표현식 이상에서는 MathML이 더 적합합니다. 그러나 var 요소는 여전히 MathML 표현식에서 언급된 특정 변수를 참조하는 데 사용할 수 있습니다.

이 예제에서는 방정식과 그 방정식에서 변수들을 참조하는 범례를 보여줍니다. 표현식 자체는 MathML로 마크업되었지만, 변수는 var 요소를 사용하여 그림의 범례에서 언급됩니다.

<figure>
 <math>
  <mi>a</mi>
  <mo>=</mo>
  <msqrt>
   <msup><mi>b</mi><mn>2</mn></msup>
   <mi>+</mi>
   <msup><mi>c</mi><mn>2</mn></msup>
  </msqrt>
 </math>
 <figcaption>
  Using Pythagoras' theorem to solve for the hypotenuse <var>a</var> of
  a triangle with sides <var>b</var> and <var>c</var>
 </figcaption>
</figure>

여기서 질량-에너지 등가를 설명하는 방정식이 문장에서 사용되었으며, 그 방정식의 변수와 상수를 표시하기 위해 var 요소가 사용되었습니다:

<p>Then she turned to the blackboard and picked up the chalk. After a few moment's
thought, she wrote <var>E</var> = <var>m</var> <var>c</var><sup>2</sup>. The teacher
looked pleased.</p>

4.5.17 samp 요소

요소/samp

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구버전)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
흐름 콘텐츠.
구문 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
태그 생략 in text/html:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

samp 요소는 다른 프로그램이나 컴퓨팅 시스템에서의 샘플 또는 인용된 출력을 표현합니다.

prekbd 요소에 대한 자세한 내용은 참고합니다.

이 요소는 웹 애플리케이션에서 즉시 출력을 제공할 수 있는 output 요소와 대조될 수 있습니다.

이 예제는 samp 요소를 인라인으로 사용하는 것을 보여줍니다:

<p>The computer said <samp>Too much cheese in tray
two</samp> but I didn't know what that meant.</p>

두 번째 예제는 콘솔 프로그램에서 샘플 출력을 보여줍니다. 중첩된 sampkbd 요소는 스타일 시트로 샘플 출력의 특정 요소를 스타일링할 수 있게 합니다. samp의 몇몇 부분은 더욱 정밀한 스타일링을 위해 추가적인 마크업이 되어 있습니다. 이를 위해 span 요소가 사용되었습니다.

<pre><samp><span class="prompt">jdoe@mowmow:~$</span> <kbd>ssh demo.example.com</kbd>
Last login: Tue Apr 12 09:10:17 2005 from mowmow.example.com on pts/1
Linux demo 2.6.10-grsec+gg3+e+fhs6b+nfs+gr0501+++p3+c4a+gr2b-reslog-v6.189 #1 SMP Tue Feb 1 11:22:36 PST 2005 i686 unknown

<span class="prompt">jdoe@demo:~$</span> <span class="cursor">_</span></samp></pre>

세 번째 예제는 입력과 해당 출력을 보여줍니다. 이 예제에서는 codesamp 요소를 사용합니다.

<pre>
<code class="language-javascript">console.log(2.3 + 2.4)</code>
<samp>4.699999999999999</samp>
</pre>

4.5.18 kbd 요소

요소/kbd

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구버전)12+Internet Explorer지원됨
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
흐름 콘텐츠.
구문 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
태그 생략 in text/html:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

kbd 요소는 사용자 입력을 나타냅니다(일반적으로 키보드 입력이지만 음성 명령과 같은 다른 입력을 나타내는 데에도 사용할 수 있습니다).

kbd 요소가 samp 요소 안에 중첩되어 있는 경우, 시스템에서 반향된 입력을 나타냅니다.

kbd 요소가 samp 요소를 포함할 때, 이는 시스템 출력에 기반한 입력을 나타냅니다. 예를 들어 메뉴 항목을 호출할 때 사용됩니다.

kbd 요소가 다른 kbd 요소 안에 중첩되어 있는 경우, 이는 입력 메커니즘에 적합한 실제 키 또는 기타 단일 입력 단위를 나타냅니다.

여기서 kbd 요소는 눌러야 할 키를 나타내는 데 사용됩니다:

<p>To make George eat an apple, press <kbd><kbd>Shift</kbd> + <kbd>F3</kbd></kbd></p>

두 번째 예제에서는 특정 메뉴 항목을 선택하라고 지시합니다. 외부의 kbd 요소는 입력의 블록을 나타내며, 내부의 kbd 요소는 입력의 각 단계를 나타내고, 그 안에 있는 samp 요소는 이 단계들이 시스템에 의해 표시된 내용을 기반으로 한 것임을 나타냅니다. 이 경우 메뉴 레이블을 나타냅니다:

<p>To make George eat an apple, select
    <kbd><kbd><samp>File</samp></kbd>|<kbd><samp>Eat Apple...</samp></kbd></kbd>
</p>

이러한 정확성은 필수적이지 않으며, 다음과 같이 작성해도 무방합니다:

<p>To make George eat an apple, select <kbd>File | Eat Apple...</kbd></p>

4.5.19 subsup 요소

요소/sub

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구버전)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

요소/sup

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (구버전)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
흐름 콘텐츠.
구문 콘텐츠.
유형 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
태그 생략 in text/html:
어느 태그도 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
sub 요소: 저자를 위한 정보; 구현자를 위한 정보.
sup 요소: 저자를 위한 정보; 구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

sup 요소는 윗첨자를 나타내고, sub 요소는 하첨자를 나타냅니다.

이 요소들은 특정 의미를 가진 타이포그래피적 관례를 마크업하기 위해서만 사용해야 하며, 단순한 타이포그래피적 표현을 위해 사용해서는 안 됩니다. 예를 들어, subsup 요소를 LaTeX 문서 준비 시스템의 이름에 사용하는 것은 부적절합니다. 일반적으로, 이러한 요소들은 이 요소들이 없으면 콘텐츠의 의미가 변하는 경우에만 사용해야 합니다.

특정 언어에서는 윗첨자가 일부 약어의 타이포그래피적 관례의 일부입니다.

<p>그들의 이름은
<span lang="fr"><abbr>M</sup>lle</sup></abbr> Gwendoline</span> 그리고
<span lang="fr"><abbr>M</sup>me</sup></abbr> Denise</span>입니다.</p>

sub 요소는 하첨자가 있는 변수를 나타내기 위해 var 요소 내에서 사용될 수 있습니다.

여기서, sub 요소는 변수의 집합에서 변수를 식별하는 하첨자를 나타내는 데 사용됩니다:

<p>i번째 점의 좌표는
(<var>x</var><sub><var>i</var></sub></var>, <var>y</var><sub><var>i</var></sub></var>).
예를 들어, 10번째 점의 좌표는
(<var>x</sub>10</sub></var>, <var>y</sub>10</sub></var>)입니다.</p>

수학 표현은 종종 하첨자와 윗첨자를 사용합니다. 저자들은 수학을 마크업할 때 MathML을 사용하는 것이 권장되지만, 세부적인 수학적 마크업이 필요하지 않은 경우 subsup을 사용할 수 있습니다. [MATHML]

<var>E</var>=<var>m</var><var>c</var><sup>2</sup>
f(<var>x</var>, <var>n</var>) = log<sub>4</sub><var>x</var></sup><var>n</var></sup>

4.5.20 i 요소

Element/i

모든 최신 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (레거시)12+인터넷 익스플로러지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
만질 수 있는 콘텐츠.
이 요소를 사용할 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
text/html에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement 사용.

i 요소는 일반적인 산문에서 벗어난 텍스트 범위를 표현합니다. 이는 대체 목소리 또는 분위기의 텍스트 범위를 나타내거나, 분류학적 명칭, 기술 용어, 다른 언어의 관용구, 음역, 생각 또는 서양 텍스트에서의 선박 이름과 같은 다른 품질의 텍스트를 나타낼 수 있습니다.

주 텍스트와 다른 언어로 된 용어는 lang 속성(또는 XML의 경우 lang 속성, XML 네임스페이스)으로 주석을 달아야 합니다.

아래의 예시는 i 요소의 사용 예를 보여줍니다:

<p>The <i class="taxonomy">Felis silvestris catus</i> is cute.</p>
<p>The term <i>prose content</i> is defined above.</p>
<p>There is a certain <i lang="fr">je ne sais quoi</i> in the air.</p>

다음 예에서는 i 요소를 사용하여 꿈 시퀀스를 표시합니다.

<p>Raymond tried to sleep.</p>
<p><i>The ship sailed away on Thursday</i>, he
dreamt. <i>The ship had many people aboard, including a beautiful
princess called Carey. He watched her, day-in, day-out, hoping she
would notice him, but she never did.</i></p>
<p><i>Finally one night he picked up the courage to speak with
her—</i></p>
<p>Raymond woke with a start as the fire alarm rang out.</p>

저자는 class 속성을 i 요소에 사용하여 요소가 사용된 이유를 식별할 수 있습니다. 이를 통해 나중에 특정 사용 스타일(예: 꿈 시퀀스와 분류학적 용어의 차이)을 변경하려 할 때, 저자는 문서 전체(또는 관련 문서 일련)의 각 사용 예를 주석 처리할 필요가 없습니다.

저자는 i 요소보다 더 적합한 요소가 있을 수 있는지 고려해야 합니다. 예를 들어 강조 표시를 위해 em 요소나 용어의 정의 인스턴스를 마크업하기 위해 dfn 요소를 사용할 수 있습니다.

스타일 시트는 i 요소를 다른 요소와 마찬가지로 재스타일링할 수 있습니다. 따라서 i 요소의 콘텐츠가 반드시 기울임꼴로 표시되는 것은 아닙니다.

4.5.21 b 요소

Element/b

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 맥락:
어디서 phrasing content이 예상됩니다.
콘텐츠 모델:
Phrasing content.
텍스트/html에서 태그 생략:
어떤 태그도 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement을 사용합니다.

b 요소는 추가적인 중요성을 전달하지 않으면서 기능적인 목적을 위해 주의가 필요하다는 텍스트 범위를 나타냅니다. 예를 들어 문서 요약의 주요 단어, 리뷰의 제품 이름, 상호작용하는 텍스트 기반 소프트웨어의 실행 가능한 단어 또는 기사 리드 등이 해당될 수 있습니다.

다음 예제는 중요한 단어를 표시하기 위해 b 요소를 사용하는 방법을 보여줍니다.

<p>The <b>frobonitor</b> and <b>barbinator</b> components are fried.</p>

다음 예제에서는 텍스트 어드벤처에서 b 요소를 사용하여 객체가 특별하다는 것을 강조하는 방법을 보여줍니다.

<p>You enter a small room. Your <b>sword</b> glows brighter. A <b>rat</b> scurries past the corner wall.</p>

b 요소가 적절하게 사용될 수 있는 또 다른 경우는 리드 문장 또는 단락을 표시할 때입니다. 다음 예제는 토끼를 어미로 받아들인 새끼 고양이들에 대한 BBC 기사가 어떻게 표시될 수 있는지를 보여줍니다:

<article>
 <h2>Kittens 'adopted' by pet rabbit</h2>
 <p><b class="lede">Six abandoned kittens have found an unexpected new mother figure — a pet rabbit.</b></p>
 <p>Veterinary nurse Melanie Humble took the three-week-old kittens to her Aberdeen home.</p>
[...]

i 요소와 마찬가지로, 저자는 class 속성을 b 요소에 사용하여 요소의 사용 목적을 식별할 수 있습니다. 이를 통해 특정 사용 스타일을 나중에 변경해야 할 경우, 모든 사용 예를 일일이 주석 달지 않아도 됩니다.

b 요소는 다른 요소가 더 적절하지 않은 경우에만 최후의 수단으로 사용해야 합니다. 특히, 제목은 h1에서 h6 요소를 사용해야 하고, 강조된 부분은 em 요소를 사용하여 강조하고, 중요성은 strong 요소로 표시하며, 표시되거나 강조된 텍스트는 mark 요소를 사용해야 합니다.

다음은 잘못된 사용 사례입니다:

<p><b>WARNING!</b> Do not frob the barbinator!</p>

이전 예에서 올바른 요소는 strong였으며, b가 아닙니다.

스타일 시트를 사용하여 b 요소를 다른 요소처럼 스타일을 변경할 수 있습니다. 따라서 b 요소의 내용이 반드시 굵게 표시되는 것은 아닙니다.

4.5.22 u 요소

Element/u

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 맥락:
어디서 phrasing content이 예상됩니다.
콘텐츠 모델:
Phrasing content.
텍스트/html에서 태그 생략:
어떤 태그도 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement을 사용합니다.

u 요소는 비텍스트 주석이 명시적으로 렌더링되도록 표시되어야 하는 텍스트 범위를 나타냅니다. 예를 들어 중국어 텍스트에서 고유명사로 표시되거나, 철자가 잘못된 단어로 표시됩니다.

대부분의 경우, 다른 요소가 더 적절할 수 있습니다: 강조 표시를 위해 em 요소를 사용해야 하며, 키워드나 구를 표시하기 위해서는 맥락에 따라 b 요소 또는 mark 요소를 사용해야 합니다. 책 제목을 표시하기 위해서는 cite 요소를 사용해야 하며, 텍스트에 명시적인 주석을 표시하기 위해서는 ruby 요소를 사용해야 합니다. 기술 용어, 분류학적 명칭, 음역, 생각, 또는 서양 텍스트에서 배 이름을 표시하기 위해서는 i 요소를 사용해야 합니다.

시각적 프레젠테이션에서 u 요소의 기본 렌더링은 하이퍼링크(밑줄)의 기존 렌더링과 충돌합니다. 저자는 u 요소가 하이퍼링크로 오해될 수 있는 경우 사용을 피하는 것이 좋습니다.

이 예제에서는 u 요소를 사용하여 철자가 잘못된 단어를 표시합니다:

<p>The <u>see</u> is full of fish.</p>

4.5.23 mark 요소

Element/mark

모든 현재 엔진에서 지원됩니다.

Firefox4+Safari5.1+Chrome7+
Opera11+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
Flow content.
Phrasing content.
Palpable content.
이 요소가 사용될 수 있는 맥락:
어디서 phrasing content이 예상됩니다.
콘텐츠 모델:
Phrasing content.
텍스트/html에서 태그 생략:
어떤 태그도 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLElement을 사용합니다.

mark 요소는 하나의 문서에서 참조 목적으로 표시되거나 강조된 텍스트 구간을 나타냅니다. 강조된 구절은 포함된 문맥에서의 관련성 때문에 강조됩니다. 인용문이나 본문의 다른 블록에서 사용될 때, 이는 원래는 강조되지 않았으나 독자의 주의를 끌기 위해 추가된 부분을 나타냅니다. 이는 본문이 처음 작성되었을 때 원저자가 중요하게 여기지 않았을 수도 있는 부분일 수 있으며, 지금은 예상치 못한 관심의 대상이 된 부분일 수 있습니다. 문서의 주요 본문에서 사용될 때, 이는 사용자의 현재 활동과 관련성이 높다고 판단되어 강조된 부분을 나타냅니다.

이 예제는 mark 요소를 사용하여 인용문의 특정 부분에 주의를 환기하는 방법을 보여줍니다:

<p lang="en-US">Consider the following quote:</p>
<blockquote lang="en-GB">
 <p>Look around and you will find, no-one's really
 <mark>colour</mark> blind.</p>
</blockquote>
<p lang="en-US">As we can tell from the <em>spelling</em> of the word,
the person writing this quote is clearly not American.</p>

(만약 단어의 철자가 잘못된 것을 표시하는 것이 목적이라면, u 요소가 클래스와 함께 사용되어야 할 것입니다.)

mark 요소의 또 다른 예는 문서의 일부를 검색 문자열과 일치하는 부분으로 강조하는 것입니다. 예를 들어 사용자가 "kitten"이라는 단어를 검색하고 서버가 그에 맞춰 문서를 반환하면, 서버는 문서의 일부 단락을 다음과 같이 수정할 수 있습니다:

<p>I also have some <mark>kitten</mark>s who are visiting me
these days. They're really cute. I think they like my garden! Maybe I
should adopt a <mark>kitten</mark>.</p>

다음 코드 조각에서는 텍스트 단락이 코드 조각의 특정 부분을 참조합니다.

<p>The highlighted part below is where the error lies:</p>
<pre><code>var i: Integer;
begin
   i := <mark>1.1</mark>;
end.</code></pre>

이는 구문 강조와는 별개의 문제로, 구문 강조를 위해서는 span 요소가 더 적합합니다. 두 가지를 결합하면 다음과 같습니다:

<p>The highlighted part below is where the error lies:</p>
<pre><code><span class=keyword>var</span> <span class=ident>i</span>: <span class=type>Integer</span>;
<span class=keyword>begin</span>
   <span class=ident>i</span> := <span class=literal><mark>1.1</mark></span>;
<span class=keyword>end</span>.</code></pre>

이 예제는 원래 강조되지 않았던 인용문 텍스트의 일부를 강조하기 위해 mark를 사용하는 또 다른 예를 보여줍니다. 이 예에서, 일반적인 타이포그래피 규칙에 따라 저자는 인용문에서 mark 요소를 명시적으로 스타일링하여 이탤릭체로 렌더링하도록 설정했습니다.

<style>
 blockquote mark, q mark {
   font: inherit; font-style: italic;
   text-decoration: none;
   background: transparent; color: inherit;
 }
 .bubble em {
   font: inherit; font-size: larger;
   text-decoration: underline;
 }
</style>
<article>
 <h1>She knew</h1>
 <p>Did you notice the subtle joke in the joke on panel 4?</p>
 <blockquote>
  <p class="bubble">I didn't <em>want</em> to believe. <mark>Of course
  on some level I realized it was a known-plaintext attack.</mark> But I
  couldn't admit it until I saw for myself.</p>
 </blockquote>
 <p>(강조는 저자의 것입니다.) 저는 이 부분이 정말 좋았습니다. 매우 학문적이면서도 모든 것을 깔끔하게 설명해 줍니다.</p>
</article>

이 예에서 em 요소는 인용된 원본 텍스트의 일부로, mark 요소는 주석을 위해 강조된 부분을 나타내는 것입니다.

다음 예제는 텍스트의 중요성을 나타내는 것 (strong 요소)과 텍스트의 관련성을 나타내는 것 (mark 요소)의 차이를 보여줍니다. 이 예제는 교과서에서 발췌한 것으로, 시험과 관련된 부분이 강조되어 있습니다. 안전 경고는 중요할 수 있지만 시험과 관련이 없기 때문에 강조되지 않았습니다.

<h3>웜홀 물리학 소개</h3>

<p><mark>웜홀은 일반적인 조건에서 최대 39분 동안 열려 있을 수 있습니다.</mark> 시간 연장을 위해서는 하나 또는 두 개의 게이트에 강력한 에너지원을 연결하거나, 블랙홀과 같은 큰 중력장을 활용할 수 있습니다.</p>

<p><mark>웜홀을 통해 모멘텀이 보존됩니다. 전자기 방사선은 웜홀을 통해 양방향으로 이동할 수 있지만, 물질은 이동할 수 없습니다.</mark></p>

<p>웜홀이 생성될 때, 일반적으로 소용돌이가 형성됩니다.
<strong>경고: 웜홀이 열릴 때 발생하는 소용돌이는 경로에 있는 모든 것을 파괴합니다.</strong> 소용돌이는 충분히 고급화된 다이얼링 기술을 사용하면 피할 수 있습니다.</p>

<p><mark>게이트에 장애물이 있으면 웜홀 연결을 방해할 수 있습니다.</mark></p>

4.5.24 bdi 요소

Element/bdi

모든 현재 엔진에서 지원됩니다.

Firefox10+Safari6+Chrome16+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
감지 가능한 콘텐츠.
이 요소가 사용할 수 있는 컨텍스트:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
text/html에서 태그 생략:
두 태그 모두 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
또한, 이 요소에서 dir 전역 속성은 특별한 의미를 가집니다.
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

bdi 요소는 양방향 텍스트 서식을 위한 목적으로 주변과 격리된 텍스트 범위를 나타냅니다. [BIDI]

이 요소에서 dir 전역 속성은 auto로 기본 설정되며, 다른 요소처럼 부모 요소로부터 상속되지 않습니다.

이 요소는 양방향 알고리즘과 관련된 렌더링 요구 사항을 가지고 있습니다.

이 요소는 방향성이 알려지지 않은 사용자 생성 콘텐츠를 삽입할 때 특히 유용합니다.

이 예제에서는 사용자 이름과 함께 해당 사용자가 제출한 게시물 수를 표시합니다. bdi 요소를 사용하지 않으면 아랍어 사용자의 사용자 이름이 텍스트를 혼란스럽게 만들 것입니다 (양방향 알고리즘은 콜론과 숫자 "3"을 "User"라는 단어 옆에 배치하는 대신 "posts"라는 단어 옆에 배치할 것입니다).

<ul>
 <li>User <bdi>jcranmer</bdi>: 12 posts.
 <li>User <bdi>hober</bdi>: 5 posts.
 <li>User <bdi>إيان</bdi>: 3 posts.
</ul>
bdi 요소를 사용할 때, 사용자 이름이 예상대로 동작합니다.
bdi 요소를 b 요소로 대체할 경우, 사용자 이름이 양방향 알고리즘을 혼란스럽게 만들어 세 번째 목록 항목이 "User 3 :"라고 표시되고, 그 다음에 아랍어 이름(오른쪽에서 왼쪽)이 오며, 그 뒤에 "posts"와 마침표가 옵니다.

4.5.25 bdo 요소

Element/bdo

모든 현재 엔진에서 지원됩니다.

Firefox10+Safari4+Chrome15+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
감지 가능한 콘텐츠.
이 요소가 사용할 수 있는 컨텍스트:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠.
text/html에서 태그 생략:
두 태그 모두 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
또한, 이 요소에서 dir 전역 속성은 특별한 의미를 가집니다.
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement를 사용합니다.

bdo 요소는 자식 요소에 대한 명시적 텍스트 방향성 서식 지정을 나타냅니다. 이 요소는 작성자가 명시적으로 방향을 지정하여 Unicode 양방향 알고리즘을 무시할 수 있게 해줍니다. [BIDI]

작성자는 이 요소에서 dir 속성을 지정해야 하며, ltr 값을 사용하여 왼쪽에서 오른쪽으로의 방향을 지정하거나 rtl 값을 사용하여 오른쪽에서 왼쪽으로의 방향을 지정할 수 있습니다. auto 값은 지정할 수 없습니다.

이 요소는 양방향 알고리즘과 관련된 렌더링 요구 사항을 가지고 있습니다.

4.5.26 span 요소

Element/span

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLSpanElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari6+Chrome15+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
감지 가능한 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
이 요소가 option 요소의 자손인 경우: 0개 이상의 option 요소 내부 콘텐츠 요소 (단, div 요소는 제외).
그 외의 경우: 구문 콘텐츠.
text/html에서 태그 생략:
태그를 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLSpanElement : HTMLElement {
  [HTMLConstructor] constructor();
};

span 요소 자체는 아무 의미가 없지만, 전역 속성과 함께 사용하면 유용할 수 있습니다. 예를 들어, class, lang, 또는 dir 속성과 함께 사용될 수 있습니다. 이는 자식 요소를 나타냅니다.

이 예에서는 span 요소와 class 속성을 사용하여 키워드와 식별자를 색상으로 구분할 수 있도록 코드 조각을 마크업합니다:

<pre><code class="lang-c"><span class="keyword">for</span> (<span class="ident">j</span> = 0; <span class="ident">j</span> &lt; 256; <span class="ident">j</span>++) {
  <span class="ident">i_t3</span> = (<span class="ident">i_t3</span> & 0x1ffff) | (<span class="ident">j</span> &lt;&lt; 17);
  <span class="ident">i_t6</span> = (((((((<span class="ident">i_t3</span> >> 3) ^ <span class="ident">i_t3</span>) >> 1) ^ <span class="ident">i_t3</span>) >> 8) ^ <span class="ident">i_t3</span>) >> 5) & 0xff;
  <span class="keyword">if</span> (<span class="ident">i_t6</span> == <span class="ident">i_t1</span>)
    <span class="keyword">break</span>;
}</code></pre>

4.5.27 br 요소

Element/br

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLBRElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
이 요소가 사용할 수 있는 컨텍스트:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그가 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLBRElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 구식 멤버도 있습니다.
};

br 요소는 줄바꿈을 나타냅니다.

줄바꿈은 시각적 매체에서 보통 다음 텍스트를 새로운 줄로 이동시켜 표시되지만, 스타일 시트나 사용자 에이전트는 줄바꿈을 다른 방식으로 렌더링하도록 결정할 수 있습니다. 예를 들어, 녹색 점으로 표시하거나 추가 간격을 줄 수도 있습니다.

br 요소는 시구나 주소 등에서 실제로 콘텐츠의 일부인 줄바꿈에만 사용해야 합니다.

다음 예는 br 요소의 올바른 사용 예입니다:

<p>P. Sherman<br>
42 Wallaby Way<br>
Sydney</p>

br 요소는 단락 내에서 주제별 그룹을 구분하는 데 사용해서는 안 됩니다.

다음 예는 br 요소를 잘못 사용한 비준수 사례입니다:

<p><a ...>34 comments.</a><br>
<a ...>Add a comment.</a></p>
<p><label>Name: <input name="name"></label><br>
<label>Address: <input name="address"></label></p>

다음은 위의 예에 대한 대안으로 올바른 사용법입니다:

<p><a ...>34 comments.</a></p>
<p><a ...>Add a comment.</a></p>
<p><label>Name: <input name="name"></label></p>
<p><label>Address: <input name="address"></label></p>

단락이 br 요소 하나만으로 구성된 경우, 빈 줄(예: 템플릿으로)이 됩니다. 이러한 빈 줄은 프레젠테이션 목적으로 사용해서는 안 됩니다.

모든 콘텐츠는 br 요소 내에서 주변 텍스트의 일부로 간주되어서는 안 됩니다.

이 요소는 양방향 알고리즘과 관련된 렌더링 요구 사항이 있습니다.

4.5.28 wbr 요소

Element/wbr

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera11.6+Edge79+
Edge (Legacy)?Internet Explorer5.5–7
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
이 요소가 사용할 수 있는 컨텍스트:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그가 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLElement을 사용합니다.

wbr 요소는 줄바꿈 기회를 나타냅니다.

다음 예에서는, 효과를 위해 한 사람이 말한 내용을 한 단어로 작성한 인용구를 보여줍니다. 그러나 텍스트가 읽기 쉬운 방식으로 줄을 나눌 수 있도록 하기 위해 인용구의 개별 단어는 wbr 요소를 사용하여 구분되었습니다.

<p>So then she pointed at the tiger and screamed 
"there<wbr>is<wbr>no<wbr>way<wbr>you<wbr>are<wbr>ever<wbr>going<wbr>to<wbr>catch<wbr>me"!</p>

wbr 요소 내의 모든 콘텐츠는 주변 텍스트의 일부로 간주되어서는 안 됩니다.

var wbr = document.createElement("wbr");
wbr.textContent = "This is wrong";
document.body.appendChild(wbr);

이 요소는 양방향 알고리즘과 관련된 렌더링 요구 사항이 있습니다.

4.5.29 사용 요약

이 섹션은 비규범적입니다.

요소 목적 예시
a 하이퍼링크
Visit my <a href="drinks.html">drinks</a> page.
em 강조
I must say I <em>adore</em> lemonade.
strong 중요성
This tea is <strong>very hot</strong>.
small 부가 설명
These grapes are made into wine. <small>Alcohol is addictive.</small>
s 부정확한 텍스트
Price: <s>£4.50</s> £2.00!
cite 작품의 제목
The case <cite>Hugo v. Danielle</cite> is relevant here.
q 인용구
The judge said <q>You can drink water from the fish tank</q> but advised against it.
dfn 정의 인스턴스
The term <dfn>organic food</dfn> refers to food produced without synthetic chemicals.
abbr 약어
Organic food in Ireland is certified by the <abbr title="Irish Organic Farmers and Growers Association">IOFGA</abbr>.
ruby, rt, rp 루비 주석
<ruby> OJ <rp>(<rt>Orange Juice</rp>)</ruby>
data 기계 판독 가능한 동등성
Available starting today! <data value="UPC:022014640201">North Coast Organic Apple Cider</data>
time 날짜 또는 시간 관련 데이터의 기계 판독 가능한 동등성
Available starting on <time datetime="2011-11-18">November 18th</time>!
code 컴퓨터 코드
The <code>fruitdb</code> program can be used for tracking fruit production.
var 변수
If there are <var>n</var> fruit in the bowl, at least <var>n</var>÷2 will be ripe.
samp 컴퓨터 출력
The computer said <samp>Unknown error -3</samp>.
kbd 사용자 입력
Hit <kbd>F1</kbd> to continue.
sub 아래 첨자
Water is H<sub>2</sub>O.
sup 위 첨자
The Hydrogen in heavy water is usually <sup>2</sup>H.
i 대체 음성
Lemonade consists primarily of <i>Citrus limon</i>.
b 키워드
Take a <b>lemon</b> and squeeze it with a <b>juicer</b>.
u 주석
The mixture of apple juice and <u class="spelling">eldeflower</u> juice is very pleasant.
mark 하이라이트
Elderflower cordial, with one <mark>part</mark> cordial to ten <mark>part</mark>s water, stands a<mark>part</mark> from the rest.
bdi 텍스트 방향성 격리
The recommended restaurant is <bdi lang="">My Juice Café (At The Beach)</bdi>.
bdo 텍스트 방향성 포맷
The proposal is to write English, but in reverse order. "Juice" would become "<bdo dir=rtl>Juice</bdo>">
span 기타
In French we call it <span lang="fr">sirop de sureau</span>.
br 줄바꿈
Simply Orange Juice Company<br>Apopka, FL 32703<br>U.S.A.
wbr 줄바꿈 기회
www.simply<wbr>orange<wbr>juice.com

4.6.1 소개

링크는 a, area, formlink 요소에 의해 생성된 개념적 구조로, 하나는 현재 document이고 다른 하나는 리소스 간의 연결을 표현합니다. HTML에는 세 가지 종류의 링크가 있습니다:

외부 리소스 링크

이들은 현재 문서를 보완하기 위해 사용될 리소스에 대한 링크로, 일반적으로 사용자 에이전트에 의해 자동으로 처리됩니다. 모든 외부 리소스 링크는 리소스를 가져오는 방법을 설명하는 링크된 리소스를 가져와 처리하는 알고리즘을 가지고 있습니다.

하이퍼링크

이들은 일반적으로 사용자에게 노출되어 사용자가 네비게이트할 수 있는 리소스에 대한 링크입니다. 예를 들어 브라우저에서 방문하거나 다운로드할 수 있습니다.

내부 리소스 링크

이들은 현재 문서 내의 리소스에 대한 링크로, 해당 리소스에 특별한 의미나 동작을 부여하기 위해 사용됩니다.

link 요소가 href 속성과 rel 속성을 가지고 있는 경우, 링크는 링크 유형 섹션에서 정의된 대로 rel 속성의 키워드에 대해 생성되어야 합니다.

유사하게, aarea 요소가 href 속성과 rel 속성을 가지고 있는 경우, 링크 유형 섹션에서 정의된 대로 rel 속성의 키워드에 대해 링크가 생성되어야 합니다. 그러나 link 요소와 달리, aarea 요소가 href 속성을 가지고 있지만 rel 속성이 없거나, rel 속성이 하이퍼링크를 지정하는 키워드를 포함하지 않는 경우에도 하이퍼링크를 생성해야 합니다. 이 암시된 하이퍼링크는 그 이상의 특별한 의미가 없으며(즉, 링크 유형이 없음) 해당 요소의 href 속성에 의해 주어진 리소스와 요소의 노드 문서를 연결합니다.

유사하게, form 요소가 rel 속성을 가지고 있는 경우, 링크 유형 섹션에서 정의된 대로 rel 속성의 키워드에 대해 링크가 생성되어야 합니다. form 요소에 rel 속성이 없거나, rel 속성이 하이퍼링크를 지정하는 키워드를 포함하지 않는 경우에도 하이퍼링크를 생성해야 합니다.

하이퍼링크에는 해당 하이퍼링크의 처리 의미를 수정하는 하나 이상의 하이퍼링크 주석이 있을 수 있습니다.

href 속성이 aarea 요소에 있는 경우, 이 속성의 값은 공백으로 둘러싸일 수 있는 유효한 URL이어야 합니다.

href 속성이 aarea 요소에 없어도 됩니다. 이러한 요소에 href 속성이 없으면 하이퍼링크가 생성되지 않습니다.

target 속성이 있는 경우, 이 속성은 유효한 내비게이션 대상 이름 또는 키워드여야 합니다. 이 속성은 사용될 내비게이션 가능한 객체의 이름을 지정합니다. 사용자 에이전트는 하이퍼링크를 따를 때 이 이름을 사용합니다.

download 속성이 있는 경우, 저자는 이 하이퍼링크가 리소스를 다운로드하는 데 사용되기를 원함을 나타냅니다. 이 속성은 값을 가질 수 있으며, 값이 있는 경우, 이는 저자가 로컬 파일 시스템에서 리소스를 레이블링하는 데 사용할 것을 권장하는 기본 파일 이름을 지정합니다. 허용되는 값에 제한은 없지만, 대부분의 파일 시스템은 파일 이름에 사용할 수 있는 구두점에 제한이 있으므로 저자는 주의해야 하며, 사용자 에이전트는 파일 이름을 적절히 조정할 가능성이 있습니다.

Element/a#attr-ping

모든 최신 엔진에서 지원됩니다.

Firefox🔰 1+Safari6+Chrome12+
Opera?Edge79+
Edge (Legacy)17+Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android≤37+Samsung Internet?Opera Android?

ping 속성이 있는 경우, 사용자가 하이퍼링크를 따를 때 알림을 받고자 하는 리소스의 URL을 제공합니다. 이 값은 공백으로 구분된 토큰 집합이어야 하며, 각 토큰은 유효한 비어 있지 않은 URL이어야 하며, 이 URL의 스킴HTTP(S) 스킴이어야 합니다. 이 값은 사용자 에이전트에 의해 하이퍼링크 감사에 사용됩니다.

rel 속성이 aarea 요소에 있는 경우, 이 속성은 요소가 생성하는 링크의 종류를 제어합니다. 이 속성의 값은 순서가 없는 고유한 공백으로 구분된 토큰 집합이어야 합니다. 허용된 키워드와 그 의미는 아래에 정의되어 있습니다.

rel지원되는 토큰HTML 링크 유형에서 정의된 키워드로, aarea 요소에 허용되며, 처리 모델에 영향을 미치고 사용자 에이전트에서 지원됩니다. 가능한 지원되는 토큰noreferrer, noopener, 그리고 opener입니다. rel지원되는 토큰은 사용자 에이전트가 처리 모델을 구현하는 이 목록의 토큰만 포함해야 합니다.

rel 속성은 기본값이 없습니다. 속성이 생략되거나 속성의 값이 사용자 에이전트에서 인식되지 않으면 문서와 대상 리소스 간에는 하이퍼링크 외에 특별한 관계가 없습니다.

hreflang 속성이 a 요소에 있는 경우, 이 속성은 연결된 리소스의 언어를 지정합니다. 이 속성은 순수하게 권고 사항입니다. 값은 유효한 BCP 47 언어 태그여야 합니다. 사용자 에이전트는 이 속성을 권위적으로 간주해서는 안 되며, 리소스를 가져온 후에는 리소스의 언어를 결정하기 위해 링크된 리소스의 메타데이터가 아니라 리소스에 연결된 언어 정보를 사용해야 합니다.

type 속성이 있는 경우, 이 속성은 연결된 리소스의 MIME 유형을 제공합니다. 이 속성은 순수하게 권고 사항입니다. 값은 유효한 MIME 유형 문자열이어야 합니다. 사용자 에이전트는 type 속성을 권위적으로 간주해서는 안 되며, 리소스를 가져온 후에는 링크된 리소스의 메타데이터를 사용하여 유형을 결정해서는 안 됩니다.

referrerpolicy 속성은 리퍼러 정책 속성입니다. 이 속성의 목적은 리퍼러 정책을 설정하는 것입니다.


a 또는 area 요소의 활성화 동작이 호출되면 사용자 에이전트는 사용자가 하이퍼링크를 탐색하는 데 사용할지, 아니면 지정된 리소스를 다운로드할지에 대한 선호를 표시하도록 허용할 수 있습니다.

사용자 환경 설정이 없는 경우, 요소에 download 속성이 없으면 기본값은 탐색이어야 하며, 해당 속성이 있으면 지정된 리소스를 다운로드하는 것이어야 합니다.

이벤트 event가 주어진 element에 대해 a 또는 area 요소의 활성화 동작은 다음과 같습니다:

  1. elementhref 속성이 없으면 반환합니다.

  2. hyperlinkSuffix를 null로 설정합니다.

  3. elementa 요소이고 event대상img이며 ismap 속성이 지정된 경우:

    1. xy를 0으로 설정합니다.

    2. eventisTrusted 속성이 true로 초기화된 경우, x를 클릭 위치에서 이미지의 왼쪽 가장자리까지의 거리( CSS 픽셀 단위)로 설정하고, y를 클릭 위치에서 이미지의 위쪽 가장자리까지의 거리( CSS 픽셀 단위)로 설정합니다.

    3. x가 음수인 경우, x를 0으로 설정합니다.

    4. y가 음수인 경우, y를 0으로 설정합니다.

    5. hyperlinkSuffix를 U+003F(?)와 x의 값을 ASCII 숫자를 사용하여 10진수로 표현한 값으로, U+002C(,)와 y의 값을 ASCII 숫자를 사용하여 10진수로 표현한 값으로 설정합니다.

  4. userInvolvementevent사용자 내비게이션 개입으로 설정합니다.

  5. 사용자가 하이퍼링크 다운로드를 선호한다고 표시한 경우, userInvolvement를 "브라우저 UI"로 설정합니다.

    즉, 사용자가 다운로드를 선호한다고 명시적으로 표시한 경우, 이는 더 이상 단순히 "활성화"로 간주되지 않습니다.

  6. elementdownload 속성이 있거나, 사용자가 하이퍼링크 다운로드를 선호한다고 표시한 경우, element에 의해 생성된 하이퍼링크를 hyperlinkSuffixhyperlinkSuffix로 설정하고, userInvolvementuserInvolvement로 설정하여 하이퍼링크를 다운로드합니다.

  7. 그렇지 않은 경우, element에 의해 생성된 하이퍼링크를 hyperlinkSuffixhyperlinkSuffix로 설정하고, userInvolvementuserInvolvement로 설정하여 하이퍼링크를 따릅니다.

4.6.3 aarea 요소를 위한 API

interface mixin HTMLHyperlinkElementUtils {
  [CEReactions, ReflectSetter] stringifier attribute USVString href;
  readonly attribute USVString origin;
  [CEReactions] attribute USVString protocol;
  [CEReactions] attribute USVString username;
  [CEReactions] attribute USVString password;
  [CEReactions] attribute USVString host;
  [CEReactions] attribute USVString hostname;
  [CEReactions] attribute USVString port;
  [CEReactions] attribute USVString pathname;
  [CEReactions] attribute USVString search;
  [CEReactions] attribute USVString hash;
};
hyperlink.toString()
hyperlink.href

HTMLAnchorElement/href

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAnchorElement/toString

모든 최신 엔진에서 지원됩니다.

Firefox22+Safari3+Chrome52+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLAreaElement/href

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/toString

모든 최신 엔진에서 지원됩니다.

Firefox22+Safari10.1+Chrome32+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL을 반환합니다.

설정할 수 있으며, 이를 통해 URL을 변경할 수 있습니다.

hyperlink.origin

HTMLAnchorElement/origin

모든 최신 엔진에서 지원됩니다.

Firefox26+Safari5.1+Chrome8+
Opera?Edge79+
Edge (Legacy)17+Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android?

HTMLAreaElement/origin

모든 최신 엔진에서 지원됩니다.

Firefox26+Safari10+Chrome32+
Opera?Edge79+
Edge (Legacy)17+Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android?

하이퍼링크의 URL 출처를 반환합니다.

hyperlink.protocol

HTMLAnchorElement/protocol

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/protocol

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL 스킴을 반환합니다.

URL 스킴을 변경하려면 설정할 수 있습니다.

hyperlink.username

HTMLAnchorElement/username

모든 최신 엔진에서 지원됩니다.

Firefox26+Safari10+Chrome32+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/username

모든 최신 엔진에서 지원됩니다.

Firefox26+Safari10+Chrome32+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL 사용자 이름을 반환합니다.

URL의 사용자 이름을 변경하려면 설정할 수 있습니다.

hyperlink.password

HTMLAnchorElement/password

모든 최신 엔진에서 지원됩니다.

Firefox26+Safari10+Chrome32+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/password

모든 최신 엔진에서 지원됩니다.

Firefox26+Safari10+Chrome32+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL 비밀번호를 반환합니다.

URL의 비밀번호를 변경하려면 설정할 수 있습니다.

hyperlink.host

HTMLAnchorElement/host

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/host

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL의 호스트와 포트를 반환합니다(스킴의 기본 포트와 다른 경우).

URL의 호스트와 포트를 변경하려면 설정할 수 있습니다.

hyperlink.hostname

HTMLAnchorElement/hostname

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/hostname

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL의 호스트를 반환합니다.

URL의 호스트를 변경하려면 설정할 수 있습니다.

hyperlink.port

HTMLAnchorElement/port

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/port

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL의 포트를 반환합니다.

URL의 포트를 변경하려면 설정할 수 있습니다.

hyperlink.pathname

HTMLAnchorElement/pathname

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/pathname

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL 경로를 반환합니다.

URL 경로를 변경하려면 설정할 수 있습니다.

hyperlink.search

HTMLAnchorElement/search

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/search

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL 매개변수 문자열을 반환합니다(비어 있지 않으면 앞에 "?" 포함).

URL의 매개변수 문자열을 변경하려면 설정할 수 있습니다(앞의 "?"는 무시됨).

hyperlink.hash

HTMLAnchorElement/hash

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/hash

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

하이퍼링크의 URL의 fragment를 반환합니다(비어 있지 않으면 앞에 "#" 포함).

URL의 fragment를 변경하려면 설정할 수 있습니다(앞의 "#"는 무시됨).

HTMLHyperlinkElementUtils 믹스를 구현하는 요소에는 관련된 url(null 또는 URL)이 있습니다. 이 값은 처음에 null입니다.

HTMLHyperlinkElementUtils 믹스를 구현하는 요소에는 관련된 URL 설정 알고리즘이 있으며, 다음 단계가 실행됩니다:

  1. 이 요소의 url을 null로 설정합니다.

  2. 이 요소의 href 콘텐츠 속성이 없으면, 반환합니다.

  3. 이 요소의 href 콘텐츠 속성 값을 기준으로 URL 인코딩 및 파싱의 결과로 url을 설정합니다.

  4. url이 실패가 아니라면, 이 요소의 urlurl로 설정합니다.

HTMLHyperlinkElementUtils 믹스인을 구현하는 요소가 생성될 때, 사용자 에이전트는 url을 설정해야 한다.

aarea 요소에 대한 HTML 요소 삽입 단계insertedNode가 주어질 때 다음과 같다:

  1. insertedNodeconnected가 아니면, 반환한다.

  2. 사전적 로드 고려insertedNode노드 document에 대해 수행한다.

aarea 요소에 대한 HTML 요소 제거 단계removedNodeoldParent가 주어질 때 다음과 같다:

  1. oldParentconnected가 아니면, 반환한다.

  2. 사전적 로드 고려oldParent노드 document에 대해 수행한다.

aarea 요소에 대한 HTML 요소 이동 단계movedNode가 주어질 때 다음과 같다:

  1. 사전적 로드 고려movedNode노드 document에 대해 수행한다.

다음 속성 변경 단계element, localName, oldValue, value, namespace가 주어질 때 모든 aarea 요소에 사용된다:

  1. namespace가 null이 아니면, 반환한다.

  2. oldValuevalue와 같으면, 반환한다.

  3. localNamehref이면, element를 주어 url을 설정한다.

    이 동작은 blob: URL에 대해서만 관찰할 수 있으며, 파싱 과정에서 Blob URL Store 조사가 필요하다.

  4. localNamehref, referrerpolicy, 또는 rel이면, element노드 document를 주어 사전적 로드 고려를 수행한다.

HTMLHyperlinkElementUtils 믹스인을 구현하는 요소는 관련 url 재초기화 알고리즘을 가지며, 다음과 같은 단계를 수행한다:

  1. 해당 요소의 url이 null이 아니고, scheme이 "blob"이며, 불투명 경로(opaque path)를 가진 경우, 이 단계를 종료한다.

  2. url을 설정한다.

href 업데이트를 하려면, 해당 요소의 href 콘텐츠 속성 값을 요소의 url직렬화된(serialized) 값으로 설정한다.


href 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이고, thishref 콘텐츠 속성이 없으면, 빈 문자열을 반환합니다.

  4. 그렇지 않고 url이 null이면, thishref 콘텐츠 속성 값을 반환합니다.

  5. url직렬화된 값으로 반환합니다.

origin 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. thisurl이 null이면, 빈 문자열을 반환합니다.

  3. 원본의 ASCII 직렬화를 반환합니다.

protocol 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. thisurl이 null이면, ":"를 반환합니다.

  3. thisurl스킴을 ":"로 반환합니다.

protocol 설정 단계는 다음과 같습니다:

  1. url을 재초기화한다.

  2. thisurl이 null이면, 반환한다.

  3. 기본 URL 파싱을, 주어진 값과 ":"를 이어붙인 문자열에 대해 수행하는데, thisurlurl로, scheme start statestate override로 사용하여 수행한다.

    URL 파서는 연속된 콜론을 무시하므로, 값으로 "https:"(혹은 "https::::")를 제공하는 것은 "https"를 제공하는 것과 동일하다.

  4. href를 갱신한다.

username 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. thisurl이 null이면, 빈 문자열을 반환합니다.

  3. thisurlusername을 반환합니다.

username 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 urlusername/password/port를 가질 수 없으면, 반환합니다.

  4. 주어진 값에 따라 url의 username을 설정합니다.

  5. href 업데이트를 수행합니다.

password 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이면, 빈 문자열을 반환합니다.

  4. urlpassword를 반환합니다.

password 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 urlusername/password/port를 가질 수 없으면, 반환합니다.

  4. 주어진 값에 따라 url의 password를 설정합니다.

  5. href 업데이트를 수행합니다.

host 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이나 urlhost가 null이면, 빈 문자열을 반환합니다.

  4. urlport가 null이면, urlhost직렬화된 값으로 반환합니다.

  5. urlhost직렬화된 값으로 반환하고, ":" 뒤에 urlport직렬화된 값으로 반환합니다.

host 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 url불투명 경로가 있으면, 반환합니다.

  4. 주어진 값을 기준으로 기본 URL 파싱을 수행하고, urlurl로 설정하며, 호스트 상태상태 재정의로 설정합니다.

  5. href 업데이트를 수행합니다.

hostname 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이나 urlhost가 null이면, 빈 문자열을 반환합니다.

  4. urlhost직렬화된 값으로 반환합니다.

hostname 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 url불투명 경로가 있으면, 반환합니다.

  4. 주어진 값을 기준으로 기본 URL 파싱을 수행하고, urlurl로 설정하며, 호스트 이름 상태상태 재정의로 설정합니다.

  5. href 업데이트를 수행합니다.

port 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이나 urlport가 null이면, 빈 문자열을 반환합니다.

  4. urlport직렬화된 값으로 반환합니다.

port 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 urlusername/password/port를 가질 수 없으면, 반환합니다.

  4. 주어진 값이 빈 문자열이면, urlport를 null로 설정합니다.

  5. 그렇지 않으면, 주어진 값을 기준으로 기본 URL 파싱을 수행하고, urlurl로 설정하며, 포트 상태상태 재정의로 설정합니다.

  6. href 업데이트를 수행합니다.

pathname 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이면, 빈 문자열을 반환합니다.

  4. URL 경로 직렬화 결과를 반환합니다.

pathname 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 url불투명 경로가 있으면, 반환합니다.

  4. url경로를 빈 목록으로 설정합니다.

  5. 주어진 값을 기준으로 기본 URL 파싱을 수행하고, urlurl로 설정하며, 경로 시작 상태상태 재정의로 설정합니다.

  6. href 업데이트를 수행합니다.

search 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 url쿼리가 null 또는 빈 문자열이면, 빈 문자열을 반환합니다.

  4. "?" 뒤에 url쿼리를 반환합니다.

search 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이면, 이 단계를 종료합니다.

  4. 주어진 값이 빈 문자열이면, url쿼리를 null로 설정합니다.

  5. 그렇지 않으면:

    1. 주어진 값에서 단일 선도 "?"를 제거한 값을 input으로 설정합니다.

    2. url쿼리를 빈 문자열로 설정합니다.

    3. 기본 URL 파싱을 수행하고, urlurl로 설정하며, 쿼리 상태상태 재정의로 설정합니다.

  6. href 업데이트를 수행합니다.

hash 가져오기 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이거나 urlfragment가 null이거나 빈 문자열이면, 빈 문자열을 반환합니다.

  4. "#" 뒤에 urlfragment를 반환합니다.

hash 설정 단계는 다음과 같습니다:

  1. URL 재초기화합니다.

  2. urlthisurl로 설정합니다.

  3. url이 null이면, 반환합니다.

  4. 주어진 값이 빈 문자열이면, urlfragment를 null로 설정합니다.

  5. 그렇지 않으면:

    1. 주어진 값에서 단일 선도 "#"를 제거한 값을 input으로 설정합니다.

    2. urlfragment를 빈 문자열로 설정합니다.

    3. 기본 URL 파싱을 수행하고, urlurl로 설정하며, 조각 상태상태 재정의로 설정합니다.

  6. href 업데이트를 수행합니다.

element 요소가 다음 중 하나라도 해당하면 이동할 수 없습니다:

이것은 또한 form 요소의 폼 제출에서도 사용됩니다. a 요소에 대한 예외는 웹 콘텐츠와의 호환성을 위해 존재합니다.

요소의 noopener 가져오기를 하려면, a, area 또는 form 요소 element, URL 레코드 url 및 문자열 target이 주어졌을 때 다음 단계를 수행합니다. 이 단계는 불리언 값을 반환합니다.

  1. 만약 element링크 유형noopener 또는 noreferrer 키워드가 포함되어 있으면 true를 반환합니다.

  2. 만약 element링크 유형opener 키워드가 포함되어 있지 않고 target이 "_blank"와 ASCII 대소문자를 구분하지 않고 일치하면 true를 반환합니다.

  3. 만약 urlblob URL 항목이 null이 아니면:

    1. blobOriginurlblob URL 항목환경출처로 설정합니다.

    2. topLevelOriginelement관련 설정 객체최상위 출처로 설정합니다.

    3. 만약 blobOrigintopLevelOrigin동일 사이트가 아니면, true를 반환합니다.

  4. false를 반환합니다.

하이퍼링크를 따르기 위해 subject 요소가 주어졌을 때, 선택적으로 hyperlinkSuffix (기본값 null)와 userInvolvement (기본값 "none")가 주어질 수 있습니다:

  1. 만약 subject탐색할 수 없으면, 반환합니다.

  2. targetAttributeValue를 빈 문자열로 설정합니다.

  3. 만약 subjecta 또는 area 요소이면, targetAttributeValuesubject가 주어진 요소의 대상 가져오기 결과로 설정합니다.

  4. urlRecordsubjecthref 속성 값을 subject노드 문서에 상대적으로 URL 인코딩 구문 분석한 결과로 설정합니다.

  5. 만약 urlRecord가 실패이면, 반환합니다.

  6. noopenersubject, urlRecordtargetAttributeValue를 사용하여 요소의 noopener 가져오기 결과로 설정합니다.

  7. targetNavigabletargetAttributeValue, subject노드 탐색 가능 항목noopener가 주어진 탐색 가능 항목 선택 규칙을 적용한 첫 번째 반환 값으로 설정합니다.

  8. 만약 targetNavigable이 null이면, 반환합니다.

  9. urlStringurlRecordURL 직렬 변환기를 적용한 결과로 설정합니다.

  10. 만약 hyperlinkSuffix가 null이 아니면, urlString에 추가합니다.

  11. 이동 targetNavigable을(를) urlString으로 subject노드 문서를 사용하여 이동한다. 이때 referrerPolicysubject하이퍼링크 referrer 정책으로 설정하고, userInvolvementuserInvolvement로, sourceElementsubject로 설정한다.

    다른 많은 유형의 탐색과 달리, 하이퍼링크를 따르는 것은 문서가 완전히 로드되지 않았을 때 특별한 "replace" 동작을 갖지 않습니다. 이는 사용자가 시작한 하이퍼링크 따르기 인스턴스와 예를 들어 aElement.click()를 통한 스크립트 트리거 인스턴스 모두에 해당됩니다.

요소 subject에 대한 하이퍼링크 referrer 정책은 다음 단계에 의해 반환되는 값이다:

  1. subject링크 타입noreferrer 키워드가 포함되어 있으면, "no-referrer"를 반환한다.

  2. subjectreferrerpolicy 콘텐츠 속성의 현재 상태를 반환한다.

4.6.5 리소스 다운로드

HTMLAnchorElement/download

현재 모든 엔진에서 지원됩니다.

Firefox20+Safari10.1+Chrome15+
Opera?Edge79+
Edge (Legacy)13+Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

일부 경우 리소스는 즉시 보기보다는 나중에 사용하기 위해 다운로드할 수 있도록 의도됩니다. 리소스가 즉시 사용되는 대신 나중에 사용하기 위해 다운로드하도록 지정하려면, 해당 리소스에 대한 download 속성을 a 또는 area 요소에 지정할 수 있습니다.

속성에는 또한 값이 주어질 수 있으며, 이는 사용자 에이전트가 리소스를 파일 시스템에 저장할 때 사용할 파일 이름을 지정합니다. 이 값은 `Content-Disposition` HTTP 헤더의 파일 이름 매개변수로 재정의될 수 있습니다. [RFC6266]

교차 출처 상황에서는, download 속성을 `Content-Disposition` HTTP 헤더, 특히 attachment 디스포지션 타입과 결합해야 합니다. 이는 사용자가 민감한 개인 정보나 기밀 정보를 충분히 이해하지 못한 상태에서 다운로드하지 않도록 보호하기 위한 것입니다.


요소 subject가 생성한 하이퍼링크를 주어진 선택적 hyperlinkSuffix(기본값 null) 및 선택적 userInvolvement(기본값 "없음")과 함께 다운로드하려면:

  1. subject탐색할 수 없는 경우, 종료합니다.

  2. subject노드 문서활성 샌드박싱 플래그 세트샌드박스화된 다운로드 브라우징 컨텍스트 플래그가 설정되어 있으면, 종료합니다.

  3. urlStringURL 인코딩, 파싱 및 직렬화의 결과로 설정합니다. 이 때 subjecthref 속성 값을 사용하고, subject노드 문서를 기준으로 합니다.

  4. urlString이 실패하면, 종료합니다.

  5. hyperlinkSuffix가 null이 아닌 경우, 이를 urlString에 추가합니다.

  6. userInvolvement가 "브라우저 UI"가 아닌 경우:

    1. 확인: subjectdownload 속성을 가지고 있습니다.

    2. navigationsubject관련 전역 객체탐색 API로 설정합니다.

    3. filenamesubjectdownload 속성의 값으로 설정합니다.

    4. continuenavigation에서 destinationURLurlString으로, userInvolvementuserInvolvement로, sourceElementsubject로, filenamefilename으로 설정하여 다운로드 요청 navigate 이벤트를 발생시킨 결과로 설정합니다.

    5. continue가 false이면, 종료합니다.

  7. 다음 단계를 병렬로 실행합니다:

    1. 사용자 에이전트는 사용자를 잠재적으로 위험한 다운로드로부터 보호하기 위해 필요하다고 판단되면 이 단계를 중단할 수 있습니다.

    2. request를 새 요청으로 설정하며, 이 요청의 URLurlString, 클라이언트엔트리 설정 객체, 요청자는 "download", 목적지는 빈 문자열로 설정하며, 동기화 플래그URL 자격 증명 플래그를 설정합니다.

    3. responsefetch request의 결과로 한다.

    4. 다운로드로 처리하기 responsesubjectnode navigable, 그리고 null로 처리한다.

다운로드로 처리하기 response responsenavigable navigable, 그리고 navigation ID 또는 null navigationId로:

  1. suggestedFilename추천 파일 이름 가져오기response에 대한 결과로 한다.

  2. download behaviorWebDriver BiDi 다운로드 시작 예정navigable 및 새로운 WebDriver BiDi 네비게이션 상태로 한다. idnavigationId, status는 "pending", urlresponseURL, suggestedFilenamesuggestedFilename이다.

  3. download behavior가 null이 아니고 download behaviorallowed가 false인 경우:

    1. WebDriver BiDi 다운로드 종료navigable 및 새로운 WebDriver BiDi 네비게이션 상태로 호출한다. idnavigationId, status는 "canceled", urlresponseURL이다.

    2. Return.

  4. download behavior가 null이 아니면 destinationFolderdownload behaviordestinationFolder로 한다.

  5. 다음 단계들을 병렬로 실행한다:

    1. 구현 정의 단계들을 실행하여 response를 나중에 사용할 수 있도록 저장한다. destinationFolder가 null이 아니면, 사용자 에이전트는 해당 경로에 파일을 저장해야 한다. 파일 이름이 필요하면, 사용자 에이전트는 suggestedFilename을 사용해야 한다.

    2. 다음 중 하나라도 참이면:

      • 사용자가 다운로드를 취소한 경우;

      • 사용자 에이전트가 다운로드를 취소한 경우;

      • 오류가 발생한 경우(예: 네트워크 오류, 저장 공간 부족, 사용할 수 없는 대상 폴더);

      다음 단계를 수행한다:

      1. WebDriver BiDi 다운로드 종료navigable 및 새로운 WebDriver BiDi 네비게이션 상태로 호출한다. idnavigationId, status는 "canceled", urlresponseURL이다.

      2. Return.

    3. 다운로드가 성공적으로 완료되면, WebDriver BiDi 다운로드 종료navigable 및 새로운 WebDriver BiDi 네비게이션 상태로 호출한다. idnavigationId, status는 "complete", downloadedFilepath는 파일의 절대 경로(가능한 경우), 아니면 null, urlresponseURL이다.

응답 response에 대한 제안된 파일 이름을 가져오려면 다음을 수행합니다.

이 알고리즘은 신뢰할 수 없는 사이트에서 파일을 다운로드하는 데 따른 보안 위험을 완화하기 위한 것으로, 사용자 에이전트는 이를 준수할 것을 강력히 권장합니다.

  1. filename을 undefined 값으로 설정합니다.

  2. 만약 response에 `Content-Disposition` 헤더가 있고, 해당 헤더가 attachment 처리 유형을 지정하며, 헤더에 파일 이름 정보가 포함되어 있으면, filename에 헤더에 지정된 값을 설정하고 아래의 sanitize 레이블이 붙은 단계로 이동합니다. [RFC6266]

  3. interface origin을 다운로드를 시작한 다운로드 또는 탐색 작업이 시작된 문서출처로 설정합니다(있는 경우).

  4. response originresponse의 URL의 출처로 설정합니다. 단, 해당 URL의 스키마 구성 요소가 data인 경우 response origininterface origin과 동일하게 설정합니다(있는 경우).

  5. interface origin이 없으면 trusted operation을 true로 설정합니다. 그렇지 않으면 response origininterface origin동일 출처이면 trusted operation을 true로 설정하고, 그렇지 않으면 false로 설정합니다.

  6. 만약 trusted operation이 true이고 response에 `Content-Disposition` 헤더가 있고 해당 헤더에 파일 이름 정보가 포함되어 있으면, filename에 헤더에 지정된 값을 설정하고 아래의 sanitize 레이블이 붙은 단계로 이동합니다. [RFC6266]

  7. 만약 다운로드가 a 또는 area 요소로 생성된 하이퍼링크에서 시작되지 않았거나, 다운로드가 시작된 하이퍼링크의 요소에 다운로드가 시작될 때 download 속성이 없었거나, 그러한 속성이 있었지만 다운로드가 시작될 때 해당 값이 빈 문자열이었으면, no proposed filename 레이블이 붙은 단계로 이동합니다.

  8. proposed filename에 다운로드가 시작될 때 다운로드를 시작한 하이퍼링크 요소의 download 속성 값을 설정합니다.

  9. 만약 trusted operation이 true이면 filenameproposed filename 값을 설정하고 아래의 sanitize 레이블이 붙은 단계로 이동합니다.

  10. 만약 response에 `Content-Disposition` 헤더가 있고 해당 헤더가 attachment 처리 유형을 지정하면, filenameproposed filename 값을 설정하고 아래의 sanitize 레이블이 붙은 단계로 이동합니다. [RFC6266]

  11. 제안된 파일 이름 없음: 만약 trusted operation이 true이거나 사용자가 해당 응답을 다운로드하는 것을 선호한다고 표시한 경우, filename구현 정의 방식으로 responseURL에서 파생된 값을 설정하고 아래의 sanitize 레이블이 붙은 단계로 이동합니다.

  12. filename을 사용자가 선호하는 파일 이름 또는 사용자 에이전트가 선택한 파일 이름으로 설정하고 아래의 sanitize 레이블이 붙은 단계로 이동합니다.

    알고리즘이 이 단계에 도달하면 response와 다른 출처에서 다운로드가 시작되었고, 해당 출처는 파일을 다운로드에 적합한 것으로 표시하지 않았으며, 다운로드가 사용자에 의해 시작되지 않았습니다. 이는 download 속성을 사용하여 다운로드를 트리거했거나 response가 사용자 에이전트가 지원하는 유형이 아니기 때문일 수 있습니다.

    이는 위험할 수 있습니다. 예를 들어, 악의적인 서버가 사용자를 속여 자신도 모르게 개인 정보를 다운로드한 다음 악의적인 서버에 다시 업로드하도록 유도하여 데이터가 악의적인 서버에서 온 것처럼 보이게 할 수 있기 때문입니다.

    따라서 response가 상당히 다른 출처에서 온다는 것을 사용자에게 알리고 혼동을 방지하기 위해 잠재적으로 악의적인 interface origin에서 제안된 모든 파일 이름을 무시하는 것이 사용자의 이익에 부합합니다.

  13. 정리: 선택적으로 사용자가 filename에 영향을 미치도록 허용합니다. 예를 들어, 사용자 에이전트는 사용자에게 파일 이름을 묻는 메시지를 표시하고 위에서 결정된 filename 값을 기본값으로 제공할 수 있습니다.

  14. filename을 로컬 파일 시스템에 적합하도록 조정합니다.

    예를 들어, 파일 이름에 사용할 수 없는 문자를 제거하거나 선행 및 후행 공백을 제거하는 작업이 포함될 수 있습니다.

  15. 플랫폼 규칙이 파일 시스템에서 파일 유형을 결정하기 위해 어떤 방식으로든 확장명을 사용하지 않으면 filename을 파일 이름으로 반환합니다.

  16. claimed typeresponseContent-Type 메타데이터에서 제공하는 유형으로 설정합니다(알려진 경우). named typefilename확장명에서 제공하는 유형으로 설정합니다(알려진 경우). 이 단계의 목적상 유형MIME 유형확장명에 매핑하는 것입니다.

  17. 만약 named type이 사용자의 기본 설정과 일치하면(예: filename 값이 사용자에게 메시지를 표시하여 결정된 경우) filename을 파일 이름으로 반환합니다.

  18. 만약 claimed typenamed type이 동일한 유형이면(즉, responseContent-Type 메타데이터에서 제공하는 유형이 filename확장명에서 제공하는 유형과 일치하면) filename을 파일 이름으로 반환합니다.

  19. 만약 claimed type이 알려져 있으면 filename을 변경하여 claimed type에 해당하는 확장명을 추가합니다.

    그렇지 않고 named type이 잠재적으로 위험한 것으로 알려져 있으면(예: 플랫폼 규칙에 따라 네이티브 실행 파일, 셸 스크립트, HTML 응용 프로그램 또는 실행 가능한 매크로 지원 문서로 처리됨) 선택적으로 filename을 변경하여 알려진 안전한 확장명(예: ".txt")을 추가합니다.

    이 마지막 단계는 실행 파일을 다운로드하는 것을 불가능하게 만들 수 있으며, 이는 바람직하지 않을 수 있습니다. 항상 그렇듯이 구현자는 이 문제에서 보안과 유용성 사이의 균형을 맞춰야 합니다.

  20. filename을 파일 이름으로 반환합니다.

이 알고리즘의 목적을 위해, 파일 확장자는 플랫폼 규칙이 파일의 유형을 식별하는 데 사용하도록 지정한 파일 이름의 모든 부분을 포함합니다. 예를 들어, 많은 운영 체제는 파일 이름의 마지막 점(".") 뒤의 부분을 사용하여 파일의 유형을 결정하고, 이를 바탕으로 파일을 열거나 실행하는 방식을 결정합니다.

사용자 에이전트는 결과 파일을 사용자 파일 시스템에 저장할 위치를 결정할 때, 응답 자체, 해당 URL 및 모든 download 속성에서 제공하는 디렉터리 또는 경로 정보를 무시해야 합니다.

만약 a 또는 area 요소에 의해 생성된 하이퍼링크ping 속성이 있고, 사용자가 하이퍼링크를 따라가며, 해당 요소의 href 속성의 값이 해당 요소의 노드 문서를 기준으로 파싱될 수 있고, 실패 없이 파싱될 수 있다면, 사용자 에이전트는 ping 속성의 값을 가져와 해당 문자열을 ASCII 공백으로 분할하고, 각 결과 토큰을 해당 요소의 노드 문서를 기준으로 파싱한 후, 파싱이 실패한 경우를 무시하고, 각 결과 URL ping URL에 대해 다음 단계를 실행합니다:

  1. ping URL스킴HTTP(S) 스킴이 아니라면, 종료합니다.

  2. 선택적으로, 종료할 수 있습니다. (예를 들어, 사용자 에이전트는 사용자의 명시적인 선호에 따라 모든 ping URL을 무시할 수 있습니다.)

  3. settingsObject를 요소의 노드 문서관련 설정 객체로 설정합니다.

  4. request를 새 요청으로 설정합니다. 이 요청의 URLping URL, 메서드는 `POST`, 헤더 목록은 « (`Content-Type`, `text/ping`) », 본문은 `PING`, 클라이언트settingsObject, 목적지는 빈 문자열로 설정하며, 자격 증명 모드는 "include", 리퍼러는 "no-referrer"로 설정하며, URL 자격 증명 플래그를 설정하고, 요청자 유형은 "ping"로 설정합니다.

  5. target URL을 요소의 href 속성 값을 기준으로 인코딩-파싱-직렬화 URL의 결과로 설정한 후, 다음을 수행합니다:

    하이퍼링크를 포함하는 documentURLping URL동일 출처인지 확인합니다.
    출처가 다르지만, 감사 중인 하이퍼링크를 포함하는 document스킴이 "https"가 아닌 경우
    request에는 `Ping-From` 헤더와 하이퍼링크를 포함하는 문서의 URL이 값으로 포함되어야 하며, `Ping-To` HTTP 헤더와 target URL이 값으로 포함되어야 합니다.
    그렇지 않은 경우
    request에는 target URL이 값으로 포함된 `Ping-To` HTTP 헤더가 포함되어야 합니다. request에는 `Ping-From` 헤더가 포함되지 않습니다.
  6. Fetch request.

이는 기본 fetch와 병렬로 수행될 수 있으며, 해당 fetch의 결과와는 독립적입니다.

사용자 에이전트는 예를 들어 HTTP `Referer` (sic) 헤더 전송을 비활성화하는 설정과 함께 이 동작을 조정할 수 있도록 사용자에게 허용해야 합니다. 사용자의 선호도에 따라 사용자 에이전트는 무시하거나 ping 속성을 완전히 무시하거나, 목록에서 특정 URL(예: 제3자 URL)을 선택적으로 무시할 수 있습니다. 이는 위 단계에서 명시적으로 고려되었습니다.

사용자 에이전트는 응답에서 반환된 엔터티 본문을 무시해야 합니다. 사용자 에이전트는 응답 본문을 수신하기 시작하면 연결을 조기에 닫을 수 있습니다.

(이것은 추적 벡터입니다.) a 또는 area 요소가 하이퍼링크를 생성하고 ping 속성을 포함하는 경우, 사용자 에이전트는 하이퍼링크를 따를 때 백그라운드에서 추가 요청이 전송될 수 있음을 사용자에게 알릴 수 있으며, 실제 대상 URL을 나열할 수도 있습니다.

예를 들어, 시각적인 사용자 에이전트는 상태 표시줄이나 툴팁에서 하이퍼링크의 실제 URL과 함께 대상 ping URL의 호스트 이름을 포함할 수 있습니다.

ping 속성은 HTTP 리디렉션 및 자바스크립트와 같은 기존 기술과 중복되어 웹 페이지가 가장 인기 있는 외부 링크를 추적하거나 광고주가 클릭률을 추적할 수 있게 합니다.

그러나 ping 속성은 다음과 같은 이점을 사용자에게 제공합니다:

4.6.6.1 `Ping-From` 및 `Ping-To` 헤더

`Ping-From` 및 `Ping-To` HTTP 요청 헤더는 하이퍼링크 감사 요청에 포함됩니다. 이들의 값은 URL이며, 직렬화된 값입니다.

4.6.7 링크 유형

링크 유형

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

링크 유형

다음 표는 이 명세서에 정의된 링크 유형을 해당 키워드별로 요약한 것입니다. 이 표는 비규범적입니다. 링크 유형의 실제 정의는 다음 몇 섹션에서 설명합니다.

이 섹션에서는 참조된 문서라는 용어는 링크를 나타내는 요소에 의해 식별된 리소스를 나타내며, 현재 문서라는 용어는 링크를 나타내는 요소가 있는 리소스를 나타냅니다.

link, a, area 또는 form 요소에 적용되는 링크 유형을 결정하려면, 해당 요소의 rel 속성을 ASCII 공백으로 분할해야 합니다. 결과로 나온 토큰이 해당 요소에 적용되는 링크 유형의 키워드입니다.

특별히 명시된 경우를 제외하고, 키워드는 rel 속성당 한 번만 지정할 수 있습니다.

다음 표 아래에 나오는 일부 섹션에서는 특정 키워드의 동의어를 나열합니다. 표시된 동의어는 사용자 에이전트에서 명시된 대로 처리되어야 하지만, 문서에서 사용되어서는 안 됩니다(예: "copyright" 키워드).

키워드는 항상 ASCII 대소문자 구분 없이 비교해야 하며, 반드시 그렇게 비교되어야 합니다.

따라서, rel="next"rel="NEXT"와 동일합니다.

body-ok 키워드는 link 요소가 본문에 허용되는지 여부에 영향을 미칩니다. body-ok 키워드는 dns-prefetch, modulepreload, pingback, preconnect, prefetch, preload, 그리고 stylesheet입니다.

웹 브라우저에 의해 구현될 새로운 링크 유형은 이 표준에 추가되어야 합니다. 나머지는 확장으로 등록될 수 있습니다.

4.6.7.1 Link type "alternate"

Alternative_style_sheets

현재 엔진 하나에서만 지원됩니다.

Firefox3+Safari?Chrome1–48
OperaYesEdgeNo
Edge (Legacy)?Internet Explorer8+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

alternate 키워드는 link, a, 및 area 요소에서 사용할 수 있습니다.

이 키워드의 의미는 다른 속성의 값에 따라 달라집니다.

요소가 link 요소이고 rel 속성에 stylesheet 키워드도 포함된 경우

alternate 키워드는 stylesheet 키워드의 의미를 해당 키워드에 대해 설명된 방식으로 수정합니다. alternate 키워드는 자체 링크를 생성하지 않습니다.

다음과 같이, link 요소 세트가 스타일 시트를 제공합니다:

<!-- 지속적인 스타일 시트 -->
<link rel="stylesheet" href="default.css">

<!-- 선호하는 대체 스타일 시트 -->
<link rel="stylesheet" href="green.css" title="Green styles">

<!-- 일부 대체 스타일 시트 -->
<link rel="alternate stylesheet" href="contrast.css" title="High contrast">
<link rel="alternate stylesheet" href="big.css" title="Big fonts">
<link rel="alternate stylesheet" href="wide.css" title="Wide screen">
alternate 키워드가 type 속성이 application/rss+xml 값 또는 application/atom+xml 값을 가질 때 사용된 경우

이 키워드는 현재 페이지와 반드시 동일한 콘텐츠를 포함하지는 않지만, syndication 피드를 참조하는 하이퍼링크를 생성합니다.

피드 자동 발견을 위해 사용자 에이전트는 문서 내의 모든 link 요소에서 alternate 키워드가 사용되고 type 속성이 application/rss+xml 또는 application/atom+xml 값으로 설정된 경우 모두 고려해야 합니다. 사용자 에이전트에 기본 syndication 피드 개념이 있는 경우, 첫 번째 요소가 (적용 가능한 경우) 기본으로 사용되어야 합니다.

다음 link 요소들은 블로그의 syndication 피드를 제공합니다:

<link rel="alternate" type="application/atom+xml" href="posts.xml" title="Cool Stuff Blog">
<link rel="alternate" type="application/atom+xml" href="posts.xml?category=robots" title="Cool Stuff Blog: robots category">
<link rel="alternate" type="application/atom+xml" href="comments.xml" title="Cool Stuff Blog: Comments">

이러한 link 요소들은 피드 자동 발견에 사용되며, 첫 번째 요소가 (적용 가능한 경우) 기본으로 사용됩니다.

다음 예제는 a 요소를 사용하여 사용자에게 다양한 syndication 피드를 제공하는 방법을 보여줍니다:

<p>원하는 Atom 피드를 선택하세요:</p>
<ul>
 <li><a href="recently-visited-planets.xml" rel="alternate" type="application/atom+xml">Recently Visited Planets</a></li>
 <li><a href="known-bad-planets.xml" rel="alternate" type="application/atom+xml">Known Bad Planets</a></li>
 <li><a href="unexplored-planets.xml" rel="alternate" type="application/atom+xml">Unexplored Planets</a></li>
</ul>

이러한 링크들은 피드 자동 발견에 사용되지 않습니다.

그 외의 경우

이 키워드는 현재 문서의 대체 표현을 참조하는 하이퍼링크를 생성합니다.

참조된 문서의 성격은 hreflangtype 속성에 의해 결정됩니다.

alternate 키워드가 hreflang 속성과 함께 사용되고, 해당 속성의 값이 문서 요소언어와 다를 경우, 참조된 문서가 번역본임을 나타냅니다.

alternate 키워드가 type 속성과 함께 사용될 경우, 이는 참조된 문서가 지정된 형식으로 현재 문서를 재구성한 것임을 나타냅니다.

hreflangtype 속성은 alternate 키워드와 함께 지정될 때 결합하여 사용할 수 있습니다.

다음 예제는 페이지의 대체 형식을 사용하는 버전, 다른 언어를 대상으로 하는 버전 및 다른 미디어를 대상으로 하는 버전을 지정하는 방법을 보여줍니다:

<link rel=alternate href="/en/html" hreflang=en type=text/html title="English HTML">
<link rel=alternate href="/fr/html" hreflang=fr type=text/html title="French HTML">
<link rel=alternate href="/en/html/print" hreflang=en type=text/html media=print title="English HTML (for printing)">
<link rel=alternate href="/fr/html/print" hreflang=fr type=text/html media=print title="French HTML (for printing)">
<link rel=alternate href="/en/pdf" hreflang=en type=application/pdf title="English PDF">
<link rel=alternate href="/fr/pdf" hreflang=fr type=application/pdf title="French PDF">

이 관계는 전이적입니다 — 즉, 문서가 "alternate" 링크 유형으로 두 다른 문서에 링크를 걸면, 그 문서들이 첫 번째 문서의 대체 표현이라는 것을 암시할 뿐만 아니라, 그 두 문서도 서로의 대체 표현이라는 것을 암시합니다.

author 키워드는 link, aarea 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

aarea 요소의 경우, author 키워드는 참조된 문서가 하이퍼링크를 정의하는 요소의 가장 가까운 article 요소의 작성자에 대한 추가 정보를 제공하거나, 해당 요소가 없을 경우 페이지 전체에 대한 정보를 제공한다는 것을 나타냅니다.

link 요소의 경우, author 키워드는 참조된 문서가 페이지 전체의 작성자에 대한 추가 정보를 제공한다는 것을 나타냅니다.

"참조된 문서"는 mailto: URL을 통해 작성자의 이메일 주소를 제공할 수 있으며, 이는 종종 실제로 그렇습니다. [MAILTO]

동의어: 역사적 이유로, 사용자 에이전트는 link, aarea 요소에 rev 속성이 "made" 값으로 지정된 경우 author 키워드가 링크 관계로 지정된 것으로 처리해야 합니다.

bookmark 키워드는 aarea 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

bookmark 키워드는 해당 링크 요소의 가장 가까운 조상 article 요소 또는 조상 article 요소가 없는 경우 링크 요소가 가장 밀접하게 관련된 섹션에 대한 영구 링크를 제공합니다.

다음 코드 조각에는 세 개의 고정 링크가 있습니다. 사용자 에이전트는 고정 링크가 제공되는 위치를 보고 각 부분에 어떤 고정 링크가 적용되는지 결정할 수 있습니다.

 ...
 <body>
  <h1>Example of permalinks</h1>
  <div id="a">
   <h2>First example</h2>
   <p><a href="a.html" rel="bookmark">This permalink applies to
   only the content from the first H2 to the second H2</a>. The DIV isn't
   exactly that section, but it roughly corresponds to it.</p>
  </div>
  <h2>Second example</h2>
  <article id="b">
   <p><a href="b.html" rel="bookmark">This permalink applies to
   the outer ARTICLE element</a> (which could be, e.g., a blog post).</p>
   <article id="c">
    <p><a href="c.html" rel="bookmark">This permalink applies to
    the inner ARTICLE element</a> (which could be, e.g., a blog comment).</p>
   </article>
  </article>
 </body>
 ...

canonical 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

canonical 키워드는 href 속성에 의해 제공되는 URL이 현재 문서의 선호 URL임을 나타냅니다. 이는 The Canonical Link Relation에서 더 자세히 설명된 것처럼 검색 엔진이 중복 콘텐츠를 줄이는 데 도움을 줍니다. [RFC6596]

Link_types/dns-prefetch

Firefox3+Safari?Chrome46+
Opera?Edge79+
Edge (Legacy)NoInternet Explorer?
Firefox Android?Safari iOS?Chrome AndroidYesWebView Android46+Samsung Internet?Opera Android?

dns-prefetch 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 자원 링크를 생성합니다. 이 키워드는 body-ok입니다.

dns-prefetch 키워드는 지정된 자원의 origin에 대해 사전에 DNS 해석을 수행하는 것이 사용자에게 유리할 가능성이 높으며, 사용자가 해당 origin에 위치한 자원을 필요로 할 가능성이 높아 DNS 해석과 관련된 지연 시간을 미리 줄여 사용자 경험을 향상시킬 수 있음을 나타냅니다.

dns-prefetch 키워드에 의해 제공되는 자원의 기본 유형은 없습니다.

이 유형의 링크된 자원을 가져와 처리해야 할 적절한 시기는 다음과 같습니다:

이 유형의 링크된 자원을 가져와 처리하는 단계link 요소 el이 주어질 때 다음과 같습니다:

  1. elhref 속성 값을 기준으로 URL 인코딩-파싱을 수행하여 url을 설정합니다.

  2. 만약 url이 실패라면, 종료합니다.

  3. el노드 문서관련 설정 객체를 기반으로 네트워크 파티션 키 결정의 결과로 partitionKey를 설정합니다.

  4. 사용자 에이전트는 partitionKeyurlorigin을 주어 origin을 해석해야 합니다.

    이 알고리즘의 결과는 캐시될 수 있으므로, 이후의 가져오기가 더 빨라질 수 있습니다.

expect 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 내부 자원 링크를 생성합니다.

expect 키워드로 생성된 내부 자원 링크는 해당 요소가 문서에 연결되고 완전히 구문 분석될 때까지 렌더링을 차단하는 데 사용할 수 있습니다.

expect 키워드로 제공된 자원의 기본 유형은 없습니다.

다음 조건 중 하나라도 link 요소 el에 해당하는 경우:

그런 다음 처리 el을 실행합니다.

link 요소 el이 주어질 때, 내부 자원 링크 처리를 실행하려면 다음 단계를 수행합니다:

  1. el노드 문서doc으로 설정합니다.

  2. elhref 속성 값을 기준으로 URL 인코딩-파싱의 결과를 url로 설정합니다.

  3. 이 작업이 실패하거나, url프래그먼트를 제외한 설정 없이 docURL일치하지 않으면 렌더링을 차단 해제하고 종료합니다.

  4. docurl을 사용하여 지정된 부분 선택의 결과를 indicatedElement로 설정합니다.

  5. 다음 조건이 모두 참이면:

    그런 다음 렌더링을 차단합니다.

  6. 그렇지 않으면 렌더링을 차단 해제합니다.

document doc에 대해 내부 자원 링크 처리를 실행하려면:

  1. expect link 요소 link에 대해 doc렌더링 차단 요소 집합에서, 처리합니다 link.

다음 속성 변경 단계element, localName, oldValue, value, namespace를 사용하여 expect link 요소가 동적 idname 변경에 반응하도록 보장하기 위해 사용됩니다:

  1. namespace가 null이 아니면 반환합니다.

  2. element열린 요소의 스택에 있으면 반환합니다.

  3. 다음 중 하나가 참이면:

    • localNameid인 경우

    • localNamename이고 elementa 요소인 경우

    그런 다음 내부 자원 링크 처리element노드 문서에서 실행합니다.

external 키워드는 a, area, 그리고 form 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성하지 않지만, 요소에 의해 생성된 다른 하이퍼링크(다른 키워드가 생성하지 않는 경우 암시된 하이퍼링크)에 대해 주석을 달아줍니다.

external 키워드는 링크가 현재 문서가 속한 사이트의 일부가 아닌 문서로 연결된다는 것을 나타냅니다.

help 키워드는 link, a, area, 그리고 form 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

a, area, 그리고 form 요소의 경우, help 키워드는 부모 요소와 그 자식 요소에 대한 추가 도움말 정보를 제공하는 문서를 참조한다고 나타냅니다.

다음 예제에서, 폼 컨트롤에는 문맥에 따라 관련된 도움말이 있습니다. 사용자 에이전트는 이 정보를 사용하여, 예를 들어 사용자가 "도움말" 또는 "F1" 키를 누르면 참조된 문서를 표시할 수 있습니다.

 <p><label> Topic: <input name=topic> <a href="help/topic.html" rel="help">(Help)</a></label></p>

link 요소의 경우, help 키워드는 참조된 문서가 페이지 전체에 대한 도움말을 제공한다고 나타냅니다.

aarea 요소의 경우, 일부 브라우저에서는 help 키워드가 링크가 다른 커서를 사용하도록 합니다.

4.6.7.9 링크 유형 "icon"

Link_types#icon

모든 현재 엔진에서 지원.

Firefox2+Safari3.1+Chrome4+
Opera9+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android4+Safari iOS지원 안됨Chrome Android18+WebView Android38+Samsung Internet4.0+Opera Android지원 안됨
caniuse.com table

icon 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 생성합니다.

지정된 리소스는 페이지 또는 사이트를 나타내는 아이콘이며, 사용자 에이전트가 사용자 인터페이스에서 페이지를 나타낼 때 사용해야 합니다.

아이콘은 청각적 아이콘, 시각적 아이콘 또는 다른 종류의 아이콘일 수 있습니다. 여러 아이콘이 제공되는 경우, 사용자 에이전트는 type, media, sizes 속성에 따라 가장 적합한 아이콘을 선택해야 합니다. 여러 개의 동일하게 적합한 아이콘이 있을 경우, 사용자 에이전트는 사용자가 아이콘 목록을 수집할 당시 트리 순서에서 마지막으로 선언된 아이콘을 사용해야 합니다. 사용자 에이전트가 아이콘을 사용하려 했으나, 실제로는 지원되지 않는 형식을 사용하는 등 부적절한 것으로 판단되면, 사용자 에이전트는 속성에 따라 다음으로 적합한 아이콘을 시도해야 합니다.

사용자 에이전트는 아이콘 목록이 변경될 때 아이콘을 업데이트할 필요는 없지만, 업데이트하는 것이 권장됩니다.

icon 키워드로 제공된 리소스에 대한 기본 유형은 없습니다. 그러나 리소스의 유형을 결정하는 목적을 위해, 사용자 에이전트는 리소스가 이미지일 것으로 예상해야 합니다.

sizes 키워드는 아이콘 크기를 원시 픽셀로 나타냅니다(CSS 픽셀과 대조적으로).

장치 픽셀 밀도가 CSS 픽셀당 두 장치 픽셀(2x, 192dpi)인 디스플레이를 위해 50 CSS 픽셀 너비의 아이콘은 100 원시 픽셀의 너비를 갖게 됩니다. 이 기능은 작은 고해상도 아이콘과 큰 저해상도 아이콘에 대해 다른 리소스를 사용해야 함을 나타내는 것은 지원하지 않습니다(예: 50×50 2x 대 100×100 1x).

속성의 값을 구문 분석하고 처리하기 위해, 사용자 에이전트는 먼저 속성의 값을 ASCII 공백으로 분할한 다음, 각 결과 키워드를 구문 분석하여 그것이 나타내는 바를 결정해야 합니다.

any 키워드는 리소스가 SVG 이미지와 같이 확장 가능한 아이콘을 포함하고 있음을 나타냅니다.

다른 키워드는 다음과 같이 추가로 구문 분석하여 무엇을 나타내는지 결정해야 합니다:

  1. 키워드에 U+0078 라틴 소문자 X 또는 U+0058 라틴 대문자 X 문자가 정확히 하나 포함되지 않은 경우, 이 키워드는 아무 것도 나타내지 않습니다. 해당 키워드에 대해 반환합니다.

  2. width string을 "x" 또는 "X" 앞의 문자열로 설정합니다.

  3. height string을 "x" 또는 "X" 뒤의 문자열로 설정합니다.

  4. width string 또는 height string이 U+0030 숫자 0(0) 문자로 시작하거나, ASCII 숫자 이외의 문자를 포함하는 경우, 이 키워드는 아무 것도 나타내지 않습니다. 해당 키워드에 대해 반환합니다.

  5. width을 얻기 위해 음수가 아닌 정수를 구문 분석하는 규칙width string에 적용합니다.

  6. height을 얻기 위해 음수가 아닌 정수를 구문 분석하는 규칙height string에 적용합니다.

  7. 해당 키워드는 리소스가 width 장치 픽셀 너비와 height 장치 픽셀 높이를 가진 비트맵 아이콘을 포함하고 있음을 나타냅니다.

sizes 속성에 지정된 키워드는 링크된 리소스에서 실제로 사용 가능한 아이콘 크기를 나타내지 않아야 합니다.

link 요소 el요청 request이 주어졌을 때, 이 유형의 링크된 리소스에 대한 링크된 리소스 페치 설정 단계는 다음과 같습니다:

  1. request목적지를 "image"로 설정합니다.

  2. true를 반환합니다.

이 유형의 링크된 리소스에 대한 링크 헤더 처리 단계는 아무 것도 하지 않습니다.

만약 link 요소와 icon 키워드가 없는 경우, Document 객체의 URL스킴HTTP(S) 스킴인 경우, 사용자 에이전트는 대신 이러한 단계를 병렬로 실행할 수 있습니다:

  1. request요청이며, URLURL 레코드로, Document 객체의 URL에 대해 "/favicon.ico"를 해결하여 얻은 URL이며, 클라이언트Document 객체의 관련 설정 객체, 목적지는 "image", 동기 플래그가 설정되고, 자격 증명 모드는 "include", URL 자격 증명 사용 플래그가 설정된 새 요청을 만들고.

  2. response페치 request의 결과입니다.

  3. response안전하지 않은 응답을 아이콘으로 사용하며, 마치 icon 키워드를 사용하여 선언된 것처럼 합니다.

다음 스니펫은 여러 아이콘이 있는 애플리케이션의 상단 부분을 보여줍니다.

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>lsForums — Inbox</title>
  <link rel=icon href=favicon.png sizes="16x16" type="image/png">
  <link rel=icon href=windows.ico sizes="32x32 48x48" type="image/vnd.microsoft.icon">
  <link rel=icon href=mac.icns sizes="128x128 512x512 8192x8192 32768x32768">
  <link rel=icon href=iphone.png sizes="57x57" type="image/png">
  <link rel=icon href=gnome.svg sizes="any" type="image/svg+xml">
  <link rel=stylesheet href=lsforums.css>
  <script src=lsforums.js></script>
  <meta name=application-name content="lsForums">
 </head>
 <body>
  ...

역사적 이유로, icon 키워드는 "shortcut" 키워드 앞에 있을 수 있습니다. "shortcut" 키워드가 있는 경우, rel 속성의 전체 값은 "shortcut icon" 문자열에 대해 ASCII 대소문자 구분 없이 일치해야 합니다(토큰 사이에 U+0020 공백 문자 하나와 다른 ASCII 공백이 없어야 합니다).

license 키워드는 link, a, areaform 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 만듭니다.

license 키워드는 참조된 문서가 현재 문서의 주요 콘텐츠가 제공되는 저작권 라이선스 조건을 제공함을 나타냅니다.

이 사양은 문서의 주요 콘텐츠와 주요 콘텐츠로 간주되지 않는 콘텐츠를 구분하는 방법을 지정하지 않습니다. 구분은 사용자에게 명확해야 합니다.

사진 공유 사이트를 고려해 보십시오. 해당 사이트의 페이지는 사진을 설명하고 표시할 수 있으며, 페이지는 다음과 같이 마크업될 수 있습니다:

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>Exampl Pictures: Kissat</title>
  <link rel="stylesheet" href="/style/default">
 </head>
 <body>
  <h1>Kissat</h1>
  <nav>
   <a href="../">Return to photo index</a>
  </nav>
  <figure>
   <img src="/pix/39627052_fd8dcd98b5.jpg">
   <figcaption>Kissat</figcaption>
  </figure>
  <p>One of them has six toes!</p>
  <p><small><a rel="license" href="http://www.opensource.org/licenses/mit-license.php">MIT Licensed</a></small></p>
  <footer>
   <a href="/">Home</a> | <a href="../">Photo index</a>
   <p><small>© copyright 2009 Exampl Pictures. All Rights Reserved.</small></p>
  </footer>
 </body>
</html>

이 경우 license는 문서의 주요 콘텐츠인 사진에만 적용되며, 문서 전체에는 적용되지 않습니다. 특히 문서 하단에 명시된 저작권이 적용되는 페이지 디자인에는 적용되지 않습니다. 이 점은 스타일링을 통해 더 명확하게 할 수 있습니다(예: 라이선스 링크를 사진 근처에 눈에 띄게 배치하고, 페이지 저작권은 페이지 하단에 작은 글씨로 표시).

동의어: 역사적 이유로, 사용자 에이전트는 "copyright" 키워드를 license 키워드처럼 처리해야 합니다.

Link_types/manifest

하나의 엔진에서만 지원됩니다.

Firefox?Safari?Chrome아니오
Opera?Edge아니오
Edge (Legacy)?Internet Explorer?
Firefox Android?Safari iOS?Chrome Android39+WebView Android?Samsung Internet?Opera Android?

manifest 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 만듭니다.

manifest 키워드는 현재 문서와 관련된 메타데이터를 제공하는 매니페스트 파일을 나타냅니다.

manifest 키워드로 제공되는 리소스에 대해 기본 유형이 없습니다.

웹 애플리케이션이 설치된 웹 애플리케이션이 아닌 경우, 이 링크 유형에 대해 링크된 리소스를 가져오고 처리하는 적절한 시기는 사용자 에이전트가 필요하다고 판단할 때입니다. 예를 들어, 사용자가 웹 애플리케이션을 설치하기로 선택했을 때가 적절한 시기가 될 수 있습니다.

설치된 웹 애플리케이션의 경우, 이 링크 유형에 대해 링크된 리소스를 가져오고 처리하는 적절한 시기는 다음과 같습니다:

어떤 경우든, 트리 순서(tree order)에서 rel 속성이 manifest 토큰을 포함하는 첫 번째 link 요소만 사용할 수 있습니다.

사용자 에이전트는 이 링크 유형에 대해 로드 이벤트를 지연시켜서는 안 됩니다.

이 유형의 링크된 리소스에 대해 link 요소 el요청 request를 고려하여 링크된 리소스 가져오기 설정 단계는 다음과 같습니다:

  1. el노드 문서노드 내비게이벌navigable로 설정합니다.

  2. navigable이 null이면 false를 반환합니다.

  3. navigable최상위 탐색 가능이 아니면 false를 반환합니다.

  4. requestinitiator를 "manifest"로 설정합니다.

  5. requestdestination을 "manifest"로 설정합니다.

  6. requestmode를 "cors"로 설정합니다.

  7. requestcredentials modecrossorigin 콘텐츠 속성에 대한 CORS 설정 속성 자격 증명 모드로 설정합니다.

  8. true를 반환합니다.

link 요소 el, boolean success, 응답 response, 및 바이트 시퀀스 bodyBytes를 고려하여 이 유형의 링크된 리소스를 처리하는 방법은 다음과 같습니다:

  1. responseContent-Type 메타데이터JSON MIME 타입이 아닌 경우, success를 false로 설정합니다.

  2. success가 true인 경우:

    1. el노드 문서URLdocument URL로 설정합니다.

    2. responseURLmanifest URL로 설정합니다.

    3. document URL, manifest URL, 및 bodyBytes를 고려하여 매니페스트를 처리합니다. [MANIFEST]

이 유형의 링크된 리소스에 대한 링크 헤더 처리 단계는 아무 작업도 하지 않습니다.

Link_types/modulepreload

Firefox115+Safari?Chrome66+
Opera?Edge79+
Edge (Legacy)아니오Internet Explorer?
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

modulepreload 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 만듭니다. 이 키워드는 body-ok입니다.

modulepreload 키워드는 preload 키워드의 특수화된 대안으로, 모듈 스크립트의 사전 로드에 초점을 맞춘 처리 모델을 사용합니다. 특히, 모듈 스크립트의 특정한 가져오기 동작을 사용하며 (예: crossorigin 속성의 다른 해석 등), 결과를 나중에 평가하기 위해 적절한 모듈 맵에 저장합니다. 반면, preload 키워드를 사용하는 유사한 외부 리소스 링크는 결과를 프리로드 캐시에 저장하며, 문서의 모듈 맵에는 영향을 미치지 않습니다.

또한, 구현체는 모듈 스크립트가 의존성을 선언한다는 사실을 활용하여 지정된 모듈의 의존성을 가져올 수도 있습니다. 이는 최적화 기회로 의도된 것으로, 사용자 에이전트는 그 의존성이 나중에 필요할 가능성이 높다는 것을 알고 있기 때문입니다. 일반적으로는 서비스 워커 같은 기술을 사용하지 않는 한 이를 관찰하기는 어렵습니다. 특히, 적절한 load 또는 error 이벤트는 지정된 모듈이 가져와진 후에 발생하며, 의존성을 기다리지 않습니다.

사용자 에이전트는 이 링크 유형에 대해 로드 이벤트를 지연해서는 안 됩니다.

이 링크 유형에 대해 링크된 리소스를 가져오고 처리하기에 적절한 시기는 다음과 같습니다:

일부 다른 링크 관계와 달리, link 요소의 관련 속성 (예: as, crossorigin, referrerpolicy)을 변경해도 새로운 가져오기를 트리거하지 않습니다. 이는 문서의 모듈 맵이 이미 이전에 가져온 결과로 채워져 있으므로, 다시 가져오는 것이 의미가 없기 때문입니다.

modulepreload 링크에 대한 리소스 가져오기 및 처리 알고리즘은 link 요소 el을 기준으로 다음과 같이 진행됩니다:

  1. 만약 elhref 속성의 값이 빈 문자열이라면, 반환합니다.

  2. elas 속성의 현재 상태를 destination으로 설정합니다 (이는 destination입니다), 또는 상태가 없다면 "script"로 설정합니다.

  3. 만약 destination스크립트와 유사한 목적지가 아니라면, 요소 작업을 대기열에 추가하고 네트워킹 작업 소스를 사용하여 el에서 이벤트를 발생시켜 error를 반환합니다.

  4. elhref 속성의 값을 기준으로 URL 인코딩-파싱의 결과를 url로 설정합니다.

  5. url이 실패인 경우, 반환합니다.

  6. el노드 문서관련 설정 객체settings object로 설정합니다.

  7. elcrossorigin 속성에 대한 CORS 설정 속성 자격 증명 모드credentials mode로 설정합니다.

  8. el[[CryptographicNonce]]cryptographic nonce로 설정합니다.

  9. 속성이 지정된 경우 el무결성 속성 값을 integrity metadata로 설정하고, 그렇지 않은 경우 빈 문자열로 설정합니다.

  10. el무결성 속성을 가지고 있지 않다면, 모듈 무결성 메타데이터를 해결한 결과를 urlsettings object로 설정하여 integrity metadata를 설정합니다.

  11. elreferrerpolicy 속성의 현재 상태를 referrer policy로 설정합니다.

  12. elfetchpriority 속성의 현재 상태를 fetch priority로 설정합니다.

  13. 스크립트 가져오기 옵션cryptographic nonce, integrity metadata, "not-parser-inserted"의 파서 메타데이터, credentials mode, referrer policy, 및 fetch priority로 설정합니다.

  14. url, destination, settings object, options을 기준으로 modulepreload 모듈 스크립트 그래프 가져오기를 실행하고, result를 기준으로 다음 단계를 수행합니다:

    1. result가 null인 경우, 이벤트를 발생시켜 el에서 error를 반환합니다.

    2. 이벤트를 발생시켜 el에서 load를 반환합니다.

이 유형의 링크된 리소스에 대한 링크 헤더 처리 단계는 아무 작업도 하지 않습니다.

다음 스니펫은 여러 모듈이 사전 로드된 애플리케이션의 상단 부분을 보여줍니다:

<!DOCTYPE html>
<html lang="en">
<title>IRCFog</title>

<link rel="modulepreload" href="app.mjs">
<link rel="modulepreload" href="helpers.mjs">
<link rel="modulepreload" href="irc.mjs">
<link rel="modulepreload" href="fog-machine.mjs">

<script type="module" src="app.mjs">
...

애플리케이션의 모듈 그래프가 다음과 같다고 가정합니다:

모듈 그래프는 app.mjs에서 시작되며, irc.mjs와 fog-machine.mjs에 의존합니다. irc.mjs는 helpers.mjs에 의존합니다.

여기에서 애플리케이션 개발자는 모듈 그래프의 모든 모듈을 선언하기 위해 modulepreload를 사용하여 사용자 에이전트가 이를 모두 가져오도록 합니다. 이러한 사전 로드 없이, 사용자 에이전트는 HTTP/2 서버 푸시 같은 기술이 작동하지 않는 경우 helpers.mjs를 찾기 위해 여러 네트워크 라운드 트립을 거쳐야 할 수도 있습니다. 이와 같이, modulepreload link 요소는 애플리케이션의 모듈을 일종의 "매니페스트"처럼 사용할 수 있습니다.

다음 코드는 modulepreload 링크가 import()와 함께 사용되어 네트워크 가져오기를 미리 수행하도록 하고, import()가 호출될 때 모듈이 이미 준비되어 모듈 맵에서 준비된 상태에 있게 하는 방법을 보여줍니다:

<link rel="modulepreload" href="awesome-viewer.mjs">

<button onclick="import('./awesome-viewer.mjs').then(m => m.view())">
  멋진 항목 보기
</button>

nofollow 키워드는 a, areaform 요소와 함께 사용될 수 있습니다. 이 키워드는 하이퍼링크를 생성하지 않지만, 요소에 의해 생성된 다른 하이퍼링크들(다른 키워드가 생성하지 않는 경우 암시적인 하이퍼링크)을 주석으로 달 수 있습니다.

nofollow 키워드는 링크가 페이지의 원래 작성자 또는 발행자에 의해 승인되지 않았거나, 두 페이지에 관련된 사람들 간의 상업적 관계 때문에 주로 포함된 링크임을 나타냅니다.

Link_types/noopener

모든 현재 엔진에서 지원됩니다.

Firefox52+Safari10.1+Chrome49+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

Link_types/noopener

모든 현재 엔진에서 지원됩니다.

Firefox52+Safari10.1+Chrome49+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

noopener 키워드는 a, areaform 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성하지 않지만, 요소가 생성하는 하이퍼링크(다른 키워드가 하이퍼링크를 생성하지 않는 경우 내포된 하이퍼링크)를 주석 처리합니다.

이 키워드는 하이퍼링크를 따라 열리는 새 최상위 탐색 가능 항목보조 브라우징 컨텍스트를 포함하지 않음을 나타냅니다. 예를 들어, 생성된 Windowopener 속성의 getter는 null을 반환합니다.

또한 처리 모델도 참조합니다.

이것은 일반적으로 최상위 탐색 가능 항목보조 브라우징 컨텍스트(기존 탐색 가능 항목대상 이름이 "example"이 아닌 경우)와 함께 생성됩니다:

<a href=help.html target=example>Help!</a>

이것은 동일한 경우에 최상위 탐색 가능 항목과 비보조 브라우징 컨텍스트와 함께 생성됩니다:

<a href=help.html target=example rel=noopener>Help!</a>

이들은 동등하며 오직 부모 탐색 가능 항목만 탐색합니다:

<a href=index.html target=_parent>Home</a>
<a href=index.html target=_parent rel=noopener>Home</a>

Link_types/noreferrer

모든 현재 엔진에서 지원됩니다.

Firefox33+Safari5+Chrome16+
Opera?Edge79+
Edge (Legacy)13+Internet Explorer🔰 11
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet1.5+Opera Android?

Link_types/noreferrer

모든 현재 엔진에서 지원됩니다.

Firefox33+Safari5+Chrome16+
Opera?Edge79+
Edge (Legacy)13+🔰 11
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet1.5+Opera Android?

noreferrer 키워드는 a, areaform 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성하지 않지만, 요소가 생성하는 하이퍼링크(다른 키워드가 하이퍼링크를 생성하지 않는 경우 내포된 하이퍼링크)를 주석 처리합니다.

이 키워드는 링크를 따를 때 참조자 정보가 유출되지 않음을 나타내며, 또한 동일한 조건에서 noopener 키워드의 동작을 의미합니다.

참조자가 직접 조작되는 처리 모델도 참조합니다.

<a href="..." rel="noreferrer" target="_blank"><a href="..." rel="noreferrer noopener" target="_blank">와 동일한 동작을 합니다.

opener 키워드는 a, areaform 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성하지 않지만, 요소가 생성하는 다른 모든 하이퍼링크(다른 키워드가 하이퍼링크를 생성하지 않는 경우 내포된 하이퍼링크)를 주석 처리합니다.

이 키워드는 하이퍼링크를 따를 때 생성된 모든 새로운 최상위 탐색 가능 객체보조 브라우징 컨텍스트를 포함하게 됨을 나타냅니다.

처리 모델에 대해서는 처리 모델을 참조합니다.

다음 예제에서는 사용자가 찾고 있는 내용이 다른 곳에서 발견될 수 있는 경우를 대비하여 도움말 페이지 팝업이 그 오프너를 탐색할 수 있도록 opener가 사용됩니다. 대안으로는 _blank 대신 이름이 지정된 대상을 사용하는 방법이 있을 수 있지만, 이는 기존 이름과 충돌할 가능성이 있습니다.

<a href="..." rel=opener target=_blank>Help!</a>

pingback 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 생성합니다. 이 키워드는 본문-허용입니다.

pingback 키워드의 의미는 Pingback 1.0를 참조합니다. [PINGBACK]

Link_types/preconnect

모든 현재 엔진에서 지원됩니다.

Firefox39+Safari11.1+Chrome46+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet4.0+Opera Android?

preconnect 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 생성합니다. 이 키워드는 본문-허용입니다.

preconnect 키워드는 특정 리소스의 출처로의 연결을 선제적으로 시작하는 것이 유익할 가능성이 높으며, 사용자가 해당 출처에 있는 리소스를 필요로 할 가능성이 높기 때문에 연결을 설정하는 데 관련된 지연 시간을 미리 해결함으로써 사용자 경험이 향상될 것임을 나타냅니다.

preconnect 키워드로 제공되는 리소스에는 기본 유형이 없습니다.

사용자 에이전트는 이 링크 유형에 대해 로드 이벤트를 지연해서는 안 됩니다.

이 링크 유형에 대해 링크된 리소스를 가져오고 처리할 적절한 시점은 다음과 같습니다:

이 링크 유형에 대해 링크된 리소스를 가져오고 처리하는 단계는 link 요소 el을 사용하여 링크 옵션을 생성하고 해당 결과를 사용하여 preconnect하는 것입니다.

이 링크 유형에 대해 링크 헤더를 처리하는 단계는 링크 처리 옵션 options를 사용하여 preconnect하는 것입니다.

Preconnect 하기 위해 링크 처리 옵션 options를 주어진 경우:

  1. 만약 optionshref가 빈 문자열이면, 반환합니다.

  2. 상대적으로 optionshref를 기준으로 URL을 인코딩-파싱한 결과를 url로 둡니다.

    문서나 환경 대신 기본 URL을 전달하는 문제는 이슈 #9715에 의해 추적됩니다.

  3. 만약 url이 실패라면, 반환합니다.

  4. 만약 url스킴HTTP(S) 스킴이 아니라면, 반환합니다.

  5. options환경을 기준으로 네트워크 파티션 키를 결정한 결과를 partitionKey로 둡니다.

  6. useCredentials를 true로 둡니다.

  7. 만약 optionscrossorigin익명이고 options출처url출처와 동일하지 않다면, useCredentials를 false로 설정합니다.

  8. 사용자 에이전트는 partitionKey, url출처useCredentials를 기준으로 연결을 확보해야 합니다.

    이 연결은 직접적으로 사용되지 않으며, 이후 사용을 위해 연결 풀에 남아 있습니다.

    사용자 에이전트는 가능한 한 선제적으로 preconnect를 시작하고 전체 연결 핸드셰이크(DNS+TCP, HTTPS 출처의 경우 DNS+TCP+TLS)를 수행하려고 해야 합니다. 하지만 자원 제약이나 기타 이유로 인해 부분 핸드셰이크(DNS만, HTTPS 출처의 경우 DNS 또는 DNS+TCP)만 수행하거나 완전히 건너뛸 수 있습니다.

    출처별 최적의 연결 수는 협상된 프로토콜, 사용자의 현재 연결 상태, 사용 가능한 장치 자원, 전역 연결 제한 및 기타 상황에 따라 다릅니다. 따라서 몇 개의 연결을 열어야 할지는 사용자 에이전트에 의해 결정됩니다.

Link_types/prefetch

Firefox2+SafariNoChrome8+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet1.5+Opera Android?

prefetch 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 생성합니다. 이 키워드는 본문-허용입니다.

prefetch 키워드는 지정된 리소스나 동일 사이트 문서를 선제적으로 가져오고 캐시하는 것이 유익할 가능성이 높음을 나타내며, 사용자가 향후 탐색을 위해 이 리소스를 필요로 할 가능성이 높습니다.

prefetch 키워드로 제공되는 리소스에는 기본 유형이 없습니다.

이 링크 유형에 대해 링크된 리소스를 가져오고 처리할 적절한 시점은 다음과 같습니다:

prefetch 링크에 대해 link 요소 el을 사용하여 링크된 리소스를 가져오고 처리하는 알고리즘은 다음과 같습니다:

  1. 만약 elhref 속성 값이 빈 문자열이라면, 반환합니다.

  2. el에서 링크 옵션을 생성한 결과를 options로 둡니다.

  3. options을 기준으로 링크 요청을 생성한 결과를 request로 둡니다.

  4. 만약 request가 null이라면, 반환합니다.

  5. requestinitiator를 "prefetch"로 설정합니다.

  6. 다음 단계에 따라 응답 response와 null, 실패 또는 바이트 시퀀스 bytesOrNull을 지정하여 processPrefetchResponse를 설정합니다:

    1. 만약 response네트워크 오류라면, 이벤트를 발생시켜 el에서 error를 처리합니다.

    2. 그렇지 않으면, 이벤트를 발생시켜 el에서 load를 처리합니다.

  7. 사용자 에이전트는 request를 가져오고, processResponseConsumeBodyprocessPrefetchResponse로 설정합니다. 사용자 에이전트는 현재 문서에 필요한 다른 요청을 우선시하기 위해 request의 가져오기를 지연시킬 수 있습니다.

이 유형의 링크된 리소스에 대해 링크 헤더를 처리하는 단계는 아무 작업도 수행하지 않습니다.

Link_types/preload

한 개의 엔진에서만 지원됩니다.

Firefox85+Safari?Chrome🔰50+
Opera37+Edge🔰79+
Edge (레거시)아니오Internet Explorer?
Firefox Android?Safari iOS?Chrome Android?WebView Android50+Samsung Internet5.0+Opera Android?

preload 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 외부 리소스 링크를 생성합니다. 이 키워드는 body-ok입니다.

preload 키워드는 사용자 에이전트가 사전 fetch하고 캐시된 리소스를 잠재적인 목적지에 따라 캐시할 것을 나타냅니다. 이 목적지는 as 속성과 우선순위에 따라 지정됩니다. 사용자 에이전트는 현재 탐색에 이 리소스가 필요할 가능성이 높습니다.

사용자 에이전트는 리소스를 로드할 때 이미지의 사전 디코딩 또는 스타일시트 생성과 같은 추가 작업을 수행할 수 있습니다. 그러나 이러한 추가 작업은 관찰 가능한 영향을 미치지 않습니다.

preload 키워드에 의해 지정된 리소스에는 기본 유형이 없습니다.

사용자 에이전트는 이 링크 유형에 대해 로드 이벤트를 지연시켜서는 안 됩니다.

이 링크와 관련된 리소스를 fetch 및 처리할 적절한 시점은 다음과 같습니다:

Document에는 사전 로드된 리소스의 맵이 있습니다. 이 맵은 처음에는 비어 있는 순서가 있는 맵입니다.

사전 로드 키구조체입니다. 이 구조체에는 다음과 같은 항목이 포함됩니다:

URL
URL
목적지
문자열
모드
요청 모드, "same-origin", "cors" 또는 "no-cors" 중 하나
자격 증명 모드
자격 증명 모드

사전 로드 항목구조체입니다. 이 구조체에는 다음과 같은 항목이 포함됩니다:

무결성 메타데이터
문자열
응답
널 또는 응답
응답 사용 가능 시
널 또는 응답 또는 널을 허용하는 알고리즘

사전 로드된 리소스 소비Window window에 대해 수행하고, URL url, 문자열 destination, 문자열 mode, 문자열 credentialsMode, 문자열 integrityMetadataonResponseAvailable을 제공합니다. 이때 응답을 받아들이는 알고리즘이 사용됩니다:

  1. key사전 로드 키로 설정합니다. 이 키의 URLurl, 목적지destination, 모드mode, 자격 증명 모드credentialsMode입니다.

  2. preloadswindow관련된 Document사전 로드된 리소스의 맵으로 설정합니다.

  3. keypreloads존재하지 않으면 false를 반환합니다.

  4. entrypreloads[key]으로 설정합니다.

  5. consumerIntegrityMetadataintegrityMetadata구문 분석한 결과로 설정합니다.

  6. preloadIntegrityMetadataentry무결성 메타데이터구문 분석한 결과로 설정합니다.

  7. 다음 조건 중 하나도 적용되지 않으면:

    • consumerIntegrityMetadata메타데이터 없음인 경우;

    • consumerIntegrityMetadatapreloadIntegrityMetadata와 동일한 경우;

      이 비교는 알 수 없는 무결성 옵션을 무시합니다. 문제 #116을 참조하세요.

    false를 반환합니다.

    사전 로드와 소비자 간의 무결성 메타데이터 불일치는 둘 다 데이터와 일치하더라도 네트워크에서 추가 가져오기를 유발할 수 있습니다.

    네트워크 오류가 사전 로드 캐시에 추가되어 사전 로드 요청이 오류를 발생시키는 경우 나중에 네트워크에서 잘못된 응답을 다시 요청하지 않도록 하는 것이 중요합니다. 이는 보안에도 영향을 미칩니다. 개발자가 사전 로드 요청에는 하위 리소스 무결성 메타데이터를 지정하지만 다음 리소스 요청에는 지정하지 않는 경우를 생각해 보십시오. 사전 로드 요청이 하위 리소스 무결성 확인에 실패하고 삭제되면 리소스 요청은 무결성을 확인하지 않고 네트워크에서 잠재적으로 악의적인 응답을 가져와 사용합니다. [SRI]

  8. preloads[key]을 제거합니다.

  9. entry응답이 null이면, entry응답 사용 가능 시onResponseAvailable로 설정합니다.

  10. 그렇지 않으면, entry응답으로 onResponseAvailable을 호출합니다.

  11. true를 반환합니다.

이 섹션의 목적을 위해 문자열 type이 문자열 destination일치하는지 여부를 다음 알고리즘을 통해 확인할 수 있습니다:

  1. 만약 type이 빈 문자열이라면, true를 반환합니다.

  2. 만약 destination이 "fetch"라면, true를 반환합니다.

  3. mimeTypeRecord구문 분석한 결과로 설정합니다.

  4. mimeTypeRecord가 실패로 설정되면, false를 반환합니다.

  5. mimeTypeRecord가 사용자 에이전트에서 지원되지 않으면, false를 반환합니다.

  6. 다음 중 하나가 true인 경우:

    그러면 true를 반환합니다.

  7. false를 반환합니다.

사전 로드 키 생성요청 request에 대해 수행하고, 새 사전 로드 키를 반환합니다. 이 키의 URLrequestURL, 목적지request목적지, 모드request모드, 자격 증명 모드request자격 증명 모드입니다.

사전 로드 목적지 변환을 문자열 destination을 주어진 상태에서 수행합니다:

  1. destination이 "fetch", "font", "image", "script", "style", 또는 "track"가 아니면 null을 반환합니다.

  2. destination변환한 결과를 반환합니다.

사전 로드링크 처리 옵션 options응답을 허용하는 선택적 processResponse와 함께 수행합니다:

  1. options유형options유형과 일치하지 않으면, 리턴합니다.

  2. options목적지가 "image"이며, options소스 세트가 null이 아닌 경우, optionshref소스 세트에서 이미지 소스를 선택하는 것의 결과로 설정합니다.

  3. request링크 요청 생성의 결과로 설정합니다.

  4. request가 null이면 리턴합니다.

  5. unsafeEndTime을 0으로 설정합니다.

  6. entry를 새 사전 로드 항목으로 설정합니다. 이 항목의 무결성 메타데이터options무결성입니다.

  7. key사전 로드 키 생성의 결과로 설정합니다.

  8. 만약 optionsdocument가 null이라면, requestinitiator type을 "early hint"로 설정한다.

  9. controller를 null로 설정합니다.

  10. reportTiming타이밍을 보고하기로 설정합니다. 이때 controllerdocument관련된 전역 객체를 기준으로 합니다.

  11. controller요청을 fetch한 결과로 설정합니다. processResponseConsumeBody응답 response 및 null, 실패 또는 바이트 시퀀스 bodyBytes를 받아들이는 알고리즘으로 설정합니다:

    1. bodyBytes바이트 시퀀스인 경우, response바디바디로 설정합니다.

      processResponseConsumeBody를 사용하여 전체 바디를 추출했습니다. 이는 사전 로더가 네트워크에서 전체 바디를 로드하도록 보장하는 데 필요합니다. 사전 로드가 소비될지 여부는 이 시점에서 불확실합니다. 그런 다음, 우리는 이미 한 번 이를 수행했음에도 불구하고, 요청의 바디를 동일한 바이트를 포함하는 새 바디로 재설정하여 다른 명세가 실제 소비 시점에 이를 읽을 수 있도록 합니다.

    2. 그렇지 않으면, response네트워크 오류로 설정합니다.

    3. unsafeEndTimeunsafe shared current time으로 설정합니다.

    4. options문서가 null이 아니면, options문서를 주어진 상태로 reportTiming을 호출합니다.

    5. entry응답 사용 가능 시가 null이면, entry응답response로 설정합니다. 그렇지 않으면, entry응답 사용 가능 시를 주어진 상태로 response로 호출합니다.

    6. processResponse가 주어진 경우, response와 함께 processResponse를 호출합니다.

  12. commitDocument document에 주어진 상태로 다음 단계로 설정합니다:

    1. entry응답이 null이 아니면, document를 주어진 상태로 reportTiming을 호출합니다.

    2. document사전 로드된 리소스의 맵[key]을 entry로 설정합니다.

  13. options문서가 null이면, options문서 준비 시commit으로 설정합니다. 그렇지 않으면, options문서와 함께 commit을 호출합니다.

연결된 리소스를 fetch하고 처리하는 단계는, 주어진 link 요소 el에 대해 수행됩니다:

  1. 소스 세트 업데이트el에 대해 수행합니다.

  2. options요소에서 링크 옵션 생성의 결과로 설정합니다.

  3. destination변환의 결과로 설정한다. 여기서 변환 대상은 elas 속성 상태를 나타내는 키워드이다.

  4. destination이 null이면, 반환한다.

  5. optionsdestinationdestination으로 설정한다.

  6. 사전 로드options에 대해 수행합니다. 이때, 주어진 응답 response와 함께 다음 단계로 수행됩니다:

    1. response네트워크 오류인 경우, 이벤트 발생el에 대해 수행합니다. 그렇지 않으면, 이벤트 발생el에 대해 수행합니다.

      실제 브라우저의 동작은 이 사양과 다르며, 동작을 변경할 수 있는지 여부는 아직 조사되지 않았습니다. 문제 #1142를 참조합니다.

링크 헤더를 처리하는 단계는, 주어진 링크 처리 옵션 options에 대해 사전 로드를 수행하는 것입니다.

privacy-policy 키워드는 link, a, 그리고 area 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 만듭니다.

privacy-policy 키워드는 참조된 문서가 현재 문서에 적용되는 데이터 수집 및 사용 관행에 대한 정보를 포함하고 있음을 나타냅니다. 자세한 내용은 추가 링크 관계 유형에서 설명되어 있습니다. 참조된 문서는 독립적인 개인정보 보호 정책이거나, 보다 일반적인 문서의 특정 섹션일 수 있습니다. [RFC6903]

search 키워드는 link, a, area, 그리고 form 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 만듭니다.

search 키워드는 참조된 문서가 문서 및 관련 리소스를 검색하기 위한 인터페이스를 제공함을 나타냅니다.

OpenSearch 설명 문서는 link 요소와 search 링크 유형과 함께 사용하여 사용자 에이전트가 검색 인터페이스를 자동으로 검색할 수 있도록 할 수 있습니다. [OPENSEARCH]

stylesheet 키워드는 link 요소와 함께 사용할 수 있습니다. 이 키워드는 스타일링 처리 모델에 기여하는 외부 리소스 링크를 만듭니다. 이 키워드는 body-ok입니다.

지정된 리소스는 문서의 표현 방법을 설명하는 CSS 스타일 시트입니다.

대체 스타일 시트

하나의 엔진에서만 지원됨.

Firefox3+Safari?Chrome1–48
OperaYesEdgeNo
Edge (Legacy)?Internet Explorer8+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

만약 대체 키워드가 또한 link 요소에 지정된 경우, 해당 링크는 대체 스타일 시트입니다; 이 경우, title 속성이 link 요소에 비어 있지 않은 값으로 지정되어야 합니다.

stylesheet 키워드에 의해 제공된 리소스의 기본 유형은 text/css입니다.

이 유형의 link 요소는 해당 요소가 노드 문서의 파서에 의해 생성된 경우, 암묵적으로 잠재적으로 렌더링 차단될 수 있습니다.

키워드 비활성화가 있는 link 요소의 stylesheet 키워드가 설정되면, CSS 스타일 시트를 비활성화합니다.

이 유형의 링크를 가져오고 처리하는 적절한 시간은 다음과 같습니다:

특이 사항: 문서가 퀴크 모드로 설정되어 있으며, 외부 리소스의 동일 출처URL이 동일하고, 외부 리소스의 콘텐츠 유형 메타데이터가 지원되는 스타일 시트 유형이 아닌 경우, 사용자 에이전트는 대신 이를 text/css로 가정해야 합니다.

이 유형의 링크된 리소스에 대해 링크된 리소스 가져오기 설정 단계link 요소 el요청 request가 주어진 경우 다음과 같습니다:

  1. 만약 el비활성화 속성이 설정되어 있으면, false를 반환합니다.

  2. 만약 el스크립트 차단 스타일 시트에 기여하는 경우, el 노드 문서스크립트 차단 스타일 시트 세트에 추가합니다.

  3. 만약 el미디어 속성의 값이 환경과 일치하며, el잠재적으로 렌더링을 차단할 수 있는 경우, 렌더링을 차단합니다.

  4. 만약 el이 현재 렌더링 차단 중인 경우, request렌더링 차단을 true로 설정합니다.

  5. true를 반환합니다.

이슈 #968에서는 CSSOM CSS 스타일 시트 가져오기 알고리즘을 사용하여 기본 가져오기 및 처리 알고리즘을 대체할 계획을 설명합니다. 이와 동시에, 중요한 하위 리소스 요청link 요소가 현재 렌더링 차단 중인지 여부에 따라 렌더링 차단으로 설정되어야 합니다.

이 유형의 링크된 리소스를 처리하려면, link 요소 el, boolean success, 응답 response, 그리고 바이트 시퀀스 bodyBytes가 주어집니다.

  1. 리소스의 콘텐츠 유형 메타데이터text/css가 아닌 경우, success를 false로 설정합니다.

  2. 만약 el이 더 이상 스타일링 처리 모델에 기여하는 외부 리소스 링크를 생성하지 않거나, 해당 리소스를 가져온 이후에 해당 리소스를 다시 가져오는 것이 적절해진 경우, 다음 단계를 수행합니다:

    1. 제거 elel노드 문서스크립트 차단 스타일 시트 세트에서 제거합니다.

    2. 반환합니다.

  3. 만약 el연관된 CSS 스타일 시트를 가지고 있다면, CSS 스타일 시트를 제거합니다.

  4. 만약 success가 true인 경우, 다음 단계를 수행합니다:

    1. CSS 스타일 시트를 생성합니다, 다음 속성으로:

      유형

      text/css

      위치

      responseURL 목록[0]

      우리는 w3c/csswg-drafts 이슈 #9316이 해결될 것이라는 가정 하에 URL을 제공합니다.

      소유자 노드

      el

      미디어

      el미디어 속성.

      이것은 현재 속성의 값이 아니라, (이 시점에 있을 수도 있는) 속성에 대한 참조입니다. CSSOM은 속성이 동적으로 설정, 변경 또는 제거될 때 발생하는 일을 정의합니다.

      제목

      el문서 트리 안에 있는 경우에는 eltitle 속성. 그렇지 않으면 빈 문자열.

      이것도 역시 속성의 현재 값이 아닌 속성에 대한 참조입니다.

      대체 플래그

      설정된 경우 링크는 대체 스타일 시트입니다el명시적으로 활성화됨이 false인 경우; 그렇지 않으면 설정되지 않음.

      원본 클린 플래그

      리소스가 CORS-동일 출처인 경우 설정됨; 그렇지 않으면 설정되지 않음.

      부모 CSS 스타일 시트
      소유 CSS 규칙

      null

      비활성화 플래그

      기본값으로 설정됨.

      CSS 규칙

      초기화되지 않음.

      이것은 옳지 않은 것 같습니다. 아마도 bodyBytes를 사용해야 할 것입니다? 이슈 #2997에서 추적됩니다.

      CSS 환경 인코딩은 다음 단계를 수행하여 실행된 결과입니다: [CSSSYNTAX]

      1. 만약 elcharset 속성이 있다면, 해당 속성 값에서 인코딩을 가져옵니다. 만약 성공하면, 해당 결과 인코딩을 반환합니다. [ENCODING]

      2. 그렇지 않으면 문서의 문자 인코딩을 반환합니다. [DOM]

    2. 이벤트를 발생합니다. 이름은 load이며 el에서 발생합니다.

  5. 그렇지 않으면, 이벤트를 발생시킵니다. 이름은 error이며 el에서 발생합니다.

  6. 만약 el스크립트 차단 스타일 시트에 기여하는 경우:

    1. 단언: el노드 문서스크립트 차단 스타일 시트 세트el포함되어 있습니다.

    2. 제거합니다. elel노드 문서스크립트 차단 스타일 시트 세트에서.

  7. 렌더링 차단 해제합니다. el에서.

이 유형의 링크된 리소스에 대한 링크 헤더 처리 단계는 아무 것도 하지 않는 것입니다.

tag 키워드는 aarea 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

tag 키워드는 참조된 문서가 표현하는 tag가 현재 문서에 적용됨을 나타냅니다.

태그가 현재 문서에 적용됨을 나타내기 때문에, 여러 페이지에 걸쳐 인기 태그를 나열하는 tag cloud의 마크업에서는 이 키워드를 사용하는 것이 부적절할 수 있습니다.

이 문서는 보석에 관한 것이므로 "https://en.wikipedia.org/wiki/Gemstone"와 같은 태그로 태그되어 있으며, 이는 이 문서가 미국의 도시들, 루비 패키지 형식, 또는 스위스 기관차 클래스가 아닌 "보석" 종류의 보석에 적용됨을 명확하게 분류합니다.

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>My Precious</title>
 </head>
 <body>
  <header><h1>My precious</h1> <p>Summer 2012</p></header>
  <p>Recently I managed to dispose of a red gem that had been
  bothering me. I now have a much nicer blue sapphire.</p>
  <p>The red gem had been found in a bauxite stone while I was digging
  out the office level, but nobody was willing to haul it away. The
  same red gem stayed there for literally years.</p>
  <footer>
   Tags: <a rel=tag href="https://en.wikipedia.org/wiki/Gemstone">Gemstone</a>
  </footer>
 </body>
</html>

문서에는 두 개의 기사(articles)가 있습니다. 그러나 "tag" 링크는 페이지 전체에 적용됩니다 (기사 article 요소 안에 위치하더라도 동일하게 적용됩니다).

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>Gem 4/4</title>
 </head>
 <body>
  <article>
   <h1>801: Steinbock</h1>
   <p>The number 801 Gem 4/4 electro-diesel has an ibex and was rebuilt in 2002.</p>
  </article>
  <article>
   <h1>802: Murmeltier</h1>
   <figure>
    <img src="https://upload.wikimedia.org/wikipedia/commons/b/b0/Trains_de_la_Bernina_en_hiver_2.jpg" alt="The 802 was red with pantographs and tall vents on the side.">
    <figcaption>The 802 in the 1980s, above Lago Bianco.</figcaption>
   </figure>
   <p>The number 802 Gem 4/4 electro-diesel has a marmot and was rebuilt in 2003.</p>
  </article>
  </p class="topic"><a rel=tag href="https://en.wikipedia.org/wiki/Rhaetian_Railway_Gem_4/4">Gem 4/4</a></p>
 </body>
</html>

terms-of-service 키워드는 link, a, 및 area 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

terms-of-service 키워드는 참조된 문서에 현재 문서의 제공자와 해당 문서를 사용하려는 사용자 간의 계약에 대한 정보가 포함되어 있음을 나타냅니다. 자세한 내용은 추가 링크 관계 유형에서 설명되어 있습니다. [RFC6903]

일부 문서는 문서 시퀀스의 일부를 형성합니다.

문서 시퀀스는 각 문서가 이전 형제 문서다음 형제 문서를 가질 수 있는 경우입니다. 이전 형제 문서가 없는 문서는 시퀀스의 시작이며, 다음 형제 문서가 없는 문서는 시퀀스의 끝입니다.

문서는 여러 시퀀스의 일부일 수 있습니다.

next 키워드는 link, a, area, 및 form 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

next 키워드는 문서가 시퀀스의 일부이며, 링크가 시퀀스에서 다음 논리적 문서로 연결된다는 것을 나타냅니다.

next 키워드가 link 요소와 함께 사용될 때, 사용자 에이전트는 이러한 링크를 dns-prefetch, preconnect, 또는 prefetch 키워드를 사용하는 것처럼 처리해야 합니다. 사용자 에이전트가 사용할 키워드는 구현에 따라 다릅니다. 예를 들어, 사용자 에이전트는 데이터, 배터리 전력, 또는 처리 능력을 절약하려고 할 때 비용이 적게 드는 preconnect 처리 모델을 사용하려고 하거나, 비슷한 상황에서 과거 사용자 행동에 대한 휴리스틱 분석에 따라 키워드를 선택할 수 있습니다.

prev 키워드는 link, a, area, 및 form 요소와 함께 사용할 수 있습니다. 이 키워드는 하이퍼링크를 생성합니다.

prev 키워드는 문서가 시퀀스의 일부이며, 링크가 시퀀스에서 이전 논리적 문서로 연결된다는 것을 나타냅니다.

동의어: 역사적인 이유로, 사용자 에이전트는 "previous" 키워드를 prev 키워드와 동일하게 처리해야 합니다.

사전 정의된 링크 유형 세트의 확장기존 rel 값에 대한 마이크로포맷 페이지에 등록될 수 있습니다. [MFREL]

누구나 언제든지 기존 rel 값에 대한 마이크로포맷 페이지를 편집하여 유형을 추가할 수 있습니다. 확장 유형은 다음 정보를 포함하여 지정해야 합니다:

키워드

정의된 실제 값. 값은 다른 정의된 값과 혼동되지 않도록 해야 합니다(예: 대소문자만 다른 경우).

값에 U+003A COLON 문자(:)가 포함된 경우, 절대 URL이어야 합니다. 절대 URL을 참조합니다.

영향 ... link에 미치는 영향

다음 중 하나:

허용되지 않음
키워드는 link 요소에 지정되어서는 안 됩니다.
하이퍼링크
키워드는 link 요소에 지정될 수 있으며, 하이퍼링크를 생성합니다.
외부 리소스
키워드는 link 요소에 지정될 수 있으며, 외부 리소스 링크를 생성합니다.
영향 ... aarea에 미치는 영향

다음 중 하나:

허용되지 않음
키워드는 aarea 요소에 지정되어서는 안 됩니다.
하이퍼링크
키워드는 aarea 요소에 지정될 수 있으며, 하이퍼링크를 생성합니다.
외부 리소스
키워드는 aarea 요소에 지정될 수 있으며, 외부 리소스 링크를 생성합니다.
하이퍼링크 주석
키워드는 aarea 요소에 지정될 수 있으며, 해당 요소에 의해 생성된 다른 하이퍼링크주석으로 추가합니다.
영향 ... form에 미치는 영향

다음 중 하나:

허용되지 않음
키워드는 form 요소에 지정되어서는 안 됩니다.
하이퍼링크
키워드는 form 요소에 지정될 수 있으며, 하이퍼링크를 생성합니다.
외부 리소스
키워드는 form 요소에 지정될 수 있으며, 외부 리소스 링크를 생성합니다.
하이퍼링크 주석
키워드는 form 요소에 지정될 수 있으며, 해당 요소에 의해 생성된 다른 하이퍼링크주석으로 추가합니다.
간단한 설명

키워드의 의미를 비규범적으로 짧게 설명합니다.

명세서

키워드의 의미와 요구사항에 대한 자세한 설명을 링크합니다. 이는 위키의 다른 페이지일 수 있으며, 외부 페이지에 대한 링크일 수 있습니다.

동의어

처리 요구사항이 완전히 동일한 다른 키워드 값의 목록입니다. 작성자는 동의어로 정의된 값을 사용해서는 안 되며, 이는 레거시 콘텐츠 지원을 위해서만 사용됩니다. 실사용되지 않는 동의어는 누구나 제거할 수 있습니다. 레거시 콘텐츠와의 호환성을 위해 동의어로 처리해야 하는 값만 등록되어야 합니다.

상태

다음 중 하나:

제안됨
키워드는 광범위한 동료 검토 및 승인을 받지 않았습니다. 누군가가 제안했으며, 곧 사용하거나 현재 사용 중일 것입니다.
비준됨
키워드는 광범위한 동료 검토 및 승인을 받았습니다. 키워드를 사용하는 페이지를 처리하는 방법에 대한 명확한 정의가 포함된 명세서가 있습니다. 잘못된 방식으로 사용하는 경우도 포함됩니다.
중단됨
키워드는 광범위한 동료 검토를 받았으며, 부족하다고 판단되었습니다. 기존 페이지는 이 키워드를 사용하고 있지만, 새로운 페이지는 사용을 피해야 합니다. "간단한 설명" 및 "명세서" 항목에는 작성자가 대신 사용해야 할 내용을 설명합니다.

키워드가 기존 값과 중복되는 것으로 판단되면 제거하고 기존 값의 동의어로 나열해야 합니다.

키워드가 "제안됨" 상태로 한 달 이상 등록되었지만 사용되지 않거나 명세되지 않은 경우, 레지스트리에서 제거될 수 있습니다.

키워드가 "제안됨" 상태로 추가되었으며 기존 값과 중복되는 것으로 판단되면 제거하고 기존 값의 동의어로 나열해야 합니다. 키워드가 "제안됨" 상태로 추가되었으며 해롭다고 판단되면 "중단됨" 상태로 변경해야 합니다.

누구나 언제든지 상태를 변경할 수 있지만, 위에서 설명한 정의에 따라야 합니다.

적합성 검사 도구는 기존 rel 값에 대한 마이크로포맷 페이지에서 제공된 정보를 사용하여 값이 허용되는지 여부를 판단해야 합니다. 이 명세서에서 정의된 값 또는 "제안됨" 또는 "비준됨"으로 표시된 값은 "Effect on..." 필드에서 설명한 대로 적용할 수 있는 요소에서 사용될 때 수락되어야 하며, "중단됨"으로 표시되거나 이 명세서 또는 위의 페이지에 나열되지 않은 값은 유효하지 않은 것으로 거부되어야 합니다. 적합성 검사 도구는 성능 향상 또는 신뢰할 수 없는 네트워크 연결을 피하기 위해 이 정보를 캐시할 수 있습니다.

작성자가 이 명세서 또는 위키 페이지에서 정의되지 않은 새 유형을 사용하는 경우, 적합성 검사 도구는 위에서 설명한 세부 사항을 포함하여 값을 "제안됨" 상태로 위키에 추가하도록 제안해야 합니다.

"제안됨" 또는 "비준됨" 상태로 "기존 rel 값에 대한 마이크로포맷 페이지"에서 확장으로 정의된 유형은 "Effect on..." 필드에 따라 rel 속성을 사용하여 link, a, 및 area 요소와 함께 사용할 수 있습니다. [MFREL]

4.7 수정

insdel 요소는 문서에 대한 수정을 나타냅니다.

4.7.1 ins 요소

Element/ins

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
프레이징 콘텐츠.
감지 가능한 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
프레이징 콘텐츠가 예상되는 곳.
콘텐츠 모델:
투명.
text/html에서 태그 생략:
둘 다 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
cite — 인용문의 출처 또는 수정에 대한 추가 정보로 연결되는 링크
datetime — 변경의 날짜 및 (선택적) 시간
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLModElement를 사용합니다.

ins 요소는 문서에 대한 추가 사항을 나타냅니다.

다음은 단일 단락의 추가를 나타냅니다:

<aside>
<ins>
 <p> I like fruit. </p>
</ins>
</aside>

다음과 같이 aside 요소 안에 있는 모든 것이 프레이징 콘텐츠로 간주되므로 하나의 단락만 포함됩니다:

<aside>
<ins>
Apples are <em>tasty</em>.
</ins>
<ins>
So are pears.
</ins>
</aside>

ins 요소는 암시된 단락 경계를 넘어서는 안 됩니다.

다음 예는 두 개의 단락 추가를 나타내며, 두 번째 단락은 두 부분으로 삽입되었습니다. 이 예에서 첫 번째 ins 요소는 단락 경계를 넘기 때문에 좋지 않은 형식으로 간주됩니다.

<aside>
<!-- 이렇게 하지 마세요 -->
<ins datetime="2005-03-16 00:00Z">
 <p> I like fruit. </p>
 Apples are <em>tasty</em>.
</ins>
<ins datetime="2007-12-19 00:00Z">
 So are pears.
</ins>
</aside>

여기에서 더 나은 마크업 방식입니다. 더 많은 요소를 사용하지만, 요소가 암시된 단락 경계를 넘지 않습니다.

<aside>
<ins datetime="2005-03-16 00:00Z">
 <p> I like fruit. </p>
</ins>
<ins datetime="2005-03-16 00:00Z">
 Apples are <em>tasty</em>.
</ins>
<ins datetime="2007-12-19 00:00Z">
 So are pears.
</ins>
</aside>

4.7.2 del 요소

Element/del

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
프레이징 콘텐츠.
감지 가능한 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
프레이징 콘텐츠가 예상되는 곳.
콘텐츠 모델:
투명.
text/html에서 태그 생략:
둘 다 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
cite — 인용문의 출처 또는 수정에 대한 추가 정보로 연결되는 링크
datetime — 변경의 날짜 및 (선택적) 시간
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLModElement를 사용합니다.

del 요소는 문서에서 제거된 부분을 나타냅니다.

del 요소는 암시된 단락 경계를 넘어서는 안 됩니다.

다음은 완료된 항목들이 완료 시간과 함께 취소선으로 표시된 '할 일' 목록을 보여줍니다.

<h1>할 일</h1>
<ul>
<li>식기세척기 비우기</li>
<li><del datetime="2009-10-11T01:25-07:00">Walter Lewin의 강의 시청</del></li>
<li><del datetime="2009-10-10T23:38-07:00">더 많은 트랙 다운로드</del></li>
<li>프린터 구매</li>
</ul>

4.7.3 insdel 요소에 공통된 속성

cite 속성은 변경 사항을 설명하는 문서의 URL을 지정하는 데 사용할 수 있습니다. 예를 들어 회의록과 같은 긴 문서일 경우, 저자들은 변경 사항을 논의한 문서의 특정 부분을 가리키는 조각(fragment)을 포함하는 것이 권장됩니다.

cite 속성이 존재하는 경우, 이는 변경 사항을 설명하는 유효한 URL(주변에 공백이 있을 수 있음)이어야 합니다. 해당 속성의 값을 얻으려면, 속성의 값은 요소의 노드 문서에 상대적으로 구문 분석되어야 합니다. 사용자 에이전트는 사용자가 이러한 인용 링크를 따를 수 있도록 허용할 수 있지만, 주로 개인적인 용도(예: 사이트 수정 사항에 대한 통계를 수집하는 서버 측 스크립트 등)를 위한 것이지, 독자를 위한 것이 아닙니다.

datetime 속성은 변경의 날짜와 시간을 지정하는 데 사용할 수 있습니다.

존재하는 경우, datetime 속성의 값은 선택적으로 시간이 포함된 유효한 날짜 문자열이어야 합니다.

사용자 에이전트는 datetime 속성을 날짜 또는 시간 문자열을 구문 분석 알고리즘에 따라 구문 분석해야 합니다. 만약 이 알고리즘이 날짜 또는 전역 날짜와 시간을 반환하지 않으면, 해당 수정에는 관련된 타임스탬프가 없는 것으로 간주됩니다(값이 비표준적임; 유효한 날짜 문자열이 아님). 그렇지 않으면, 수정이 주어진 날짜 또는 전역 날짜와 시간에 이루어진 것으로 표시됩니다. 만약 주어진 값이 전역 날짜와 시간이라면, 사용자 에이전트는 주어진 datetime을 표시할 시간대를 결정하기 위해 관련된 시간대 오프셋 정보를 사용해야 합니다.

이 값은 사용자에게 표시될 수 있지만, 주로 개인적인 용도를 위한 것입니다.

insdel 요소는 HTMLModElement 인터페이스를 구현해야 합니다:

HTMLModElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer6+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
[Exposed=Window]
interface HTMLModElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString cite;
  [CEReactions, Reflect] attribute DOMString dateTime;
};

4.7.4 수정과 단락

이 섹션은 비규범적입니다.

insdel 요소는 단락에 영향을 미치지 않으므로, p 요소 없이 암시된 단락이 있는 경우, ins 또는 del 요소가 전체 단락 또는 다른 프레이징 콘텐츠 요소와 다른 단락의 일부를 포함할 수 있습니다. 예를 들어:

<section>
<ins>
 <p>
  This is a paragraph that was inserted.
 </p>
 This is another paragraph whose first sentence was inserted
 at the same time as the paragraph above.
</ins>
This is a second sentence, which was there all along.
</section>

일부 단락만 p 요소로 감싸면, 동일한 ins 또는 del 요소로 첫 번째 단락의 끝, 전체 두 번째 단락, 세 번째 단락의 시작을 포함할 수도 있습니다(그러나 이는 매우 혼란스러우며, 좋은 관행으로 간주되지 않습니다):

<section>
This is the first paragraph. <ins>This sentence was inserted.
<p>This second paragraph was inserted.</p>
This sentence was inserted too.</ins> This is the
third paragraph in this example.
<!-- (이렇게 하지 마세요) -->
</section>

그러나 암시된 단락이 정의되는 방식 때문에, 동일한 ins 또는 del 요소를 사용하여 한 단락의 끝과 다음 단락의 시작을 동시에 표시하는 것은 불가능합니다. 대신에, p 요소 하나(또는 두 개)와 ins 또는 del 요소 두 개를 사용해야 합니다. 예를 들어:

<section>
<p>This is the first paragraph. <del>This sentence was deleted.</del></p>
<p><del>This sentence was deleted too.</del> That
sentence needed a separate &lt;del&gt; element.</p>
</section>

위에서 설명한 혼란스러움 때문에, 저자들은 모든 단락을 암시된 단락 경계를 넘지 않는 p 요소로 항상 마크업할 것을 강력히 권장합니다.

4.7.5 수정과 목록

이 섹션은 비규범적입니다.

olul 요소의 콘텐츠 모델은 insdel 요소를 자식 요소로 허용하지 않습니다. 목록은 삭제된 것으로 표시될 항목을 포함하여 모든 항목을 항상 나타냅니다.

항목이 삽입되었거나 삭제되었음을 나타내기 위해 ins 또는 del 요소를 li 요소의 내용 주위에 감쌀 수 있습니다. 항목이 다른 항목으로 교체되었음을 나타내기 위해 단일 li 요소에 하나 이상의 del 요소와 하나 이상의 ins 요소를 사용할 수 있습니다.

다음 예에서, 처음에는 비어 있던 목록에 시간이 지남에 따라 항목이 추가되고 제거되었습니다. 강조된 예제의 부분들은 목록의 '현재' 상태를 보여줍니다. 그러나 목록 항목 번호는 수정 사항을 고려하지 않습니다.

<h1>출하 정지 버그</h1>
<ol>
 <li><ins datetime="2008-02-12T15:20Z">버그 225: 눈이 올 때 우비 감지기가 작동하지 않음</ins></li>
 <li><del datetime="2008-03-01T20:22Z"><ins datetime="2008-02-14T12:02Z">버그 228: 4월에 물 버퍼 오버플로우 발생</ins></del></li>
 <li><ins datetime="2008-02-16T13:50Z">버그 230: 온수기가 재생 가능한 연료를 사용하지 않음</ins></li>
 <li><del datetime="2008-02-20T21:15Z"><ins datetime="2008-02-16T14:25Z">버그 232: 시동 후 이산화탄소 배출 감지됨</ins></del></li>
</ol>

다음 예에서, 처음에는 과일만 있던 목록이 색상만 있는 목록으로 교체되었습니다.

<h1>List of <del>fruits</del><ins>colors</ins></h1>
<ul>
 <li><del>Lime</del><ins>Green</ins></li>
 <li><del>Apple</del></li>
 <li>Orange</li>
 <li><del>Pear</del></li>
 <li><ins>Teal</ins></li>
 <li><del>Lemon</del><ins>Yellow</ins></li>
 <li>Olive</li>
 <li><ins>Purple</ins></li>
</ul>

4.7.6 수정과 표

이 섹션은 비규범적입니다.

표 모델의 일부를 구성하는 요소들은 복잡한 콘텐츠 모델 요구 사항을 가지고 있어 insdel 요소를 허용하지 않으므로 표에 대한 수정을 나타내는 것이 어려울 수 있습니다.

전체 행이나 열이 추가되거나 제거되었음을 나타내기 위해 해당 행이나 열의 각 셀의 내용을 ins 또는 del 요소로 감쌀 수 있습니다.

여기에서 표의 행이 추가되었습니다:

<table>
 <thead>
  <tr> <th> 게임 이름           <th> 게임 배급사   <th> 평가
 </thead>
 <tbody>
  <tr> <td> 디아블로 2            <td> 블리자드         <td> 8/10
  </tr> <td> 포탈              <td> 밸브            <td> 10/10
  <tr> <td> <ins>포탈 2</ins> <td> <ins>밸브</ins> <td> <ins>10/10</ins>
</tbody> 
</table>

여기에서 열이 제거되었습니다 (제거된 시간과 이유를 설명하는 페이지에 대한 링크도 포함되어 있습니다):

<table> 
 <thead> 
  <tr> <th> 게임 이름           <th> 게임 배급사   <th> <del cite="/edits/r192" datetime="2011-05-02 14:23Z">평가</del> 
 </thead> 
 <tbody> 
  <tr> <td> 디아블로 2            <td> 블리자드         <td> <del cite="/edits/r192" datetime="2011-05-02 14:23Z">8/10</del> 
  </tr> <td> 포탈              <td> 밸브            <td> <del cite="/edits/r192" datetime="2011-05-02 14:23Z">10/10</del> 
  </tr> <td> 포탈 2            <td> 밸브            <td> <del cite="/edits/r192" datetime="2011-05-02 14:23Z">10/10</del> 
</tbody> 
</table>

일반적으로 말해서, 더 복잡한 수정을 나타내는 좋은 방법은 없습니다 (예: 셀이 제거되고 모든 후속 셀이 위로 또는 왼쪽으로 이동하는 경우).

4.8 임베디드 콘텐츠

4.8.1 picture 요소

Element/picture

모든 최신 엔진에서 지원됩니다.

Firefox38+Safari9.1+Chrome38+
Opera?Edge79+
Edge (Legacy)13+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLPictureElement

모든 최신 엔진에서 지원됩니다.

Firefox38+Safari9.1+Chrome38+
Opera?Edge79+
Edge (Legacy)13+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
플로우 콘텐츠.
프레이징 콘텐츠.
임베디드 콘텐츠.
감지 가능한 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
임베디드 콘텐츠가 예상되는 곳.
콘텐츠 모델:
0개 이상의 source 요소, 그 뒤에 1개의 img 요소가 옵니다. 선택적으로 스크립트 지원 요소와 혼합될 수 있습니다.
text/html에서 태그 생략:
둘 다 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLPictureElement : HTMLElement {
  [HTMLConstructor] constructor();
};

picture 요소는 그 안에 포함된 img 요소에 여러 소스를 제공하는 컨테이너로, 화면의 픽셀 밀도, 뷰포트 크기, 이미지 형식, 기타 요인에 따라 어떤 이미지 리소스를 사용할지 사용자 에이전트에 힌트를 주거나 선언적으로 제어할 수 있도록 해줍니다. 이 요소는 그 자식을 나타냅니다.

picture 요소는 비슷해 보이는 videoaudio 요소와는 다소 다릅니다. 이들 모두 source 요소를 포함하지만, source 요소의 src 속성은 picture 요소 내에 중첩될 때 의미가 없으며, 리소스 선택 알고리즘도 다릅니다. 또한, picture 요소 자체는 아무것도 표시하지 않으며, 단지 포함된 img 요소가 여러 URL 중에서 선택할 수 있는 컨텍스트를 제공합니다.

4.8.2 source 요소

Element/source

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLSourceElement

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 컨텍스트:
picture 요소의 자식으로, img 요소 앞에 사용됩니다.
미디어 요소의 자식으로, 플로우 콘텐츠 또는 track 요소 앞에 사용됩니다.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그가 없습니다.
콘텐츠 속성:
전역 속성
type — 임베디드 리소스의 유형
media — 적용 가능한 미디어
src (audio 또는 video에서) — 리소스의 주소
srcset (picture에서) — 고해상도 디스플레이, 작은 모니터 등 다양한 상황에서 사용할 이미지
sizes (picture에서) — 다양한 페이지 레이아웃에 맞는 이미지 크기
width (picture에서) — 가로 크기
height (picture에서) — 세로 크기
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLSourceElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString src;
  [CEReactions, Reflect] attribute DOMString type;
  [CEReactions, Reflect] attribute USVString srcset;
  [CEReactions, Reflect] attribute DOMString sizes;
  [CEReactions, Reflect] attribute DOMString media;
  [CEReactions, Reflect] attribute unsigned long width;
  [CEReactions, Reflect] attribute unsigned long height;
};

source 요소는 img 요소를 위해 여러 개의 대체 소스 세트를 지정하거나 미디어 요소를 위해 여러 개의 대체 미디어 리소스를 지정할 수 있도록 합니다. 이 요소는 자체적으로는 어떠한 것도 나타내지 않습니다.

type 속성은 선택적으로 포함될 수 있습니다. 포함된 경우 값은 유효한 MIME 유형 문자열이어야 합니다.

media 속성도 포함될 수 있습니다. 포함된 경우 값은 유효한 미디어 쿼리 목록을 포함해야 합니다. 사용자는 이 값이 환경과 일치하지 않으면 다음 source 요소로 건너뜁니다.

media 속성은 리소스 선택 알고리즘 동안 한 번만 평가됩니다. 미디어 요소에 대해서는 다르게 평가되지만, picture 요소를 사용하는 경우, 사용자 에이전트는 환경의 변화에 따라 반응합니다.

나머지 요구 사항은 부모 요소가 picture 요소인지, 미디어 요소인지에 따라 달라집니다:

source 요소의 부모가 picture 요소인 경우

srcset 속성이 반드시 포함되어야 하며, 이는 srcset 속성입니다.

srcset 속성은 이미지 소스소스 세트에 기여하며, source 요소가 선택되면 해당 속성이 기여합니다.

만약 srcset 속성이 이미지 후보 문자열을 포함하고 있으며, 이 문자열이 너비 설명자를 사용하는 경우, sizes 속성이 포함될 수 있습니다. 또한, img 요소가 자동 크기 조정을 허용하지 않으면, sizes 속성이 반드시 포함되어야 합니다. sizes 속성은 sizes 속성으로, source 요소가 선택되면 소스 크기에 기여합니다.

만약 img 요소가 자동 크기 조정을 허용하는 경우, 이전 형제 source 요소에서는 sizes 속성을 생략할 수 있습니다. 이 경우, 이는 auto를 지정하는 것과 동일합니다.

source 요소는 크기 속성을 지원합니다. img 요소는 widthheight 속성을 source 요소에서 사용할 수 있으며, 해당 요소를 사용하여 렌더링 크기와 종횡비를 결정합니다. 이는 렌더링 섹션에 정의된 대로입니다.

type 속성은 이미지 유형을 제공하며, 사용자 에이전트가 이 유형을 지원하지 않는 경우 다음 source 요소로 건너뛸 수 있습니다.

만약 type 속성이 지정되지 않은 경우, 사용자 에이전트는 해당 이미지를 가져온 후에 이미지 형식을 지원하지 않는 것을 발견하더라도 다른 source 요소를 선택하지 않습니다.

만약 source 요소가 다음 형제 source 요소 또는 img 요소를 가지며, srcset 속성이 지정된 경우, 다음 중 하나 이상을 포함해야 합니다:

src 속성은 포함되지 않아야 합니다.

source 요소의 부모가 미디어 요소인 경우

src 속성은 URL을 지정하며, 이 값은 유효한 비어 있지 않은 URL이어야 합니다. 이 속성은 반드시 포함되어야 합니다.

type 속성은 미디어 리소스의 유형을 제공하며, 사용자 에이전트가 이 미디어 리소스를 가져오기 전에 재생할 수 있는지 확인하는 데 도움이 됩니다. 특정 MIME 유형이 정의한 코덱 매개변수가 리소스의 인코딩 방식을 정확히 지정해야 할 수도 있습니다. [RFC6381]

source 요소의 src 또는 type 속성을 요소가 이미 video 또는 audio 요소에 삽입된 상태에서 동적으로 수정해도 효과가 없습니다. 재생 중인 내용을 변경하려면 해당 미디어 요소src 속성을 직접 사용합니다. 이때 사용할 수 있는 리소스를 선택하기 위해 canPlayType() 메서드를 사용할 수 있습니다. 일반적으로 source 요소를 문서가 구문 분석된 후 수동으로 조작하는 것은 불필요하게 복잡한 접근 방식입니다.

다음 목록은 codecs= MIME 매개변수를 type 속성에서 사용하는 방법의 예를 보여줍니다.

H.264 제한된 기본 프로필 비디오(기본 및 확장 비디오 호환) 레벨 3 및 MP4 컨테이너의 저복잡도 AAC 오디오
<source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
H.264 확장 프로필 비디오(기본 프로필 호환) 레벨 3 및 MP4 컨테이너의 저복잡도 AAC 오디오
<source src='video.mp4' type='video/mp4; codecs="avc1.58A01E, mp4a.40.2"'>
H.264 메인 프로필 비디오 레벨 3 및 MP4 컨테이너의 저복잡도 AAC 오디오
<source src='video.mp4' type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'>
H.264 '하이' 프로필 비디오(메인, 기본 또는 확장 프로필과 호환되지 않음) 레벨 3 및 MP4 컨테이너의 저복잡도 AAC 오디오
<source src='video.mp4' type='video/mp4; codecs="avc1.64001E, mp4a.40.2"'>
MPEG-4 비주얼 심플 프로필 레벨 0 비디오 및 MP4 컨테이너의 저복잡도 AAC 오디오
<source src='video.mp4' type='video/mp4; codecs="mp4v.20.8, mp4a.40.2"'>
MPEG-4 고급 심플 프로필 레벨 0 비디오 및 MP4 컨테이너의 저복잡도 AAC 오디오
<source src='video.mp4' type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"'>
MPEG-4 비주얼 심플 프로필 레벨 0 비디오 및 3GPP 컨테이너의 AMR 오디오
<source src='video.3gp' type='video/3gpp; codecs="mp4v.20.8, samr"'>
Theora 비디오 및 Ogg 컨테이너의 Vorbis 오디오
<source src='video.ogv' type='video/ogg; codecs="theora, vorbis"'>
Theora 비디오 및 Ogg 컨테이너의 Speex 오디오
<source src='video.ogv' type='video/ogg; codecs="theora, speex"'>
Ogg 컨테이너의 Vorbis 오디오
<source src='audio.ogg' type='audio/ogg; codecs=vorbis"'>
Ogg 컨테이너의 Speex 오디오
<source src='audio.spx' type='audio/ogg; codecs=speex"'>
Ogg 컨테이너의 FLAC 오디오
<source src='audio.oga' type='audio/ogg; codecs=flac"'>
Dirac 비디오 및 Ogg 컨테이너의 Vorbis 오디오
<source src='video.ogv' type='video/ogg; codecs="dirac, vorbis"'>

srcsetsizes 속성은 포함되지 않아야 합니다.

insertedNode가 주어진 source HTML 요소 삽입 단계는 다음과 같습니다:

  1. parentinsertedNode부모로 설정합니다.

  2. 만약 parentsrc 속성이 없고 networkState의 값이 NETWORK_EMPTY미디어 요소이면, 해당 미디어 요소리소스 선택 알고리즘을 호출합니다.

  3. 만약 parentpicture 요소이면, parent자식 각각의 child에 대해 반복하여, 만약 childimg 요소이면, 이를 child에 대한 관련 변경 사항으로 계산합니다.

movedNodeoldParent가 주어진 source HTML 요소 이동 단계는 다음과 같습니다:

  1. 만약 oldParentpicture 요소이면, oldParent자식 각각의 child에 대해 반복하여, 만약 childimg 요소이면, 이를 child에 대한 관련 변경 사항으로 계산합니다.

removedNodeoldParent가 주어진 source HTML 요소 제거 단계는 다음과 같습니다:

  1. 만약 oldParentpicture 요소이면, oldParent자식 각각의 child에 대해 반복하여, 만약 childimg 요소이면, 이를 child에 대한 관련 변경 사항으로 계산합니다.

저자가 제공한 미디어 리소스를 모든 사용자 에이전트가 렌더링할 수 있는지 확신하지 못할 경우, 저자는 마지막 source 요소에서 error 이벤트를 수신하고 대체 동작을 트리거할 수 있습니다:

<script>
 function fallback(video) {
   // <video> 요소를 그 내용으로 대체
   while (video.hasChildNodes()) {
     if (video.firstChild instanceof HTMLSourceElement)
       video.removeChild(video.firstChild);
     else
       video.parentNode.insertBefore(video.firstChild, video);
   }
   video.parentNode.removeChild(video);
 }
</script>
<video controls autoplay>
 <source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
 <source src='video.ogv' type='video/ogg; codecs="theora, vorbis"' onerror="fallback(parentNode)">
 ...
</video>

4.8.3 img 요소

요소/img

모든 최신 엔진에서 지원됨.

Firefox1+ Safari1+ Chrome1+
Opera? Edge79+
Edge (Legacy)12+ Internet ExplorerYes
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?

HTMLImageElement

모든 최신 엔진에서 지원됨.

Firefox1+ Safari1+ Chrome1+
Opera8+ Edge79+
Edge (Legacy)12+ Internet Explorer5.5+
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android10.1+

HTMLImageElement/alt

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLImageElement/srcset

Support in all current engines.

Firefox38+Safari8+Chrome34+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLImageElement/sizes

Support in all current engines.

Firefox38+Safari9.1+Chrome38+
Opera?Edge79+
Edge (Legacy)13+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLImageElement/useMap

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLImageElement/isMap

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
Flow content.
Phrasing content.
Embedded content.
Form-associated element.
요소에 usemap 속성이 있는 경우: Interactive content.
Palpable content.
이 요소를 사용할 수 있는 컨텍스트:
임베디드 콘텐츠가 예상되는 곳.
picture 요소의 자식으로, 모든 source 요소 뒤에.
내용 모델:
없음.
text/html에서 태그 생략:
끝 태그 없음.
내용 속성:
글로벌 속성
alt — 이미지가 사용 불가능할 때 사용할 대체 텍스트
src — 리소스의 주소
srcset — 다른 상황에서 사용할 이미지, 예를 들어 고해상도 디스플레이, 작은 모니터 등
sizes — 다양한 페이지 레이아웃에 대한 이미지 크기
crossorigin — 요소가 교차 출처 요청을 처리하는 방법
usemap — 사용할 이미지 맵의 이름
ismap — 이미지가 서버 측 이미지 맵인지 여부
width — 가로 치수
height — 세로 치수
referrerpolicy — 요소가 시작한 리퍼러 정책 페치를 위해
decoding — 이 이미지를 프레젠테이션에 처리할 때 사용할 디코딩 힌트
loading — 로딩 지연을 결정할 때 사용됨
fetchpriority — 요소가 시작한 우선 순위를 설정함 페치.
접근성 고려 사항:
요소에 비어 있지 않은 alt 속성이 있는 경우: 작성자용; 구현자용.
그 외: 작성자용; 구현자용.
DOM 인터페이스:
[Exposed=Window,
 LegacyFactoryFunction=Image(optional unsigned long width, optional unsigned long height)]
interface HTMLImageElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString alt;
  [CEReactions, ReflectURL] attribute USVString src;
  [CEReactions, Reflect] attribute USVString srcset;
  [CEReactions, Reflect] attribute DOMString sizes;
  [CEReactions] attribute DOMString? crossOrigin;
  [CEReactions, Reflect] attribute DOMString useMap;
  [CEReactions, Reflect] attribute boolean isMap;
  [CEReactions, ReflectSetter] attribute unsigned long width;
  [CEReactions, ReflectSetter] attribute unsigned long height;
  readonly attribute unsigned long naturalWidth;
  readonly attribute unsigned long naturalHeight;
  readonly attribute boolean complete;
  readonly attribute USVString currentSrc;
  [CEReactions] attribute DOMString referrerPolicy;
  [CEReactions] attribute DOMString decoding;
  [CEReactions] attribute DOMString loading;
  [CEReactions] attribute DOMString fetchPriority;

  Promise<undefined> decode();

  // 또한 폐기된 멤버도 포함되어 있습니다
};

img 요소는 이미지를 나타냅니다.

img 요소는 크기 속성 소스를 가지며, 초기에는 요소 자체로 설정됩니다.

HTMLImageElement/src

모든 최신 엔진에서 지원됨.

Firefox1+ Safari3+ Chrome1+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer5.5+
Firefox Android? Safari iOS1+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

요소/img#attr-srcset

모든 최신 엔진에서 지원됨.

Firefox38+ Safari8+ Chrome34+
Opera? Edge79+
Edge (Legacy)≤18+ Internet ExplorerNo
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?

srcsrcset 속성으로 지정된 이미지와 부모가 picture 요소인 경우 이전 형제 source 요소의 srcset 속성으로 지정된 이미지가 포함된 콘텐츠입니다. alt 속성의 값은 이미지를 처리할 수 없거나 이미지 로딩이 비활성화된 사용자를 위한 동등한 콘텐츠를 제공합니다(즉, img 요소의 대체 콘텐츠임).

alt 속성 값에 대한 요구 사항은 별도의 섹션에 설명되어 있습니다.

srcsrcset 속성 중 하나 이상이 있어야 합니다.

src 속성이 있는 경우, 페이지로 구분되거나 스크립트되지 않은 비대화형, 선택적으로 애니메이션된 이미지 리소스를 참조하는 공백으로 둘러싸일 수 있는 유효한 비어 있지 않은 URL을 포함해야 합니다.

위의 요구 사항은 이미지가 정적 비트맵 (예: PNG, GIF, JPEG), 단일 페이지 벡터 문서 (단일 페이지 PDF, SVG 문서 요소가 있는 XML 파일), 애니메이션 비트맵 (APNG, 애니메이션 GIF), 애니메이션 벡터 그래픽 (선언적 SMIL 애니메이션을 사용하는 SVG 문서 요소가 있는 XML 파일) 등을 의미합니다. 그러나 이러한 정의는 스크립트가 포함된 SVG 파일, 다중 페이지 PDF 파일, 상호작용 MNG 파일, HTML 문서, 일반 텍스트 문서 등을 제외합니다. [PNG] [GIF] [JPEG] [PDF] [XML] [APNG] [SVG] [MNG]

srcset 속성은 srcset 속성입니다.

srcset 속성과 src 속성(너비 설명자가 사용되지 않은 경우)은 (source 요소가 선택되지 않은 경우) 소스 세트이미지 소스를 제공합니다.

srcset 속성이 있고 너비 설명자를 사용하는 이미지 후보 문자열이 있는 경우 sizes 속성도 있어야 합니다. srcset 속성이 지정되지 않고 loading 속성이 Lazy 상태인 경우, sizes 속성은 "auto" 값(ASCII 대소문자 구분 없음)으로 지정될 수 있습니다. sizes 속성은 sizes 속성이며, (source 요소가 선택되지 않은 경우) 소스 세트소스 크기를 제공합니다.

img 요소는 다음 조건을 만족할 경우 자동 크기 조정을 허용합니다:

Attributes/crossorigin

모든 최신 엔진에서 지원됨.

Firefox8+ Safari6+ Chrome13+
Opera? Edge79+
Edge (Legacy)12+ Internet ExplorerYes
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?

crossorigin 속성은 CORS 설정 속성입니다. 이 속성의 목적은 교차 출처 액세스를 허용하는 타사 사이트의 이미지를 canvas에서 사용할 수 있도록 하는 것입니다.

referrerpolicy 속성은 참조 정책 속성입니다. 이 속성의 목적은 이미지를 가져올 때 사용되는 참조 정책을 설정하는 것입니다. [REFERRERPOLICY]

decoding 속성은 이 이미지를 디코딩하는 데 선호되는 방법을 나타냅니다. 이 속성이 존재할 경우, 이는 이미지 디코딩 힌트여야 합니다. 이 속성의 값 누락 기본값잘못된 값 기본값은 모두 Auto 상태입니다.

HTMLImageElement/fetchPriority

FirefoxNo 🔰 미리보기+ Chrome102+
Opera? Edge102+
Edge (Legacy)? Internet ExplorerNo
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?

fetchpriority 속성은 가져오기 우선 순위 속성입니다. 이 속성의 목적은 이미지를 가져올 때 사용되는 우선 순위를 설정하는 것입니다.

loading 속성은 지연 로딩 속성입니다. 이 속성의 목적은 뷰포트 외부에 있는 이미지의 로딩 정책을 나타내는 것입니다.

loading 속성의 상태가 즉시 상태로 변경되면, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. resumptionStepsimg 요소의 지연 로드 재개 단계로 설정합니다.

  2. resumptionSteps이 null이면, 반환합니다.

  3. img지연 로드 재개 단계를 null로 설정합니다.

  4. resumptionSteps을 호출합니다.

<img src="1.jpeg" alt="1">
<img src="2.jpeg" loading=eager alt="2">
<img src="3.jpeg" loading=lazy alt="3">
<div id=very-large></div> <!-- Everything after this div is below the viewport -->
<img src="4.jpeg" alt="4">
<img src="5.jpeg" loading=lazy alt="5">

위 예시에서, 이미지는 다음과 같이 로드됩니다:

1.jpeg, 2.jpeg, 4.jpeg

이미지는 즉시 로드되며, 창의 로드 이벤트를 지연시킵니다.

3.jpeg

이미지는 뷰포트 내에 있어 레이아웃이 알려질 때 로드되지만, 창의 로드 이벤트를 지연시키지 않습니다.

5.jpeg

이미지는 뷰포트로 스크롤될 때만 로드되며, 창의 로드 이벤트를 지연시키지 않습니다.

개발자는 CSS가 이미지의 너비와 높이 속성을 설정하더라도 페이지 레이아웃이 이미지 로드 후 이동하지 않도록 지연 로드된 이미지에 widthheight 속성을 통해 선호하는 종횡비를 지정하는 것이 권장됩니다.

insertedNode가 주어진 img HTML 요소 삽입 단계는 다음과 같습니다:

  1. insertedNode의 부모가 picture 요소라면, 이를 insertedNode관련 돌연변이로 간주합니다.

movedNodeoldParent가 주어진 img HTML 요소 이동 단계는 다음과 같습니다:

  1. 만약 oldParentpicture 요소이면, 이를 movedNode에 대한 관련 변경 사항으로 계산합니다.

removedNodeoldParent가 주어진 img HTML 요소 제거 단계는 다음과 같습니다:

  1. 만약 oldParentpicture 요소이면, 이를 removedNode에 대한 관련 변경 사항으로 계산합니다.


img 요소는 레이아웃 도구로 사용되어서는 안 됩니다. 특히, img 요소는 투명 이미지를 표시하는 데 사용되어서는 안 됩니다. 그러한 이미지는 의미를 전달하는 경우가 드물며, 문서에 유용한 정보를 추가하는 경우가 거의 없습니다.


img 요소가 무엇을 나타내는지는 src 속성과 alt 속성에 따라 다릅니다.

만약 src 속성이 설정되어 있고, alt 속성이 빈 문자열로 설정되어 있다면,

이미지는 장식적이거나 나머지 콘텐츠의 보조적 역할을 하며, 문서의 다른 정보와 중복됩니다.

이미지가 사용 가능하고, 사용자 에이전트가 해당 이미지를 표시하도록 설정되어 있다면, 해당 요소는 요소의 이미지 데이터를 나타냅니다.

그렇지 않으면, 해당 요소는 아무것도 나타내지 않으며, 렌더링에서 완전히 생략될 수 있습니다. 사용자 에이전트는 이미지가 존재하지만 렌더링에서 생략되었다는 알림을 사용자에게 제공할 수 있습니다.

만약 src 속성이 설정되어 있고, alt 속성이 빈 문자열이 아닌 값으로 설정되어 있다면,

이미지는 콘텐츠의 중요한 부분이며, alt 속성은 이미지의 텍스트적 등가물이나 대체물을 제공합니다.

이미지가 사용 가능하고, 사용자 에이전트가 해당 이미지를 표시하도록 설정되어 있다면, 해당 요소는 요소의 이미지 데이터를 나타냅니다.

그렇지 않으면, 해당 요소는 alt 속성에 지정된 텍스트를 나타냅니다. 사용자 에이전트는 이미지가 존재하지만 렌더링에서 생략되었다는 알림을 사용자에게 제공할 수 있습니다.

만약 src 속성이 설정되어 있고, alt 속성이 설정되어 있지 않다면,

이미지는 콘텐츠의 중요한 부분일 수 있으며, 해당 이미지의 텍스트적 등가물이 존재하지 않습니다.

적합한 문서에서, alt 속성이 없는 것은 이미지가 콘텐츠의 중요한 부분이지만 이미지 생성 시 텍스트 대체물이 제공되지 않았음을 나타냅니다.

이미지가 사용 가능하고, 사용자 에이전트가 해당 이미지를 표시하도록 설정되어 있다면, 해당 요소는 요소의 이미지 데이터를 나타냅니다.

만약 src 속성의 값이 빈 문자열이라면, 해당 요소는 아무것도 나타내지 않습니다.

그렇지 않으면, 사용자 에이전트는 렌더링되지 않은 이미지가 있음을 나타내는 어떤 표시를 제공해야 하며, 사용자가 요청하거나, 그렇게 구성되었거나, 탐색 시 상황 정보를 제공하기 위해 필요한 경우, 다음과 같이 이미지에 대한 캡션 정보를 제공할 수 있습니다:

  1. 이미지가 빈 문자열이 아닌 title 속성을 가지고 있다면, 해당 속성의 값을 반환합니다.

  2. 이미지가 figure 요소의 자손이고, 해당 요소가 자식 figcaption 요소를 포함하며, figcaption 요소와 그 자손들을 무시했을 때, figure 요소가 플로우 콘텐츠 자손을 가지지 않고 요소 간 공백img 요소만 있는 경우, 첫 번째 figcaption 요소의 내용을 반환합니다.

  3. 아무것도 반환하지 않습니다. (캡션 정보가 없습니다.)

만약 src 속성이 설정되지 않았고, alt 속성이 빈 문자열로 설정되어 있거나, alt 속성이 전혀 설정되지 않은 경우,

해당 요소는 아무것도 나타내지 않습니다.

그 외의 경우

해당 요소는 alt 속성에 지정된 텍스트를 나타냅니다.

alt 속성은 조언 정보를 나타내지 않습니다. 사용자 에이전트는 alt 속성의 내용을 title 속성의 내용과 동일하게 표시해서는 안 됩니다.

사용자 에이전트는 언제나 사용자가 모든 이미지를 표시하거나 표시하지 않도록 선택할 수 있는 옵션을 제공할 수 있습니다. 또한, 시각 장애로 인해 이미지가 보이지 않거나 그래픽 기능이 없는 텍스트 터미널을 사용하는 경우와 같이, 사용자가 이미지를 볼 수 없을 때 이미지를 활용할 수 있도록 돕는 휴리스틱을 적용할 수 있습니다. 예를 들어, 이미지 내에서 발견된 텍스트의 광학 문자 인식(OCR)과 같은 기술이 포함될 수 있습니다.

사용자 에이전트가 누락된 alt 속성을 수정하는 것을 권장하지만, 작성자는 이러한 동작에 의존해서는 안 됩니다. 이미지에 대한 대체 텍스트를 제공하기 위한 요구 사항은 아래에서 자세히 설명됩니다. 이미지의 대체 텍스트 제공 요구 사항

img 요소의 내용이 있다면, 렌더링을 위한 목적으로는 무시됩니다.


usemap 속성은 존재하는 경우 이미지에 관련된 이미지 맵이 있음을 나타낼 수 있습니다.

ismap 속성은 a 요소의 하위 요소이며, href 속성을 가진 요소에서 사용될 때, 해당 요소가 서버 측 이미지 맵에 접근할 수 있음을 나타냅니다. 이는 해당 a 요소에서 이벤트를 처리하는 방법에 영향을 줍니다.

ismap 속성은 부울 속성입니다. 이 속성은 a 요소의 상위 요소가 href 속성을 가지고 있지 않은 경우에는 지정할 수 없습니다.

usemapismap 속성은 source 요소와 media 속성이 지정된 picture 요소와 함께 사용될 때 혼란스러운 동작을 초래할 수 있습니다.

img 요소는 차원 속성을 지원합니다.

HTMLImageElement/crossOrigin

현재 모든 엔진에서 지원됩니다.

Firefox8+Safari6+Chrome13+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

crossOrigin IDL 속성은 crossorigin 콘텐츠 속성을 반영해야 하며, 알려진 값만 제한적으로 허용됩니다.

HTMLImageElement/referrerPolicy

현재 모든 엔진에서 지원됩니다.

Firefox50+Safari14+Chrome52+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

referrerPolicy IDL 속성은 referrerpolicy 콘텐츠 속성을 반영해야 하며, 알려진 값만 제한적으로 허용됩니다.

HTMLImageElement/decoding

현재 모든 엔진에서 지원됩니다.

Firefox63+Safari11.1+Chrome65+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

SVGImageElement/decoding

Firefox63+Safari아니요Chrome65+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

decoding IDL 속성은 decoding 콘텐츠 속성을 반영해야 하며, 알려진 값만 제한적으로 허용됩니다.

HTMLImageElement/loading

현재 모든 엔진에서 지원됩니다.

Firefox75+Safari15.4+Chrome77+
Opera?Edge79+
Edge (Legacy)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

loading IDL 속성은 loading 콘텐츠 속성을 반영해야 하며, 알려진 값만 제한적으로 허용됩니다.

fetchPriority IDL 속성은 fetchpriority 콘텐츠 속성을 반영해야 하며, 알려진 값만 제한적으로 허용됩니다.

image.width [ = value ]

HTMLImageElement/width

모든 현재 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
image.height [ = value ]

HTMLImageElement/height

모든 현재 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

이 속성들은 이미지의 실제 렌더링된 크기를 반환하거나 크기가 알려지지 않은 경우 0을 반환합니다.

이 속성들을 설정하면 해당 콘텐츠 속성을 변경할 수 있습니다.

image.naturalWidth

HTMLImageElement/naturalWidth

모든 현재 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer9+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
image.naturalHeight

HTMLImageElement/naturalHeight

모든 현재 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer9+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

이 속성들은 이미지의 고유 크기(자연 크기)를 반환하거나 크기가 알려지지 않은 경우 0을 반환합니다.

image.complete

HTMLImageElement/complete

모든 현재 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

이미지가 완전히 다운로드되었거나 이미지가 지정되지 않은 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

image.currentSrc

HTMLImageElement/currentSrc

모든 현재 엔진에서 지원합니다.

Firefox38+Safari9.1+Chrome38+
Opera?Edge79+
Edge (구버전)13+Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

이미지의 절대 URL을 반환합니다.

image.decode()

HTMLImageElement/decode

모든 현재 엔진에서 지원합니다.

Firefox68+Safari11.1+Chrome64+
Opera?Edge79+
Edge (구버전)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

SVGImageElement/decode

Firefox68+Safari아니요Chrome64+
Opera?Edge79+
Edge (구버전)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

이 메서드는 사용자 에이전트가 이미지를 병렬로 디코딩하게 하여 디코딩이 완료되면 이행되는 프라미스를 반환합니다.

이미지를 디코딩할 수 없는 경우 이 프라미스는 "EncodingError" DOMException으로 거부됩니다.

image = new Image([ width [, height ] ])

HTMLImageElement/Image

모든 현재 엔진에서 지원합니다.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

새로운 img 요소를 반환하며, 관련 인수에 값이 적용되는 경우 widthheight 속성이 설정됩니다.

IDL 속성 widthheight는 이미지가 렌더링 중일 때 CSS 픽셀 단위로 렌더링된 너비와 높이를 반환해야 합니다. 그렇지 않고 이미지가 밀도 보정된 자연 너비와 높이를 가지고 사용 가능하지만 렌더링 중이 아닌 경우에는 CSS 픽셀 단위로 밀도 보정된 자연 너비와 높이를 반환해야 합니다. 만약 이미지가 사용 가능하지 않거나 밀도 보정된 자연 너비와 높이를 가지지 않는다면 0을 반환해야 합니다. [CSS]

IDL 속성 naturalWidthnaturalHeight는 이미지가 밀도 보정 자연 너비와 높이를 가지고 있고 사용 가능한 경우 CSS 픽셀 단위로 밀도 보정 자연 너비와 높이를 반환해야 하며, 그렇지 않으면 0을 반환해야 합니다. [CSS]

이미지의 밀도 보정 자연 너비와 높이는 메타데이터에 지정된 방향을 고려하기 때문에, naturalWidthnaturalHeight는 이미지 방향을 올바르게 맞추기 위해 필요한 회전을 적용한 후의 크기를 반영하며, 'image-orientation' 속성의 값에 상관없이 반영됩니다.

complete 속성의 getter 단계는 다음과 같습니다:

  1. 다음 중 하나라도 true인 경우:

    그러면 true를 반환합니다.

  2. false를 반환합니다.

currentSrc IDL 속성은 img 요소의 현재 요청현재 URL을 반환해야 합니다.

decode() 메서드는 호출될 때 다음 단계를 수행해야 합니다:

  1. promise를 새 프라미스로 설정합니다.

  2. 다음 단계를 수행하기 위해 마이크로 태스크를 대기열에 추가합니다:

    이 작업은 이미지 데이터를 업데이트하는 것도 마이크로 태스크에서 수행되기 때문에 수행됩니다. 따라서 다음과 같은 코드를 작성하려면

    img.src = "stars.jpg";
    img.decode();

    stars.jpg를 적절히 디코딩하려면 처리를 한 마이크로 태스크만큼 지연해야 합니다.

    1. globalthis관련 전역 객체로 설정합니다.

    2. 다음 중 하나라도 참이면:

      그러면 promise"EncodingError" DOMException으로 거부합니다.

    3. 그렇지 않으면, 병렬로 다음 경우 중 하나가 발생할 때까지 기다린 후 해당 작업을 수행합니다:

      img 요소의 노드 문서완전히 활성화 상태를 중지합니다.
      img 요소의 현재 요청이 변경되거나 수정됩니다.
      img 요소의 현재 요청상태손상됨이 됩니다.

      global을 사용하여 DOM 조작 작업 소스전역 작업을 대기열에 추가하여 promise"EncodingError" DOMException으로 거부합니다.

      img 요소의 현재 요청상태완전히 사용 가능이 됩니다.

      이미지를 디코딩합니다.

      이 이미지에 대해 디코딩을 수행할 필요가 없거나 (예: 벡터 그래픽이기 때문에) 디코딩 프로세스가 성공적으로 완료되면, global을 사용하여 DOM 조작 작업 소스전역 작업을 대기열에 추가하여 promise를 undefined로 확인합니다.

      디코딩이 실패하면 (예: 잘못된 이미지 데이터로 인해), global을 사용하여 DOM 조작 작업 소스전역 작업을 대기열에 추가하여 promise"EncodingError" DOMException으로 거부합니다.

      사용자 에이전트는 디코딩된 미디어 데이터가 이벤트 루프에서 다음 성공적인 렌더링 업데이트 단계가 끝날 때까지 최소한 쉽게 사용할 수 있도록 해야 합니다. 이는 API 계약의 중요한 부분이며, 가능하다면 깨져서는 안 됩니다. (일반적으로 이는 디코딩된 이미지 데이터를 제거해야 하는 메모리 부족 상황이나 이미지가 너무 커서 이 기간 동안 디코딩된 형태로 유지할 수 없는 경우에만 위반됩니다.)

      애니메이션 이미지는 모든 프레임이 로드된 후에만 완전히 사용 가능하게 됩니다. 따라서 구현이 그 시점 이전에 첫 번째 프레임을 디코딩할 수 있더라도 위 단계에서는 그렇게 하지 않고 모든 프레임이 사용 가능해질 때까지 기다립니다.

  3. promise를 반환합니다.

decode() 메서드가 없는 경우, img 요소를 로드한 다음 표시하는 과정은 다음과 같이 나타날 수 있습니다:

const img = new Image();
img.src = "nebula.jpg";
img.onload = () => {
    document.body.appendChild(img);
};
img.onerror = () => {
    document.body.appendChild(new Text("Could not load the nebula :("));
};

그러나 이렇게 하면 이미지를 DOM에 삽입한 후 발생하는 페인트가 메인 스레드에서 동기 디코드를 유발하기 때문에 눈에 띄는 프레임 손실이 발생할 수 있습니다.

이것은 decode() 메서드를 사용하여 다음과 같이 다시 작성할 수 있습니다:

const img = new Image();
img.src = "nebula.jpg";
img.decode().then(() => {
    document.body.appendChild(img);
}).catch(() => {
    document.body.appendChild(new Text("Could not load the nebula :("));
});

이 후자의 형태는 사용자 에이전트가 이미지를 병렬로 디코딩하고 디코딩 과정이 완료된 후에만 DOM에 삽입하여(따라서 페인트가 발생하게 함으로써) 원본의 프레임 손실을 피할 수 있습니다.

decode() 메서드는 디코딩된 이미지 데이터를 최소한 한 프레임 동안 사용할 수 있도록 보장하려고 시도하므로, requestAnimationFrame() API와 결합될 수 있습니다. 이는 모든 DOM 수정을 애니메이션 프레임 콜백으로 일괄 처리하도록 보장하는 코딩 스타일이나 프레임워크와 함께 사용할 수 있음을 의미합니다:

const container = document.querySelector("#container");

const { containerWidth, containerHeight } = computeDesiredSize();
requestAnimationFrame(() => {
 container.style.width = containerWidth;
 container.style.height = containerHeight;
});

// ...

const img = new Image();
img.src = "supernova.jpg";
img.decode().then(() => {
    requestAnimationFrame(() => container.appendChild(img));
});

구식 팩토리 함수는 HTMLImageElement 객체를 생성하기 위해 제공됩니다 (DOM의 createElement()과 같은 팩토리 메서드 외에도): Image(width, height). 이 구식 팩토리 함수가 호출되면, 다음 단계를 수행해야 합니다:

  1. document현재 전역 객체관련된 Document로 설정합니다.

  2. imgdocument, "img" 및 HTML 네임스페이스가 주어진 요소 생성의 결과로 설정합니다.

  3. width가 주어진 경우, 속성 값을 설정하여 img에 대해 "width" 와 width를 사용합니다.

  4. height가 주어진 경우, 속성 값을 설정하여 img에 대해 "height" 와 height를 사용합니다.

  5. img를 반환합니다.

단일 이미지는 상황에 따라 다른 적절한 대체 텍스트를 가질 수 있습니다.

다음 각 예에서는 동일한 이미지가 사용되지만, 매번 alt 텍스트가 다릅니다. 이 이미지는 스위스 제네바 주의 카루즈 시의 문장입니다.

여기에서는 보조 아이콘으로 사용됩니다:

<p>나는 <img src="carouge.svg" alt=""> 카루즈에서 살았습니다.</p>

여기에서는 도시를 나타내는 아이콘으로 사용됩니다:

<p>고향: <img src="carouge.svg" alt="카루즈"></p>

여기에서는 도시에 관한 텍스트의 일부로 사용됩니다:

<p>카루즈에는 문장이 있습니다.</p>
<p><img src="carouge.svg" alt="문장에는 사자가 나무 앞에 앉아 있는 모습이 그려져 있습니다."></p>
<p>이 문장은 도시 곳곳에서 장식으로 사용됩니다.</p>

여기에서는 이미지에 대한 대안이 아닌 설명을 제공하는 유사한 텍스트를 지원하는 방법으로 사용됩니다:

<p>카루즈에는 문장이 있습니다.</p>
<p><img src="carouge.svg" alt=""></p>
<p>문장에는 사자가 나무 앞에 앉아 있는 모습이 그려져 있습니다.
이 문장은 도시 곳곳에서 장식으로 사용됩니다.</p>

여기에서는 이야기의 일부로 사용됩니다:

<p>그녀는 폴더를 집어들고 종이 한 장이 떨어졌습니다.</p>
<p><img src="carouge.svg" alt="방패 모양의 종이는
빨간 배경에, 초록색 나무, 그리고 혀를 내민
황색 사자가 그려져 있으며, 꼬리가 S자 모양으로 되어 있었습니다."></p>
<p>그녀는 폴더를 응시했습니다. S! 그녀가 그토록 찾고 있던 해답은 단순히 S라는 글자였습니다! 그녀는 왜 그동안 그것을 알아차리지 못했을까요? 이제 모든 것이 맞아떨어졌습니다. 헥터가 사자의 꼬리를 언급했던 전화 통화, 마리아가 혀를 내밀었던 그 순간...</p>

여기에서는 출판 당시 이미지가 무엇인지 알 수 없었고, 단지 문장 이미지일 뿐이라는 것만 알았기 때문에 대체 텍스트를 제공할 수 없었고, 대신 title 속성에 이미지에 대한 간단한 캡션만 제공되었습니다:

<p>마지막으로 문장을 업로드한 사용자가 이 문장을 업로드했습니다:</p>
<p><img src="last-uploaded-coat-of-arms.cgi" title="사용자 업로드 문장."></p>

이 경우에도 저자가 실제 대체 텍스트를 제공할 수 있는 방법을 찾는 것이 이상적입니다. 예를 들어 이전 사용자에게 요청하는 방법이 있습니다. 대체 텍스트를 제공하지 않으면 이미지 보기 불가능한 사람들, 예를 들어 시각 장애인 사용자, 매우 낮은 대역폭 연결을 사용하는 사용자, 또는 바이트 단위로 요금이 부과되는 사용자, 또는 텍스트 전용 웹 브라우저를 사용해야 하는 사용자에게 문서 사용이 더 어려워집니다.

여기에는 동일한 이미지가 다양한 상황에서 사용되며, 매번 다른 적절한 대체 텍스트가 제공되는 몇 가지 추가 예가 있습니다.

<article>
 <h1>나의 고양이들</h1>
 <h2>플러피</h2>
 <p>플러피는 내가 가장 좋아하는 고양이입니다.</p>
 <img src="fluffy.jpg" alt="그녀는 실타래와 노는 것을 좋아합니다.">
 <p>그녀는 너무 귀엽습니다.</p>
 <h2>마일스</h2>
 <p>내 다른 고양이 마일스는 먹고 자는 것만 합니다.</p>
</article>
<article>
 <h1>사진 촬영</h1>
 <h2>실내에서 움직이는 대상을 촬영하기</h2>
 <p>여기서의 요령은 대상을 어떤 속도로, 어떤 거리에서 지나갈지 예측하는 것입니다.</p>
 <img src="fluffy.jpg" alt="실타래를 쫓는 고양이가 이 기술로 꽤 잘 촬영될 수 있습니다.">
 <h2>밤의 자연</h2>
 <p>이것을 달성하려면 극도로 민감한 필름이 필요하거나 엄청난 플래시가 필요할 것입니다.</p>
</article>
<article>
 <h1>나에 대하여</h1>
 <h2>내 애완동물들</h2>
 <p>나는 플러피라는 이름의 고양이와 마일스라는 이름의 개를 키우고 있습니다.</p>
 <img src="fluffy.jpg" alt="플러피, 내 고양이는 항상 바쁩니다.">
 <p>내 개 마일스와 나는 함께 긴 산책을 즐깁니다.</p>
 <h2>음악</h2>
 <p>산책 후, 마음을 비우고 바흐의 음악을 듣는 것을 좋아합니다.</p>
</article>
<article>
 <h1>플러피와 실타래</h1>
 <p>플러피는 실타래로 노는 것을 좋아하는 고양이였습니다. 그녀는 또한 점프하는 것을 좋아했습니다.</p>
 <aside><img src="fluffy.jpg" alt="" title="플러피"></aside>
 <p>그녀는 아침에 놀고, 저녁에도 놀았습니다.</p>
</article>

4.8.4 이미지

4.8.4.1 소개

이 섹션은 비규범적입니다.

HTML에서 단일 이미지 리소스가 있을 때 이미지를 포함하려면 img 요소와 src 속성을 사용합니다.

<h2>오늘의 추천 기사</h2>
<img src="/uploads/100-marie-lloyd.jpg" alt="" width="100" height="150">
<p><b><a href="/wiki/Marie_Lloyd">Marie Lloyd</a></b> (1870–1922)
는 영국의 </a href="/wiki/Music_hall">뮤직 홀</a> 가수였습니다...

그러나 작가가 사용자 에이전트가 선택할 수 있는 여러 이미지 리소스를 사용하고자 하는 경우가 있습니다:

위의 상황은 상호 배타적이지 않습니다. 예를 들어, 장치-픽셀-비율에 따른 다른 리소스와 아트 디렉션에 따른 다른 리소스를 결합하는 것이 합리적입니다.

이 문제를 스크립팅을 사용하여 해결할 수 있지만, 그렇게 하면 다른 문제가 발생할 수 있습니다:

이를 염두에 두고, 이 사양은 위의 문제를 선언적으로 해결하기 위한 여러 기능을 소개합니다.

장치-픽셀-비율에 따른 선택

이미지의 렌더링된 크기가 고정되어 있을 때 srcsrcset 속성을 x 지시자와 함께 사용하여 크기만 다른 여러 이미지를 제공할 수 있습니다(작은 이미지는 큰 이미지의 축소된 버전입니다).

x 지시자는 이미지의 렌더링된 크기가 뷰포트 너비에 따라 달라질 때(뷰포트 기반 선택)는 적합하지 않지만, 아트 디렉션과 함께 사용할 수 있습니다.

<h2>오늘의 추천 기사</h2>
<img src="/uploads/100-marie-lloyd.jpg"
 srcset="/uploads/150-marie-lloyd.jpg 1.5x, /uploads/200-marie-lloyd.jpg 2x"
 alt="" width="100" height="150">
<p><b><a href="/wiki/Marie_Lloyd">Marie Lloyd</a></b> (1870–1922)
는 영국의 </a href="/wiki/Music_hall">뮤직 홀</a> 가수였습니다...

사용자 에이전트는 사용자의 화면 픽셀 밀도, 확대/축소 수준, 그리고 사용자의 네트워크 조건과 같은 다른 요인에 따라 제공된 리소스 중에서 선택할 수 있습니다.

이전 사용자 에이전트와의 하위 호환성을 위해 srcset 속성을 아직 이해하지 못하는 경우를 대비하여 URL 중 하나가 img 요소의 src 속성에 지정됩니다. 이는 이전 사용자 에이전트에서도 유용한(사용자가 원하는 것보다 해상도가 낮을 수 있지만) 콘텐츠가 표시되도록 합니다. 새로운 사용자 에이전트의 경우 src 속성은 1x 지시자가 있는 srcset에 지정된 것처럼 리소스 선택에 참여합니다.

이미지의 렌더링된 크기는 widthheight 속성에 지정되어 사용자 에이전트가 이미지를 다운로드하기 전에 공간을 할당할 수 있습니다.

뷰포트 기반 선택

srcsetsizes 속성을 w 지시자와 함께 사용하여 크기만 다른 여러 이미지를 제공할 수 있습니다(작은 이미지는 큰 이미지의 축소된 버전입니다).

이 예에서는 배너 이미지가 전체 뷰포트 너비를 차지합니다(적절한 CSS를 사용).

<h1><img sizes="100vw" srcset="wolf-400.jpg 400w, wolf-800.jpg 800w, wolf-1600.jpg 1600w"
 src="wolf-400.jpg" alt="멋진 늑대"></h1>

사용자 에이전트는 지정된 w 지시자와 sizes 속성에 지정된 렌더링된 크기에서 각 이미지의 효과적인 픽셀 밀도를 계산할 수 있습니다. 그런 다음 사용자의 화면 픽셀 밀도, 확대/축소 수준, 그리고 사용자의 네트워크 조건과 같은 다른 요인에 따라 제공된 리소스 중에서 선택할 수 있습니다.

사용자의 화면이 320 CSS 픽셀 너비인 경우, 이는 wolf-400.jpg 1.25x, wolf-800.jpg 2.5x, wolf-1600.jpg 5x을 지정하는 것과 같습니다. 반면, 사용자의 화면이 1200 CSS 픽셀 너비인 경우, 이는 wolf-400.jpg 0.33x, wolf-800.jpg 0.67x, wolf-1600.jpg 1.33x을 지정하는 것과 같습니다. w 지시자와 sizes 속성을 사용함으로써 사용자 에이전트는 사용자의 장치 크기에 상관없이 올바른 이미지 소스를 다운로드할 수 있습니다.

이전 사용자 에이전트와의 하위 호환성을 위해, URL 중 하나가 img 요소의 src 속성에 지정됩니다. 새로운 사용자 에이전트에서는 src 속성이 srcset 속성이 w 지시자를 사용하는 경우 무시됩니다.

이 예에서는 웹 페이지가 뷰포트 너비에 따라 세 가지 레이아웃을 가집니다. 좁은 레이아웃에서는 이미지가 단일 열로 표시되며(각 이미지의 너비는 약 100%), 중간 레이아웃에서는 두 개의 열로 표시되며(각 이미지의 너비는 약 50%), 가장 넓은 레이아웃에서는 세 개의 열로 표시되며 페이지 여백이 있습니다(각 이미지의 너비는 약 33%). 이 레이아웃은 뷰포트가 30em 너비 및 50em 너비일 때 변경됩니다.

<img sizes="(max-width: 30em) 100vw, (max-width: 50em) 50vw, calc(33vw - 100px)"
 srcset="swing-200.jpg 200w, swing-400.jpg 400w, swing-800.jpg 800w, swing-1600.jpg 1600w"
 src="swing-400.jpg" alt="케틀벨 스윙">

sizes 속성은 30em50em에서 레이아웃 브레이크포인트를 설정하고, 이 브레이크포인트 사이에서 이미지 크기를 100vw, 50vw, 또는 calc(33vw - 100px)로 선언합니다. 이러한 크기는 반드시 CSS에서 지정된 실제 이미지 너비와 정확히 일치할 필요는 없습니다.

사용자 에이전트는 sizes 속성에서 참으로 평가되는 <미디어 조건>(괄호 안의 부분)을 가진 첫 번째 항목을 사용하거나, 모두 거짓으로 평가되면 마지막 항목(calc(33vw - 100px))을 사용합니다.

예를 들어, 뷰포트 너비가 29em인 경우, (max-width: 30em)은 참으로 평가되며 100vw가 사용되므로 리소스 선택을 위해 이미지 크기는 29em가 됩니다. 반면, 뷰포트 너비가 32em인 경우, (max-width: 30em)은 거짓으로 평가되지만, (max-width: 50em)은 참으로 평가되며 50vw가 사용되므로 리소스 선택을 위해 이미지 크기는 16em(뷰포트 너비의 절반)이 됩니다. 약간 더 넓은 뷰포트는 다른 레이아웃으로 인해 더 작은 이미지를 결과로 나타냅니다.

사용자 에이전트는 그런 다음 효과적인 픽셀 밀도를 계산하고 이전 예와 유사하게 적절한 리소스를 선택할 수 있습니다.

이 예는 이전 예와 동일하지만 이미지는 지연 로드됩니다. 이 경우 sizes 속성은 auto 키워드를 사용할 수 있으며, 사용자 에이전트는 width 속성(또는 CSS에서 지정된 너비)을 사용하여 소스 크기를 계산합니다.

<img loading="lazy" width="200" height="200" sizes="auto"
 srcset="swing-200.jpg 200w, swing-400.jpg 400w, swing-800.jpg 800w, swing-1600.jpg 1600w"
 src="swing-400.jpg" alt="케틀벨 스윙">

레거시 사용자 에이전트와의 더 나은 하위 호환성을 위해, 필요할 경우 폴백 크기를 지정할 수 있습니다.

<img loading="lazy" width="200" height="200"
 sizes="auto, (max-width: 30em) 100vw, (max-width: 50em) 50vw, calc(33vw - 100px)"
 srcset="swing-200.jpg 200w, swing-400.jpg 400w, swing-800.jpg 800w, swing-1600.jpg 1600w"
 src="swing-400.jpg" alt="케틀벨 스윙">
아트 디렉션 기반 선택

picture 요소와 source 요소, 그리고 media 속성을 함께 사용하여 이미지 콘텐츠가 달라지는 여러 이미지를 제공할 수 있습니다(예를 들어, 작은 이미지는 큰 이미지의 잘린 버전일 수 있습니다).

<picture>
  <source media="(min-width: 45em)" srcset="large.jpg">
  <source media="(min-width: 32em)" srcset="med.jpg">
  <img src="small.jpg" alt="늑대가 눈 속을 달리고 있습니다.">
</picture>

사용자 에이전트는 source 요소의 media 속성에 있는 미디어 쿼리가 일치하는 첫 번째 요소를 선택한 후, 해당 srcset 속성에서 적절한 URL을 선택합니다.

선택된 리소스에 따라 이미지의 렌더링된 크기가 달라집니다. 다운로드 전에 사용자 에이전트가 사용할 수 있는 크기를 지정하려면 CSS를 사용할 수 있습니다.

img { width: 300px; height: 300px }
@media (min-width: 32em) { img { width: 500px; height:300px } }
@media (min-width: 45em) { img { width: 700px; height:400px } }

이 예는 아트 디렉션장치-픽셀-비율 기반 선택을 결합한 것입니다. 뷰포트의 절반을 차지하는 배너는 좁은 화면용과 넓은 화면용 두 가지 버전으로 제공됩니다.

<h1>
 <picture>
  <source media="(max-width: 500px)" srcset="banner-phone.jpeg, banner-phone-HD.jpeg 2x">
  <img src="banner.jpeg" srcset="banner-HD.jpeg 2x" alt="아침 콤보">
 </picture>
</h1>
이미지 형식 기반 선택

type 속성을 source 요소에 사용하여 서로 다른 형식의 여러 이미지를 제공할 수 있습니다.

<h2>오늘의 추천 기사</h2>
<picture>
 <source srcset="/uploads/100-marie-lloyd.webp" type="image/webp">
 <source srcset="/uploads/100-marie-lloyd.jxr" type="image/vnd.ms-photo">
 <img src="/uploads/100-marie-lloyd.jpg" alt="" width="100" height="150">
</picture>
<p><b><a href="/wiki/Marie_Lloyd">Marie Lloyd</a></b> (1870–1922)
는 영국의 </a href="/wiki/Music_hall">뮤직 홀</a> 가수였습니다...

이 예에서, 사용자 에이전트는 지원되는 MIME 타입을 가진 type 속성이 있는 첫 번째 소스를 선택합니다. 만약 사용자 에이전트가 WebP 이미지를 지원한다면, 첫 번째 source 요소가 선택될 것입니다. 만약 그렇지 않고, 사용자 에이전트가 JPEG XR 이미지를 지원한다면, 두 번째 source 요소가 선택됩니다. 이 두 포맷 중 어느 것도 지원되지 않는 경우, img 요소가 선택됩니다.

4.8.4.1.1 적응형 이미지

이 섹션은 비규범적입니다.

CSS와 미디어 쿼리를 사용하여 사용자의 환경, 특히 서로 다른 뷰포트 크기와 픽셀 밀도에 맞춰 동적으로 적응하는 그래픽 페이지 레이아웃을 구성할 수 있습니다. 그러나 콘텐츠의 경우 CSS가 도움이 되지 않으므로, 대신 img 요소의 srcset 속성과 picture 요소를 사용해야 합니다. 이 섹션에서는 이러한 기능을 사용하는 예제를 보여줍니다.

예를 들어, 너비가 600 CSS 픽셀보다 넓은 화면에서는 a-rectangle.png라는 300×150 이미지를 사용하고, 600 CSS 픽셀 이하의 작은 화면에서는 a-square.png라는 100×100 이미지를 사용하고자 한다고 가정해 봅시다. 이 마크업은 다음과 같이 작성할 수 있습니다:

<figure>
 <picture>
  <source srcset="a-square.png" media="(max-width: 600px)">
  <img src="a-rectangle.png" alt="Barney Frank wears a suit and glasses.">
 </picture>
 </figcaption>Barney Frank, 2011</figcaption>
</figure>

alt 속성에 어떤 내용을 넣어야 하는지에 대한 자세한 내용은 이미지 대체 텍스트 제공 요구 사항 섹션을 참조합니다.

이 예제의 문제점은 이미지가 로드될 때 사용자 에이전트가 이미지의 크기를 미리 알지 못한다는 것입니다. 페이지 로드 중에 레이아웃이 여러 번 리플로우되지 않도록 하려면 CSS와 CSS 미디어 쿼리를 사용하여 크기를 제공할 수 있습니다:

<style>
 #a { width: 300px; height: 150px; }
 @media (max-width: 600px) { #a { width: 100px; height: 100px; } }
</style>
<figure>
 <picture>
  <source srcset="a-square.png" media="(max-width: 600px)">
  <img src="a-rectangle.png" alt="Barney Frank wears a suit and glasses." id="a">
 </picture>
 </figcaption>Barney Frank, 2011</figcaption>
</figure>

또는 widthheight 속성을 sourceimg 요소에 사용하여 너비와 높이를 제공할 수 있습니다.

<figure>
 <picture>
  <source srcset="a-square.png" media="(max-width: 600px)" width="100" height="100">
  <img src="a-rectangle.png" width="300" height="150"
  alt="Barney Frank wears a suit and glasses.">
 </picture>
 <figcaption>Barney Frank, 2011</figcaption>
</figure>

img 요소는 src 속성과 함께 사용됩니다. 이 속성은 picture 요소를 지원하지 않는 구형 사용자 에이전트를 위해 사용할 이미지의 URL을 제공합니다. 이는 src 속성에 어떤 이미지를 제공해야 하는지에 대한 질문으로 이어집니다.

저자가 구형 사용자 에이전트에서 가장 큰 이미지를 원한다면, 마크업은 다음과 같이 작성할 수 있습니다:

<picture>
 <source srcset="pear-mobile.jpeg" media="(max-width: 720px)">
 <source srcset="pear-tablet.jpeg" media="(max-width: 1280px)">
 <img src="pear-desktop.jpeg" alt="The pear is juicy.">
</picture>

그러나 구형 모바일 사용자 에이전트가 더 중요하다면, 세 개의 이미지를 모두 source 요소에 나열하여 src 속성을 완전히 무시할 수 있습니다.

<picture>
 <source srcset="pear-mobile.jpeg" media="(max-width: 720px)">
 <source srcset="pear-tablet.jpeg" media="(max-width: 1280px)">
 <source srcset="pear-desktop.jpeg">
 <img src="pear-mobile.jpeg" alt="The pear is juicy.">
</picture>

이 시점에서 src 속성이 picture 요소를 지원하는 사용자 에이전트에 의해 완전히 무시되고 있으므로, src 속성은 가장 작은 이미지도, 가장 큰 이미지도 아닌 이미지로 기본 설정할 수 있습니다:

<picture>
 <source srcset="pear-mobile.jpeg" media="(max-width: 720px)">
 <source srcset="pear-tablet.jpeg" media="(max-width: 1280px)">
 <source srcset="pear-desktop.jpeg">
 <img src="pear-tablet.jpeg" alt="The pear is juicy.">
</picture>

위 예제에서는 max-width 미디어 기능을 사용하여 이미지가 의도된 최대 뷰포트 크기를 지정합니다. 대신 min-width를 사용할 수도 있습니다.

<picture>
 <source srcset="pear-desktop.jpeg" media="(min-width: 1281px)">
 <source srcset="pear-tablet.jpeg" media="(min-width: 721px)">
 <img src="pear-mobile.jpeg" alt="The pear is juicy.">
</picture>
4.8.4.2 source, img, 및 link 요소에 공통된 속성
4.8.4.2.1 Srcset 속성

srcset 속성은 이 섹션에서 정의된 요구사항을 가진 속성입니다.

존재하는 경우, 그 값은 하나 이상의 이미지 후보 문자열로 구성되어야 하며, 각 문자열은 U+002C 콤마 문자(,)로 구분됩니다. 만약 이미지 후보 문자열이 URL 뒤에 설명자나 ASCII 공백 문자가 없으면, 다음 이미지 후보 문자열은 하나 이상의 ASCII 공백 문자로 시작해야 합니다.

이미지 후보 문자열은 다음 구성 요소로 이루어지며, 아래 목록에 추가로 설명된 제한사항이 적용됩니다:

  1. 하나 이상의 ASCII 공백 문자.

  2. 유효한 비어있지 않은 URL, U+002C 콤마 문자로 시작하거나 끝나지 않으며, 비상호작용적이고 선택적으로 애니메이션 되는 이미지 리소스를 참조하며, 페이징 되거나 스크립트화 되지 않은 리소스여야 합니다.

  3. 하나 이상의 ASCII 공백 문자.

  4. 다음 중 하나:

  5. 하나 이상의 ASCII 공백 문자.

동일한 요소에 대해 동일한 너비 설명자 값을 가진 이미지 후보 문자열이 존재해서는 안 됩니다.

동일한 요소에 대해 동일한 픽셀 밀도 설명자 값을 가진 이미지 후보 문자열이 존재해서는 안 됩니다. 이 요구사항을 충족하기 위해 설명자가 없는 이미지 후보 문자열1x 설명자를 가진 문자열과 동일한 것으로 간주됩니다.

만약 요소에 크기 속성이 존재한다면, 해당 요소의 모든 이미지 후보 문자열에는 너비 설명자가 지정되어야 합니다.

4.8.4.2.2 Sizes 속성

sizes 속성은 이 섹션에서 정의된 요구 사항을 가진 속성입니다.

존재하는 경우, 그 값은 유효한 소스 크기 목록이어야 합니다.

유효한 소스 크기 목록은 다음 문법과 일치하는 문자열입니다: [CSSVALUES] [MQ]

<source-size-list> = <source-size>#? , <source-size-value>
<source-size> = <media-condition> <source-size-value> | auto
<source-size-value> = <length> | auto

<source-size-value>이(가) <length>인 경우, 음수일 수 없으며, 수학 함수 외의 CSS 함수를 사용할 수 없습니다.

auto 키워드는 sizes 속성 구문 분석에서 계산되는 너비입니다. 존재하는 경우, 첫 번째 항목이어야 하며 전체 <source-size-list> 값은 "auto" 문자열(ASCII 대소문자 구분 없음)이거나 "auto," 문자열(ASCII 대소문자 구분 없음)로 시작해야 합니다.

이미지 로드를 시작한 img 요소가 자동 크기 허용을 허용하고 렌더링 중인 경우, auto구체적인 객체 크기 너비입니다. 그렇지 않은 경우, auto 값은 무시되며 대신 다음 소스 크기가 사용됩니다.

auto 키워드는 다음 조건이 충족되는 경우 sizes 속성의 source 요소와 sizes 속성의 img 요소에 지정할 수 있습니다. 그렇지 않으면, auto를 지정해서는 안 됩니다.

또한 widthheight 속성 또는 CSS를 사용하여 크기를 지정하는 것이 강력하게 권장됩니다. 지정된 크기가 없으면 sizes="auto"렌더링 섹션에서 contain-intrinsic-size: 300px 150px을 의미하기 때문에 이미지가 300x150 크기로 렌더링될 가능성이 높습니다.

<source-size-value>는 이미지의 의도된 레이아웃 너비를 제공합니다. 작성자는 <media-condition>을 사용하여 다양한 환경에 대해 다른 너비를 지정할 수 있습니다.

<source-size-value>에는 퍼센트가 허용되지 않습니다. 'vw' 단위는 뷰포트 너비에 상대적인 크기를 나타내는 데 사용할 수 있습니다.

4.8.4.3 처리 모델

img 요소는 현재 요청대기 중인 요청을 가지고 있습니다. 현재 요청은 처음에 새로운 이미지 요청으로 설정됩니다. 대기 중인 요청은 처음에 null로 설정됩니다.

이미지 요청상태, 현재 URL, 그리고 이미지 데이터를 가집니다.

이미지 요청상태는 다음 중 하나입니다:

사용 불가
사용자가 어떤 이미지 데이터도 얻지 못했거나, 이미지 데이터를 일부 또는 전부 얻었지만 이미지의 크기를 얻을 만큼 충분히 디코딩하지 못한 상태입니다.
부분적으로 사용 가능
사용자가 일부 이미지 데이터를 얻었으며 적어도 이미지의 크기는 사용할 수 있는 상태입니다.
완전히 사용 가능
사용자가 모든 이미지 데이터를 얻었으며 적어도 이미지의 크기는 사용할 수 있는 상태입니다.
손상됨
사용자가 얻을 수 있는 모든 이미지 데이터를 얻었지만, 이미지 크기를 얻을 만큼 이미지 데이터를 디코딩할 수 없을 경우 (예: 이미지가 손상되었거나, 포맷이 지원되지 않거나, 데이터를 얻을 수 없는 경우).

이미지 요청현재 URL은 처음에 빈 문자열로 설정됩니다.

이미지 요청이미지 데이터는 디코딩된 이미지 데이터입니다.

이미지 요청상태부분적으로 사용 가능 또는 완전히 사용 가능일 때, 이미지 요청사용 가능하다고 합니다.

img 요소의 현재 요청상태완전히 사용 가능하고 사용자가 미디어 데이터를 오류 없이 디코딩할 수 있다면, img 요소는 완전히 디코딩 가능하다고 합니다.

이미지 요청상태는 처음에 사용 불가로 설정됩니다.

img 요소의 현재 요청사용 가능할 때, img 요소는 너비가 이미지의 밀도 보정된 자연 너비(있다면)이고, 높이가 이미지의 밀도 보정된 자연 높이(있다면)이며, 외형이 이미지의 자연스러운 외형인 그리기 소스를 제공합니다.


img 요소는 srcset 속성이 지정되었거나 부모가 picture 요소인 경우 srcset 또는 picture를 사용한다고 합니다.


img 요소는 마지막으로 선택된 소스를 가지며, 이는 처음에 null로 설정되어야 합니다.

이미지 요청마다 현재 픽셀 밀도가 있으며, 이는 처음에 1로 설정되어야 합니다.

이미지 요청마다 선호하는 밀도 보정된 크기가 있으며, 이는 너비와 높이로 구성된 구조체 또는 null입니다. 처음에는 null로 설정되어야 합니다.

이미지 요소 img밀도 보정된 자연 너비와 높이를 결정하려면:

  1. dimimg현재 요청선호하는 밀도 보정된 크기로 설정합니다.

    선호하는 밀도 보정된 크기는 이미지의 메타 정보에 기반하여 이미지 프레젠테이션 준비 알고리즘에서 설정됩니다.

  2. dim이 null이면 dimimg자연 크기로 설정합니다.

  3. dim의 너비를 img현재 요청현재 픽셀 밀도로 나눈 값으로 설정합니다.

  4. dim의 높이를 img현재 요청현재 픽셀 밀도로 나눈 값으로 설정합니다.

  5. dim을 반환합니다.

예를 들어, 현재 픽셀 밀도가 3.125인 경우, 이는 1인치 당 300개의 디바이스 픽셀이 있다는 의미이며, 따라서 이미지 데이터가 300x600이면 밀도 보정된 자연 너비와 높이는 96 CSS 픽셀 x 192 CSS 픽셀입니다.

모든 imglink 요소는 소스 세트와 연결됩니다.

소스 세트는 하나 이상의 이미지 소스소스 크기로 구성된 정렬된 집합입니다.

이미지 소스URL이며, 선택적으로 픽셀 밀도 서술자 또는 너비 서술자를 포함할 수 있습니다.

소스 크기<소스 크기 값>입니다. 소스 크기뷰포트에 상대적인 단위를 가지면, 이는 img 요소의 노드 문서뷰포트에 상대적으로 해석되어야 합니다. 다른 단위는 미디어 쿼리와 동일하게 해석되어야 합니다. [MQ]


파싱 오류는 이 섹션의 알고리즘에서 입력과 요구사항 사이의 치명적이지 않은 불일치를 나타냅니다. 사용자는 파싱 오류를 노출하도록 권장됩니다.


이미지가 성공적으로 가져왔는지 여부 (예: 응답 상태가 OK 상태였는지 여부)는 이미지의 유형과 유효한 이미지인지 여부를 결정할 때 무시되어야 합니다.

이렇게 하면 서버가 오류 응답을 반환하더라도 이미지가 표시될 수 있습니다.

사용자는 이미지의 이미지 스니핑 규칙을 적용하여 이미지 유형을 결정해야 하며, 이미지의 관련된 콘텐츠 유형 헤더official type을 제공합니다. 이러한 규칙이 적용되지 않는 경우, 이미지의 유형은 이미지의 관련된 콘텐츠 유형 헤더에 의해 제공되는 유형이어야 합니다.

사용자는 img 요소에서 비이미지 리소스를 지원해서는 안 됩니다 (예: 문서 요소가 HTML 요소인 XML 파일). 사용자는 이미지 리소스에 포함된 실행 가능한 코드 (예: 스크립트)를 실행해서는 안 됩니다. 사용자는 멀티페이지 리소스의 첫 번째 페이지만 표시해야 하며 (예: PDF 파일), 리소스가 상호작용 방식으로 동작하지 않도록 해야 하지만, 리소스의 애니메이션은 존중해야 합니다.

이 명세서는 어떤 이미지 유형을 지원해야 하는지에 대해서는 명시하지 않습니다.

4.8.4.3.1 이미지를 얻는 시점

기본적으로 이미지는 즉시 로드됩니다. 사용자 에이전트는 사용자에게 필요한 경우에만 이미지를 로드하는 옵션을 제공할 수 있습니다. (예를 들어, 대역폭이 제한된 사용자는 이러한 옵션을 사용할 수 있습니다.)

이미지를 즉시 로드할 때, 사용자 에이전트는 해당 요소가 생성되었거나 관련 변형을 겪을 때마다, 애니메이션 재시작 플래그가 설정된 경우, img 요소의 이미지 데이터를 동기적으로 업데이트해야 합니다.

필요한 경우에만 이미지를 로드할 때, 사용자 에이전트는 img 요소의 현재 요청상태사용 불가일 때만 이미지 데이터를 업데이트해야 합니다. img 요소가 관련 변형을 겪을 때, 사용자 에이전트가 필요한 경우에만 이미지를 로드한다면, img 요소의 현재 요청상태사용 불가로 돌아가야 합니다.

4.8.4.3.2 DOM 변형에 반응

img 요소의 관련 변형은 다음과 같습니다:

4.8.4.3.3 사용 가능한 이미지 목록

document 객체는 사용 가능한 이미지 목록을 가져야 합니다. 이 목록의 각 이미지는 절대 URL, CORS 설정 속성 모드, 그리고 모드가 비 CORS가 아닌 경우 출처로 구성된 튜플로 식별됩니다. 각 이미지는 또한 상위 레이어 캐싱 무시 플래그를 가집니다. 사용자 에이전트는 언제든지 한 document 객체의 사용 가능한 이미지 목록에서 다른 객체로 항목을 복사할 수 있지만(예: document가 생성될 때, 다른 document에서 로드된 모든 이미지를 추가할 수 있습니다.), 이 방식으로 복사된 항목의 키를 변경해서는 안 되며, 복사된 항목에 대해 상위 레이어 캐싱 무시 플래그를 해제해야 합니다. 사용자 에이전트는 또한 메모리를 절약하기 위해 언제든지 이러한 목록에서 이미지를 제거할 수 있습니다. 사용자 에이전트는 상위 레이어 캐싱 의미에 따라 적절하게 사용 가능한 이미지 목록의 항목을 제거해야 합니다(예: HTTP `Cache-Control` 응답 헤더가 있는 경우).

사용 가능한 이미지 목록src 속성을 이전에 로드된 URL로 변경할 때 동기적 전환을 가능하게 하고, 같은 문서에서 이미지를 다시 다운로드하지 않도록 하기 위한 것입니다. 이 목록은 이전 이미지가 여전히 로드 중일 때 같은 이미지를 다시 다운로드하는 것을 방지하는 데 사용되지 않습니다.

사용자 에이전트는 사용 가능한 이미지 목록과 별도로 이미지 데이터를 저장할 수도 있습니다.

예를 들어, 리소스에 HTTP 응답 헤더 `Cache-Control: must-revalidate`가 있는 경우, 상위 레이어 캐싱 무시 플래그가 해제되면 사용자 에이전트는 사용 가능한 이미지 목록에서 해당 이미지를 제거하지만, 이미지 데이터를 별도로 보관하고 서버가 304 Not Modified 상태로 응답할 경우 이를 사용할 수 있습니다.

4.8.4.3.4 이미지 디코딩

이미지 데이터는 일반적으로 파일 크기를 줄이기 위해 인코딩됩니다. 이는 사용자 에이전트가 이미지를 화면에 표시하기 위해 데이터를 디코딩해야 한다는 것을 의미합니다. 디코딩은 이미지의 미디어 데이터를 화면에 표시하기에 적합한 비트맵 형태로 변환하는 과정입니다. 이 과정은 콘텐츠를 표시하는 다른 과정에 비해 상대적으로 느릴 수 있습니다. 따라서 사용자 에이전트는 최상의 사용자 경험을 제공하기 위해 언제 디코딩을 수행할지 선택할 수 있습니다.

이미지 디코딩이 다른 콘텐츠의 표시를 완료될 때까지 지연시키는 경우, 이를 동기적 디코딩이라고 합니다. 일반적으로 이 방법은 이미지를 다른 콘텐츠와 동시에 원자적으로 표시하는 효과가 있습니다. 그러나 이 디코딩을 수행하는 데 소요되는 시간만큼 표시가 지연됩니다.

이미지 디코딩이 다른 콘텐츠의 표시를 지연시키지 않는 경우, 이를 비동기적 디코딩이라고 합니다. 이 방법은 비이미지 콘텐츠를 더 빠르게 표시할 수 있는 효과가 있습니다. 그러나 디코딩이 완료될 때까지 화면에 이미지 콘텐츠가 표시되지 않습니다. 디코딩이 완료되면 화면이 이미지로 업데이트됩니다.

동기 및 비동기 디코딩 모드 모두에서 최종 콘텐츠는 동일한 시간이 경과한 후 화면에 표시됩니다. 주요 차이점은 사용자 에이전트가 비이미지 콘텐츠를 최종 콘텐츠보다 먼저 표시할지 여부입니다.

사용자 에이전트가 동기적 또는 비동기적 디코딩을 수행할지 결정하는 데 도움을 주기 위해, decoding 속성을 img 요소에 설정할 수 있습니다. decoding 속성의 가능한 값은 다음과 같은 이미지 디코딩 힌트 키워드입니다:

키워드 상태 설명
sync 동기적 이 이미지를 다른 콘텐츠와 원자적으로 표시하기 위해 동기적으로 디코딩하도록 설정합니다.
async 비동기적 다른 콘텐츠의 표시를 지연시키지 않기 위해 비동기적으로 디코딩하도록 설정합니다.
auto 자동 디코딩 모드에 대한 특별한 설정이 없음을 나타냅니다(기본값).

이미지를 디코딩할 때, 사용자 에이전트는 decoding 속성의 상태에 의해 나타난 선호를 존중해야 합니다. 상태가 Auto으로 설정된 경우, 사용자 에이전트는 임의의 디코딩 동작을 선택할 수 있습니다.

decode() 메서드를 사용하여 디코딩 동작을 제어할 수도 있습니다. decode() 메서드는 화면에 콘텐츠를 표시하는 프로세스와 독립적으로 디코딩을 수행하므로, decoding 속성에 영향을 받지 않습니다.

4.8.4.3.5 이미지 데이터 업데이트

이 알고리즘은 병렬로 실행 중인 단계에서 호출될 수 없습니다. 사용자 에이전트가 병렬로 실행 중인 단계에서 이 알고리즘을 호출해야 하는 경우, 태스크를 대기열에 추가해야 합니다.

사용자 에이전트가 img 요소의 이미지 데이터를 업데이트할 때, 선택적으로 애니메이션 재시작 플래그가 설정된 상태로, 또는 이벤트 생략 가능 플래그가 설정된 상태로, 다음 단계를 실행해야 합니다:

  1. 요소의 노드 문서완전히 활성화되지 않았다면:

    1. 이 알고리즘을 병렬로 계속 실행합니다.

    2. 요소의 노드 문서완전히 활성화될 때까지 기다립니다.

    3. 이 인스턴스 이후에 시작된 동일한 img 요소에 대한 다른 인스턴스(심지어 중단되었고 더 이상 실행되지 않는 경우라도)가 있다면 반환합니다.

    4. 이 알고리즘을 계속하기 위해 마이크로태스크를 대기열에 추가합니다.

  2. 사용자 에이전트가 이미지를 지원할 수 없거나 이미지 지원이 비활성화된 경우, 이미지 요청을 중단하고 현재 요청보류 중인 요청사용할 수 없음 상태로 설정하고 보류 중인 요청을 null로 설정합니다.

  3. previousURL현재 요청현재 URL로 설정합니다.

  4. selected source를 null로, selected pixel density를 정의되지 않음으로 설정합니다.

  5. 요소가 srcset 또는 picture를 사용하지 않으며, 비어 있지 않은 src 속성이 지정된 경우, 선택된 소스를 요소의 src 속성 값으로 설정하고 selected pixel density를 1.0으로 설정합니다.

  6. 요소의 마지막 선택된 소스selected source로 설정합니다.

  7. selected source가 null이 아닌 경우:

    1. urlString을 요소의 노드 문서를 기준으로 selected source에 대한 URL 인코딩-파싱 및 직렬화의 결과로 설정합니다.

    2. urlString이 실패인 경우 이 내부 단계를 중단합니다.

    3. keyurlString, img 요소의 crossorigin 속성의 모드, 및 해당 모드가 No CORS가 아닌 경우, 요소의 노드 문서출처로 구성된 튜플로 설정합니다.

    4. 사용 가능한 이미지 목록key에 대한 항목이 포함되어 있는 경우:

      1. 해당 항목에 대해 상위 계층 캐싱 무시 플래그를 설정합니다.

      2. 이미지 요청을 중단하고 현재 요청보류 중인 요청을 중단합니다.

      3. 보류 중인 요청을 null로 설정합니다.

      4. 현재 요청을 해당 항목의 이미지 데이터로 설정하고 상태완전히 사용 가능으로 설정합니다.

      5. img 요소가 주어진 현재 요청을 표시하기 위해 준비합니다.

      6. 현재 요청현재 픽셀 밀도selected pixel density로 설정합니다.

      7. 요소 태스크를 대기열에 추가하고 img 요소에 대해 다음 단계를 실행합니다:

        1. 애니메이션 재시작이 설정된 경우 애니메이션을 재시작합니다.

        2. 현재 요청현재 URLurlString으로 설정합니다.

        3. 이벤트 생략 가능이 설정되지 않았거나 previous URLurlString과 같지 않은 경우 이벤트를 발생시켜 loadimg 요소에 전달합니다.

      8. 이미지 데이터 업데이트 알고리즘을 중단합니다.

  8. 마이크로태스크를 대기열에 추가하여 이 알고리즘의 나머지 부분을 수행하고, 이 알고리즘을 호출한 태스크가 계속 실행될 수 있도록 합니다.

  9. 이 알고리즘의 다른 인스턴스가 img 요소에 대해 이 인스턴스 이후에 시작되었고 (중단되었고 더 이상 실행되지 않는 경우라도) 반환합니다.

    마지막 인스턴스만 효과가 있으므로 예를 들어 src, srcset, 및 crossorigin 속성이 순차적으로 설정될 때 다중 요청을 방지할 수 있습니다.

  10. selected sourceselected pixel density를 각각 이미지 소스 선택의 결과로 설정합니다.

  11. selected source가 null인 경우:

    1. 현재 요청상태손상됨으로 설정하고, 이미지 요청을 중단합니다.

    2. 요소 태스크를 대기열에 추가하고 img 요소에 대해 다음 단계를 실행합니다:

      1. 현재 요청현재 URL을 빈 문자열로 변경합니다.

      2. 다음 조건이 모두 참인 경우:

        • 요소에 src 속성이 있거나 srcset 또는 picture를 사용하고,

        • 이벤트 생략 가능이 설정되지 않았거나 previous URL이 빈 문자열이 아닌 경우,

        이벤트를 발생시켜 errorimg 요소에 전달합니다.

    3. 반환합니다.

  12. urlString을 요소의 노드 문서를 기준으로 selected source에 대한 URL 인코딩-파싱 및 직렬화의 결과로 설정합니다.

  13. urlString이 실패인 경우:

    1. 이미지 요청을 중단하고 현재 요청보류 중인 요청을 중단합니다.

    2. 현재 요청상태손상됨으로 설정합니다.

    3. 보류 중인 요청을 null로 설정합니다.

    4. 요소 태스크를 대기열에 추가하고 img 요소에 대해 다음 단계를 실행합니다:

      1. 현재 요청현재 URL선택된 소스로 변경합니다.

      2. 이벤트 생략 가능이 설정되지 않았거나 previous URLselected source와 같지 않은 경우 이벤트를 발생시켜 errorimg 요소에 전달합니다.

    5. 반환합니다.

  14. 보류 중인 요청이 null이 아니고 urlString보류 중인 요청현재 URL과 동일한 경우 반환합니다.

  15. 만약 urlString현재 요청현재 URL과 같고 현재 요청상태부분적으로 사용 가능하면, 보류 중인 요청에 대한 이미지 요청을 중단하고, img 요소가 주어진 DOM 조작 작업 원본요소 작업을 대기열에 추가하여 애니메이션 다시 시작이 설정되어 있으면 애니메이션을 다시 시작하고 반환합니다.

  16. 이미지 요청을 중단합니다.

  17. image request새 이미지 요청으로 설정하고 현재 URLurlString으로 설정합니다.

  18. 만약 현재 요청상태사용 불가 또는 손상됨이라면, 현재 요청image request으로 설정합니다. 그렇지 않으면, 보류 중인 요청image request으로 설정합니다.

  19. request잠재적 CORS 요청 만들기의 결과로 설정하고 urlString, "image" 및 요소의 crossorigin 속성의 현재 상태를 사용합니다.

  20. request클라이언트를 요소의 노드 문서관련 설정 객체로 설정합니다.

  21. 요소가 srcset 또는 picture를 사용하는 경우, request이니시에이터를 "imageset"으로 설정합니다.

  22. request참조 정책을 요소의 referrerpolicy 속성의 현재 상태로 설정합니다.

  23. request우선순위를 요소의 fetchpriority 속성의 현재 상태로 설정합니다.

  24. delay load eventimg지연 로딩 속성Eager 상태이거나, img에 대해 스크립팅이 비활성화된 경우 true이고, 그렇지 않으면 false입니다.

  25. img에 대해 요소가 게으르게 로드될 것인지 여부 결정 단계가 true를 반환하는 경우:

    1. img게으른 로드 재개 단계를 이 알고리즘의 나머지 부분으로 설정하고 이미지 가져오기 단계를 시작합니다.

    2. 게으르게 로드되는 요소의 교차 관찰 시작img 요소에 대해 실행합니다.

    3. 반환합니다.

  26. 이미지 가져오기: 가져오기 request. 이 알고리즘을 반환하고 나머지 단계를 response에 대해 응답 처리의 일부로 실행합니다.

    이 방식으로 획득된 리소스가 있다면, 이는 image request이미지 데이터입니다. 이는 CORS-동일 출처이거나 CORS-교차 출처일 수 있으며, 이는 이미지의 다른 API와의 상호작용에 영향을 미칩니다 (예: canvas에서 사용될 때).

    delay load event이 true일 때, 이미지를 가져오면 요소의 노드 문서의 로드 이벤트를 지연시켜야 하며, 이는 리소스가 가져온 후 네트워킹 태스크 소스에 의해 대기열에 추가된 태스크가 실행될 때까지 지연됩니다.

    이 불행히도 사용자의 로컬 네트워크에 대한 간단한 포트 스캔을 수행하는 데 사용할 수 있습니다 (특히 스크립팅과 함께 사용하면, 비록 스크립팅이 실제로 이러한 공격을 수행하는 데 필요하지 않더라도). 사용자 에이전트는 이러한 공격을 완화하기 위해 이보다 엄격한 교차 출처 접근 제어 정책을 구현할 수 있지만, 불행히도 그러한 정책은 기존 웹 콘텐츠와 호환되지 않는 경우가 많습니다.

  27. 가능한 한 빨리 다음 목록의 첫 번째 적용 가능한 항목으로 이동합니다:

    리소스 유형이 multipart/x-mixed-replace인 경우

    이미지가 가져오는 동안 대기열에 추가된 다음 태스크는 다음 단계를 실행해야 합니다:

    1. 만약 image request보류 중인 요청이며 적어도 하나의 본문 부분이 완전히 디코딩되었다면, 현재 요청에 대한 이미지 요청을 중단하고, 보류 중인 요청을 현재 요청으로 업그레이드합니다.

    2. 그렇지 않고, 만약 image request보류 중인 요청이며 사용자 에이전트가 이미지 요청의 이미지가 치명적인 방식으로 손상되어 이미지 크기를 얻을 수 없음을 판단할 수 있는 경우, 현재 요청에 대한 이미지 요청을 중단하고, 보류 중인 요청을 현재 요청으로 업그레이드하며, 현재 요청상태손상됨으로 설정합니다.

    3. 그렇지 않고, 만약 image request현재 요청이며, 그 상태사용 불가이고, 사용자 에이전트가 image request의 이미지의 너비와 높이를 판단할 수 있다면, 현재 요청상태부분적으로 사용 가능으로 설정합니다.

    4. 그렇지 않고, 만약 image request현재 요청이며, 그 상태사용 불가이고, 사용자 에이전트가 image request의 이미지가 치명적인 방식으로 손상되어 이미지 크기를 얻을 수 없음을 판단할 수 있는 경우, 현재 요청상태손상됨으로 설정합니다.

    이미지를 가져오는 동안 네트워킹 작업 소스에 의해 대기열에 추가된작업은 이미지의 프레젠테이션을 업데이트해야 하지만, 각 새 본문 부분이 들어올 때마다 사용자 에이전트가 이미지의 너비와 높이를 확인할 수 있는 경우, img 요소를 지정하고 이전 이미지를 교체하여 현재 요청프레젠테이션을 위해 img 요소의 현재 요청을 준비해야 합니다. 하나의 본문 부분이 완전히 디코딩되면 다음 단계를 수행합니다.

    1. img 요소의 현재 요청상태완전히 사용 가능으로 설정합니다.

    2. 이벤트 생략 가능이 설정되지 않았거나 previousURLurlString과 같지 않으면, img 요소를 지정하여 DOM 조작 작업 소스요소 작업을 대기열에 추가하여 img 요소에서 load라는 이름의 이벤트를 발생시킵니다.

    리소스 유형과 데이터가 아래 설명된 대로 지원되는 이미지 형식에 해당하는 경우

    이미지를 가져오는 동안 네트워킹 작업 소스에 의해 대기열에 추가된 다음 작업은 다음 단계를 실행해야 합니다.

    1. 사용자 에이전트가 이미지 요청의 이미지 너비와 높이를 확인할 수 있고 이미지 요청보류 중인 요청인 경우 이미지 요청상태부분적으로 사용 가능으로 설정합니다.

    2. 그렇지 않고, 사용자 에이전트가 이미지 요청의 이미지 너비와 높이를 확인할 수 있고 이미지 요청현재 요청인 경우, img 요소를 지정하여 이미지 요청을 프레젠테이션을 위해 준비하고 이미지 요청상태부분적으로 사용 가능으로 설정합니다.

    3. 그렇지 않고, 사용자 에이전트가 이미지 요청의 이미지가 이미지 크기를 가져올 수 없는 치명적인 방식으로 손상되었음을 확인할 수 있고 이미지 요청보류 중인 요청인 경우:

      1. 현재 요청보류 중인 요청에 대한 이미지 요청을 중단합니다.

      2. 보류 중인 요청을 현재 요청으로 업그레이드합니다.

      3. 현재 요청상태손상됨으로 설정합니다.

      4. img 요소에서 error라는 이름의 이벤트를 발생시킵니다.

    4. 그렇지 않고, 사용자 에이전트가 이미지 요청의 이미지가 이미지 크기를 가져올 수 없는 치명적인 방식으로 손상되었음을 확인할 수 있고 이미지 요청현재 요청인 경우:

      1. 이미지 요청에 대한 이미지 요청을 중단합니다.

      2. 이벤트 생략 가능이 설정되지 않았거나 previousURLurlString과 같지 않으면 img 요소에서 error라는 이름의 이벤트를 발생시킵니다.

    이미지를 가져오는 동안 네트워킹 작업 소스에 의해 대기열에 추가된 해당 작업 및 각 후속 작업이미지 요청현재 요청인 경우 이미지의 프레젠테이션을 적절하게 업데이트해야 합니다(예: 이미지가 프로그레시브 JPEG인 경우 각 패킷은 이미지의 해상도를 향상시킬 수 있음).

    또한 리소스가 가져와지면 네트워킹 작업 소스에 의해 대기열에 추가된 마지막 작업은 추가적으로 다음 단계를 실행해야 합니다.

    1. 이미지 요청보류 중인 요청인 경우, 현재 요청에 대한 이미지 요청을 중단하고, 보류 중인 요청을 현재 요청으로 업그레이드하고, img 요소를 지정하여 이미지 요청을 프레젠테이션을 위해 준비합니다.

    2. 이미지 요청완전히 사용 가능 상태로 설정합니다.

    3. 상위 계층 캐싱 무시 플래그가 설정된 상태로 key를 사용하여 사용 가능한 이미지 목록에 이미지를 추가합니다.

    4. 이벤트 생략 가능이 설정되지 않았거나 previousURLurlString과 같지 않으면 img 요소에서 load라는 이름의 이벤트를 발생시킵니다.

    그렇지 않으면

    이미지 데이터가 지원되는 파일 형식이 아닙니다. 사용자 에이전트는 이미지 요청상태손상됨으로 설정하고, 현재 요청보류 중인 요청에 대한 이미지 요청을 중단하고, 이미지 요청보류 중인 요청인 경우 보류 중인 요청을 현재 요청으로 업그레이드한 다음, 이벤트 생략 가능이 설정되지 않았거나 previousURLurlString과 같지 않으면 img 요소를 지정하여 DOM 조작 작업 소스요소 작업을 대기열에 추가하여 img 요소에서 error라는 이름의 이벤트를 발생시킵니다.

사용자 에이전트가 요소 x에 대해 위 알고리즘을 실행하는 동안, 요소가 연결된 상태가 아닌 경우에도 요소 x에 대한 강한 참조가 요소의 노드 문서에서 유지되어야 합니다.

이미지 요청 또는 null image request에 대해 이미지 요청을 중단하는 것은 다음 단계를 실행하는 것을 의미합니다:

  1. image request이 null이면 반환합니다.

  2. 가능하면 image request이미지 데이터를 잊어버립니다.

  3. image request에 대해 가져오기 알고리즘의 모든 인스턴스를 중단하고 해당 알고리즘에서 생성된 보류 중인 모든 태스크를 삭제합니다.

img 요소에 대해 대기 중인 요청을 현재 요청으로 업그레이드한다는 것은 다음 단계를 실행하는 것을 의미합니다:

  1. img 요소의 현재 요청보류 중인 요청으로 설정합니다.

  2. img 요소의 보류 중인 요청을 null로 설정합니다.

4.8.4.3.6 프레젠테이션을 위한 이미지 준비

이미지를 표시용으로 준비하다 이미지 요청 req와 주어진 이미지 요소 img에 대해:

  1. exifTagMapreq이미지 데이터에서 관련 코덱에 의해 얻은 EXIF 태그로 둔다. [EXIF]

  2. physicalWidthphysicalHeightreq이미지 데이터에서 관련 코덱에 의해 얻은 너비와 높이로 둔다.

  3. dimXexifTagMap의 태그 0xA002 (PixelXDimension)의 값으로 둔다.

  4. dimYexifTagMap의 태그 0xA003 (PixelYDimension)의 값으로 둔다.

  5. resXexifTagMap의 태그 0x011A (XResolution)의 값으로 둔다.

  6. resYexifTagMap의 태그 0x011B (YResolution)의 값으로 둔다.

  7. resUnitexifTagMap의 태그 0x0128 (ResolutionUnit)의 값으로 둔다.

  8. 다음 모든 항목이 참이면:

    • dimX가 양의 정수이다;

    • dimY가 양의 정수이다;

    • resX가 양의 부동 소수점 수이다;

    • resY가 양의 부동 소수점 수이다;

    • physicalWidth × 72 / resXdimX이다;

    • physicalHeight × 72 / resYdimY이다;

    • resUnit2 (Inch)이다,

    그러면:

    1. 만약 req이미지 데이터CORS-cross-origin이면, imgnatural dimensionsdimXdimY로 설정하고, img의 픽셀 데이터를 그에 맞게 스케일한다.

    2. 그렇지 않으면, reqpreferred density-corrected dimensions를 너비가 dimX이고 높이가 dimY인 구조체로 설정한다.

  9. reqimg 요소의 표시를 적절히 업데이트한다.

EXIF의 해상도는 CSS 포인트 당 인치와 동등하므로, 72는 해상도에서 크기를 계산하기 위한 기본값입니다.

이미지가 이미 프레젠테이션된 후에 EXIF가 도착하는 경우에 대해 아직 명확하게 지정되지 않았습니다. 참조 이슈 #4929.

4.8.4.3.7 이미지 소스 선택

이미지 요소 el에 대해 img 요소를 주어진 이미지 소스 선택하려면:

  1. el에 대한 소스 세트 업데이트를 수행합니다.

  2. el소스 세트가 비어 있으면, URL로 null을 반환하고 픽셀 밀도로 undefined를 반환합니다.

  3. el소스 세트에서 이미지 소스를 선택한 결과를 반환합니다.

소스 세트 sourceSet에 대해 이미지 소스를 선택하려면:

  1. sourceSet의 항목 b가 앞서 있는 항목 a와 동일한 픽셀 밀도 설명자를 가지고 있다면, b를 제거한다. sourceSet 내의 항목 중 앞서 있는 항목과 동일한 픽셀 밀도 설명자를 가진 항목이 없을 때까지 이 단계를 반복한다.

  2. 구현 정의 방식으로, sourceSet에서 하나의 이미지 소스를 선택한다. 이 선택을 selectedSource라 한다.

  3. selectedSource와 그에 연관된 픽셀 밀도를 반환한다.

4.8.4.3.8 속성에서 소스 세트 생성

문자열 default source, 문자열 srcset, 문자열 sizes, 요소 또는 null img이 주어졌을 때 소스 세트 생성을 요청받으면:

  1. source set을 빈 소스 세트로 설정합니다.

  2. srcset이 빈 문자열이 아닌 경우, source setsrcset파싱한 결과로 설정합니다.

  3. 소스 크기img와 함께 sizes파싱한 결과로 설정합니다.

  4. default source가 빈 문자열이 아니고, source set에 픽셀 밀도 디스크립터 값이 1인 이미지 소스너비 디스크립터가 포함되지 않은 경우, 기본 소스source set에 추가합니다.

  5. source set소스 밀도를 정규화합니다.

  6. source set을 반환합니다.

4.8.4.3.9 소스 세트 업데이트

주어진 img 또는 link 요소 el에 대해 소스 세트를 업데이트하도록 요청받으면, 사용자 에이전트는 다음을 수행해야 합니다:

  1. el소스 세트를 빈 소스 세트로 설정합니다.

  2. elements에 « el »을(를) 할당합니다.

  3. 만약 el이(가) picture 요소의 자식인 img 요소라면, elements의 내용을 el의 부모 노드의 자식 요소들로 교체하고, 상대적인 순서를 유지합니다.

  4. imgel을 할당합니다. 만약 el이(가) img 요소가 아니라면 null을 할당합니다.

  5. child에 대해 elements에서 다음을 수행합니다:

    1. 만약 childel과 동일하다면:

      1. default source를 빈 문자열로 설정합니다.

      2. srcset을 빈 문자열로 설정합니다.

      3. sizes을 빈 문자열로 설정합니다.

      4. 만약 el이(가) img 요소이고 srcset 속성을 가지고 있다면, srcset을 해당 속성의 값으로 설정합니다.

      5. 그렇지 않고, el이(가) link 요소이고 imagesrcset 속성을 가지고 있다면, srcset을 해당 속성의 값으로 설정합니다.

      6. 만약 el이(가) img 요소이고 sizes 속성을 가지고 있다면, sizes을 해당 속성의 값으로 설정합니다.

      7. 그렇지 않고, el이(가) link 요소이고 imagesizes 속성을 가지고 있다면, sizes을 해당 속성의 값으로 설정합니다.

      8. 만약 el이(가) img 요소이고 src 속성을 가지고 있다면, default source를 해당 속성의 값으로 설정합니다.

      9. 그렇지 않고, el이(가) link 요소이고 href 속성을 가지고 있다면, default source를 해당 속성의 값으로 설정합니다.

      10. el소스 세트default source, srcset, sizes, 그리고 img을 사용하여 소스 세트 생성의 결과로 설정합니다.

      11. 반환합니다.

        만약 el이(가) link 요소라면, elements에는 오직 el만 포함되므로, 이 단계가 즉시 도달되고 나머지 알고리즘은 실행되지 않습니다.

    2. 만약 childsource 요소가 아니라면, 다음으로 넘어갑니다.

    3. 만약 childsrcset 속성을 가지고 있지 않다면, 다음으로 넘어갑니다.

    4. child의 srcset 속성을 파싱하여, 반환된 source setsource set으로 한다.

    5. 만약 source set이(가) 0개의 이미지 소스를 가지고 있다면, 다음으로 넘어갑니다.

    6. 만약 childmedia 속성을 가지고 있으며, 그 값이 환경과 일치하지 않으면, 다음으로 넘어갑니다.

    7. child의 sizes 속성을 파싱하고, img을 사용하여 source set소스 크기를 반환된 값으로 설정합니다.

    8. 만약 childtype 속성을 가지고 있으며, 그 값이 알 수 없거나 지원되지 않는 MIME 타입이라면, 다음으로 넘어갑니다.

    9. 만약 childwidth 또는 height 속성을 가지고 있다면, el크기 속성 소스child로 설정합니다. 그렇지 않으면, el크기 속성 소스el로 설정합니다.

    10. 소스 밀도를 정규화합니다 source set의.

    11. el소스 세트source set으로 설정합니다.

    12. 반환합니다.

img 요소는 독립적으로 이전 형제 source 요소와 img 요소 자체를 고려하여 이미지 소스를 선택하며, 동일한 picture 요소 내의 다른 img 요소나 source 요소와 같은 무효한 요소는 무시합니다.

4.8.4.3.10 srcset 속성 파싱

요소에서 srcset 속성을 파싱하도록 요청받았을 때, 요소의 srcset 속성 값을 다음과 같이 파싱합니다:

  1. input을 이 알고리즘에 전달된 값으로 설정합니다.

  2. positioninput의 시작을 가리키는 포인터로 설정합니다.

  3. candidates를 초기에는 빈 소스 세트로 설정합니다.

  4. 분할 루프: position을 기준으로 input에서 ASCII 공백 문자 또는 U+002C 쉼표 문자를 포함하는 코드 포인트 시퀀스를 수집합니다. U+002C 쉼표 문자가 수집된 경우, 이는 파싱 오류입니다.

  5. positioninput의 끝을 넘어서면 candidates를 반환합니다.

  6. 코드 포인트 시퀀스 수집을 수행하여, ASCII 공백 문자가 아닌 input에서 position을 기준으로 시퀀스를 모으고, 그 결과를 url로 한다.

  7. descriptors를 새로운 빈 목록으로 설정합니다.

  8. 만약 url이 U+002C 쉼표로 끝난다면:

    1. url에서 모든 U+002C 쉼표 문자를 제거합니다. 만약 이 과정에서 하나 이상의 문자가 제거되었다면, 이는 파싱 오류입니다.

    그렇지 않다면:

    1. 기술자 토크나이저: position을 기준으로 input 내의 ASCII 공백 문자를 건너뜁니다.

    2. current descriptor를 빈 문자열로 설정합니다.

    3. state기술자 내로 설정합니다.

    4. cposition에서의 문자로 설정합니다. state의 값에 따라 다음을 수행합니다. 이 단계에서는 "EOF"가 input의 끝을 넘어선 position을 나타내는 특수 문자임을 의미합니다.

      기술자 내

      c의 값에 따라 다음을 수행합니다:

      ASCII 공백 문자

      만약 current descriptor가 비어 있지 않다면, current descriptordescriptors에 추가하고, current descriptor를 빈 문자열로 설정합니다. state기술자 후로 설정합니다.

      U+002C 쉼표 (,)

      positioninput의 다음 문자로 이동합니다. 만약 current descriptor가 비어 있지 않다면, 이를 descriptors에 추가합니다. 기술자 파서 단계로 이동합니다.

      U+0028 왼쪽 괄호 (()

      ccurrent descriptor에 추가합니다. state괄호 내로 설정합니다.

      EOF

      만약 current descriptor가 비어 있지 않다면, 이를 descriptors에 추가합니다. 기술자 파서 단계로 이동합니다.

      기타

      ccurrent descriptor에 추가합니다.

      괄호 내

      c의 값에 따라 다음을 수행합니다:

      U+0029 오른쪽 괄호 ())

      ccurrent descriptor에 추가합니다. state기술자 내로 설정합니다.

      EOF

      current descriptordescriptors에 추가합니다. 기술자 파서 단계로 이동합니다.

      기타

      ccurrent descriptor에 추가합니다.

      기술자 후

      c의 값에 따라 다음을 수행합니다:

      ASCII 공백 문자

      이 상태를 유지합니다.

      EOF

      기술자 파서 단계로 이동합니다.

      기타

      state기술자 내로 설정합니다. positioninput이전 문자로 설정합니다.

      positioninput의 다음 문자로 이동합니다. 이 단계를 반복합니다.

      향후 추가 사항과의 호환성을 위해, 이 알고리즘은 다중 기술자와 괄호를 포함한 기술자를 지원합니다.

  9. 기술자 파서: error아니오로 설정합니다.

  10. width없음으로 설정합니다.

  11. density없음으로 설정합니다.

  12. future-compat-h없음으로 설정합니다.

  13. descriptors의 각 기술자에 대해 다음 목록에서 적절한 단계를 실행합니다:

    기술자가 유효한 음수가 아닌 정수와 U+0077 라틴 소문자 W 문자로 구성된 경우
    1. 만약 사용자 에이전트가 sizes 속성을 지원하지 않는 경우, error로 설정합니다.

      규격 준수 사용자 에이전트는 sizes 속성을 지원합니다. 그러나, 사용자 에이전트는 실습에서 점진적으로 기능을 구현하고 배포하는 경향이 있습니다.

    2. 만약 widthdensity가 모두 없음이 아니라면, error로 설정합니다.

    3. 기술자에 음수가 아닌 정수 파싱 규칙을 적용합니다. 결과가 0이라면, error로 설정합니다. 그렇지 않으면, width를 그 결과로 설정합니다.

    기술자가 유효한 부동소수점 숫자와 U+0078 라틴 소문자 X 문자로 구성된 경우
    1. 만약 width, density, 그리고 future-compat-h가 모두 없음이 아니라면, error로 설정합니다.

    2. 기술자에 부동소수점 숫자 값 파싱 규칙을 적용합니다. 결과가 0보다 작다면, error로 설정합니다. 그렇지 않으면, density를 그 결과로 설정합니다.

      만약 density가 0이라면, 자연 치수는 무한대가 됩니다. 사용자 에이전트는 이미지를 렌더링할 수 있는 크기에 제한을 둘 것으로 예상됩니다.

    기술자가 유효한 음수가 아닌 정수와 U+0068 라틴 소문자 H 문자로 구성된 경우

    이는 파싱 오류입니다.

    1. 만약 future-compat-hdensity가 모두 없음이 아니라면, error로 설정합니다.

    2. 기술자에 음수가 아닌 정수 파싱 규칙을 적용합니다. 결과가 0이라면, error로 설정합니다. 그렇지 않으면, future-compat-h를 그 결과로 설정합니다.

    기타

    error로 설정합니다.

  14. 만약 future-compat-h없음이 아니고 width없음이라면, error로 설정합니다.

  15. 만약 error가 여전히 아니오라면, 새로운 이미지 소스candidates에 추가하며, URL을 url로, width가 없음이 아니라면 width로, density가 없음이 아니라면 pixel density로 설정합니다. 그렇지 않으면, 이는 파싱 오류입니다.

  16. 분할 루프 단계로 돌아갑니다.

4.8.4.3.11 sizes 속성 파싱

요소 element에서 img 요소 또는 null img와 함께 sizes 속성을 파싱하도록 요청받았을 때:

  1. unparsed sizes listelementsizes 속성 값(또는 속성이 없는 경우 빈 문자열)에서 쉼표로 구분된 구성 요소 값 목록 파싱의 결과로 설정합니다. [CSSSYNTAX]

  2. size를 null로 설정합니다.

  3. unparsed sizes list 내의 각 unparsed size에 대해:

    1. unparsed size의 끝에서 모든 연속된 <whitespace-token>을 제거합니다. unparsed size가 이제 비어 있다면, 이는 파싱 오류입니다. 계속합니다.

    2. 만약 unparsed size의 마지막 구성 요소 값이 유효한 음수가 아닌 <source-size-value>라면, size를 그 값으로 설정하고 unparsed size에서 구성 요소 값을 제거합니다. 수학 함수 이외의 CSS 함수는 유효하지 않습니다. 그렇지 않으면, 이는 파싱 오류입니다. 계속합니다.

    3. 만약 sizeauto이고, img가 null이 아니며, img렌더링 중이고, imgauto-sizes를 허용한다면, sizeimg구체적 객체 크기 너비로, CSS 픽셀 단위로 설정합니다.

      만약 size가 여전히 auto라면, 이는 무시됩니다.

    4. unparsed size의 끝에서 모든 연속된 <whitespace-token>을 제거합니다. unparsed size가 이제 비어 있다면:

      1. 만약 이것이 unparsed sizes list의 마지막 항목이 아니었다면, 이는 파싱 오류입니다.

      2. 만약 sizeauto가 아니라면, size를 반환합니다. 그렇지 않으면, 계속합니다.

    5. unparsed size의 남은 구성 요소 값<media-condition>으로 파싱합니다. 올바르게 파싱되지 않거나, 올바르게 파싱되었지만 <media-condition>이 false로 평가된다면, 계속합니다. [MQ]

    6. 만약 sizeauto가 아니라면, size를 반환합니다. 그렇지 않으면, 계속합니다.

  4. 100vw를 반환합니다.

마지막 항목이 아닌 <source-size-list><source-size-value><length>인 경우, 동반되는 <media-condition> 없이 단독으로 사용하는 것은 유효하지 않습니다. 그러나, 파싱 알고리즘은 리스트의 어느 지점에서도 이를 허용하며, 리스트의 이전 항목들이 사용되지 않았다면 즉시 이를 사이즈로 수락합니다. 이는 향후 확장을 가능하게 하고, 최종 쉼표와 같은 단순한 작성자 오류로부터 보호하기 위함입니다. auto 키워드는 다른 항목들이 뒤따라와 레거시 사용자 에이전트를 위한 폴백을 제공하는 것이 허용됩니다.

4.8.4.3.12 소스 밀도 정규화

이미지 소스픽셀 밀도 설명자, 너비 설명자, 또는 설명자 없이 URL과 함께 제공될 수 있습니다. 소스 세트를 정규화하면 모든 이미지 소스픽셀 밀도 설명자를 부여합니다.

소스 세트의 밀도를 정규화하라는 요청을 받으면, 사용자 에이전트는 다음을 수행해야 합니다:

  1. source set소스 크기source size로 설정합니다.

  2. source set 내의 각 이미지 소스에 대해:

    1. 이미지 소스픽셀 밀도 설명자가 있으면 다음 이미지 소스계속합니다.

    2. 그렇지 않고, 이미지 소스너비 설명자가 있으면 너비 설명자너비 설명자 값소스 크기로 나눈 x 단위를 갖는 픽셀 밀도 설명자로 바꿉니다.

      소스 크기가 0이면 밀도는 무한대가 되어 자연스러운 크기가 0x0이 됩니다.

    3. 그렇지 않으면 이미지 소스1x픽셀 밀도 설명자를 지정합니다.

4.8.4.3.13 환경 변화에 대응

사용자 에이전트는 img 요소의 이미지를 업데이트하여 환경 변화에 대응하기 위해 언제든지 다음 알고리즘을 실행할 수 있습니다. (사용자 에이전트가 이 알고리즘을 실행해야 할 의무는 없습니다. 예를 들어, 사용자가 더 이상 페이지를 보지 않는 경우, 환경이 다시 변할 수 있으므로 사용자가 페이지로 돌아올 때까지 어떤 이미지를 사용할지 결정하는 것을 연기할 수 있습니다.)

사용자 에이전트는 특히 사용자가 뷰포트 크기를 변경할 때(예: 창 크기를 조정하거나 페이지 확대/축소를 변경할 때)와 img 요소가 문서에 삽입될 때 이 알고리즘을 실행하여 밀도 보정된 자연 너비와 높이가 새로운 뷰포트와 일치하고, 아트 디렉션이 포함된 경우 올바른 이미지가 선택되도록 할 것을 권장합니다.

  1. 안정 상태 대기를 수행합니다. 동기식 섹션은 이 알고리즘의 나머지 모든 단계를 포함하며 알고리즘이 동기식 섹션이 종료되었다고 말할 때까지 계속됩니다. (동기식 섹션의 단계는 ⌛로 표시됩니다.)

  2. img 요소가 srcset 또는 picture를 사용하지 않거나 노드 문서완전히 활성화되지 않았거나, 이미지 데이터의 리소스 타입이 multipart/x-mixed-replace이거나, 보류 중인 요청이 null이 아니라면, 반환한다.

  3. 이미지 소스 선택에서 URL과 픽셀 밀도로부터 selected sourceselected pixel density를 얻습니다.

  4. selected source가 null인 경우, 반환합니다.

  5. selected sourceselected pixel density가 요소의 마지막 선택된 소스현재 픽셀 밀도와 동일한 경우, 반환합니다.

  6. URL 인코딩, 파싱 및 직렬화 결과를 사용하여 urlString을 설정합니다.

  7. urlString이 실패한 경우, 반환합니다.

  8. ⌛ 요소의 crossorigin 콘텐츠 속성의 상태를 corsAttributeState로 설정합니다.

  9. img 요소의 노드 문서원본origin으로 설정합니다.

  10. img 요소의 노드 문서관련 설정 객체client로 설정합니다.

  11. keyurlString, corsAttributeState, 및 corsAttributeStateNo CORS가 아닌 경우 origin을 포함하는 튜플로 설정합니다.

  12. urlStringcurrent URL로 가지는 새로운 이미지 요청image request로 설정합니다.

  13. ⌛ 요소의 보류 중인 요청image request로 설정한다.

  14. 동기식 섹션을 종료하고 나머지 단계를 병렬로 계속합니다.

  15. 사용 가능한 이미지 목록key의 항목이 포함되어 있는 경우, image request이미지 데이터를 항목의 데이터로 설정합니다. 다음 단계로 진행합니다.

    그렇지 않으면:

    1. 잠재적 CORS 요청 생성 결과를 request로 설정하고, urlString, "image", 및 corsAttributeState를 사용합니다.

    2. requestclientclient로 설정하고, requestinitiator를 "imageset"으로 설정하며, request동기 플래그를 설정한다.

    3. 요소의 referrerpolicy 속성의 현재 상태를 requestreferrer policy로 설정합니다.

    4. 요소의 fetchpriority 속성의 현재 상태를 request우선순위로 설정합니다.

    5. fetch를 사용하여 requestresponse를 가져옵니다.

    6. response안전하지 않은 응답네트워크 오류이거나, 이미지 형식이 지원되지 않는 경우(앞서 언급한 이미지 sniffing 규칙을 적용하여 판단함), 또는 사용자 에이전트가 image request의 이미지가 치명적으로 손상되어 이미지 크기를 얻을 수 없음을 판단한 경우, 또는 리소스 타입이 multipart/x-mixed-replace인 경우, 보류 중인 요청을 null로 설정하고 이 단계들을 중단한다.

    7. 그렇지 않으면, response안전하지 않은 응답image request이미지 데이터로 설정합니다. 이는 CORS 동일 출처 또는 CORS 교차 출처일 수 있으며, 이는 다른 API와의 상호작용에 영향을 미칩니다 (예: canvas에서 사용될 때).

  16. 요소 작업 대기열에 추가를 수행하여 img 요소와 다음 단계를 설정합니다:

    1. 만약 img 요소가 이 알고리즘이 시작된 이후 관련 뮤테이션(relevant mutations)을 겪었다면, pending request를 null로 설정하고 이 단계들을 중단한다.

    2. img 요소의 last selected sourceselected source로, img 요소의 current pixel densityselected pixel density로 설정한다.

    3. image requeststatecompletely available로 설정한다.

    4. 이미지를 key를 사용하여 사용 가능한 이미지 목록(list of available images)에 추가하고, 상위 계층 캐싱 무시(ignore higher-layer caching) 플래그를 설정한다.

    5. pending request를 current request로 업그레이드한다.

    6. 프레젠테이션을 위해 image request를 준비한다. 이때 img 요소를 사용한다.

    7. 이벤트(event)를 발생(Fire an event)시키며, 이름은 load이고, img 요소에 대해 발생시킨다.

4.8.4.4 이미지의 대체 텍스트를 제공하기 위한 요구 사항
4.8.4.4.1 일반적인 지침

별도로 명시되지 않은 경우, alt 속성은 반드시 지정되어야 하며, 그 값은 비어있어서는 안 됩니다. 이 값은 이미지의 적절한 대체물이 되어야 합니다. alt 속성에 대한 구체적인 요구 사항은 이미지가 표현하려는 의도에 따라, 다음 섹션에서 설명된 바와 같이 달라집니다.

대체 텍스트를 작성할 때 고려해야 할 가장 일반적인 규칙은 다음과 같습니다: 모든 이미지를 alt 속성의 텍스트로 교체해도 페이지의 의미가 변경되지 않도록 하는 것이 목적입니다.

따라서 일반적으로 대체 텍스트는 이미지를 포함할 수 없었을 때 작성했을 내용을 고려하여 작성할 수 있습니다.

이와 연관된 또 다른 규칙은 alt 속성의 값은 절대로 이미지의 캡션, 제목, 또는 설명으로 간주될 수 있는 텍스트를 포함해서는 안 된다는 것입니다. 이 속성은 사용자가 이미지를 대신하여 사용할 수 있는 대체 텍스트를 포함해야 하며, 이미지를 보완하기 위한 것이 아닙니다. 보완적인 정보가 필요하다면 title 속성을 사용할 수 있습니다.

또 다른 관련 규칙은 alt 속성의 값이 이미지 옆에 있는 본문에 이미 제공된 정보를 반복해서는 안 된다는 것입니다.

대체 텍스트를 생각하는 한 가지 방법은 이미지를 포함한 페이지를 누군가에게 전화로 설명한다고 생각하는 것입니다. 이미지가 있다는 사실을 언급하지 않고 페이지를 읽어주었을 때 사용하는 말이 일반적으로 대체 텍스트를 작성하는 좋은 출발점입니다.

하나 이상의 이미지를 포함하지만 텍스트 콘텐츠는 없는 a 요소가 하이퍼링크를 생성하거나, button 요소인 경우, alt 속성에는 링크나 버튼의 목적을 함께 전달하는 텍스트가 포함되어야 합니다.

이 예시에서는 사용자가 세 가지 색상 목록에서 선호하는 색상을 선택하도록 요청받습니다. 각 색상은 이미지로 제공되지만, 이미지를 표시하지 않도록 설정된 사용자 에이전트에서는 색상 이름이 대신 사용됩니다:

<h1>색상을 선택하세요</h1>
<ul>
 <li><a href="green.html"><img src="green.jpeg" alt="Green"></a></li>
 <li><a href="blue.html"><img src="blue.jpeg" alt="Blue"></a></li>
 <li><a href="red.html"><img src="red.jpeg" alt="Red"></a></li>
</ul>

이 예시에서는 각 버튼에 사용자가 원하는 색상 출력을 나타내는 이미지 세트가 있습니다. 각 경우에 첫 번째 이미지는 대체 텍스트를 제공합니다.

<button name="rgb"><img src="red" alt="RGB"><img src="green" alt=""><img src="blue" alt=""></button>
<button name="cmyk"><img src="cyan" alt="CMYK"><img src="magenta" alt=""><img src="yellow" alt=""><img src="black" alt=""></button>

각 이미지가 텍스트의 일부를 나타내므로, 이렇게도 작성할 수 있습니다:

<button name="rgb"><img src="red" alt="R"><img src="green" alt="G"><img src="blue" alt="B"></button>
<button name="cmyk"><img src="cyan" alt="C"><img src="magenta" alt="M"><img src="yellow" alt="Y"><img src="black" alt="K"></button>

그러나 다른 대체 텍스트와 함께 사용할 경우에는 이 방법이 효과적이지 않을 수 있으며, 각 경우에 대체 텍스트를 한 이미지에 포함시키는 것이 더 나을 수 있습니다:

<button name="rgb"><img src="red" alt="sRGB profile"><img src="green" alt=""><img src="blue" alt=""></button>
<button name="cmyk"><img src="cyan" alt="CMYK profile"><img src="magenta" alt=""><img src="yellow" alt=""><img src="black" alt=""></button>
4.8.4.4.3 대체 그래픽 표현을 가진 문구나 단락: 차트, 다이어그램, 그래프, 지도, 일러스트레이션

때때로 흐름도, 다이어그램, 그래프, 또는 방향을 보여주는 간단한 지도와 같은 그래픽 형식으로 더 명확하게 설명할 수 있습니다. 이러한 경우, img 요소를 사용하여 이미지를 제공할 수 있지만, 느린 연결 속도, 텍스트 전용 브라우저 사용, 손이 자유롭지 않은 자동차 음성 웹 브라우저를 사용하거나 단순히 시각장애인인 경우와 같은 이미지 표시가 불가능한 사용자를 위해 텍스트 버전도 제공되어야 합니다.

텍스트는 alt 속성에 제공되어야 하며, src 속성에 지정된 이미지와 동일한 메시지를 전달해야 합니다.

대체 텍스트는 이미지에 대한 설명이 아닌, 이미지의 대체물이라는 것을 이해하는 것이 중요합니다.

다음 예제에서는 이미지 형식의 흐름도가 있으며, alt 속성에 흐름도를 텍스트로 재구성한 내용이 있습니다:

<p>일반적인 경우, 토큰화 단계에서 처리하는 데이터는 네트워크에서 오지만, 스크립트에서도 올 수 있습니다.</p>
<p><img src="images/parsing-model-overview.svg" alt="네트워크는 데이터를 입력 스트림 전처리기로 전달하고, 전처리기는 데이터를 토큰화기로 전달합니다. 토큰화기는 데이터를 트리 구성 단계로 전달하며, 여기서 데이터는 DOM과 스크립트 실행으로 전달됩니다. 스크립트 실행은 DOM과 연결되며, document.write()를 사용하여 데이터를 토큰화기로 전달합니다."></p>

다음은 설명에 이미지를 포함시키는 문제에 대한 좋은 해결책과 나쁜 해결책을 보여주는 또 다른 예입니다.

먼저, 좋은 해결책입니다. 이 샘플은 이미지가 처음부터 존재하지 않았던 것처럼 대체 텍스트를 작성하는 방법을 보여줍니다.

<!-- 이것은 올바른 방법입니다. -->
<p>
 당신은 집 서쪽에 있는 열린 들판에 서 있습니다.
 <img src="house.jpeg" alt="그 집은 흰색이며, 앞문은 판자로 덮여 있습니다.">
 작은 우편함이 있습니다.
</p>

다음으로 나쁜 해결책입니다. 이 잘못된 방법에서는 대체 텍스트가 이미지에 대한 단순한 설명일 뿐, 이미지의 텍스트 대체물이 아닙니다. 이 방법이 나쁜 이유는 이미지가 표시되지 않을 때 텍스트의 흐름이 첫 번째 예제만큼 자연스럽지 않기 때문입니다.

<!-- 이것은 잘못된 방법입니다. -->
<p>
 당신은 집 서쪽에 있는 열린 들판에 서 있습니다.
 <img src="house.jpeg" alt="하얀색 집, 판자로 덮인 앞문.">
 작은 우편함이 있습니다.
</p>

"판자로 덮인 하얀색 집 사진"과 같은 텍스트도 역시 나쁜 대체 텍스트가 될 것입니다(비록 title 속성이나 figcaption 요소에 적합할 수는 있지만).

4.8.4.4.4 대체 그래픽 표현을 가진 짧은 구절이나 레이블: 아이콘, 로고

문서는 아이콘 형태로 정보를 포함할 수 있습니다. 아이콘은 시각적 브라우저 사용자들이 한눈에 특징을 인식하도록 돕기 위한 것입니다.

일부 경우, 아이콘은 동일한 의미를 전달하는 텍스트 레이블을 보조하는 역할을 합니다. 이러한 경우, alt 속성이 있어야 하지만, 그 값은 비워져 있어야 합니다.

여기서 아이콘은 동일한 의미를 전달하는 텍스트 옆에 있기 때문에, alt 속성은 비어 있습니다:

<nav>
 <p><a href="/help/"><img src="/icons/help.png" alt=""> 도움말</a></p>
 <p><a href="/configure/"><img src="/icons/configuration.png" alt=""> 설정 도구</a></p>
</nav>

다른 경우에는, 아이콘에 그 의미를 설명하는 텍스트가 옆에 없으며, 아이콘이 자체적으로 설명되어야 합니다. 이러한 경우, alt 속성에 해당하는 텍스트 레이블을 제공해야 합니다.

여기서는 뉴스 사이트의 게시물이 주제를 나타내는 아이콘으로 레이블이 지정되었습니다.

<body>
 <article>
  <header>
   <h1>라따뚜이, <i>올해의 영화</i> 수상</h1>
   <p><img src="movies.png" alt="영화"></p>
  </header>
  <p>픽사는 지난 12년 동안 8번이나 <i>올해의 영화</i> 상을 수상했습니다.</p>
 </article>
 </article>
  <header>
   <h1>최신 TWiT 에피소드가 온라인에 게시됨</h1>
   <p><img src="podcasts.png" alt="팟캐스트"></p>
  </header>
  </p>최신 TWiT 에피소드가 게시되었으며, 여기에서 여러 기술 뉴스 이야기를 듣고, iPhone에 대해 더 많은 정보를 배울 수 있습니다. 이번 주에 패널들은 iPhone의 애플 로고가 얼마나 반사되는지를 비교합니다.</p>
 </article>
</body>

많은 페이지에는 회사, 조직, 프로젝트, 밴드, 소프트웨어 패키지, 국가 등의 특정 엔티티를 나타내는 로고, 배지, 깃발 또는 상징이 포함되어 있습니다.

로고가 해당 엔티티를 대표하는 데 사용되는 경우(예: 페이지 헤딩으로 사용되는 경우), alt 속성에는 로고가 나타내는 엔티티의 이름이 포함되어야 합니다. alt 속성에는 "로고"라는 단어와 같은 텍스트가 포함되어서는 안 됩니다. 전달하려는 것은 그것이 로고라는 사실이 아니라 엔티티 자체이기 때문입니다.

로고가 엔티티의 이름 옆에 사용되는 경우, 로고는 보조적이며, alt 속성은 비어 있어야 합니다.

로고가 단순히 장식용으로 사용되는 경우(예: 브랜드 이미지로 사용되거나 해당 로고가 속한 엔티티를 언급하는 기사에 측면 이미지로 사용되는 경우), 아래의 순수 장식용 이미지 항목이 적용됩니다. 로고가 실제로 논의되고 있는 경우, 이는 대체 그래픽 표현(로고 자체)을 가진 문구나 단락으로 사용되고 있으므로, 위의 첫 번째 항목이 적용됩니다.

다음 코드 조각에서는 위의 네 가지 경우 모두가 나타납니다. 먼저, 회사 로고가 회사명을 대표하는 데 사용된 예입니다:

<h1><img src="XYZ.gif" alt="XYZ 회사"></h1>

다음은 회사 이름 바로 옆에 로고가 사용된 단락입니다. 따라서 대체 텍스트가 없습니다:

<article>
 <h2>뉴스</h2>
 <p>우리는 최근에 <img src="alpha.gif" alt=""> ΑΒΓ 회사를 인수할 계획입니다. 이 회사는 우리 제품 유형을 전문으로 하는 작은 그리스 회사입니다.</p>

세 번째 코드 조각에서는 획득에 대해 논의하는 더 큰 기사에서 사이드에 로고가 사용되었습니다:

<aside><p><img src="alpha-large.gif" alt=""></p></aside>
 <p>ΑΒΓ 회사는 좋은 분기를 보냈으며, 그들의 계정을 분석한 파이 차트 연구 결과는 파란색 슬라이스가 초록색 및 주황색 슬라이스보다 훨씬 크다는 것을 보여줍니다. 이는 항상 좋은 징조입니다.</p>
</article>

마지막으로, 로고에 대해 논의하는 의견 기사가 있습니다. 따라서 로고는 대체 텍스트에 자세히 설명되어 있습니다.

<p>그들의 로고를 잠시 생각해 보십시오:</p>

<p><img src="/images/logo" alt="초록색 원 안에 중심에 위치한 초록색 물음표로 구성되어 있습니다."></p>

<p>이 얼마나 독창적이지 않습니까? 저는 이 사양들이 이제 모든 사람들이 채택할 것이라고 확신합니다! 그들은 적어도 일련의 둥근 사각형이 있는 일종의 무언가를 시도했을 것입니다. 적어도 그린과 굵은 흰색 윤곽선의 다양한 색조가 있는 것은 파란색 책 표지에 잘 어울렸을 것입니다.</p>

이 예는 이미지가 사용 가능하지 않을 때, 텍스트가 대신 사용되며, 텍스트가 마치 이미지가 처음부터 없었던 것처럼 주변 텍스트와 매끄럽게 연결되는 방식으로 대체 텍스트를 작성해야 함을 보여줍니다.

4.8.4.4.5 그래픽으로 렌더링된 텍스트: 타이포그래피 효과

때때로 이미지는 단지 텍스트로만 구성되며, 이미지의 목적은 텍스트를 렌더링하는 데 사용된 실제 타이포그래피 효과를 강조하는 것이 아니라, 단순히 텍스트 자체를 전달하는 것입니다.

이러한 경우, alt 속성은 반드시 존재해야 하며, 이미지 자체에 쓰인 것과 동일한 텍스트로 구성되어야 합니다.

예를 들어, "Earth Day"라는 텍스트가 포함된 그래픽이 있다고 가정해 보겠습니다. 이 텍스트는 모든 글자가 꽃과 식물로 장식되어 있습니다. 이 텍스트가 단순히 그래픽 사용자를 위해 페이지를 돋보이게 하기 위한 제목으로 사용된다면, 적절한 대체 텍스트는 단순히 "Earth Day"일 뿐이며, 장식에 대해 언급할 필요는 없습니다:

<h1><img src="earthdayheading.png" alt="Earth Day"></h1>

조명된 필사본에서는 일부 이미지에 그래픽을 사용할 수 있습니다. 이러한 상황에서 대체 텍스트는 이미지가 나타내는 문자 자체일 뿐입니다.

<p><img src="initials/o.svg" alt="O">nce upon a time and a long long time ago, late at
night, when it was dark, over the hills, through the woods, across a great ocean, in a land far
away, in a small house, on a hill, under a full moon...

이미지가 Unicode로는 나타낼 수 없는 문자를 표현하는 데 사용되는 경우, 예를 들어, 외자 문자나 새로운 통화 기호와 같은 새로운 문자일 경우, 대체 텍스트는 그 문자의 발음을 나타내는 더 일반적인 방식으로 제공해야 합니다. 예를 들어, 그 문자의 발음을 나타내기 위해 히라가나나 가타카나를 사용할 수 있습니다.

1997년의 이 예에서는 한 막대가 아닌 두 막대를 가진 꼬불꼬불한 E 모양의 새로운 통화 기호가 이미지로 표현되어 있습니다. 대체 텍스트는 그 문자의 발음을 제공합니다.

<p>단지 <img src="euro.png" alt="euro"> 5.99!

문자와 동일한 목적을 제공할 수 있는 경우 이미지를 사용하지 않아야 합니다. 예를 들어, 장식 때문에 텍스트를 직접적으로 나타낼 수 없거나 적절한 문자가 없기 때문에 이미지를 사용하는 것이 적절한 경우에만 이미지를 사용해야 합니다.

작성자가 특정 문자를 지원하지 않는 기본 시스템 폰트 때문에 이미지를 사용하려는 유혹을 받는다면, 웹 폰트가 이미지보다 더 나은 솔루션입니다.

4.8.4.4.6 주변 텍스트의 일부에 대한 그래픽 표현

많은 경우에 이미지는 실제로 보조적인 역할을 하며, 그 존재는 단지 주변 텍스트를 강화하는 데 그칩니다. 이러한 경우, alt 속성은 반드시 존재해야 하며, 그 값은 빈 문자열이어야 합니다.

일반적으로 이미지를 제거해도 페이지의 유용성이 떨어지지 않지만, 이미지를 포함하면 시각적 브라우저 사용자가 개념을 더 쉽게 이해할 수 있는 경우에 이 범주에 속합니다.

이전 단락을 그래픽으로 표현한 플로우차트:

<p>네트워크는 데이터를 입력 스트림 전처리기로 전달하고, 이것은 다시 토크나이저로 전달되며, 그 후 트리 구성 단계로 전달됩니다. 여기서 데이터는 DOM과 스크립트 실행으로 모두 전달됩니다. 스크립트 실행은 DOM과 연결되어 있으며, document.write()를 사용하여 데이터를 다시 토크나이저로 전달합니다.</p>
<p><img src="images/parsing-model-overview.svg" alt=""></p>

이러한 경우에 대체 텍스트에 캡션만 포함하는 것은 잘못된 것입니다. 캡션을 포함하려면 title 속성을 사용하거나 figurefigcaption 요소를 사용할 수 있습니다. 후자의 경우, 이미지는 실제로 대체 그래픽 표현이 있는 문구 또는 단락이 되며, 따라서 대체 텍스트가 필요합니다.

<!-- title="" 속성을 사용하는 경우 -->
<p>네트워크는 데이터를 입력 스트림 전처리기로 전달하고, 이것은 다시 토크나이저로 전달되며, 그 후 트리 구성 단계로 전달됩니다. 여기서 데이터는 DOM과 스크립트 실행으로 모두 전달됩니다. 스크립트 실행은 DOM과 연결되어 있으며, document.write()를 사용하여 데이터를 다시 토크나이저로 전달합니다.</p>
<p><img src="images/parsing-model-overview.svg" alt="" title="파싱 모델의 플로우차트 표현"></p>
<!-- <figure> 및 <figcaption>을 사용하는 경우 -->
<p>네트워크는 데이터를 입력 스트림 전처리기로 전달하고, 이것은 다시 토크나이저로 전달되며, 그 후 트리 구성 단계로 전달됩니다. 여기서 데이터는 DOM과 스크립트 실행으로 모두 전달됩니다. 스크립트 실행은 DOM과 연결되어 있으며, document.write()를 사용하여 데이터를 다시 토크나이저로 전달합니다.</p>
<figure>
 <img src="images/parsing-model-overview.svg" alt="네트워크는 입력 스트림 전처리기로, 전처리기는 토크나이저로, 토크나이저는 트리 구성 단계로 이어집니다. 트리 구성 단계에서 두 가지 항목으로 이어집니다. 첫 번째는 스크립트 실행으로, document.write()를 통해 다시 토크나이저로 이어집니다. 두 번째 항목은 DOM으로, DOM은 스크립트 실행과 연결됩니다.">
 <figcaption>파싱 모델의 플로우차트 표현.</figcaption>
</figure>
<!-- 잘못된 방법입니다. 이렇게 하지 마십시오. 위의 예제를 따르세요. -->
<p>네트워크는 데이터를 입력 스트림 전처리기로 전달하고, 이것은 다시 토크나이저로 전달되며, 그 후 트리 구성 단계로 전달됩니다. 여기서 데이터는 DOM과 스크립트 실행으로 모두 전달됩니다. 스크립트 실행은 DOM과 연결되어 있으며, document.write()를 사용하여 데이터를 다시 토크나이저로 전달합니다.</p>
<p><img src="images/parsing-model-overview.svg" alt="파싱 모델의 플로우차트 표현"></p>
<!-- 이미지 캡션을 alt="" 속성에 포함하지 마세요! -->

이전 단락을 그래픽으로 표현한 그래프:

<p>2007년 웹의 수십억 페이지를 다룬 연구에 따르면, 약 62%의 문서가 웹 브라우저의 Quirks 렌더링 모드를 트리거했으며, 약 30%는 Almost Standards 모드를, 약 9%는 Standards 모드를 트리거했습니다.</p>
<p><img src="rendering-mode-pie-chart.png" alt=""></p>
4.8.4.4.7 부수적 이미지

때때로 이미지는 콘텐츠에 필수적이지 않지만, 순전히 장식적이지도 않고 텍스트와 완전히 중복되지도 않습니다. 이러한 경우, alt 속성이 반드시 존재해야 하며, 그 값은 빈 문자열이거나 이미지가 전달하는 정보를 텍스트로 표현한 것이어야 합니다. 이미지에 제목을 나타내는 캡션이 있는 경우, alt 속성의 값은 비어 있어서는 안 됩니다(그렇지 않으면 시각적이지 않은 독자에게 혼란을 줄 수 있습니다).

정치 인물에 대한 뉴스 기사에서 그 인물의 얼굴이 이미지로 표시된 경우를 생각해보세요. 이 이미지는 순전히 장식적이지 않으므로 스토리와 관련이 있습니다. 이미지가 스토리와 완전히 중복되지도 않으므로 정치인이 어떻게 생겼는지 보여줍니다. 대체 텍스트를 제공할 필요가 있는지 여부는 이미지가 텍스트의 해석에 영향을 미치는지에 따라 저자의 결정에 따라 달라집니다.

첫 번째 변형에서는 이미지가 맥락 없이 표시되며 대체 텍스트가 제공되지 않습니다:

<p><img src="president.jpeg" alt=""> 오늘의 국민투표를 앞두고 대통령은 모든 유권자에게 공개 서한을 작성했습니다. 서한에서 그녀는 나라가 분열되어 있다고 인정했습니다.</p>

사진이 단순히 얼굴을 나타내는 것이라면 그것을 설명하는 데는 가치가 없을 수 있습니다. 독자가 그 인물이 붉은 머리인지 금발 머리인지, 흰 피부인지 검은 피부인지, 한 눈인지 두 눈인지에 관심이 없을 것입니다.

그러나 사진이 더 동적이고 예를 들어 정치인이 화를 내거나, 매우 행복해하거나, 크게 낙담한 모습을 보여준다면, 그러한 대체 텍스트는 기사의 분위기를 설정하는 데 유용할 것입니다. 그렇지 않으면 그 분위기가 놓칠 수 있습니다:

<p><img src="president.jpeg" alt="대통령이 슬퍼하고 있다."> 오늘의 국민투표를 앞두고 대통령은 모든 유권자에게 공개 서한을 작성했습니다. 서한에서 그녀는 나라가 분열되어 있다고 인정했습니다.</p>
<p><img src="president.jpeg" alt="대통령이 기뻐하고 있다!"> 오늘의 국민투표를 앞두고 대통령은 모든 유권자에게 공개 서한을 작성했습니다. 서한에서 그녀는 나라가 분열되어 있다고 인정했습니다.</p>

그 인물이 "슬프다" 또는 "기쁘다"는 사실은 단락의 나머지 부분이 어떻게 해석되어야 하는지에 영향을 미칩니다: 그녀가 나라가 분열된 것에 불만이 있음을 말하고 있는 것인지, 아니면 분열된 나라가 그녀의 정치 경력에 좋다는 것을 말하고 있는 것인지에 따라 해석이 달라집니다.

이미지에 캡션이 있는 경우, 대체 텍스트를 포함함으로써 비시각적 사용자가 캡션이 무엇을 참조하는지 혼란스러워하지 않도록 합니다.

<p>오늘의 국민투표를 앞두고 대통령은 모든 유권자에게 공개 서한을 작성했습니다. 서한에서 그녀는 나라가 분열되어 있다고 인정했습니다.</p>
<figure>
 <img src="president.jpeg" alt="높은 이마, 밝은 표정, 짙은 머리카락으로 완성된 대통령의 얼굴.">
 <figcaption> 루리타니아의 대통령. 사진 © 2014 PolitiPhoto. </figcaption>
</figure>
4.8.4.4.8 정보 추가가 없는 순전히 장식적인 이미지

이미지가 장식적이지만 페이지에 특정적으로 사용되지 않는 경우 — 예를 들어 사이트 전체의 디자인 스키마의 일부를 형성하는 이미지 — 해당 이미지는 문서의 마크업이 아닌 사이트의 CSS에 지정해야 합니다.

그러나 주변 텍스트에서 논의되지 않지만 여전히 관련성이 있는 장식적인 이미지는 img 요소를 사용하여 페이지에 포함할 수 있습니다. 이러한 이미지는 장식적이지만 여전히 콘텐츠의 일부를 형성합니다. 이 경우 alt 속성이 반드시 존재해야 하며, 그 값은 빈 문자열이어야 합니다.

이미지가 관련성이 있지만 순전히 장식적인 예는 블랙 록 시티 풍경의 사진을 포함한 버닝 맨 행사에 대한 블로그 게시물, 또는 시를 낭송하는 페이지에 포함된 시에서 영감을 받은 그림의 이미지 등이 포함될 수 있습니다. 다음 코드 조각은 후자의 경우를 보여줍니다(이 코드 조각에는 첫 번째 절만 포함되어 있습니다):

<h1>The Lady of Shalott</h1>
<p><img src="shalott.jpeg" alt=""></p>
<p>On either side the river lie<br>
Long fields of barley and of rye,<br>
That clothe the wold and meet the sky;<br>
And through the field the road run by<br>
To many-tower'd Camelot;<br>
And up and down the people go,<br>
Gazing where the lilies blow<br>
Round an island there below,<br>
The island of Shalott.</p>

그림이 더 작은 이미지 파일로 잘려 다시 완전한 그림을 형성하도록 함께 표시될 때, 하나의 이미지에는 alt 속성이 전체 그림에 적합한 관련 규칙에 따라 설정되어야 하며, 나머지 모든 이미지의 alt 속성은 빈 문자열로 설정되어야 합니다.

다음 예에서 XYZ Corp의 회사 로고를 나타내는 그림이 두 조각으로 나뉘었으며, 첫 번째는 "XYZ"라는 글자를, 두 번째는 "Corp"라는 단어를 포함하고 있습니다. 대체 텍스트("XYZ Corp")는 모두 첫 번째 이미지에 있습니다.

<h1><img src="logo1.png" alt="XYZ Corp"></img src="logo2.png" alt=""></h1>

다음 예에서 평가는 세 개의 채워진 별과 두 개의 빈 별로 표시됩니다. 대체 텍스트가 "★★★☆☆"일 수 있지만, 저자는 대신 "3 out of 5"라는 형태로 평가를 더 유용하게 제공하기로 결정했습니다. 이는 첫 번째 이미지의 대체 텍스트이며 나머지는 빈 대체 텍스트를 갖습니다.

<p>Rating: <meter max=5 value=3><img src="1" alt="3 out of 5"
  ></img src="1" alt=""></img src="1" alt=""></img src="0" alt=""
  ></img src="0" alt=""></meter></p>

일반적으로 링크를 위해 이미지를 분할하는 대신 이미지 맵을 사용하는 것이 좋습니다.

그러나 이미지가 실제로 분할되어 분할된 그림의 구성 요소 중 일부가 링크의 유일한 내용물인 경우, 각 링크당 하나의 이미지는 해당 링크의 목적을 나타내는 alt 속성에 대체 텍스트를 가져야 합니다.

다음 예에서는 날아다니는 스파게티 몬스터 엠블럼을 나타내는 그림으로, 각 왼쪽 면발과 오른쪽 면발이 다른 이미지에 들어 있어 사용자가 모험에서 왼쪽을 선택하거나 오른쪽을 선택할 수 있습니다.

<h1>The Church</h1>
<p>You come across a flying spaghetti monster. Which side of His Noodliness do you wish to reach out for?</p>
<p><a href="?go=left" ><img src="fsm-left.png"  alt="Left side."></a
  ><img src="fsm-middle.png" alt=""
  ><a href="?go=right"><img src="fsm-right.png" alt="Right side."></a></p>
4.8.4.4.11 콘텐츠의 주요 부분

어떤 경우에는 이미지가 콘텐츠의 중요한 부분을 차지합니다. 예를 들어, 사진 갤러리의 일부인 페이지에서는 이미지 자체가 페이지의 핵심일 수 있습니다.

콘텐츠의 주요 부분을 구성하는 이미지에 대한 대체 텍스트를 제공하는 방법은 이미지의 출처에 따라 다릅니다.

일반적인 경우

잡지 리뷰의 스크린샷 시리즈나 만화, 해당 사진에 대한 블로그 게시물과 같이 이미지에 대한 자세한 대체 텍스트를 제공할 수 있는 경우, 이미지의 대체로 사용할 수 있는 텍스트가 alt 속성에 제공되어야 합니다.

새로운 OS의 스크린샷 갤러리에 있는 스크린샷 예시:

<figure>
 <img src="KDE%20Light%20desktop.png"
      alt="바탕화면은 파란색이며, 왼쪽에는 두 개의 열로 이루어진 아이콘이 있습니다. 시스템, 홈, K-Mail 등으로 읽을 수 있습니다. 메뉴가 창에 맞지 않을 경우 두 번째 줄로 감싸진 창이 열려 있습니다. 창 상단에는 아이콘 목록이 있으며, 아래에는 주소 표시줄, 왼쪽에는 탭 아이콘 목록, 하단에는 상태 표시줄, 중간에는 두 개의 창이 있습니다. 바탕화면 하단에는 몇 개의 버튼, 페이저, 열린 응용 프로그램 목록 및 시계가 있는 막대가 있습니다.">
 <figcaption>KDE 바탕화면의 스크린샷.</figcaption>
</figure>

재무 보고서의 그래프 예시:

<img src="sales.gif"
     title="판매 그래프"
     alt="1998년부터 2005년까지 매출이 매년 다음과 같은 비율로 증가했습니다: 624%, 75%, 138%, 40%, 35%, 9%, 21%">

"판매 그래프"는 판매 그래프에 대한 부적절한 대체 텍스트입니다. 캡션으로 적합한 텍스트는 일반적으로 대체 텍스트로 적합하지 않습니다.

완전한 설명이 어려운 이미지

어떤 경우에는 이미지의 특성상 대체 텍스트를 완벽하게 제공하는 것이 불가능할 수 있습니다. 예를 들어, 이미지가 명확하지 않거나, 복잡한 프랙탈이거나, 상세한 지형도일 수 있습니다.

이러한 경우 alt 속성에는 적절한 대체 텍스트가 포함되어야 하지만, 그 텍스트는 다소 간단할 수 있습니다.

예를 들어, 로르샤흐 잉크블롯 테스트의 이미지를 설명하는 데 유용한 텍스트는 거의 없습니다. 그러나 간단한 설명이라도 없는 것보다 낫습니다:

<figure>
 <img src="/commons/a/a7/Rorschach1.jpg" alt="왼쪽-오른쪽 대칭을 가진 형태로, 경계가 흐릿하며, 중앙에 작은 틈이 있고, 중앙에서 약간 비켜난 두 개의 큰 틈과 그 아래에 두 개의 유사한 틈이 있습니다. 윤곽은 하단보다 상단이 넓으며, 측면은 중앙보다 위로 더 많이 확장되고, 중앙은 측면 아래로 확장됩니다.">
 <figcaption>로르샤흐 잉크블롯 테스트의 첫 번째 카드의 검은 윤곽.</figcaption>
</figure>

다음은 대체 텍스트의 잘못된 사용 사례입니다:

<!-- 이 예시는 잘못된 것입니다. 따라하지 마십시오. -->
<figure>
 <img src="/commons/a/a7/Rorschach1.jpg" alt="로르샤흐 잉크블롯 테스트의 첫 번째 카드의 검은 윤곽.">
 <figcaption>로르샤흐 잉크블롯 테스트의 첫 번째 카드의 검은 윤곽.</figcaption>
</figure>

이와 같이 캡션을 대체 텍스트에 포함시키는 것은 사용자에게 중복된 정보를 제공하여 불필요하게 혼란을 줄 수 있습니다.

또한, 프랙탈과 같이 완전한 설명이 어려운 이미지의 예도 있습니다. 프랙탈은 본질적으로 무한한 세부 사항을 포함하고 있기 때문입니다.

다음은 만델브로 집합 이미지에 대한 전체 보기의 대체 텍스트를 제공하는 한 가지 방법입니다.

<img src="ms1.jpeg" alt="만델브로 집합은 실축의 양의 방향에서 꼭지점이 있는 심장형으로 나타나며, 같은 중심선에 따라 정렬된 더 작은 전구가 부정적인 방향에서 접촉하며, 이러한 두 모양은 다양한 크기의 더 작은 전구로 둘러싸여 있습니다.">

비슷하게, 전기의 일부로 사람의 얼굴 사진이 포함된 경우, 이는 콘텐츠와 매우 관련이 있고 중요한 부분으로 간주될 수 있지만, 이를 완전히 텍스트로 대체하는 것은 어려울 수 있습니다:

<section class="bio">
 <h1>아이작 아시모프의 전기</h1>
 <p>1920년에 <b>이삭 유도비치 오지모프</b>라는 이름으로 태어난 아이작은 다작 작가였습니다.</p>
 <p><img src="headpics/asimov.jpeg" alt="아이작 아시모프는 짙은 머리카락, 높은 이마, 안경을 썼습니다. 나이가 들어서는 긴 흰색 구레나룻을 기르기도 했습니다."></p>
 <p>아시모프는 러시아에서 태어났으며, 세 살 때 미국으로 이주했습니다.</p>
 <p>...</p>
</section>

이러한 경우 대체 텍스트에 이미지 자체의 존재를 언급하는 것은 불필요하고 권장되지 않습니다. 예를 들어, 대체 텍스트가 "아이작 아시모프의 사진"이라고 하면, 적합한 사용자 에이전트는 "(이미지) 아이작 아시모프의 사진" 대신 "(이미지) 아이작 아시모프는 짙은 머리카락, 높은 이마, 안경을 썼습니다..."라고 읽어주는 것이 더 유용합니다.

내용을 알 수 없는 이미지

어떤 경우에는 이미지에 대한 대체 텍스트가 전혀 제공되지 않을 수 있습니다. 예를 들어, 이미지가 자동으로 얻어지거나 관련된 대체 텍스트가 없는 경우(예: 웹캠), 스크립트를 사용하여 사용자가 제공한 이미지를 사용하여 페이지를 생성하는 경우(예: 사진 공유 사이트), 또는 저자 자신이 이미지가 무엇을 나타내는지 모르는 경우(예: 시각장애인이 블로그에 이미지를 공유하는 경우) 등이 있습니다.

이 경우 alt 속성을 생략할 수 있지만, 다음 조건 중 하나를 충족해야 합니다.

이러한 경우는 가능한 최소한으로 유지해야 합니다. 저자가 실제 대체 텍스트를 제공할 가능성이 조금이라도 있다면, alt 속성을 생략하는 것은 허용되지 않습니다.

사진 공유 사이트에서 메타데이터 없이 캡션만 포함된 이미지를 받은 경우 다음과 같이 표시할 수 있습니다:

<figure>
 <img src="1100670787_6a7c664aef.jpg">
 <figcaption>Bubbles traveled everywhere with us.</figcaption>
</figure>

그러나 사용자로부터 얻은 이미지의 중요한 부분에 대한 자세한 설명을 페이지에 포함시키는 것이 더 좋습니다.

시각장애인의 블로그에 사용자가 촬영한 사진이 표시되는 경우, 초기에는 사용자가 촬영한 사진이 무엇을 보여주는지 모를 수 있습니다:

<article>
 <h1>사진을 찍었어요</h1>
 <p>오늘 나가서 사진을 찍었어요!</p>
 <figure>
  <img src="photo2.jpeg">
  <figcaption>내 현관 앞에서 눈을 감고 찍은 사진.</figcaption>
 </figure>
</article>

그러나 시간이 지나면서 친구들로부터 이미지에 대한 설명을 얻고 대체 텍스트를 포함할 수 있습니다:

<article>
 <h1>사진을 찍었어요</h1>
 <p>오늘 나가서 사진을 찍었어요!</p>
 <figure>
  <img src="photo2.jpeg" alt="사진에는 지붕 가장자리에서 매달려 있는 다람쥐 먹이통이 보입니다. 먹이통은 절반 정도 차 있으며, 주변에는 다람쥐가 없습니다. 배경에는 초점이 맞지 않은 나무들이 찍혀 있습니다. 먹이통은 나무로 만들어졌으며, 금속 그물이 붙어 있고, 안에는 땅콩이 들어 있습니다. 지붕의 가장자리도 나무로 만들어졌으며, 흰색과 옅은 파란색 줄무늬로 칠해져 있습니다.">
  <figcaption>내 현관 앞에서 눈을 감고 찍은 사진.</figcaption>
 </figure>
</article>

때로는 이미지의 전체적인 의미가 텍스트 설명을 제공하지 않는 것이며, 사용자가 설명을 제공하도록 유도하는 경우도 있습니다. 예를 들어, CAPTCHA 이미지의 목적은 사용자가 그래픽을 실제로 읽을 수 있는지 확인하는 것입니다. 다음은 CAPTCHA를 표시하는 한 가지 방법입니다(title 속성에 주목하십시오):

<p><label>이 이미지에는 무엇이 적혀 있습니까?
<img src="captcha.cgi?id=8934" title="CAPTCHA">
<input type=text name=captcha></label>
(이미지를 볼 수 없는 경우 <a href="?audio">오디오</a> 테스트를 대신 사용할 수 있습니다.)</p>

또한 이미지에 대한 대체 텍스트를 정확하게 작성하는 목적으로 이미지를 표시하고 대체 텍스트를 요청하는 소프트웨어도 있습니다. 이러한 페이지는 다음과 같은 이미지 표를 포함할 수 있습니다:

<table>
 <thead>
  <tr> <th> 이미지 <th> 설명
 <tbody>
  <tr>
   <td> <img src="2421.png" title="이미지 640 x 100, 파일 이름 'banner.gif'">
   <td> <input name="alt2421">
  </tr>
   </td> <img src="2422.png" title="이미지 200 x 480, 파일 이름 'ad3.gif'">
   <td> <input name="alt2422">
</table>

이 예에서도 가능한 많은 유용한 정보가 title 속성에 포함되어 있다는 점에 유의합니다.

일부 사용자는 이미지 자체를 전혀 사용할 수 없습니다(예: 연결 속도가 매우 느리거나 텍스트 전용 브라우저를 사용하거나 차량용 음성 웹 브라우저로 페이지를 듣거나 단순히 시각장애인이기 때문입니다). 이 때문에 alt 속성은 대체 텍스트가 제공되지 않거나 제공할 수 없는 경우에만 생략할 수 있으며, 위의 예시와 같이 제공되지 않은 경우에만 생략할 수 있습니다. 저자의 노력 부족은 alt 속성을 생략할 수 있는 정당한 이유가 아닙니다.

4.8.4.4.12 사용자에게 의도되지 않은 이미지

일반적으로 저자는 img 요소를 이미지를 보여주는 것 외의 목적으로 사용하는 것을 피해야 합니다.

img 요소가 페이지 뷰 수를 계산하는 서비스의 일부와 같이 이미지를 표시하는 것 외의 목적으로 사용되는 경우, alt 속성은 빈 문자열이어야 합니다.

이러한 경우 widthheight 속성은 모두 0으로 설정해야 합니다.

4.8.4.4.13 이미지를 볼 수 있는 것으로 알려진 특정 인물에게 보내는 이메일 또는 개인 문서에 포함된 이미지

이 섹션은 공개적으로 접근할 수 있는 문서나 저자가 개인적으로 알지 못하는 대상 독자를 대상으로 하는 문서(예: 웹사이트의 문서, 공개 메일링 리스트에 발송된 이메일, 소프트웨어 문서)에는 적용되지 않습니다.

이미지를 볼 수 있는 것으로 알려진 특정 인물에게 보내는 개인 통신(예: HTML 이메일)에 이미지가 포함된 경우, alt 속성을 생략할 수 있습니다. 그러나 이러한 경우에도 사용자가 이미지를 지원하지 않는 메일 클라이언트를 사용하는 경우나, 문서가 이미지를 쉽게 볼 수 없는 다른 사용자에게 전달될 수 있음을 고려하여 저자는 대체 텍스트를 포함할 것을 강력히 권장합니다(위에서 설명한 이미지 종류에 따라 적절하게).

4.8.4.4.14 마크업 생성기를 위한 지침

마크업 생성기(WYSIWYG 저작 도구와 같은)는 가능한 한 사용자로부터 대체 텍스트를 받아야 합니다. 그러나 많은 경우에 이것이 불가능하다는 점이 인식됩니다.

링크의 유일한 콘텐츠로 사용되는 이미지의 경우, 마크업 생성기는 링크 대상의 제목이나 URL을 확인하여 이 정보를 대체 텍스트로 사용해야 합니다.

캡션이 있는 이미지의 경우, 마크업 생성기는 figurefigcaption 요소 또는 title 속성을 사용하여 이미지의 캡션을 제공해야 합니다.

마지막 수단으로 구현자는 이미지가 단순히 장식적이며 정보는 추가하지 않지만 여전히 주변 콘텐츠에 특정한 이미지라고 가정하고 alt 속성을 빈 문자열로 설정하거나, 이미지가 콘텐츠의 중요한 부분이라고 가정하고 alt 속성을 아예 생략해야 합니다.

마크업 생성기는 대체 텍스트를 얻을 수 없어서 alt 속성을 생략해야 하는 img 요소에 generator-unable-to-provide-required-alt 속성을 지정할 수 있습니다. 이 속성의 값은 빈 문자열이어야 합니다. 이러한 속성을 포함하는 문서는 적합하지 않지만, 적합성 검사기는 이 오류를 묵인합니다.

이것은 적합성 검사기에서 대체 텍스트가 없다는 오류를 방지하기 위해 마크업 생성기가 잘못된 대체 텍스트를 제공하는 실수를 방지하기 위한 것입니다. 자동화된 적합성 검사기는 잘못된 대체 텍스트와 올바른 대체 텍스트를 구별할 수 없기 때문입니다.

마크업 생성기는 일반적으로 이미지의 파일 이름을 대체 텍스트로 사용하는 것을 피해야 합니다. 마찬가지로, 마크업 생성기는 표현 사용자 에이전트(예: 웹 브라우저)에서도 동일하게 제공되는 콘텐츠에서 대체 텍스트를 생성하는 것을 피해야 합니다.

이유는 페이지가 생성된 후 일반적으로 업데이트되지 않지만, 나중에 페이지를 읽는 브라우저는 사용자가 업데이트할 수 있기 때문입니다. 따라서 브라우저는 페이지가 생성될 때 마크업 생성기보다 최신 상태의 정교한 휴리스틱을 가질 가능성이 더 큽니다.

4.8.4.4.15 적합성 검사기를 위한 지침

적합성 검사기는 아래 나열된 조건 중 하나에 해당하지 않는 한 alt 속성이 없음을 오류로 보고해야 합니다:

4.8.5 iframe 요소

Element/iframe

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera15+Edge79+
Edge (레거시)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android14+

HTMLIFrameElement

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLIFrameElement/src

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLObjectElement/width

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLObjectElement/height

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
임베디드 콘텐츠.
인터랙티브 콘텐츠.
구체적인 콘텐츠.
이 요소가 사용될 수 있는 컨텍스트:
임베디드 콘텐츠가 예상되는 곳.
콘텐츠 모델:
없음.
태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
전역 속성
src — 리소스의 주소
srcdociframe에 렌더링할 문서
name내비게이블 콘텐츠의 이름
sandbox — 중첩된 콘텐츠에 대한 보안 규칙
allowPermissions policyiframe의 콘텐츠에 적용
allowfullscreeniframe의 콘텐츠가 requestFullscreen()을 사용할 수 있는지 여부
width — 가로 크기
height — 세로 크기
referrerpolicy — 이 요소가 시작하는 페치에 대한 리퍼러 정책
loading — 로딩 지연을 결정할 때 사용됨
접근성 고려사항:
작성자를 위한 안내.
구현자를 위한 안내.
DOM 인터페이스:
[Exposed=Window]
interface HTMLIFrameElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString src;
  [CEReactions] attribute (TrustedHTML or DOMString) srcdoc;
  [CEReactions, Reflect] attribute DOMString name;
  [SameObject, PutForwards=value, Reflect] readonly attribute DOMTokenList sandbox;
  [CEReactions, Reflect] attribute DOMString allow;
  [CEReactions, Reflect] attribute boolean allowFullscreen;
  [CEReactions, Reflect] attribute DOMString width;
  [CEReactions, Reflect] attribute DOMString height;
  [CEReactions] attribute DOMString referrerPolicy;
  [CEReactions] attribute DOMString loading;
  readonly attribute Document? contentDocument;
  readonly attribute WindowProxy? contentWindow;
  Document? getSVGDocument();

  // also has obsolete members
};

iframe 요소는 대표하는 내비게이블 콘텐츠입니다.

src 속성은 이 요소의 URL을 제공합니다. 이 속성이 지정되어 있다면, itemprop 속성이 iframe 요소에 지정된 경우 src 속성도 지정되어야 합니다.

Element/iframe#attr-srcdoc

모든 최신 엔진에서 지원됩니다.

Firefox25+Safari6+Chrome20+
Opera?Edge79+
Edge (레거시)?Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android?

srcdoc 속성은 이 요소의 내비게이블 콘텐츠에 포함될 페이지의 콘텐츠를 제공합니다. 이 속성의 값은 iframe srcdoc 문서라는 documentURLabout:srcdoc과 일치하도록 사용됩니다.

srcdoc 속성이 지정되어 있다면, 이 속성의 값은 다음과 같은 문법 구성 요소로 구성된 HTML 문법을 사용해야 합니다:

  1. 아무 개수의 주석ASCII 공백 문자.
  2. 선택적으로 DOCTYPE.
  3. 아무 개수의 주석ASCII 공백 문자.
  4. html 요소의 형식으로 된 문서 요소.
  5. 아무 개수의 주석ASCII 공백 문자.

위의 요구 사항은 XML 문서에서도 적용됩니다.

여기에서 블로그는 srcdoc 속성과 아래에 설명된 sandbox 속성을 결합하여 이 기능을 지원하는 사용자 에이전트에서 블로그 댓글에 스크립트 삽입으로부터 추가적인 보호를 제공합니다:

<article>
 <h1>I got my own magazine!</h1>
 <p>After much effort, I've finally found a publisher, and so now I have my own magazine! Isn't that awesome?! The first issue will come out in September, and we have articles about getting food, and about getting in boxes, it's going to be great!</p>
 <footer>
  <p>Written by <a href="/users/cap">cap</a>, 1 hour ago.</footer>
 </article>
  <footer> Thirteen minutes ago, <a href="/users/ch">ch</a> wrote: </footer>
  <iframe sandbox srcdoc="<p>did you get a cover picture yet?"></iframe>
 </article>
 <article>
  <footer> Nine minutes ago, <a href="/users/cap">cap</a> wrote: </footer>
  <iframe sandbox srcdoc="<p>Yeah, you can see it <a href=&quot;/gallery?mode=cover&amp;amp;page=1&quot;>in my gallery</a>."></iframe>
 </article>
 <article>
  <footer> Five minutes ago, <a href="/users/ch">ch</a> wrote: </footer>
  <iframe sandbox srcdoc="<p>hey that's earl's table.<p>you should get earl&amp;amp;me on the next cover."></iframe>
 </article>

따옴표를 어떻게 이스케이프해야 하는지(그렇지 않으면 srcdoc 속성이 조기 종료될 수 있음)와 샌드박스된 콘텐츠에 언급된 원시 앰퍼샌드(예: URL 또는 산문에서) 이스케이프가 어떻게 이중으로 처리되어야 하는지 주목합니다. — 처음에는 srcdoc 속성을 처음 구문 분석할 때 앰퍼샌드가 유지되도록 하고, 그 후 샌드박스된 콘텐츠를 구문 분석할 때 앰퍼샌드가 오해되지 않도록 다시 이스케이프를 해야 합니다.

또한 DOCTYPEiframe srcdoc 문서에서 선택적이며, html, head, body 요소가 선택적 시작 및 종료 태그를 가지며, title 요소도 iframe srcdoc 문서에서 선택적이라는 사실에 주목합니다. srcdoc 속성에 있는 마크업은 전체 문서를 나타내지만 비교적 간결할 수 있습니다. 구문에서 문자 그대로 나타나야 하는 것은 body 요소의 내용뿐입니다. 다른 요소들은 암시적으로만 존재합니다.

HTML 문법에서는 작성자가 U+0022 인용 부호 문자를 사용하여 속성 내용을 감싸고 U+0026 AMPERSAND(&) 및 U+0022 인용 부호(") 문자를 이스케이프하고, sandbox 속성을 지정하여 콘텐츠가 안전하게 포함되도록 해야 합니다(앰퍼샌드를 인용 부호 앞에서 이스케이프하여 인용 부호가 &quot;이 되도록 합니다).

XML에서는 U+003C LESS-THAN SIGN 문자(<)도 이스케이프해야 합니다. 속성 값의 정규화를 방지하기 위해 XML의 공백 문자 중 일부 — 구체적으로 U+0009 캐릭터 탭(탭), U+000A 줄 바꿈(LF), U+000D 캐리지 리턴(CR) — 도 이스케이프해야 합니다. [XML]

src 속성과 srcdoc 속성이 모두 지정된 경우, srcdoc 속성이 우선 적용됩니다. 이를 통해 작성자는 srcdoc 속성을 지원하지 않는 레거시 사용자 에이전트를 위한 대체 URL을 제공할 수 있습니다.


insertedNode가 주어졌을 때 iframe HTML 요소 연결 후 단계는 다음과 같습니다.

  1. insertedNode에 대해 새 자식 내비게이블을 생성합니다.

  2. 만약 insertedNodesandbox 속성이 있다면, 해당 속성의 값을 기준으로 insertedNodeiframe sandboxing 플래그 세트분석합니다.

  3. insertedNodeiframe 속성을 initialInsertion 값을 true로 설정하여 처리합니다.

iframe HTML 요소 제거 단계removedNode가 주어진 경우, removedNode에 대해 자식 내비게이블을 파괴합니다.

이 작업은 unload 이벤트가 발생하지 않은 상태에서 이루어집니다(요소의 콘텐츠 문서파괴됩니다, 언로드되지 않습니다).

iframe 요소가 섀도우 트리 내에서 처리되지만, 이 외에도 그들의 동작과 관련하여 섀도우 트리에 대해 정의되지 않은 여러 측면이 있습니다. 자세한 내용은 문제 #763을 참조합니다.

iframe 요소에 null이 아닌 내비게이블 콘텐츠가 있고, srcdoc 속성이 설정, 변경, 또는 제거될 때마다 사용자 에이전트는 iframe 속성을 처리해야 합니다.

마찬가지로, iframe 요소에 null이 아닌 내비게이블 콘텐츠가 있지만 지정된 srcdoc 속성이 없고, src 속성이 설정, 변경, 또는 제거될 때마다 사용자 에이전트는 iframe 속성을 처리해야 합니다.

다음은 요소 element에 대한 iframe 속성 처리을 수행하는 방법입니다. 선택적으로 부울 initialInsertion이 있습니다(기본값은 false).

  1. elementsrcdoc 속성이 지정된 경우:

    1. element현재 탐색은 지연 로드되었습니다 부울 값을 false로 설정합니다.

    2. 주어진 element에 대한 지연 로드 요소 단계가 true를 반환하는 경우:

      1. 이 알고리즘의 나머지 부분을 srcdoc 리소스로 탐색으로 시작하여 element지연 로드 재개 단계로 설정합니다.

      2. element현재 탐색이 지연 로드되었습니다 부울 값을 true로 설정합니다.

      3. element에 대해 지연 로드 요소를 교차 관찰 시작합니다.

      4. 반환합니다.

    3. srcdoc 리소스로 탐색: element, about:srcdoc, 빈 문자열 및 elementsrcdoc 속성 값을 주어진 iframe 또는 frame을 탐색합니다.

      결과로 나온 documentiframe srcdoc 문서로 간주되어야 합니다.

  2. 그 외의 경우:

    1. urlelementinitialInsertion이 주어진 iframe 및 frame 요소에 대한 공유 속성 처리 단계를 실행한 결과로 설정합니다.

    2. url이 null이면 반환합니다.

    3. urlabout:blank일치하고 initialInsertion이 true인 경우:

      1. element에 대해 iframe 로드 이벤트 단계를 실행합니다.

      2. 반환합니다.

    4. referrerPolicyelementreferrerpolicy 콘텐츠 속성의 현재 상태로 설정합니다.

    5. element현재 탐색은 지연 로드되었습니다 부울 값을 false로 설정합니다.

    6. 주어진 element에 대한 지연 로드 요소 단계가 true를 반환하는 경우:

      1. 이 알고리즘의 나머지 부분을 탐색으로 시작하여 element지연 로드 재개 단계로 설정합니다.

      2. element현재 탐색이 지연 로드되었습니다 부울 값을 true로 설정합니다.

      3. element에 대해 지연 로드 요소를 교차 관찰 시작합니다.

      4. 반환합니다.

    7. 탐색: element, urlreferrerPolicy이 주어진 iframe 또는 frame을 탐색합니다.

iframeframe 요소에 대한 공유 속성 처리 단계는 요소 element와 부울 initialInsertion이 주어진 경우 다음과 같습니다:

  1. urlabout:blank URL 기록으로 설정합니다.

  2. elementsrc 속성이 지정되어 있고 그 값이 빈 문자열이 아닌 경우:

    1. 그 속성의 값을 element노드 문서와 상대적으로 주어진 URL 인코딩-구문 분석을 실행한 결과를 maybeURL로 설정합니다.

    2. maybeURL이 실패하지 않으면, urlmaybeURL로 설정합니다.

  3. element노드 내비게이블포괄적인 조상 내비게이블url조각 제외로 설정하여 url동일한 활성 문서를 포함하는 내비게이블을 포함하는 경우, null을 반환합니다.

  4. urlabout:blank일치하고 initialInsertion이 true인 경우, element콘텐츠 내비게이블활성 문서url이 주어진 URL 및 기록 업데이트 단계를 실행합니다.

    이는 about:blank?foo와 같은 url을 처리하는 데 필요합니다. url이 단순히 about:blank인 경우, 이 작업은 아무런 작업도 수행하지 않습니다.

  5. url을 반환합니다.

iframe 또는 frame을 탐색하려면 요소 element, URL url, 리퍼러 정책 referrerPolicy, 선택적 문자열 또는 null인 srcdocString(기본값 null), 그리고 선택적 불리언 initialInsertion(기본값 false)이 주어지면:

  1. historyHandling을 "자동"으로 설정합니다.

  2. element내비게이블 콘텐츠활성 문서완전히 로드된 상태가 아니면, historyHandling을 "대체"로 설정합니다.

  3. elementiframe인 경우, element대기 중인 리소스 타이밍 시작 시간element현재 고해상도 시간으로 설정합니다.

  4. element노드 문서를 사용하여 element콘텐츠 탐색 가능 항목url탐색합니다. 이때 historyHandlinghistoryHandling으로 설정하고, referrerPolicyreferrerPolicy로 설정하고, documentResourcesrcdocString으로 설정하고, initialInsertioninitialInsertion으로 설정합니다.

documentiframe 로드 진행 중 플래그와 iframe 로드 음소거 플래그를 가지고 있습니다. document가 생성될 때, 이러한 플래그는 해당 document에 대해 해제되어야 합니다.

iframe 로드 이벤트 단계를 실행하는 방법은 주어진 iframe 요소 element에 대해 다음과 같습니다.

  1. 확인: element내비게이블 콘텐츠가 null이 아님을 확인합니다.

  2. childDocumentelement내비게이블 콘텐츠활성 문서로 설정합니다.

  3. childDocumentiframe 로드 음소거 플래그가 설정되어 있으면 반환합니다.

  4. element대기 중인 리소스 타이밍 시작 시간이 null이 아닌 경우:

    1. globalelement노드 문서관련 글로벌 객체로 설정합니다.

    2. fallbackTimingInfoelement대기 중인 리소스 타이밍 시작 시간global에 주어진 현재 고해상도 시간을 사용하여 새로운 fetch 타이밍 정보로 설정합니다.

    3. url, "iframe", global, 빈 문자열, 새로운 응답 본문 정보 및 0을 사용하여 리소스 타이밍 표시를 수행합니다.

    4. element대기 중인 리소스 타이밍 시작 시간을 null로 설정합니다.

  5. childDocumentiframe 로드 진행 중 플래그를 설정합니다.

  6. element에서 로드라는 이름의 이벤트를 발생시킵니다.

  7. childDocumentiframe 로드 진행 중 플래그를 해제합니다.

이 작업은 스크립팅과 함께 사용되어 로컬 네트워크의 HTTP 서버의 URL 공간을 탐색할 수 있습니다. 사용자 에이전트는 이러한 공격을 완화하기 위해 위에서 설명한 것보다 더 엄격한 교차 출처 액세스 제어 정책을 구현할 수 있지만, 안타깝게도 이러한 정책은 일반적으로 기존 웹 콘텐츠와 호환되지 않습니다.

요소 유형이 로드 이벤트를 잠재적으로 지연시킬 수 있는 경우, 해당 유형의 각 요소 element에 대해, 사용자 에이전트는 element노드 문서의 로드 이벤트를 지연시켜야 하며, 다음 중 하나라도 참인 경우에만 element내비게이블 콘텐츠가 null이 아닙니다.

로드 이벤트 처리 중에 element내비게이블 콘텐츠가 다시 탐색되면, 로드 이벤트는 더 지연될 것입니다.

iframe 요소에는 초기 값이 false인 현재 탐색이 지연 로드됨 부울이 관련되어 있습니다. 이 부울은 iframe 속성을 처리하는 알고리즘에서 설정되고 해제됩니다.

현재 탐색이 지연 로드되지 않은 iframe 요소는 로드 이벤트를 잠재적으로 지연시킵니다.

iframe 요소에는 null 또는 DOMHighResTimeStamp가 관련되어 있으며, 대기 중인 리소스 타이밍 시작 시간으로 설정됩니다. 이 값은 처음에 null로 설정됩니다.

요소가 생성될 때, srcdoc 속성이 설정되지 않았고 src 속성이 설정되지 않았거나 설정되었지만 그 값을 구문 분석할 수 없는 경우, 요소의 내비게이블 콘텐츠초기 about:blank document에서 유지됩니다.

사용자가 이 페이지에서 다른 곳으로 이동하면, iframe내비게이블 콘텐츠활성 WindowProxy 객체는 새로운 Window 객체에 대해 프록시로 동작하지만, src 속성은 변경되지 않습니다.


name 속성은, 존재할 경우, 유효한 탐색 가능 대상 이름이어야 합니다. 지정된 값은 내용 탐색 가능 요소가 존재할 때, 그것이 생성될 때 그 요소의 이름으로 사용됩니다.


Element/iframe#attr-sandbox

모든 현재 엔진에서 지원됩니다.

Firefox17+Safari5+Chrome4+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

sandbox 속성은, 지정되면, iframe에 호스팅된 모든 콘텐츠에 대해 일련의 추가 제한을 활성화합니다. 이 속성의 값은 유일한 공백으로 구분된 토큰의 무작위 집합이어야 하며, ASCII 대소문자 구분이 없는 형식이어야 합니다. 허용되는 값은 다음과 같습니다:

이 속성이 설정되면 콘텐츠는 고유한 불투명 원본으로 취급되며, 양식, 스크립트 및 다양한 잠재적으로 성가신 API가 비활성화되고, 링크가 다른 탐색 가능 항목을 대상으로 하지 못하게 됩니다. allow-same-origin 키워드는 콘텐츠가 실제 원본에서 가져온 것으로 처리되도록 하며, 불투명 원본으로 강제되지 않도록 합니다. allow-top-navigation 키워드는 콘텐츠가 탐색할 수 있도록 허용하며, 탐색 가능 항목을 탐색할 수 있도록 합니다. allow-top-navigation-by-user-activation 키워드는 비슷한 방식으로 동작하지만, 사용자가 활성화한 경우에만 탐색을 허용합니다. allow-top-navigation-to-custom-protocols 키워드는 fetch 스킴이 아닌 항목으로의 탐색을 다시 활성화하여 외부 소프트웨어로 전달될 수 있도록 합니다. allow-forms, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-popups, allow-presentation, allow-scripts, 및 allow-popups-to-escape-sandbox 키워드는 양식, 모달 대화 상자, 화면 방향 고정, 포인터 잠금 API, 팝업, 프레젠테이션 API, 스크립트 및 비샌드박스 보조 브라우징 컨텍스트의 생성을 다시 활성화합니다. allow-downloads 키워드는 콘텐츠가 다운로드를 수행할 수 있도록 허용합니다. [POINTERLOCK] [SCREENORIENTATION] [PRESENTATION]

allow-top-navigation 키워드와 allow-top-navigation-by-user-activation 키워드는 둘 다 지정될 수 없습니다. 이는 중복되며, 이 경우 allow-top-navigation만 효과가 있습니다.

마찬가지로, allow-top-navigation-to-custom-protocols 키워드는 allow-top-navigation 또는 allow-popups 중 하나가 지정된 경우 지정될 수 없습니다. 이는 중복됩니다.

샌드박스 콘텐츠 내에서 alert(), confirm(), 및 prompt()를 허용하려면, allow-modalsallow-same-origin 키워드를 모두 지정해야 하며, 로드된 URL이 동일 출처여야 하고 최상위 출처와 동일해야 합니다. allow-same-origin 키워드가 없으면 콘텐츠는 항상 교차 출처로 취급되며, 교차 출처 콘텐츠는 간단한 대화 상자를 표시할 수 없습니다.

allow-scripts 키워드와 allow-same-origin 키워드를 함께 설정하면, 동일 출처로 되어 있는 경우 iframe을 포함하는 페이지에서 임베디드 페이지가 sandbox 속성을 단순히 제거한 다음 스스로를 다시 로드할 수 있으므로, 샌드박스에서 완전히 벗어날 수 있습니다.

이 플래그는 iframe 요소의 내용 탐색 가능 요소탐색될 때만 효과가 있습니다. 플래그를 제거하거나, sandbox 속성을 제거해도 이미 로드된 페이지에는 아무런 영향이 없습니다.

잠재적으로 악의적인 파일은 iframe 요소가 포함된 파일과 동일한 서버에서 제공되어서는 안 됩니다. 사용자가 악의적인 콘텐츠를 직접 방문하도록 설득할 수 있는 경우, 악의적인 콘텐츠를 샌드박싱하는 것은 거의 도움이 되지 않습니다. 악의적인 HTML 콘텐츠가 야기할 수 있는 피해를 제한하려면 별도의 전용 도메인에서 제공해야 합니다. 다른 도메인을 사용하면 파일의 스크립트가 사이트를 공격할 수 없으며, 사용자가 해당 페이지를 보호되지 않은 상태에서 직접 방문하도록 속임을 당하더라도 문제가 발생하지 않습니다. sandbox 속성의 보호를 받지 않고도 해당 페이지를 방문할 수 있습니다.

iframe 요소의 sandbox 속성이 설정되거나 변경될 때, 해당 요소가 null이 아닌 내용 탐색 가능 요소를 가지고 있는 경우, 사용자 에이전트는 속성의 값을 사용하여 샌드박스 지시문을 분석해야 합니다.

iframe 요소의 sandbox 속성이 제거될 때, 해당 요소가 null이 아닌 내용 탐색 가능 요소를 가지고 있는 경우, 사용자 에이전트는 iframe 요소의 iframe 샌드박싱 플래그 집합을 비워야 합니다.

이 예에서는 완전히 알 수 없는 잠재적으로 악의적인 사용자 제공 HTML 콘텐츠가 페이지에 포함되어 있습니다. 별도의 도메인에서 제공되기 때문에 모든 일반적인 교차 사이트 제한 사항의 영향을 받습니다. 또한, 포함된 페이지는 스크립트, 플러그인 및 양식이 비활성화되어 있으며, 자신 또는 자신이 포함한 프레임이나 창 이외의 항목을 탐색할 수 없습니다.

<p>We're not scared of you! Here is your content, unedited:</p>
<iframe sandbox src="https://usercontent.example.net/getusercontent.cgi?id=12193"></iframe>

별도의 도메인을 사용하는 것이 중요합니다. 공격자가 사용자를 직접 해당 페이지로 이동하도록 설득할 수 있는 경우, 페이지는 사이트의 원본 컨텍스트에서 실행되지 않으며, 사용자는 페이지에서 발견된 모든 공격에 취약해질 수 있습니다.

이 예에서는 다른 사이트에서 제공되는 가젯이 포함되어 있습니다. 이 가젯은 스크립트와 양식이 활성화되어 있으며, 원본 샌드박스 제한이 해제되어 가젯이 원본 서버와 통신할 수 있습니다. 그러나 샌드박스는 여전히 유용하며, 플러그인과 팝업을 비활성화하여 사용자가 악성 코드 및 기타 성가신 요소에 노출되는 위험을 줄여줍니다.

<iframe sandbox="allow-same-origin allow-forms allow-scripts"
    src="https://maps.example.com/embedded.html"></iframe>

파일 A에 다음과 같은 조각이 포함되어 있다고 가정해 봅시다:

<iframe sandbox="allow-same-origin allow-forms" src=B></iframe>

파일 B에도 iframe이 포함되어 있다고 가정해 봅시다:

<iframe sandbox="allow-scripts" src=C></iframe>

또한 파일 C에는 링크가 포함되어 있다고 가정해 봅시다:

<a href=D>Link</a>

이 예에서 모든 파일이 text/html로 제공되었다고 가정해 봅시다.

이 시나리오에서 C 페이지에는 모든 샌드박스 플래그가 설정되어 있습니다. A에 있는 iframe에서 스크립트가 비활성화되어 있기 때문에, B에 설정된 allow-scripts 키워드가 무시됩니다. 또한, B의 내부 iframe에는 allow-forms 키워드가 설정되어 있지 않기 때문에 양식도 비활성화됩니다.

이제 A에 있는 스크립트가 A와 B의 모든 sandbox 속성을 제거한다고 가정해 봅시다. 이 경우 즉시 아무 것도 변경되지 않습니다. 사용자가 C에서 링크를 클릭하여 D 페이지를 B에 로드하면, 페이지 D는 이제 B에 있는 iframeallow-same-originallow-forms 키워드가 설정된 것처럼 작동합니다. 이는 페이지 B가 로드될 때 A의 내용 탐색 가능 요소의 상태였기 때문입니다.

일반적으로 sandbox 속성을 동적으로 제거하거나 변경하는 것은 권장되지 않습니다. 이는 무엇이 허용되고 무엇이 허용되지 않을지를 판단하기 어렵게 만들 수 있습니다.


allow 속성은 지정되었을 때, 컨테이너 정책을 결정하며, 권한 정책Document 내에서 iframe내용 탐색 가능 요소에서 초기화될 때 사용됩니다. 값은 직렬화된 권한 정책이어야 합니다. [PERMISSIONSPOLICY]

이 예에서는 iframe이 사용되어 온라인 내비게이션 서비스의 지도를 임베드합니다. allow 속성은 중첩된 컨텍스트 내에서 지리 위치 API를 활성화하는 데 사용됩니다.

<iframe src="https://maps.example.com/" allow="geolocation"></iframe>

allowfullscreen 속성은 부울 속성입니다. 지정되었을 때, Document 객체가 iframe 요소의 내용 탐색 가능 요소에서 초기화될 때, "fullscreen" 기능을 어떤 출처에서든 사용할 수 있도록 허용하는 권한 정책이 적용됩니다. 이는 권한 정책 속성 처리 알고리즘에 의해 적용됩니다. [PERMISSIONSPOLICY]

여기서 iframe이 사용되어 비디오 사이트의 플레이어를 임베드합니다. 플레이어가 전체 화면으로 비디오를 재생할 수 있도록 allowfullscreen 속성이 필요합니다.

<article>
 <header>
  <p><img src="/usericons/1627591962735"> <b>Fred Flintstone</b></p>
  <p><a href="/posts/3095182851" rel=bookmark>12:44</a><a href="#acl-3095182851">Private Post</a></p>
 </header>
 <p>Check out my new ride!</p>
 <iframe src="https://video.example.com/embed?id=92469812" allowfullscreen></iframe>
</article>

allow 또는 allowfullscreeniframe 요소의 내용 탐색 가능 요소 내에서 해당 기능이 이미 허용되지 않은 경우, 기능에 대한 접근 권한을 부여할 수 없습니다.

Document 객체 document가 정책 제어 기능 feature을(를) 사용할 수 있는지 여부를 결정하려면 다음 단계를 실행합니다.

  1. document탐색 컨텍스트가 null이면, false를 반환합니다.

  2. document완전히 활성화된 상태가 아니면, false를 반환합니다.

  3. document, document출처에서 feature기능이 활성화되었는지 확인한 결과가 "Enabled"이면, true를 반환합니다.

  4. false를 반환합니다.

allowallowfullscreen 속성은 내용 탐색 가능 요소활성 문서권한 정책에만 영향을 미치기 때문에, iframe내용 탐색 가능 요소탐색될 때만 효과가 있습니다. 이를 추가하거나 제거해도 이미 로드된 문서에는 영향을 미치지 않습니다.


iframe 요소는 임베드된 콘텐츠가 특정 치수를 가지는 경우(예: 광고 유닛에 잘 정의된 치수가 있음) 치수 속성을 지원합니다.

iframe 요소는 절대 대체 콘텐츠를 가지지 않습니다. 항상 새로운 자식 탐색 가능 요소를 생성하며, 지정된 초기 콘텐츠가 성공적으로 사용되었는지 여부와 관계없이 작동합니다.


referrerpolicy 속성은 리퍼러 정책 속성입니다. 이 속성의 목적은 리퍼러 정책을 설정하는 것으로, iframe 속성 처리 시 사용됩니다. [REFERRERPOLICY]

loading 속성은 지연 로딩 속성입니다. 이 속성의 목적은 뷰포트 밖에 있는 iframe 요소를 로드하는 정책을 나타내는 것입니다.

loading 속성의 상태가 Eager 상태로 변경되면, 사용자 에이전트는 다음 단계를 실행해야 합니다:

  1. resumptionStepsiframe 요소의 지연 로드 재개 단계로 설정합니다.

  2. resumptionSteps가 null이면, 반환합니다.

  3. iframe지연 로드 재개 단계를 null로 설정합니다.

  4. resumptionSteps를 호출합니다.


iframe 요소의 하위 요소는 아무것도 나타내지 않습니다. (레거시 사용자 에이전트에서는 iframe 요소를 지원하지 않기 때문에, 콘텐츠가 대체 콘텐츠로 작동할 수 있는 마크업으로 구문 분석됩니다.)

HTML 파서iframe 요소 내의 마크업을 텍스트로 처리합니다.


HTMLIFrameElement/srcdoc

모든 현재 엔진에서 지원됨.

Firefox25+ Safari6+ Chrome20+
Opera? Edge79+
Edge (Legacy)? Internet ExplorerNo
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?

srcdoc getter 단계는 다음과 같습니다:

  1. attribute를 null, srcdoc로컬 이름, 및 this로 주어진 네임스페이스로 속성을 가져오는 결과로 설정합니다.

  2. attribute가 null이면, 빈 문자열을 반환합니다.

  3. attribute을 반환합니다.

srcdoc setter 단계는 다음과 같습니다:

  1. compliantString을(를) 신뢰할 수 있는 타입 규격 문자열 가져오기 알고리즘의 결과로, TrustedHTML, this관련 전역 객체, 주어진 값, "HTMLIFrameElement srcdoc", 및 "script"와 함께 설정합니다.

  2. 속성 값을 설정하는데, this, srcdoc로컬 이름, 및 compliantString을(를) 사용합니다.

sandboxDOMTokenList에 대해 지원되는 토큰sandbox 속성에 정의된 허용된 값들이며 사용자 에이전트가 지원하는 값들입니다.

HTMLIFrameElement/referrerPolicy

모든 현재 엔진에서 지원됨.

Firefox50+ Safari14+ Chrome52+
Opera? Edge79+
Edge (Legacy)? Internet ExplorerNo
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?

referrerPolicy IDL 속성은 referrerpolicy 콘텐츠 속성을 반영해야 하며, 알려진 값들만 허용됩니다.

loading IDL 속성은 loading 콘텐츠 속성을 반영해야 하며, 알려진 값들만 허용됩니다.

HTMLIFrameElement/contentDocument

모든 현재 엔진에서 지원됨.

Firefox1+ Safari3+ Chrome1+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer8+
Firefox Android? Safari iOS1+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

contentDocument getter 단계는 this콘텐츠 문서를 반환하는 것입니다.

HTMLIFrameElement/contentWindow

모든 현재 엔진에서 지원됨.

Firefox1+ Safari3+ Chrome1+
Opera8+ Edge79+
Edge (Legacy)12+ Internet Explorer5.5+
Firefox Android? Safari iOS1+ Chrome Android? WebView Android? Samsung Internet? Opera Android10.1+

contentWindow getter 단계는 this콘텐츠 창을 반환하는 것입니다.

다음은 광고 중개업체의 광고를 포함하기 위해 iframe을 사용하는 페이지의 예입니다:

<iframe src="https://ads.example.com/?customerid=923513721&amp;format=banner"
    width="468" height="60"></iframe>

4.8.6 embed 요소

Element/embed

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLEmbedElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
임베디드 콘텐츠.
인터랙티브 콘텐츠.
직관적 콘텐츠.
이 요소가 사용될 수 있는 컨텍스트:
임베디드 콘텐츠가 예상되는 곳.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그 없음.
콘텐츠 속성:
전역 속성
src — 리소스의 주소
type — 임베디드 리소스의 타입
width — 가로 차원
height — 세로 차원
네임스페이스가 없는 다른 속성(자세한 내용은 설명 참조).
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLEmbedElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString src;
  [CEReactions, Reflect] attribute DOMString type;
  [CEReactions, Reflect] attribute DOMString width;
  [CEReactions, Reflect] attribute DOMString height;
  Document? getSVGDocument();

  // obsolete members도 포함
};

embed 요소는 외부 애플리케이션 또는 상호작용 콘텐츠와의 통합 지점을 제공합니다.

src 속성은 임베디드된 리소스의 URL을 제공합니다. 이 속성이 존재하는 경우 유효한 비어 있지 않은 URL을 포함해야 합니다.

itemprop 속성이 embed 요소에 지정된 경우 src 속성도 지정되어야 합니다.

type 속성은, 존재하는 경우 플러그인을 선택할 때 사용되는 MIME 타입을 제공합니다. 이 값은 유효한 MIME 타입 문자열이어야 합니다. type 속성과 src 속성이 모두 존재하는 경우, type 속성은 src 속성으로 제공된 리소스의 명시적 콘텐츠 타입 메타데이터와 동일한 타입을 지정해야 합니다.

다음 조건이 발생하는 동안, 해당 요소에 대해 인스턴스화된 모든 플러그인은 제거되어야 하며, embed 요소는 아무것도 나타내지 않습니다:

embed 요소는 다음 조건이 모두 동시에 충족될 때 잠재적으로 활성 상태로 간주됩니다:

embed 요소가 잠재적으로 활성 상태가 아니었다가 잠재적으로 활성 상태가 되는 경우, 그리고 잠재적으로 활성 상태embed 요소가 계속해서 잠재적으로 활성 상태로 남아 있으면서 src 속성이나 type 속성이 설정, 변경 또는 제거될 때마다, 사용자 에이전트는 해당 요소에 대해 요소 작업을 큐에 추가하고, embed 작업 소스를 제공하여 embed 요소 설정 단계 를 실행해야 한다.

embed 요소 element에 대한 embed 요소 설정 단계는 다음과 같습니다:

  1. 다른 작업element에 대한 embed 요소 설정 단계를 실행하도록 대기열에 이미 추가된 경우, 반환합니다.

  2. 만약 elementsrc 속성이 설정되어 있다면, 다음을 수행합니다:

    1. urlURL 인코딩-파싱의 결과로 설정하여 elementsrc 속성의 값을 element노드 문서를 기준으로 상대적으로 처리합니다.

    2. 만약 url이 실패라면 반환합니다.

    3. request을 새 요청으로 설정하며, urlURL, 클라이언트element노드 문서관련 설정 객체, 대상은 "embed", 자격 증명 모드는 "include", 모드는 "navigate", 발기자 유형은 "embed", URL 자격 증명 플래그가 설정되어 있는 것으로 합니다.

    4. 요청을 가져오며, 응답 처리응답 response으로 설정합니다:

      1. 만약 작업embed 요소 설정 단계element에 대해 실행하기 위해 큐에 추가되었다면, 반환합니다.

      2. response네트워크 오류인 경우, element에 대해 이벤트로드로 트리거하며 반환합니다.

      3. type콘텐츠 유형elementresponse으로 결정하여 설정합니다.

      4. type을 다음과 같이 스위치합니다:

        null
        1. element에 대해 플러그인을 표시하지 않습니다.

        그 외의 경우
        1. 만약 element내비게이션 가능 콘텐츠가 null인 경우, element에 대해 새 하위 내비게이션 가능 객체를 생성합니다.

        2. element내비게이션 가능 콘텐츠responseURL로, element노드 문서를 사용하여 응답response으로, 히스토리 처리를 "대체"로 설정하여 내비게이트합니다.

          elementsrc 속성은 내비게이션 가능 콘텐츠가 다른 위치로 내비게이트된 경우 업데이트되지 않습니다.

        3. element는 이제 내비게이션 가능 콘텐츠를 나타냅니다.

      리소스를 가져오는 과정은 element로드 이벤트를 지연시켜야 합니다.

  3. 그렇지 않으면 element에 대해 플러그인을 표시하지 않습니다.

주어진 embed 요소 element응답 response에 대해 콘텐츠 유형을 결정하려면 다음 단계를 수행하십시오:

  1. elementtype 속성이 있으며 해당 속성의 값이 플러그인이 지원하는 유형인 경우, type 속성의 값을 반환합니다.

  2. 만약 response경로플러그인이 지원하는 패턴과 일치한다면, 해당 플러그인이 처리할 수 있는 유형을 반환합니다.

    예를 들어, 플러그인은 .swf로 끝나는 경로 컴포넌트를 처리할 수 있다고 할 수 있습니다.

  3. 만약 response명시적 콘텐츠 타입 메타데이터가 있고, 해당 값이 플러그인이 지원하는 유형이라면, 해당 값을 반환합니다.

  4. null을 반환합니다.

위 알고리즘이 response정상 상태가 아닌 경우도 허용하는 것은 의도된 것입니다. 이렇게 하면 서버가 오류 응답(예: HTTP 500 내부 서버 오류 코드)에도 불구하고 플러그인 데이터를 반환할 수 있습니다.

플러그인을 표시하지 않으려면 embed 요소 element에 대해 다음 단계를 실행합니다:

  1. element에 대해 하위 내비게이션 가능 객체를 파괴합니다.

  2. element에 대해 플러그인을 찾을 수 없다는 표시를 표시하고, 그 내용을 element로 설정합니다.

  3. element는 이제 아무것도 나타내지 않습니다.

embed 요소에는 대체 콘텐츠가 없으며, 후손 요소는 무시됩니다.

embed 요소가 잠재적으로 활성 상태를 멈추면, 해당 요소에 대해 인스턴스화된 모든 플러그인이 언로드되어야 합니다.

embed 요소는 로드 이벤트를 지연시킬 가능성이 있습니다.

embed 요소는 차원 속성을 지원합니다.

4.8.7 object 요소

요소/object

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera?Edge79+
Edge (레거시)12+인터넷 익스플로러
Firefox 안드로이드?Safari iOS?Chrome 안드로이드?WebView 안드로이드?삼성 인터넷?Opera 안드로이드?

HTMLObjectElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+인터넷 익스플로러5.5+
Firefox 안드로이드?Safari iOS1+Chrome 안드로이드?WebView 안드로이드?삼성 인터넷?Opera 안드로이드12.1+

HTMLObjectElement/data

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLObjectElement/type

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLObjectElement/name

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
범주:
흐름 콘텐츠.
구 문 콘텐츠.
포함된 콘텐츠.
목록에 나열됨 폼 관련 요소.
명확한 콘텐츠.
이 요소가 사용할 수 있는 문맥:
포함된 포함된 콘텐츠가 예상되는 경우.
콘텐츠 모델:
투명.
태그 생략 in text/html:
태그 생략은 불가능합니다.
콘텐츠 속성:
전역 속성
data — 리소스의 주소
type — 포함된 리소스의 유형
name탐색 가능한 콘텐츠의 이름
form — 이 요소를 요소와 연결
width — 수평 차원
height — 수직 차원
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLObjectElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, ReflectURL] attribute USVString data;
  [CEReactions, Reflect] attribute DOMString type;
  [CEReactions, Reflect] attribute DOMString name;
  readonly attribute HTMLFormElement? form;
  [CEReactions, Reflect] attribute DOMString width;
  [CEReactions, Reflect] attribute DOMString height;
  readonly attribute Document? contentDocument;
  readonly attribute WindowProxy? contentWindow;
  Document? getSVGDocument();

  readonly attribute boolean willValidate;
  readonly attribute ValidityState validity;
  readonly attribute DOMString validationMessage;
  boolean checkValidity();
  boolean reportValidity();
  undefined setCustomValidity(DOMString error);

  // 또한 사용되지 않는 멤버를 포함합니다
};

object 요소에 의해 인스턴스화된 콘텐츠의 유형에 따라, 노드는 다른 인터페이스도 지원합니다.

object 요소는 외부 리소스를 나타낼 수 있으며, 리소스의 유형에 따라 이미지 또는 자식 탐색 가능으로 처리됩니다.

data 속성은 리소스의 URL을 지정합니다. 이 속성은 필수이며, 공백으로 둘러싸일 수 있는 유효한 비어 있지 않은 URL을 포함해야 합니다.

type 속성이 존재하는 경우, 리소스의 유형을 지정합니다. 속성이 존재하는 경우, 속성은 유효한 MIME 타입 문자열이어야 합니다.

name 속성이 존재하는 경우, 유효한 탐색 가능한 대상 이름이어야 합니다. 주어진 값은 요소의 탐색 가능한 콘텐츠의 이름으로 사용되며, 적용 가능한 경우 요소의 탐색 가능한 콘텐츠새 자식 탐색 가능을 생성할 때 존재해야 합니다.

다음 조건 중 하나가 발생할 때마다:

...사용자 에이전트는 object 요소를 지정하여 요소 작업을 큐에 넣어 다음 단계를 수행하여 object 요소가 무엇을 나타내는지 다시 결정해야 합니다. 이 작업큐에 있거나 적극적으로 실행 중인 경우, 요소의 노드 문서의 로드 이벤트를 지연시켜야 합니다.

  1. 사용자가 이 object 요소의 대체 콘텐츠를 기본 동작 대신 표시하도록 선호를 표시한 경우, 아래의 대체로 표시된 단계로 건너뜁니다.

    예를 들어, 사용자는 이 콘텐츠가 사용자가 더 접근하기 쉬운 형식을 사용하기 때문에 요소의 대체 콘텐츠를 표시하도록 요청할 수 있습니다.

  2. 요소가 조상 미디어 요소를 가지고 있거나, 조상 object 요소가 대체 콘텐츠를 표시하지 않는 경우, 또는 요소가 문서에 포함되지 않은 경우 비활성 탐색 컨텍스트를 가지고 있는 경우, 또는 요소의 노드 문서가 완전히 활성화되지 않은 경우, 또는 요소가 열린 요소 스택에 있는 경우, 또는 요소가 렌더링되지 않는 경우, 아래의 대체로 표시된 단계로 건너뜁니다.

  3. data 속성이 존재하고 값이 비어 있지 않은 경우:

    1. type 속성이 존재하고 값이 사용자 에이전트가 지원하는 유형이 아닌 경우, 사용자 에이전트는 콘텐츠의 실제 유형을 검사하지 않고 아래의 대체로 표시된 단계로 건너뛸 수 있습니다.

    2. 속성의 값을 URL로 인코딩-파싱하여 data 속성의 값을 요소의 노드 문서에 상대적으로 파싱한 결과를 url로 둡니다.

    3. url이 실패한 경우, 요소에서 오류라는 이름의 이벤트를 발생시키고 아래의 대체로 표시된 단계로 건너뜁니다.

    4. request라는 새 요청을 만듭니다. 이 요청의 URLurl이며, 클라이언트는 요소의 노드 문서관련 설정 객체, 목적지는 "object", 자격 증명 모드는 "포함", 모드는 "탐색", 발신자 유형은 "object", URL 자격 증명 플래그가 설정된 상태입니다.

    5. 요청request합니다.

      리소스를 가져오는 것은 요소의 노드 문서의 로드 이벤트를 지연시켜야 합니다. 리소스가 페치된 후 작업에 의해 큐에 추가된 작업이 실행되면 이 작업이 실행됩니다.

    6. 리소스가 아직 사용 가능하지 않은 경우 (예: 리소스가 캐시에 없어서 리소스를 로드하려면 네트워크 요청이 필요함), 아래의 대체로 표시된 단계로 건너뜁니다. 리소스가 사용 가능해지면 네트워킹 작업 소스에 의해 큐에 추가된 작업은 이 알고리즘을 이 단계에서 다시 시작해야 합니다. 리소스는 점진적으로 로드될 수 있으며, 사용자 에이전트는 리소스의 일부만 로드되더라도 리소스가 사용 가능하다고 간주할 수 있습니다.

    7. 로드가 실패한 경우 (예: HTTP 404 오류, DNS 오류 등), 요소에서 오류라는 이름의 이벤트를 발생시키고 아래의 대체로 표시된 단계로 건너뜁니다.

    8. resource type을 다음과 같이 결정합니다:

      1. resource type을 알 수 없음으로 설정합니다.

      2. 사용자 에이전트가 이 리소스에 대한 Content-Type 헤더를 엄격하게 준수하도록 구성되어 있고, 리소스에 관련된 Content-Type 메타데이터가 있는 경우, 리소스 유형리소스의 Content-Type 메타데이터에 지정된 유형으로 설정하고 아래의 처리기로 표시된 단계로 건너뜁니다.

        이로 인해 보안 취약점이 발생할 수 있습니다. 예를 들어, 사이트가 특정 유형을 사용하는 리소스를 포함하려고 하지만 원격 사이트가 이를 재정의하여 대신 사용자 에이전트에 다른 유형의 콘텐츠를 제공하여 다른 보안 특성을 트리거하는 경우입니다.

      3. 다음 목록에서 적절한 단계 집합을 실행합니다:

        리소스에 관련된 Content-Type 메타데이터가 있는 경우
        1. binary를 false로 설정합니다.

        2. 리소스의 Content-Type 메타데이터에 지정된 유형이 "text/plain"이고, 리소스가 텍스트 또는 바이너리 리소스를 구분하기 위한 규칙을 적용한 결과 텍스트가 아닌 경우, binary를 true로 설정합니다.

        3. 리소스의 Content-Type 메타데이터에 지정된 유형이 "application/octet-stream"인 경우, binary를 true로 설정합니다.

        4. binary가 false인 경우, resource type을 리소스의 Content-Type 메타데이터에 지정된 유형으로 설정하고 아래의 처리기로 표시된 단계로 건너뜁니다.

        5. type 속성이 object 요소에 존재하고 그 값이 application/octet-stream이 아닌 경우, 다음 단계를 실행합니다:

          1. 속성 값이 "image/"로 시작하고 XML MIME 타입이 아닌 경우, 리소스 유형을 해당 type 속성에 지정된 유형으로 설정합니다.

          2. 아래의 처리기로 표시된 단계로 건너뜁니다.

        리소스에 관련된 Content-Type 메타데이터가 없는 경우
        1. type 속성이 object 요소에 존재하는 경우, tentative type을 해당 type 속성에 지정된 유형으로 설정합니다.

          그렇지 않은 경우, tentative type을 리소스의 계산된 유형으로 설정합니다.

        2. tentative typeapplication/octet-stream이 아닌 경우, resource typetentative type으로 설정하고 아래의 처리기로 표시된 단계로 건너뜁니다.

      4. 명시된 리소스의 URL에 URL 파서 알고리즘을 적용한 결과(리디렉션 후), URL 레코드의 경로 구성 요소가 플러그인에서 지원하는 패턴과 일치하는 경우, 리소스 유형을 해당 플러그인이 처리할 수 있는 유형으로 설정합니다.

        예를 들어, 플러그인은 ".swf" 네 글자 문자열로 끝나는 경로 구성 요소를 처리할 수 있다고 할 수 있습니다.

      이 단계가 완료되거나 위의 하위 단계 중 하나가 다음 단계로 바로 넘어가면 resource type이 여전히 알 수 없을 수 있습니다. 두 경우 모두 다음 단계에서 대체가 트리거됩니다.

    9. 처리기: 다음 중 일치하는 첫 번째 경우에 따라 콘텐츠를 처리합니다:

      리소스 유형이 XML MIME 타입이거나 리소스 유형이 "image/"로 시작하지 않는 경우

      object 요소의 탐색 가능한 콘텐츠가 null인 경우, 요소에 대해 새 자식 탐색 가능을 생성합니다.

      response응답으로 설정합니다. 가져오기.

      만약 responseURLabout:blank와 일치하지 않으면, 요소의 콘텐츠 탐색 가능 항목을 요소의 노드 문서를 사용하여 responseURL탐색하고, historyHandling을 "replace"로 설정합니다.

      data 속성의 object 요소는 탐색 가능한 콘텐츠가 다른 위치로 탐색된 경우 업데이트되지 않습니다.

      object 요소는 자신의 탐색 가능한 콘텐츠를 나타냅니다.

      리소스 유형이 "image/"로 시작하고 이미지 지원이 비활성화되지 않은 경우

      자식 탐색 가능을 파괴합니다. object 요소를 주어진 대로.

      이미지를 위한 스니핑 규칙을 적용하여 이미지 유형을 결정합니다.

      object 요소는 지정된 이미지를 나타냅니다.

      이미지를 렌더링할 수 없는 경우, 예를 들어 잘못된 형식이거나 지원되지 않는 형식인 경우, 아래의 대체로 표시된 단계로 건너뜁니다.

      그 외의 경우

      지정된 resource type은 지원되지 않습니다. 아래의 대체로 표시된 단계로 건너뜁니다.

      이전 단계가 resource type을 알 수 없음으로 끝난 경우, 이 경우가 트리거됩니다.

    10. 요소의 콘텐츠는 object 요소가 나타내는 콘텐츠의 일부가 아닙니다.

    11. object 요소가 탐색 가능한 콘텐츠를 나타내지 않는 경우, 리소스가 완전히 로드된 후, 요소의 object 요소에 주어진 요소 작업을 큐에 넣어 이벤트로드라는 이름으로 발생시킵니다.

      요소가 탐색 가능한 콘텐츠를 나타내는 경우, 생성된 document완전히 로드될 때 유사한 작업이 큐에 추가됩니다.

    12. 반환합니다.

  4. 대체: object 요소는 자식 요소를 나타냅니다. 이것이 요소의 대체 콘텐츠입니다. 요소에 대해 자식 탐색 가능을 파괴합니다.

위 알고리즘에 따라, object 요소의 콘텐츠는 참조된 리소스를 표시할 수 없는 경우(예: 404 오류가 반환된 경우) 사용되는 대체 콘텐츠로 작동합니다. 이를 통해 여러 object 요소를 서로 중첩하여 서로 다른 기능을 가진 여러 사용자 에이전트를 대상으로 할 수 있으며, 사용자 에이전트는 자신이 지원하는 첫 번째 요소를 선택합니다.

object 요소는 로드 이벤트를 지연시킬 수 있습니다.

form 속성은 object 요소를 폼 소유자와 명시적으로 연결하는 데 사용됩니다.

object 요소는 크기 속성을 지원합니다.

HTMLObjectElement/contentDocument

모든 현재 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer8+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

contentDocument getter 단계는 이것콘텐츠 문서를 반환하는 것입니다.

HTMLObjectElement/contentWindow

모든 현재 엔진에서 지원합니다.

Firefox22+Safari13+Chrome53+
Opera?Edge79+
Edge (Legacy)17+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

contentWindow getter 단계는 이것콘텐츠 윈도우를 반환하는 것입니다.

willValidate, validity, 그리고 validationMessage 속성과, checkValidity(), reportValidity(), setCustomValidity() 메서드는 제약 조건 검증 API의 일부입니다. form IDL 속성은 요소의 폼 API의 일부입니다.

이 예제에서는 object 요소를 사용하여 HTML 페이지를 다른 페이지에 포함합니다.

<figure>
<object data="clock.html"></object>
<figcaption>My HTML Clock</figcaption>
</figure>

4.8.8 video 요소

요소/video

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLVideoElement

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
범주:
플로우 콘텐츠.
구문 콘텐츠.
내장 콘텐츠.
이 요소가 controls 속성을 가지고 있는 경우: 인터랙티브 콘텐츠.
감지 가능한 콘텐츠.
이 요소가 사용될 수 있는 문맥:
내장 콘텐츠가 예상되는 곳.
콘텐츠 모델:
이 요소가 src 속성을 가지고 있는 경우: 0개 이상의 track 요소, 그 후 투명, 하지만 미디어 요소 하위 요소는 없음.
이 요소가 src 속성을 가지고 있지 않은 경우: 0개 이상의 source 요소, 그 후 0개 이상의 track 요소, 그 후 투명, 하지만 미디어 요소 하위 요소는 없음.
text/html에서의 태그 생략:
둘 중 어느 태그도 생략할 수 없음.
콘텐츠 속성:
글로벌 속성
src — 리소스의 주소
crossorigin — 이 요소가 교차 출처 요청을 처리하는 방법
poster — 비디오 재생 전에 표시할 포스터 프레임
preload미디어 리소스에 얼마나 많은 버퍼링이 필요할 것 같은지에 대한 힌트
autoplay — 페이지가 로드될 때 미디어 리소스가 자동으로 시작될 수 있다는 힌트
playsinline — 사용자 에이전트가 요소의 재생 영역 내에서 비디오 콘텐츠를 표시하도록 권장
loop미디어 리소스를 반복할지 여부
muted — 기본적으로 미디어 리소스를 음소거할지 여부
controls — 사용자 에이전트 제어 표시
width — 수평 크기
height — 수직 크기
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLVideoElement : HTMLMediaElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute unsigned long width;
  [CEReactions, Reflect] attribute unsigned long height;
  readonly attribute unsigned long videoWidth;
  readonly attribute unsigned long videoHeight;
  [CEReactions, ReflectURL] attribute USVString poster;
  [CEReactions, Reflect] attribute boolean playsInline;
};

video 요소는 비디오나 영화를 재생하거나 자막이 포함된 오디오 파일을 재생하는 데 사용됩니다.

video 요소 내부에 콘텐츠를 제공할 수 있습니다. 사용자 에이전트는 이 콘텐츠를 사용자에게 표시하지 않아야 합니다. 이 콘텐츠는 비디오를 지원하지 않는 이전 웹 브라우저용으로 의도된 것으로, 이러한 이전 브라우저의 사용자에게 비디오 콘텐츠에 접근하는 방법을 안내하는 텍스트가 표시되도록 합니다.

특히, 이 콘텐츠는 접근성 문제를 해결하기 위한 것이 아닙니다. 시각 장애인, 청각 장애인, 청각 장애인 및 기타 신체적 또는 인지적 장애를 가진 사용자를 위해 비디오 콘텐츠를 접근 가능하게 만드는 다양한 기능이 제공됩니다. 자막은 비디오 스트림에 내장되거나 track 요소를 사용하여 외부 파일로 제공될 수 있습니다. 수화 트랙은 비디오 스트림에 내장될 수 있습니다. 오디오 설명은 비디오 스트림에 내장되거나 WebVTT 파일을 사용하여 텍스트 형식으로 제공될 수 있으며, 사용자 에이전트에 의해 음성으로 변환될 수 있습니다. WebVTT는 또한 챕터 제목을 제공하는 데 사용할 수 있습니다. 미디어 요소를 전혀 사용하지 않으려는 사용자에게는, video 요소 근처의 텍스트에서 간단히 링크하여 대본 또는 다른 텍스트 대안을 제공할 수 있습니다. [WEBVTT]

video 요소는 미디어 요소로, 그 미디어 데이터는 명목상 비디오 데이터이며, 관련 오디오 데이터가 있을 수 있습니다.

src, crossorigin, preload, autoplay, loop, mutedcontrols 속성은 모든 미디어 요소에 공통된 속성입니다.

poster 속성은 사용자 에이전트가 비디오 데이터가 없는 동안 표시할 수 있는 이미지 파일의 URL을 제공합니다. 속성이 존재하는 경우, 공백으로 둘러싸일 수 있는 유효한 비어 있지 않은 URL을 포함해야 합니다.

지정된 리소스를 사용해야 하는 경우, 요소가 생성되거나 poster 속성이 설정, 변경 또는 제거될 때, 사용자 에이전트는 요소의 포스터 프레임을 결정하기 위해 다음 단계를 실행해야 합니다(요소의 포스터 표시 플래그의 값에 관계없이):

  1. video 요소에 대해 실행 중인 이 알고리즘의 인스턴스가 있는 경우, 포스터 프레임을 변경하지 않고 해당 인스턴스를 중단합니다.

  2. poster 속성의 값이 빈 문자열이거나 속성이 없는 경우 포스터 프레임이 없으므로 반환합니다.

  3. urlposter 속성의 값을 요소의 노드 문서와 상대적으로 URL을 인코딩-파싱한 결과로 설정합니다.

  4. url이 실패인 경우, 반환합니다. 포스터 프레임이 없습니다.

  5. request를 새로운 요청으로 설정하며, 그 URLurl, 클라이언트는 요소의 노드 문서관련 설정 객체, 대상은 "image", 시작자 유형은 "video", 자격 증명 모드는 "include"이며, 그 URL 자격 증명 플래그가 설정됩니다.

  6. 요청request합니다. 이는 요소의 노드 문서로드 이벤트를 지연시켜야 합니다.

  7. 이렇게 얻은 이미지가 있는 경우, 포스터 프레임은 해당 이미지입니다. 그렇지 않으면 포스터 프레임이 없습니다.

poster 속성으로 제공되는 이미지, 포스터 프레임은 사용자가 비디오가 어떤지에 대한 아이디어를 얻을 수 있도록 비디오의 대표 프레임(일반적으로 첫 번째 비어 있지 않은 프레임 중 하나)으로 의도된 것입니다.

playsinline 속성은 불리언 속성입니다. 이 속성이 존재하면, 비디오는 전체 화면이나 독립적인 크기 조정 가능한 창으로 표시되는 대신 기본적으로 문서 내에서 "인라인"으로 표시되어야 한다는 힌트를 사용자 에이전트에 제공합니다.

playsinline 속성이 없다고 해서 비디오가 기본적으로 전체 화면으로 표시된다는 것을 의미하지는 않습니다. 실제로 대부분의 사용자 에이전트는 기본적으로 모든 비디오를 인라인으로 재생하도록 선택했으며, 이러한 사용자 에이전트에서는 playsinline 속성이 아무런 영향을 미치지 않습니다.


video 요소는 아래 목록에서 첫 번째 일치 조건에 대해 주어진 것을 나타냅니다:

비디오 데이터가 없는 경우(요소의 readyState 속성이 HAVE_NOTHING 또는 HAVE_METADATA 이지만 비디오 데이터가 전혀 얻어지지 않았거나 요소의 readyState 속성이 이후 값으로 설정되어 있지만 미디어 리소스에 비디오 채널이 없는 경우)
video 요소는 포스터 프레임을 나타내며, 포스터 프레임이 있는 경우 또는 그렇지 않으면 투명한 검정과 자연 크기가 없습니다.
video 요소가 일시 중지되고, 현재 재생 위치가 비디오의 첫 번째 프레임인 경우, 요소의 포스터 표시 플래그가 설정됨
video 요소는 포스터 프레임을 나타내며, 포스터 프레임이 있는 경우 또는 그렇지 않으면 비디오의 첫 번째 프레임을 나타냅니다.
video 요소가 일시 중지되었으며, 현재 재생 위치에 해당하는 비디오 프레임이 사용할 수 없는 경우(예: 비디오가 탐색 중이거나 버퍼링 중이기 때문에)
video 요소가 잠재적으로 재생 중이거나 일시 중지 상태가 아닌 경우(예: 탐색 중이거나 멈춘 경우)
video 요소는 마지막으로 렌더링된 비디오 프레임을 나타냅니다.
video 요소가 일시 중지된 경우
video 요소는 현재 재생 위치에 해당하는 비디오 프레임을 나타냅니다.
그 외의 경우(video 요소가 비디오 채널을 가지고 있으며 잠재적으로 재생 중인 경우)
video 요소는 계속 증가하는 "현재" 위치에서 비디오 프레임을 나타냅니다. 현재 재생 위치가 변경되어 마지막으로 렌더링된 프레임이 비디오의 현재 재생 위치에 해당하지 않게 되면, 새 프레임이 렌더링되어야 합니다.

비디오 프레임은 선택된 비디오 트랙에서 얻어야 하며, 이벤트 루프가 마지막으로 1단계에 도달했을 때 이뤄져야 합니다.

비디오 스트림에서 특정 재생 위치에 해당하는 프레임은 비디오 스트림의 형식에 의해 정의됩니다.

video 요소는 또한 텍스트 트랙 큐텍스트 트랙 큐 활성 플래그가 설정되어 있고, 텍스트 트랙표시 중 모드에 있을 경우 이들을 나타냅니다. 그리고 미디어 리소스에서 나오는 오디오를 현재 재생 위치에서 동기화된 상태로 나타냅니다.

비디오 리소스와 연관된 오디오는, 재생되는 경우, 요소의 실효 미디어 볼륨에서 현재 재생 위치에서 동기화되어 재생되어야 합니다. 사용자 에이전트는 오디오 트랙에서 활성화된 트랙을 재생해야 하며, 이벤트 루프가 마지막으로 1단계에 도달했을 때 이러한 트랙이 활성화되어야 합니다.

위 내용 외에도, 사용자 에이전트는 비디오에 텍스트 또는 아이콘을 오버레이하거나 요소의 재생 영역의 다른 부분에 적절한 방식으로 텍스트 또는 아이콘을 오버레이하여 사용자가 "버퍼링 중", "비디오가 로드되지 않음", "오류" 또는 더 자세한 정보를 받을 수 있도록 할 수 있습니다.

비디오를 렌더링할 수 없는 사용자 에이전트는 대신 요소가 외부 비디오 재생 유틸리티 또는 비디오 데이터 자체로 연결되는 링크를 나타내도록 할 수 있습니다.

video 요소의 미디어 리소스가 비디오 채널을 가지고 있는 경우, 요소는 페인트 소스를 제공하며, 그 너비는 미디어 리소스자연 너비, 높이는 미디어 리소스자연 높이이며, 현재 재생 위치에 해당하는 비디오 프레임의 모습이며, 해당 비디오 프레임이 사용할 수 없는 경우(예: 비디오가 탐색 중이거나 버퍼링 중인 경우) 이전 모습이거나(있는 경우) 그렇지 않으면(예: 비디오가 첫 번째 프레임을 아직 로드 중인 경우) 검정색입니다.


video.videoWidth

HTMLVideoElement/videoWidth

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
video.videoHeight

HTMLVideoElement/videoHeight

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+

이 속성들은 비디오의 본래 크기를 반환하거나, 크기를 알 수 없는 경우 0을 반환합니다.

비디오의 본래 너비본래 높이미디어 리소스의 크기, 종횡비, 클린 아퍼처, 해상도 등을 고려한 후의 CSS 픽셀로 표현된 크기입니다. 자막 포맷이 비디오 데이터의 크기에 어떻게 종횡비를 적용하여 "올바른" 크기를 얻을지 정의하지 않는 경우, 사용자 에이전트는 한 차원을 늘리고 다른 차원을 변경하지 않음으로써 이 비율을 적용해야 합니다.

videoWidth IDL 속성은 비디오의 본래 너비CSS 픽셀 단위로 반환해야 합니다. videoHeight IDL 속성은 비디오의 본래 높이CSS 픽셀 단위로 반환해야 합니다. 요소의 readyState 속성이 HAVE_NOTHING 인 경우 이 속성은 0을 반환해야 합니다.

비디오의 본래 너비본래 높이가 변경될 때마다 (예를 들어, 선택된 비디오 트랙이 변경된 경우 포함), 요소의 readyState 속성이 HAVE_NOTHING 이 아닌 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가해야 하며, 이벤트resize라는 이름으로 미디어 요소에서 발생시켜야 합니다.

video 요소는 크기 속성을 지원합니다.

다른 스타일 규칙이 없는 경우, 비디오 콘텐츠는 요소의 재생 영역 내에 최대 크기로 렌더링되어야 하며, 비디오 콘텐츠의 종횡비가 유지되어야 합니다. 따라서 재생 영역의 종횡비가 비디오의 종횡비와 일치하지 않는 경우, 비디오는 레터박스 또는 필러박스로 표시됩니다. 요소의 재생 영역의 비디오를 포함하지 않는 부분은 아무것도 나타내지 않습니다.

CSS를 구현한 사용자 에이전트에서는 위 요구 사항을 렌더링 섹션에서 제안된 스타일 규칙을 사용하여 구현할 수 있습니다.

video 요소의 재생 영역의 본래 너비포스터 프레임이 사용 가능하고 현재 요소가 포스터 프레임을 나타내는 경우, 포스터 프레임의 본래 너비입니다. 그렇지 않으면 비디오 리소스의 본래 너비입니다. 그렇지 않으면 본래 너비는 존재하지 않습니다.

video 요소의 재생 영역의 본래 높이포스터 프레임이 사용 가능하고 현재 요소가 포스터 프레임을 나타내는 경우, 포스터 프레임의 본래 높이입니다. 그렇지 않으면 비디오 리소스의 본래 높이입니다. 그렇지 않으면 본래 높이는 존재하지 않습니다.

기본 객체 크기는 너비가 300 CSS 픽셀 이며, 높이가 150 CSS 픽셀입니다. [CSSIMAGES]


사용자 에이전트는 자막, 오디오 설명 트랙 및 비디오 스트림과 관련된 기타 추가 데이터를 표시하거나 비활성화할 수 있는 제어 기능을 제공해야 합니다. 이러한 기능은 다시 말하지만 페이지의 정상적인 렌더링을 방해하지 않아야 합니다.

사용자 에이전트는 사용자가 전체 화면 또는 독립적인 크기 조정 가능 창과 같은 사용자에게 더 적합한 방식으로 비디오 콘텐츠를 볼 수 있도록 허용할 수 있습니다. 사용자 에이전트는 비디오를 재생할 때 기본적으로 이러한 보기 모드를 트리거할 수 있지만, playsinline 속성이 지정된 경우에는 그렇게 하지 않아야 합니다. 다른 사용자 인터페이스 기능과 마찬가지로 이를 활성화하는 제어는 사용자 에이전트가 사용자 인터페이스를 노출하지 않는 한 페이지의 정상적인 렌더링을 방해하지 않아야 합니다. 그러나 이러한 독립적인 보기 모드에서는 controls 속성이 없어도 전체 사용자 인터페이스를 표시할 수 있습니다.

사용자 에이전트는 비디오 재생이 진행되는 동안 화면 보호기를 비활성화하는 등 사용자의 경험을 방해할 수 있는 시스템 기능에 비디오 재생이 영향을 미치도록 할 수 있습니다.


이 예제는 비디오 재생이 실패했을 때 이유를 알려주는 메시지를 표시하는 방법을 보여줍니다:

<script>
 function failed(e) {
   // 비디오 재생이 실패했습니다 - 그 이유를 설명하는 메시지를 표시하세요
   switch (e.target.error.code) {
     case e.target.error.MEDIA_ERR_ABORTED:
       alert('비디오 재생이 중단되었습니다.');
       break;
     case e.target.error.MEDIA_ERR_NETWORK:
       alert('네트워크 오류로 인해 비디오 다운로드가 중간에 실패했습니다.');
       break;
     case e.target.error.MEDIA_ERR_DECODE:
       alert('비디오 재생이 중단되었습니다. 손상 문제나 브라우저에서 지원하지 않는 기능을 사용하는 비디오 때문일 수 있습니다.');
       break;
     case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
       alert('서버나 네트워크 오류로 인해 비디오를 로드할 수 없었거나, 형식이 지원되지 않습니다.');
       break;
     default:
       alert('알 수 없는 오류가 발생했습니다.');
       break;
   }
 }
</script>
<p><video src="tgif.vid" autoplay controls onerror="failed(event)"></video></p>
<p><a href="tgif.vid">비디오 파일 다운로드</a>.</p>

4.8.9 audio 요소

Element/audio

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android3+Samsung Internet?Opera Android11+

HTMLAudioElement

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
임베디드 콘텐츠.
요소에 controls 속성이 있는 경우: 인터랙티브 콘텐츠.
요소에 controls 속성이 있는 경우: 구체적인 콘텐츠.
이 요소를 사용할 수 있는 문맥:
임베디드 콘텐츠가 예상되는 곳.
콘텐츠 모델:
요소에 src 속성이 있는 경우: 0개 이상의 track 요소, 그런 다음 투명, 단 미디어 요소의 하위 요소는 포함하지 않음.
요소에 src 속성이 없는 경우: 0개 이상의 source 요소, 그런 다음 0개 이상의 track 요소, 그런 다음 투명, 단 미디어 요소의 하위 요소는 포함하지 않음.
text/html에서 태그 생략:
태그를 생략할 수 없음.
콘텐츠 속성:
글로벌 속성
src — 리소스의 주소
crossorigin — 요소가 CORS 요청을 처리하는 방법
preload미디어 리소스가 얼마나 많은 버퍼링이 필요할지 힌트
autoplay미디어 리소스를 페이지가 로드될 때 자동으로 시작할 수 있는지 힌트
loop미디어 리소스를 반복할지 여부
muted — 기본적으로 미디어 리소스를 음소거할지 여부
controls — 사용자 에이전트 제어 표시
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window,
 LegacyFactoryFunction=Audio(optional DOMString src)]
interface HTMLAudioElement : HTMLMediaElement {
  [HTMLConstructor] constructor();
};

audio 요소는 소리 또는 오디오 스트림을 나타냅니다.

컨텐츠는 audio 요소 안에 제공될 수 있습니다. 사용자 에이전트는 이 콘텐츠를 사용자에게 표시해서는 안 됩니다. 이 콘텐츠는 audio를 지원하지 않는 구형 웹 브라우저를 위해 제공되며, 이러한 구형 브라우저 사용자에게 오디오 콘텐츠에 접근하는 방법을 알려주는 텍스트가 표시될 수 있습니다.

특히 이 콘텐츠는 접근성 문제를 해결하기 위한 것이 아닙니다. 청각 장애인이나 기타 신체적, 인지적 장애를 가진 사람들이 오디오 콘텐츠에 접근할 수 있도록 다양한 기능이 제공됩니다. 자막이나 수화 비디오가 있는 경우, 사용자는 시각적 대안을 활성화할 수 있도록 video 요소를 사용하여 오디오를 재생할 수 있습니다. 내비게이션을 돕기 위해 track 요소와 WebVTT 파일을 사용하여 챕터 제목을 제공할 수 있습니다. 그리고 자연스럽게, 단순히 audio 요소 근처의 산문에서 이들에게 링크를 제공하여 텍스트 대체물이나 다른 대안을 제공할 수 있습니다. [WEBVTT]

audio 요소는 미디어 요소로서 그 미디어 데이터는 본질적으로 오디오 데이터입니다.

src, crossorigin, preload, autoplay, loop, muted, 그리고 controls 속성은 모든 미디어 요소에 공통된 속성입니다.

audio = new Audio([ url ])

HTMLAudioElement/Audio

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome4+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

새로운 audio 요소를 반환하며, 해당되는 경우 전달된 인수의 값을 사용하여 src 속성이 설정됩니다.

유산 팩토리 함수는 HTMLAudioElement 객체를 생성하기 위해 제공됩니다 (DOM의 createElement()와 같은 팩토리 메서드 외에도): Audio(src). 호출될 때, 유산 팩토리 함수는 다음 단계를 수행해야 합니다:

  1. document현재 글로벌 객체관련 Document로 설정합니다.

  2. document, "audio", 그리고 HTML 네임스페이스가 주어졌을 때 요소를 생성한 결과를 audio라 합니다.

  3. 속성 값을 설정하여 audio에 "preload"와 "auto"를 사용합니다.

  4. src가 제공된 경우, "src"와 src를 사용하여 audio속성 값을 설정합니다. (이것은 객체의 리소스 선택 알고리즘을 반환 전에 호출하도록 사용자 에이전트에게 지시합니다.)

  5. audio를 반환합니다.

4.8.10 track 요소

Element/track

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android25+WebView Android?Samsung Internet?Opera Android12.1+

HTMLTrackElement

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12+

HTMLTrackElement/src

Support in all current engines.

Firefox31+Safari6+Chrome23+
Opera12+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12+
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
미디어 요소의 자식으로, 플로우 콘텐츠 전에 사용합니다.
콘텐츠 모델:
없음.
text/html에서 태그 생략:
종료 태그가 없습니다.
콘텐츠 속성:
전역 속성
kind — 텍스트 트랙의 유형
src — 리소스의 주소
srclang — 텍스트 트랙의 언어
label — 사용자에게 표시되는 레이블
default — 다른 텍스트 트랙이 더 적합하지 않을 경우 트랙을 활성화합니다.
접근성 고려사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTrackElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute DOMString kind;
  [CEReactions, ReflectURL] attribute USVString src;
  [CEReactions, Reflect] attribute DOMString srclang;
  [CEReactions, Reflect] attribute DOMString label;
  [CEReactions, Reflect] attribute boolean default;

  const unsigned short NONE = 0;
  const unsigned short LOADING = 1;
  const unsigned short LOADED = 2;
  const unsigned short ERROR = 3;
  readonly attribute unsigned short readyState;

  readonly attribute TextTrack track;
};

track 요소는 저자가 미디어 요소에 대한 명시적인 외부 타임드 텍스트 트랙을 지정할 수 있도록 합니다. 이 요소 자체는 아무것도 나타내지 않습니다.

kind 속성은 열거형 속성이며, 다음 키워드 및 상태를 가집니다:

키워드 상태 간략한 설명
subtitles 자막 대화의 전사 또는 번역으로, 소리는 들리지만 이해되지 않을 때 적합합니다 (예: 사용자가 미디어 리소스의 오디오 트랙의 언어를 이해하지 못하는 경우). 비디오에 오버레이됩니다.
captions 캡션 대화, 음향 효과, 관련 음악 신호 및 기타 관련 오디오 정보를 전사하거나 번역한 것으로, 소리가 없거나 명확하게 들리지 않을 때 적합합니다 (예: 소리가 음소거되었거나 주변 소음에 의해 묻혔거나 사용자가 청각 장애인인 경우). 비디오에 오버레이되며, 청각 장애인에게 적합한 것으로 레이블링됩니다.
descriptions 설명 미디어 리소스의 비디오 구성 요소를 설명하는 텍스트로, 시각적 구성 요소가 가려지거나 사용할 수 없거나 화면이 없는 상태에서 응용 프로그램과 상호 작용하는 경우 (예: 운전 중이거나 사용자가 시각 장애인인 경우) 오디오로 합성됩니다.
chapters 챕터 메타데이터 스크립트에서 사용하기 위한 트랙입니다. 사용자 에이전트에 의해 표시되지 않습니다.
metadata 메타데이터

속성의 누락된 값 기본값자막 상태이며, 잘못된 값 기본값메타데이터 상태입니다.

src 속성은 텍스트 트랙 데이터의 URL을 제공합니다. 값은 유효한 비어 있지 않은 URL이어야 합니다 (주위에 공백이 있을 수 있음). 이 속성은 필수입니다.

요소는 초기 상태로 빈 문자열을 가지는 관련 트랙 URL (문자열)을 가집니다.

요소의 src 속성이 설정되면 다음 단계를 실행합니다:

  1. trackURL을 실패로 설정합니다.

  2. value를 요소의 src 속성 값으로 설정합니다.

  3. value가 빈 문자열이 아니면, trackURLURL을 인코딩, 파싱 및 직렬화한 결과로 설정합니다 (요소의 노드 문서를 기준으로 함).

  4. 요소의 트랙 URLtrackURL로 설정합니다 (실패하지 않은 경우); 그렇지 않으면 빈 문자열로 설정합니다.

요소의 트랙 URL이 WebVTT 리소스를 식별하고, 요소의 kind 속성이 챕터 메타데이터 또는 메타데이터 상태에 있지 않은 경우, WebVTT 파일은 큐 텍스트를 사용하는 WebVTT 파일이어야 합니다. [WEBVTT]

srclang 속성은 텍스트 트랙 데이터의 언어를 제공합니다. 값은 유효한 BCP 47 언어 태그여야 합니다. 이 속성은 요소의 kind 속성이 자막 상태에 있는 경우 필수입니다. [BCP47]

요소에 srclang 속성이 있으며 그 값이 빈 문자열이 아닌 경우, 요소의 트랙 언어는 속성의 값입니다. 그렇지 않으면 요소에 트랙 언어가 없습니다.

label 속성은 트랙에 대한 사용자 읽기 가능한 제목을 제공합니다. 이 제목은 사용자 에이전트가 자막, 캡션오디오 설명 트랙을 사용자 인터페이스에 나열할 때 사용됩니다.

label 속성이 존재하는 경우, 그 값은 빈 문자열이 아니어야 합니다. 또한 동일한 미디어 요소의 두 track 자식 요소가 동일한 상태의 kind 속성을 가지고, srclang 속성이 둘 다 없거나 동일한 언어를 나타내며, label 속성이 둘 다 없거나 동일한 값을 가질 수 없습니다.

요소에 label 속성이 있으며 그 값이 빈 문자열이 아닌 경우, 요소의 트랙 레이블은 속성의 값입니다. 그렇지 않으면 요소의 트랙 레이블은 빈 문자열입니다.

default 속성은 부울 속성으로, 지정된 경우, 사용자의 기본 설정이 다른 트랙이 더 적합하다고 표시하지 않는 한 트랙이 활성화됨을 나타냅니다.

미디어 요소track 요소 자식이 kind 속성이 자막 또는 캡션 상태에 있고 default 속성이 지정된 요소가 하나 이상 없어야 합니다.

미디어 요소track 요소 자식이 kind 속성이 설명 상태에 있고 default 속성이 지정된 요소가 하나 이상 없어야 합니다.

미디어 요소track 요소 자식이 kind 속성이 챕터 메타데이터 상태에 있고 default 속성이 지정된 요소가 하나 이상 없어야 합니다.

track 요소의 kind 속성이 메타데이터 상태에 있고 default 속성이 지정된 경우, 그 수에는 제한이 없습니다.

track.readyState

텍스트 트랙 준비 상태를 반환합니다. 다음 목록의 숫자로 표시됩니다:

track.NONE (0)

텍스트 트랙이 로드되지 않음 상태입니다.

track.LOADING (1)

텍스트 트랙 로딩 중 상태입니다.

track.LOADED (2)

텍스트 트랙 로드됨 상태입니다.

track.ERROR (3)

텍스트 트랙 로드 실패 상태입니다.

track.track

TextTrack 객체를 반환합니다. 이 객체는 track 요소의 텍스트 트랙에 해당합니다.

readyState 속성은 track 요소의 텍스트 트랙텍스트 트랙 준비 상태에 해당하는 숫자 값을 반환해야 합니다. 다음 목록에 정의됨:

NONE (숫자 값 0)
텍스트 트랙이 로드되지 않음 상태입니다.
LOADING (숫자 값 1)
텍스트 트랙 로딩 중 상태입니다.
LOADED (숫자 값 2)
텍스트 트랙 로드됨 상태입니다.
ERROR (숫자 값 3)
텍스트 트랙 로드 실패 상태입니다.

track IDL 속성은 get할 때 track 요소의 텍스트 트랙에 해당하는 TextTrack 객체를 반환해야 합니다.

kind IDL 속성은 같은 이름의 콘텐츠 속성을 반영해야 하며, 알려진 값만 제한됩니다.

이 비디오는 여러 언어로 된 자막을 가지고 있습니다:

<video src="brave.webm">
 <track kind=subtitles src=brave.en.vtt srclang=en label="English">
 <track kind=captions src=brave.en.hoh.vtt srclang=en label="English for the Hard of Hearing">
 <track kind=subtitles src=brave.fr.vtt srclang=fr lang=fr label="Français">
 <track kind=subtitles src=brave.de.vtt srclang=de lang=de label="Deutsch">
</video>

(마지막 두 개의 lang 속성은 자막의 언어가 아니라 label 속성의 언어를 설명합니다. 자막의 언어는 srclang 속성에 의해 지정됩니다.)

4.8.11 미디어 요소

HTMLMediaElement 객체들(audiovideo, 이 사양에서)은 미디어 요소로 알려져 있습니다.

HTMLMediaElement

모든 최신 엔진에서 지원됨.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+

HTMLMediaElement/src

Support in all current engines.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLMediaElement/autoplay

Support in all current engines.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLMediaElement/loop

Support in all current engines.

Firefox11+Safari4+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLMediaElement/controls

Support in all current engines.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLMediaElement/defaultMuted

Support in all current engines.

Firefox11+Safari6+Chrome15+
Opera12.1+Edge79+
Edge (Legacy)12+Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" };
typedef (MediaStream or MediaSource or Blob) MediaProvider;

[Exposed=Window]
interface HTMLMediaElement : HTMLElement {

  // error state
  readonly attribute MediaError? error;

  // network state
  [CEReactions, ReflectURL] attribute USVString src;
  attribute MediaProvider? srcObject;
  readonly attribute USVString currentSrc;
  [CEReactions] attribute DOMString? crossOrigin;
  const unsigned short NETWORK_EMPTY = 0;
  const unsigned short NETWORK_IDLE = 1;
  const unsigned short NETWORK_LOADING = 2;
  const unsigned short NETWORK_NO_SOURCE = 3;
  readonly attribute unsigned short networkState;
  [CEReactions] attribute DOMString preload;
  readonly attribute TimeRanges buffered;
  undefined load();
  CanPlayTypeResult canPlayType(DOMString type);

  // ready state
  const unsigned short HAVE_NOTHING = 0;
  const unsigned short HAVE_METADATA = 1;
  const unsigned short HAVE_CURRENT_DATA = 2;
  const unsigned short HAVE_FUTURE_DATA = 3;
  const unsigned short HAVE_ENOUGH_DATA = 4;
  readonly attribute unsigned short readyState;
  readonly attribute boolean seeking;

  // playback state
  attribute double currentTime;
  undefined fastSeek(double time);
  readonly attribute unrestricted double duration;
  object getStartDate();
  readonly attribute boolean paused;
  attribute double defaultPlaybackRate;
  attribute double playbackRate;
  attribute boolean preservesPitch;
  readonly attribute TimeRanges played;
  readonly attribute TimeRanges seekable;
  readonly attribute boolean ended;
  [CEReactions, Reflect] attribute boolean autoplay;
  [CEReactions, Reflect] attribute boolean loop;
  Promise<undefined> play();
  undefined pause();

  // controls
  [CEReactions, Reflect] attribute boolean controls;
  attribute double volume;
  attribute boolean muted;
  [CEReactions, Reflect="muted"] attribute boolean defaultMuted;

  // tracks
  [SameObject] readonly attribute AudioTrackList audioTracks;
  [SameObject] readonly attribute VideoTrackList videoTracks;
  [SameObject] readonly attribute TextTrackList textTracks;
  TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = "");
};

미디어 요소 속성src, crossorigin, preload, autoplay, loop, mutedcontrols는 모든 미디어 요소에 적용됩니다. 이 섹션에서 정의됩니다.

미디어 요소는 사용자에게 오디오 데이터 또는 비디오 및 오디오 데이터를 제공하는 데 사용됩니다. 이 섹션에서는 오디오나 비디오에 대한 미디어 요소에 동일하게 적용되므로 이를 미디어 데이터라고 합니다.

미디어 리소스라는 용어는 전체 미디어 데이터를 나타내는 데 사용됩니다. 예를 들어, 전체 비디오 파일 또는 전체 오디오 파일을 의미합니다.

미디어 리소스는 연관된 출처(origin)를 가지며, 이는 "none", "multiple", "rewritten" 또는 출처 중 하나일 수 있습니다. 초기값은 "none"으로 설정됩니다.

미디어 리소스는 여러 오디오 및 비디오 트랙을 가질 수 있습니다. 미디어 요소의 목적상, 미디어 리소스의 비디오 데이터는 마지막으로 이벤트 루프1단계에 도달했을 때 요소의 videoTracks 속성에 의해 선택된 현재 트랙(있는 경우)의 비디오 데이터만 해당하며, 미디어 리소스의 오디오 데이터는 마지막으로 이벤트 루프1단계에 도달했을 때 요소의 audioTracks 속성에 의해 현재 활성화된 트랙들(있는 경우)을 혼합한 결과입니다.

audio 요소와 video 요소 모두 오디오 및 비디오에 사용될 수 있습니다. 두 요소의 주요 차이점은 audio 요소는 시각적 콘텐츠(예: 비디오나 자막)에 대한 재생 영역이 없다는 점이고, video 요소는 재생 영역이 있다는 점입니다.

미디어 요소는 고유한 미디어 요소 이벤트 작업 소스를 가집니다.

미디어 요소 element와 일련의 단계 steps에 대해 미디어 요소 작업을 큐에 추가하려면, 요소 작업을 큐에 추가해야 하며, 이는 미디어 요소미디어 요소 이벤트 작업 소스에 대해 elementsteps을 사용하여 수행됩니다.

4.8.11.1 오류 코드

MediaError

모든 현재 엔진에서 지원됩니다.

Firefox4+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+
media.error

HTMLMediaElement/error

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

요소의 현재 오류 상태를 나타내는 MediaError 객체를 반환합니다.

오류가 없으면 null을 반환합니다.

모든 미디어 요소는 관련된 오류 상태를 가지고 있으며, 이 상태는 마지막으로 리소스 선택 알고리즘이 호출된 이후 요소가 겪은 마지막 오류를 기록합니다. error 속성은 마지막 오류에 대해 생성된 MediaError 객체를 반환해야 하며, 오류가 발생하지 않은 경우 null을 반환해야 합니다.

[Exposed=Window]
interface MediaError {
  const unsigned short MEDIA_ERR_ABORTED = 1;
  const unsigned short MEDIA_ERR_NETWORK = 2;
  const unsigned short MEDIA_ERR_DECODE = 3;
  const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4;

  readonly attribute unsigned short code;
  readonly attribute DOMString message;
};
media.error.code

MediaError/code

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

아래 목록에서 현재 오류의 오류 코드를 반환합니다.

media.error.message

MediaError/message

모든 현재 엔진에서 지원됩니다.

Firefox52+Safari15+Chrome59+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원되지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

발생한 오류 상태에 대한 특정 진단 메시지를 반환합니다. 메시지와 메시지 형식은 사용자 에이전트마다 일반적으로 일관되지 않습니다. 사용 가능한 메시지가 없는 경우 빈 문자열이 반환됩니다.

모든 MediaError 객체에는 문자열 메시지와 아래 값 중 하나인 코드가 있습니다.

MEDIA_ERR_ABORTED (숫자 값 1)
미디어 리소스에 대한 가져오기 프로세스가 사용자 에이전트에 의해 사용자의 요청으로 중단되었습니다.
MEDIA_ERR_NETWORK (숫자 값 2)
일부 네트워크 오류로 인해 리소스가 사용 가능한 것으로 확인된 후 사용자 에이전트가 미디어 리소스 가져오기를 중지했습니다.
MEDIA_ERR_DECODE (숫자 값 3)
리소스가 사용 가능한 것으로 확인된 후 미디어 리소스를 디코딩하는 동안 오류가 발생했습니다.
MEDIA_ERR_SRC_NOT_SUPPORTED (숫자 값 4)
src 속성 또는 할당된 미디어 공급자 객체에서 나타낸 미디어 리소스가 적절하지 않았습니다.

주어진 오류 코드가 위의 값 중 하나인 MediaError생성하려면, 주어진 오류 코드를 가진 새 MediaError 객체를 반환하고, 메시지를 설정해야 합니다. 이 메시지 문자열에는 오류 조건의 원인에 대해 사용자 에이전트가 제공할 수 있는 세부 정보가 포함되어야 하며, 사용자가 그러한 세부 정보를 제공할 수 없는 경우 빈 문자열로 설정해야 합니다. 이 메시지 문자열은 제공된 오류 코드에서 이미 제공된 정보만 포함해서는 안 됩니다. 예를 들어, 코드를 문자열 형식으로 번역하는 것만으로는 충분하지 않습니다. 오류 코드 외에 추가 정보가 제공되지 않는 경우, 메시지는 빈 문자열로 설정해야 합니다.

code의 getter 단계는 this코드를 반환하는 것입니다.

message의 getter 단계는 this메시지를 반환하는 것입니다.

4.8.11.2 미디어 리소스의 위치

미디어 요소src 콘텐츠 속성은 표시할 미디어 리소스(비디오, 오디오)의 URL을 제공합니다. 이 속성이 존재하는 경우, 유효한 빈 URL이 아닌 값이 공백으로 둘러싸여 있을 수 있는 URL을 포함해야 합니다.

미디어 요소itemprop 속성이 지정된 경우, src 속성도 반드시 지정되어야 합니다.

미디어 요소crossorigin 콘텐츠 속성은 CORS 설정 속성입니다.

만약 미디어 요소src 속성과 함께 생성되면, 사용자 에이전트는 미디어 요소리소스 선택 알고리즘즉시 호출해야 합니다.

미디어 요소src 속성이 설정되거나 변경된 경우, 사용자 에이전트는 미디어 요소미디어 요소 로드 알고리즘을 호출해야 합니다. (src 속성을 제거하는 것은, source 요소가 존재하더라도, 이를 수행하지 않습니다.)

HTMLMediaElement/crossOrigin

모든 현재 엔진에서 지원됩니다.

Firefox22+Safari10+Chrome33+
Opera?Edge79+
Edge (Legacy)13+Internet Explorer지원되지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

crossOrigin IDL 속성은 반영되어야 하며, crossorigin 콘텐츠 속성을 반영하되, 알려진 값으로만 제한됩니다.

미디어 공급자 객체미디어 리소스를 나타낼 수 있는 객체로, URL과는 별개입니다. MediaStream 객체, MediaSource 객체, Blob 객체는 모두 미디어 공급자 객체입니다.

미디어 요소할당된 미디어 공급자 객체를 가질 수 있으며, 이는 미디어 공급자 객체입니다. 미디어 요소가 생성될 때, 할당된 미디어 공급자 객체가 없습니다.

media.srcObject [ = source ]

HTMLMediaElement/srcObject

단일 엔진에서만 지원됩니다.

Firefox🔰 42+Safari11+🔰 108+
Opera?Edge🔰 108+
Edge (Legacy)?Internet Explorer지원되지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

미디어 요소미디어 공급자 객체를 할당할 수 있습니다.

media.currentSrc

HTMLMediaElement/currentSrc

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

현재 미디어 리소스URL을 반환합니다.

미디어 리소스가 없거나, URL이 없으면 빈 문자열을 반환합니다.

currentSrc IDL 속성은 초기에는 빈 문자열로 설정되어야 합니다. 이 값은 아래에 정의된 리소스 선택 알고리즘에 의해 변경됩니다.

srcObject IDL 속성은, 얻을 때, 요소의 할당된 미디어 제공자 객체를 반환해야 하며, 없으면 null을 반환해야 합니다. 설정할 때는, 요소의 할당된 미디어 제공자 객체를 새로운 값으로 설정한 다음, 요소의 미디어 요소 로드 알고리즘을 호출해야 합니다.

미디어 리소스를 지정하는 방법은 세 가지가 있습니다: srcObject IDL 속성, src 콘텐츠 속성, 그리고 source 요소입니다. IDL 속성이 우선되며, 그 다음은 콘텐츠 속성, 마지막으로 요소가 우선됩니다.

4.8.11.3 MIME 타입

미디어 리소스타입으로 설명될 수 있으며, 특히 MIME 타입으로 설명될 수 있습니다. 일부 경우에는 codecs 매개변수가 포함될 수 있습니다. (codecs 매개변수가 허용되는지 여부는 MIME 타입에 따라 다릅니다.) [RFC6381]

타입은 보통 다소 불완전한 설명입니다. 예를 들어 "video/mpeg"는 컨테이너 타입 외에는 아무 정보도 제공하지 않으며, "video/mp4; codecs="avc1.42E01E, mp4a.40.2""와 같은 타입도 실제 비트레이트(최대 비트레이트만 표시됨)와 같은 정보를 포함하지 않습니다. 따라서 사용자 에이전트는 주어진 타입이 재생할 수 있을지 (확신 정도에 따라 다름) 또는 재생할 수 없을지 여부만을 알 수 있습니다.

사용자 에이전트가 렌더링할 수 없음을 아는 타입이란, 컨테이너 타입을 인식하지 못하거나 나열된 코덱을 지원하지 않기 때문에 사용자 에이전트가 확실히 지원하지 않는 리소스를 설명하는 타입을 의미합니다.

MIME 타입 "application/octet-stream"에 파라미터가 없는 경우, 이 타입은 결코 사용자 에이전트가 렌더링할 수 없음을 아는 타입이 아닙니다. 사용자 에이전트는 이 타입을 명시적인 Content-Type 메타데이터가 없는 것과 동등하게 취급해야 합니다. 이 타입이 잠재적인 미디어 리소스를 나타낼 때 사용됩니다.

여기서 특별히 취급되는 것은 파라미터가 없는 "MIME 타입" "application/octet-stream"뿐입니다. 파라미터가 함께 나타나는 경우, 이는 다른 MIME 타입처럼 취급됩니다. 이는 알려지지 않은 MIME 타입 파라미터는 무시해야 한다는 규칙에서 벗어나는 것입니다.

media.canPlayType(type)

HTMLMediaElement/canPlayType

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari4+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

사용자 에이전트가 주어진 타입의 미디어 리소스를 재생할 수 있다고 확신하는 정도에 따라 빈 문자열(부정적 응답), "maybe" 또는 "probably"를 반환합니다.

canPlayType(type) 메서드는 type사용자 에이전트가 렌더링할 수 없음을 아는 타입이거나 "application/octet-stream" 타입인 경우 빈 문자열을 반환해야 합니다. 사용자 에이전트가 이 타입이 미디어 리소스를 나타내며 오디오 또는 video 요소와 함께 사용될 수 있다고 확신하는 경우 "probably"를 반환해야 하며, 그렇지 않은 경우 "maybe"를 반환해야 합니다. 구현자는 타입이 지원되는지 여부를 확신할 수 없는 경우 "maybe"를 반환하는 것이 권장됩니다. 일반적으로, 사용자 에이전트는 codecs 매개변수를 허용하는 타입의 경우, 해당 매개변수가 존재하지 않으면 "probably"를 반환해서는 안 됩니다.

이 스크립트는 사용자 에이전트가 (가상의) 새로운 포맷을 지원하는지 테스트하여 video 요소를 사용할지 여부를 동적으로 결정합니다:

<section id="video">
 <p><a href="playing-cats.nfv">Download video</a></p>
</section>
<script>
 const videoSection = document.getElementById('video');
 const videoElement = document.createElement('video');const support = videoElement.canPlayType('video/x-new-fictional-format;codecs="kittens,bunnies"');if (support === "probably") {videoElement.setAttribute("src", "playing-cats.nfv");videoSection.replaceChildren(videoElement);}
</script>

type 속성은 source 요소의 속성으로, 사용자 에이전트가 렌더링할 수 없는 포맷을 사용하는 리소스의 다운로드를 피할 수 있도록 합니다.

4.8.11.4 네트워크 상태
media.networkState

HTMLMediaElement/networkState

모든 최신 엔진에서 지원됨.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android4+Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

요소의 네트워크 활동의 현재 상태를 아래 목록에 있는 코드에서 반환합니다.

미디어 요소들이 네트워크와 상호작용할 때, 현재 네트워크 활동은 networkState 속성으로 나타납니다. 가져올 때, 요소의 현재 네트워크 상태를 반환해야 하며, 다음 값 중 하나여야 합니다:

NETWORK_EMPTY (숫자 값 0)
요소가 아직 초기화되지 않았습니다. 모든 속성은 초기 상태에 있습니다.
NETWORK_IDLE (숫자 값 1)
요소의 리소스 선택 알고리즘이 활성 상태이며, 리소스를 선택했지만, 현재 네트워크를 실제로 사용하지는 않습니다.
NETWORK_LOADING (숫자 값 2)
사용자 에이전트가 데이터를 다운로드하려고 적극적으로 시도 중입니다.
NETWORK_NO_SOURCE (숫자 값 3)
요소의 리소스 선택 알고리즘이 활성 상태이지만, 아직 사용할 리소스를 찾지 못했습니다.

리소스 선택 알고리즘은 아래에 정의되어 있으며, networkState 속성 값이 변경되는 시점과 이 상태에서 변화를 나타내기 위해 어떤 이벤트가 발생하는지를 설명합니다.

4.8.11.5 미디어 리소스 로드
media.load()

HTMLMediaElement/load

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

이 요소가 초기화되고 새로운 미디어 리소스 를 선택하고 로드하는 작업을 시작하게 합니다.

모든 미디어 요소자동 재생 가능 플래그를 가지고 있으며, 이는 true 상태에서 시작해야 하며, 로드 이벤트 지연 플래그는 false 상태에서 시작해야 합니다. 로드 이벤트 지연 플래그가 true인 동안 문서의 로드 이벤트를 지연시켜야 합니다.

load() 메서드가 미디어 요소에서 호출되면, 사용자 에이전트는 미디어 요소 로드 알고리즘을 실행해야 합니다.

미디어 요소는 연관된 boolean 현재 멈춤 상태를 가지며, 초기값은 false입니다.

미디어 요소 로드 알고리즘은 다음 단계를 포함합니다.

  1. 이 요소의 현재 멈춤 상태를 false로 설정합니다.

  2. 이 요소에 대해 이미 실행 중인 리소스 선택 알고리즘의 실행을 중단합니다.

  3. pending tasks작업의 목록으로 설정합니다. 미디어 요소미디어 요소 이벤트 작업 소스에서 작업 대기열 중 하나에 있는 모든 작업을 포함합니다.

  4. pending tasks에 있는 각 작업에 대해 보류 중인 재생 약속을 해결하거나 보류 중인 재생 약속을 거부할 때, 해당 작업이 대기열에 추가된 순서대로 즉시 약속을 해결하거나 거부합니다.

  5. pending tasks에 있는 각 작업을 해당 작업 대기열에서 제거합니다.

    기본적으로, 미디어 요소가 새로운 리소스를 로드하기 시작할 때 보류 중인 이벤트와 콜백이 삭제되고, 처리 중인 약속이 즉시 해결 또는 거부됩니다.

  6. 미디어 요소networkStateNETWORK_LOADING이나 NETWORK_IDLE로 설정된 경우, 미디어 요소 작업을 대기열에 추가하고, 미디어 요소에서 abort라는 이름의 이벤트를 발생시킵니다.

  7. 미디어 요소networkStateNETWORK_EMPTY로 설정되지 않은 경우:

    1. 미디어 요소 작업을 대기열에 추가하고 이벤트를 발생시킵니다. emptied라는 이름의 이벤트를 미디어 요소에서 발생시킵니다.

    2. 해당 미디어 요소에 대해 가져오기 프로세스가 진행 중인 경우, 사용자 에이전트는 이를 중지해야 합니다.

    3. 미디어 요소지정된 미디어 공급자 객체MediaSource인 경우, 이를 분리합니다.

    4. 미디어 요소의 미디어 리소스별 트랙 잊기.

    5. readyStateHAVE_NOTHING으로 설정되지 않은 경우, 해당 상태로 설정합니다.

    6. paused속성이 false로 설정된 경우:

      1. paused속성을 true로 설정합니다.

      2. 보류 중인 재생 약속을 가져와서 재생 약속을 거부합니다 결과와 함께 "AbortError" DOMException과 함께 거부합니다.

    7. seeking이 true인 경우, 이를 false로 설정합니다.

    8. 현재 재생 위치를 0으로 설정합니다.

      공식 재생 위치를 0으로 설정합니다.

      이 작업이 공식 재생 위치를 변경한 경우, 미디어 요소 작업을 대기열에 추가하고 이벤트를 발생시킵니다. timeupdate라는 이름의 이벤트를 미디어 요소에서 발생시킵니다.

    9. 타임라인 오프셋을 Not-a-Number (NaN)로 설정합니다.

    10. duration속성을 Not-a-Number (NaN)로 업데이트합니다.

      사용자 에이전트는 이 특정 변경에 대해 durationchange이벤트를 발생시키지 않습니다.

  8. playbackRate속성을 defaultPlaybackRate속성의 값으로 설정합니다.

  9. error속성을 null로 설정하고 자동 재생 가능 플래그를 true로 설정합니다.

  10. 미디어 요소리소스 선택 알고리즘을 호출합니다.

  11. 이 요소에 대해 이전에 재생 중이던 미디어 리소스의 재생이 중지됩니다.

리소스 선택 알고리즘미디어 요소에 대해 다음과 같이 작동합니다. 이 알고리즘은 항상 작업의 일부로 호출되지만, 알고리즘의 첫 번째 단계 중 하나는 반환하고 나머지 단계를 병렬로 계속 실행하는 것입니다. 또한 이 알고리즘은 이벤트 루프 메커니즘과 밀접하게 상호 작용합니다. 특히, 이 알고리즘은 동기화 섹션을 포함하며, 이는 이벤트 루프 알고리즘의 일부로 트리거됩니다. 이러한 섹션의 단계는 ⌛로 표시됩니다.

  1. 이 요소의 networkState속성을 NETWORK_NO_SOURCE값으로 설정합니다.

  2. 이 요소의 포스터 표시 플래그를 true로 설정합니다.

  3. 미디어 요소로드 이벤트 지연 플래그를 true로 설정합니다 (이것은 로드 이벤트를 지연시킵니다).

  4. 안정적인 상태를 기다립니다, 이 작업을 호출한 작업을 계속하도록 합니다. 동기화 섹션은 이 알고리즘의 나머지 모든 단계를 포함하며, 알고리즘이 동기화 섹션이 끝났다고 말할 때까지 계속됩니다. (동기화 섹션의 단계는 ⌛로 표시됩니다.)

  5. 미디어 요소파서에 의해 차단됨 플래그가 false인 경우, 보류 중인 텍스트 트랙 목록을 채웁니다.

  6. 미디어 요소지정된 미디어 공급자 객체를 가지고 있는 경우, modeobject로 설정합니다.

    ⌛ 그렇지 않고, 미디어 요소지정된 미디어 공급자 객체를 가지고 있지 않지만 src 속성을 가지고 있는 경우, modeattribute로 설정합니다.

    ⌛ 그렇지 않고, 미디어 요소지정된 미디어 공급자 객체를 가지고 있지 않으며, src 속성도 가지고 있지 않지만 source 요소 자식을 가지고 있는 경우, modechildren으로 설정하고 candidate를 해당 source 요소 자식 중 첫 번째로 설정합니다. 트리 순서로.

    ⌛ 그렇지 않은 경우, 미디어 요소에는 지정된 미디어 공급자 객체가 없고, src 속성도 source요소 자식도 없습니다:

    1. networkStateNETWORK_EMPTY로 설정합니다.

    2. ⌛ 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

    3. 동기화 섹션을 끝내고 반환합니다.

  7. 미디어 요소networkStateNETWORK_LOADING으로 설정합니다.

  8. 미디어 요소 작업을 대기열에 추가하고 미디어 요소에서 이벤트를 발생시킵니다. loadstart라는 이름의 이벤트를 미디어 요소에서.

  9. 다음 목록에서 적절한 단계를 실행합니다:

    modeobject인 경우
    1. currentSrc속성을 빈 문자열로 설정합니다.

    2. 동기화 섹션을 끝내고, 나머지 단계를 병렬로 계속합니다.

    3. 리소스 가져오기 알고리즘지정된 미디어 공급자 객체와 함께 실행합니다. 해당 알고리즘이 이 알고리즘을 중단하지 않고 반환되면, 로드에 실패한 것입니다.

    4. 미디어 공급자로 인해 실패: 이 단계에 도달하면 미디어 리소스 로드에 실패한 것으로 간주됩니다. 보류 중인 재생 약속을 가져오고 미디어 요소 작업을 대기열에 추가하고 미디어 요소에서 전용 미디어 소스 실패 단계를 결과와 함께 실행합니다.

    5. 이전 단계에서 대기열에 추가된 작업이 실행될 때까지 기다립니다.

    6. 반환합니다. 이 알고리즘이 다시 호출되기 전까지 이 요소는 다른 리소스를 로드하려고 하지 않습니다.

    modeattribute인 경우
    1. src 속성의 값이 빈 문자열인 경우, 동기화 섹션을 끝내고, 아래의 속성으로 실패 단계로 건너뜁니다.

    2. urlRecordURL 인코딩-파싱의 결과로 설정합니다. src 속성의 값을 기준으로, 미디어 요소노드 문서에 상대적으로 적용됩니다.

    3. urlRecord가 실패가 아닌 경우, currentSrc속성을 URL 직렬화urlRecord에 적용한 결과로 설정합니다.

    4. 동기화 섹션을 끝내고, 나머지 단계를 병렬로 계속합니다.

    5. urlRecord가 실패가 아닌 경우, 리소스 가져오기 알고리즘urlRecord와 함께 실행합니다. 해당 알고리즘이 이 알고리즘을 중단하지 않고 반환되면, 로드에 실패한 것입니다.

    6. 속성으로 실패: 이 단계에 도달하면 미디어 리소스 로드에 실패한 것으로 간주되거나 urlRecord가 실패로 간주됩니다. 보류 중인 재생 약속을 가져오고 미디어 요소 작업을 대기열에 추가하고 미디어 요소에서 전용 미디어 소스 실패 단계를 결과와 함께 실행합니다.

    7. 이전 단계에서 대기열에 추가된 작업이 실행될 때까지 기다립니다.

    8. 반환합니다. 이 알고리즘이 다시 호출되기 전까지 이 요소는 다른 리소스를 로드하려고 하지 않습니다.

    그 외 (modechildren인 경우)
    1. pointer미디어 요소의 자식 목록에 있는 두 인접 노드로 정의된 위치로 설정합니다. 목록의 시작(목록의 첫 번째 자식 앞, 있는 경우)과 목록의 끝(목록의 마지막 자식 뒤, 있는 경우)을 자체 노드로 취급합니다. 한 노드는 pointer 앞의 노드이고 다른 노드는 pointer 뒤의 노드입니다. 초기에 pointercandidate 노드와 다음 노드 사이의 위치로 설정하거나, 다음 노드가 없으면 목록의 끝으로 설정합니다.

      노드가 미디어 요소삽입, 제거이동될 때 pointer는 다음과 같이 업데이트되어야 합니다.

      새 노드가 pointer를 정의하는 두 노드 사이에 삽입되거나 이동되는 경우
      pointerpointer 앞의 노드와 새 노드 사이의 지점으로 설정합니다. 즉, pointer에서의 삽입은 pointer 뒤로 이동합니다.
      pointer 앞의 노드가 제거되는 경우
      pointerpointer 뒤의 노드와 pointer 뒤의 노드 앞의 노드 사이의 지점으로 설정합니다. 즉, pointer는 나머지 노드에 대해 상대적으로 이동하지 않습니다.
      pointer 뒤의 노드가 제거되는 경우
      pointerpointer 앞의 노드와 pointer 앞의 노드 뒤의 노드 사이의 지점으로 설정합니다. 이전 경우와 마찬가지로 pointer는 나머지 노드에 대해 상대적으로 이동하지 않습니다.

      다른 변경 사항은 pointer에 영향을 주지 않습니다.

    2. 후보 처리: candidatesrc 속성을 가지고 있지 않거나, 해당 src속성의 값이 빈 문자열인 경우, 동기화 섹션을 끝내고, 아래의 요소로 실패 단계로 건너뜁니다.

    3. candidatemedia 속성이 있고 해당 속성의 값이 환경과 일치하지 않는 경우, 동기화 섹션을 끝내고, 아래의 요소로 실패 단계로 건너뜁니다.

    4. urlRecordURL 인코딩-파싱의 결과로 설정합니다. candidatesrc 속성의 값을 기준으로, candidate노드 문서에 상대적으로 적용됩니다.

    5. urlRecord가 실패인 경우, 동기화 섹션을 끝내고, 아래의 요소로 실패 단계로 건너뜁니다.

    6. candidatetype 속성이 있고 해당 값이 MIME 타입(해당 파라미터를 정의하는 타입의 경우 codecs 파라미터에 의해 설명된 코덱을 포함하여)으로 파싱되었을 때, 사용자 에이전트가 렌더링할 수 없음을 알고 있는 타입을 나타내면, 동기화 섹션을 끝내고, 아래의 요소로 실패 단계로 건너뜁니다.

    7. currentSrc속성을 URL 직렬화urlRecord에 적용한 결과로 설정합니다.

    8. 동기화 섹션을 끝내고, 나머지 단계를 병렬로 계속합니다.

    9. 리소스 가져오기 알고리즘urlRecord와 함께 실행합니다. 해당 알고리즘이 이 알고리즘을 중단하지 않고 반환되면, 로드에 실패한 것입니다.

    10. 요소로 실패: 미디어 요소 작업을 대기열에 추가하고 미디어 요소에서 이벤트를 발생시킵니다. error라는 이름의 이벤트를 candidate에서 발생시킵니다.

    11. 안정적인 상태를 기다립니다. 동기화 섹션은 이 알고리즘의 나머지 모든 단계를 포함하며, 알고리즘이 동기화 섹션이 끝났다고 말할 때까지 계속됩니다. (동기화 섹션의 단계는 ⌛로 표시됩니다.)

    12. 미디어 요소의 미디어 리소스별 트랙 잊기.

    13. 다음 후보 찾기: candidate를 null로 설정합니다.

    14. 탐색 루프: pointer 후의 노드가 리스트의 끝인 경우, 아래의 대기 중 단계로 건너뜁니다.

    15. pointer 후의 노드가 source요소인 경우, candidate를 해당 요소로 설정합니다.

    16. pointer를 앞으로 이동시켜 pointer 전의 노드가 이제 pointer 후의 노드가 되도록 하고, pointer 후의 노드가 이전에 pointer 후의 노드였던 노드 후의 노드가 되도록 합니다.

    17. candidate가 null인 경우, 탐색 루프 단계로 돌아갑니다. 그렇지 않은 경우, 후보 처리 단계로 돌아갑니다.

    18. 대기 중: 요소의 networkState속성을 NETWORK_NO_SOURCE값으로 설정합니다.

    19. ⌛ 요소의 포스터 표시 플래그를 true로 설정합니다.

    20. 미디어 요소 작업을 대기열에 추가하고 미디어 요소에서 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

    21. 동기화 섹션을 끝내고, 나머지 단계를 병렬로 계속합니다.

    22. pointer 후의 노드가 리스트의 끝이 아닌 노드가 될 때까지 기다립니다. (이 단계는 영원히 대기할 수 있습니다.)

    23. 안정적인 상태를 기다립니다. 동기화 섹션은 이 알고리즘의 나머지 모든 단계를 포함하며, 알고리즘이 동기화 섹션이 끝났다고 말할 때까지 계속됩니다. (동기화 섹션의 단계는 ⌛로 표시됩니다.)

    24. ⌛ 요소의 로드 이벤트 지연 플래그를 다시 true로 설정합니다 (이것은 아직 발생하지 않은 경우 로드 이벤트를 지연시킵니다).

    25. networkStateNETWORK_LOADING으로 다시 설정합니다.

    26. ⌛ 위의 다음 후보 찾기 단계로 다시 점프합니다.

    promises 목록과 함께 전용 미디어 소스 실패 단계를 실행하려면 다음 단계를 따르십시오:

    1. 요소의 error속성을 미디어 오류 MediaError를 생성한 결과로 설정하고 MEDIA_ERR_SRC_NOT_SUPPORTED로 설정합니다.

    2. 미디어 요소의 미디어 리소스별 트랙 잊기.

    3. 요소의 networkState속성을 NETWORK_NO_SOURCE값으로 설정합니다.

    4. 요소의 포스터 표시 플래그를 true로 설정합니다.

    5. 이벤트를 발생시킵니다. error라는 이름의 이벤트를 미디어 요소에서.

    6. 보류 중인 재생 약속을 거부하고 promises"NotSupportedError" DOMException과 함께 거부합니다.

    7. 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

미디어 응답을 검증하기 위해 다음 요소를 고려하세요: 응답 response, 미디어 리소스 resource, 그리고 "전체 리소스" 또는 (number, number 또는 "끝까지") 튜플 byteRange:

  1. response네트워크 오류인 경우, false를 반환합니다.

  2. byteRange가 "전체 리소스"인 경우, true를 반환합니다.

  3. internalResponseresponse안전하지 않은 응답으로 설정합니다.

  4. internalResponse상태가 200인 경우, true를 반환합니다.

  5. internalResponse상태가 206이 아닌 경우, false를 반환합니다.

  6. internalResponse에서 컨텐츠 범위 값 추출의 결과가 실패하면 false를 반환합니다.

    추출된 값들은 사용되지 않으며, 특히 byteRange와 비교되지 않습니다. 이 단계는 `Content-Range` 헤더의 구문 검증 역할을 하지만, 응답의 `Content-Range` 값이 요청의 `Range` 값과 일치하지 않는 경우, 이는 실패로 간주되지 않습니다.

  7. internalResponseURL이 null인 경우 origin을 "재작성됨"으로 설정합니다; 그렇지 않으면 internalResponseURL원본으로 설정합니다.

  8. previousOriginresource원본으로 설정합니다.

  9. 다음 중 하나가 참인 경우:

    • previousOrigin이 "없음"인 경우;

    • originpreviousOrigin이 "재작성됨"인 경우;

    • originpreviousOrigin원본이며, originpreviousOrigin동일 원본인 경우;

    이 경우 resource원본origin으로 설정합니다.

    그렇지 않으면, responseCORS 크로스-원본인 경우, false를 반환합니다.

    그렇지 않으면, resource원본을 "다중"으로 설정합니다.

    이렇게 하면 범위 헤더가 있는 불투명 응답이 다른 원본의 다른 응답과 패치되지 않아 정보가 유출되는 것을 방지합니다.

  10. true를 반환합니다.

미디어 자원 로드 알고리즘미디어 요소 및 주어진 URL 기록 또는 미디어 제공자 객체에 대해 다음과 같이 정의됩니다:

  1. moderemote로 설정합니다.

  2. 알고리즘이 미디어 제공자 객체로 호출된 경우 modelocal로 설정합니다.

    그렇지 않은 경우:

    1. URL 레코드blob URL 항목미디어 요소노드 문서관련 설정 객체를 사용하여 blob 객체를 가져온 결과를 object로 설정합니다.

    2. object미디어 제공자 객체인 경우 modelocal로 설정합니다.

  3. mode원격인 경우, 현재 미디어 자원을 이 알고리즘에 전달된 URL 기록으로 설정합니다. 그렇지 않으면 current media resource미디어 제공자 객체에서 제공한 자원으로 설정합니다. 어느 쪽이든 current media resource이 이제 요소의 미디어 자원이 됩니다.

  4. 모든 미디어 자원에 특정한 텍스트 트랙미디어 요소보류 중인 텍스트 트랙 목록에서 제거합니다.

  5. 적절한 단계를 다음 목록에서 실행합니다:

    만약 mode가 원격인 경우
    1. 선택적으로 다음 하위 단계를 실행합니다. 사용자 에이전트가 자원을 명시적으로 요청할 때까지 자원 가져오기를 시도하지 않으려는 경우(예: preload 속성의 none 키워드를 구현하는 방법으로서) 예상되는 동작입니다.

      1. networkStateNETWORK_IDLE로 설정합니다.

      2. 미디어 요소 작업을 큐에 추가하고 미디어 요소에서 suspend라는 이름의 이벤트를 발생시킵니다.

      3. 미디어 요소 작업을 큐에 추가하고 미디어 요소로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

      4. 작업이 실행될 때까지 기다립니다.

      5. 구현 정의된 이벤트(예: 사용자가 미디어 요소의 재생을 시작하도록 요청하는 경우)를 기다립니다.

      6. 요소의 로드 이벤트 지연 플래그를 다시 true로 설정합니다. (이것은 아직 로드 이벤트가 발생하지 않은 경우 로드 이벤트 지연을 다시 시작합니다.)

      7. networkStateNETWORK_LOADING으로 설정합니다.

    2. 만약 미디어 요소오디오 요소인 경우 destination을 "audio"로 설정하고, 그렇지 않으면 "video"로 설정합니다.

    3. 잠재적 CORS 요청을 생성한 결과를 현재 미디어 자원의 URL 기록, destination, 그리고 미디어 요소의 현재 상태와 함께 crossorigin 콘텐츠 속성으로 설정합니다.

    4. request클라이언트미디어 요소노드 문서관련 설정 객체로 설정합니다.

    5. request시작자 유형destination으로 설정합니다.

    6. byteRange을 "전체 자원" 또는 미디어 데이터의 누락된 데이터를 충족하기 위해 필요한 바이트 범위로 설정합니다. 이 값은 구현 정의이며, 코덱, 네트워크 상태 또는 기타 휴리스틱에 따라 달라질 수 있습니다. 사용자 에이전트는 자원을 전체로 가져오기로 결정할 수 있으며, 이 경우 byteRange은 "전체 자원"이 될 것이며, 바이트 오프셋에서 끝까지 가져오기로 결정할 수 있으며, 이 경우 byteRange는 (숫자, "끝까지")가 될 것이며, 두 바이트 오프셋 사이의 범위를 가져오기로 결정할 수 있으며, 이 경우 byteRange는 두 오프셋을 나타내는 (숫자, 숫자) 튜플이 될 것입니다.

    7. 만약 byteRange이 "전체 자원"이 아닌 경우:

      1. 만약 byteRange[1]이 "끝까지"라면 범위 헤더를 추가하여 request를 설정합니다.

      2. 그렇지 않으면, 범위 헤더를 추가하여 request를 설정합니다.

    8. 요청을 가져오고, processResponse를 설정하여 다음 단계로 설정합니다:

      1. 미디어 요소노드 문서관련 글로벌 객체global로 설정합니다.

      2. 미디어 요소 작업을 큐에 추가하고, 미디어 요소의 첫 번째 적절한 단계를 실행합니다. (이 작업은 네트워킹 작업 소스 대신 미디어 요소 이벤트 작업 소스에 상대적으로 발생하는 작업이 아래에 설명된 작업과 비교해 적절한 단계에서 발생하도록 하기 위해 사용됩니다.)

      3. 만약 네트워크 액세스 없이 모든 데이터를 사용할 수 있게 되었고, 미디어 데이터를 디코딩하는 작업이 오류 없이 완료되었다면, 사용자 에이전트는 아래의 최종 단계로 이동해야 합니다.

      4. 만약 미디어 응답을 검증한 결과가 current media resourcebyteRange에 대해 거짓이라면, 이러한 단계를 중지합니다.

      5. 그렇지 않으면, 점진적으로 응답의 본문을 읽어 updateMedia, processEndOfMedia, 빈 알고리즘, global을 주어진 대로 설정합니다.

      6. 미디어 데이터를 이 방식으로 얻은 응답의 안전하지 않은 응답의 내용으로 업데이트합니다. 응답은 CORS-동일 출처일 수도 있고 CORS-교차 출처일 수도 있으며, 이것은 API에서 참조되는 자막이 노출되는지 여부에 영향을 미칩니다. 비디오 요소의 경우, 비디오가 그려진 canvas가 오염될 수 있습니다.

      미디어 요소 지연 시간 초과구현에 따라 정의된 시간 길이이며, 약 3초여야 합니다. 미디어 데이터를 적극적으로 가져오려고 시도하는 미디어 요소미디어 요소 지연 시간 초과와 동일한 시간 동안 데이터를 수신하지 못한 경우, 사용자 에이전트는 해당 미디어 요소미디어 요소 작업을 대기열에 추가하여 다음을 수행해야 합니다.

      1. 이벤트를 발생시켜 요소에서 stalled라는 이름의 이벤트를 발생시킵니다.

      2. 요소의 현재 정지 상태를 true로 설정합니다.

      사용자 에이전트는 사용자가 미디어 데이터 다운로드를 선택적으로 차단하거나 속도를 늦출 수 있도록 허용할 수 있습니다. 미디어 요소의 다운로드가 완전히 차단된 경우, 사용자 에이전트는 연결이 끊어진 것처럼 작동하는 대신 정지된 것처럼 작동해야 합니다. 다운로드 속도는 같은 대역폭을 공유하는 다른 연결과 균형을 맞추기 위해 자동으로 제한될 수도 있습니다.

      사용자 에이전트는 언제든지 콘텐츠 다운로드를 중지할 수 있습니다. 예를 들어, 사용자 에이전트가 자원의 일부를 버퍼링한 후 사용자가 재생을 시작할 때까지 더 이상 콘텐츠를 다운로드하지 않거나, 사용자가 상호작용 자원에서 입력을 기다리는 동안 또는 사용자가 페이지에서 벗어날 때 다운로드를 중지할 수 있습니다. 미디어 요소의 다운로드가 일시 중단된 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 미디어 요소networkStateNETWORK_IDLE로 설정하고 이벤트를 발생시켜 suspend라는 이름의 이벤트를 요소에 발생시켜야 합니다. 자원의 다운로드가 다시 시작되면, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 미디어 요소networkStateNETWORK_LOADING로 설정해야 합니다. 이러한 작업들이 큐에 추가되는 동안, 로드는 일시 중단됩니다(따라서 위에서 설명한 것처럼 progress 이벤트가 발생하지 않습니다).

      preload 속성은 저자가 적절하다고 생각하는 버퍼링 양에 대한 힌트를 제공합니다. autoplay 속성이 없는 경우에도 마찬가지입니다.

      사용자 에이전트가 다운로드를 완전히 중지하기로 결정한 경우, 예를 들어 사용자가 재생을 시작할 때까지 추가 콘텐츠를 다운로드하지 않기로 결정한 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 미디어 요소로드 이벤트 지연 플래그를 false로 설정해야 합니다. 이것은 로드 이벤트 지연을 중지합니다.

      위의 단계는 요청을 발행하기 위한 알고리즘을 제공하지만, 사용자 에이전트는 특히 오류 조건에 직면했을 때 정확히 그 방법 외에도 다른 수단을 사용할 수 있습니다. 예를 들어, 사용자 에이전트는 서버에 다시 연결하거나 스트리밍 프로토콜로 전환할 수 있습니다. 사용자 에이전트는 자원을 오류로 간주하고, 위의 단계의 오류 지점으로 진행하는 경우에만 자원을 가져오려는 시도를 포기해야 합니다.

      미디어 자원의 형식을 결정하기 위해, 사용자 에이전트는 오디오 및 비디오를 특정하는 sniffing 규칙을 사용해야 합니다.

      로드가 일시 중단되지 않은 경우(아래 참조), 350ms(±200ms)마다 또는 수신된 각 바이트마다, 둘 중 더 빈번하지 않은 경우 미디어 요소 작업을 큐에 추가하고 미디어 요소를 다음과 같이 설정합니다:

      1. 이벤트를 발생시켜 요소에서 progress라는 이름의 이벤트를 발생시킵니다.

      2. 요소의 현재 정지 상태를 false로 설정합니다.

      사용자 에이전트가 미디어 자원의 일부를 얻기 위해 여전히 네트워크 액세스가 필요할 수 있지만, 사용자 에이전트는 이 단계에 머물러야 합니다.

      예를 들어, 사용자 에이전트가 비디오의 첫 번째 절반을 폐기한 경우, 재생이 종료된 후에도 사용자 에이전트는 이 단계에 머물러야 합니다. 왜냐하면 사용자가 처음으로 돌아가려고 할 가능성이 항상 있기 때문입니다. 사실, 이 상황에서, 재생이 종료된 후, 사용자 에이전트는 이전에 설명된 것처럼 suspend 이벤트를 발생시키게 될 것입니다.

    그렇지 않은 경우 (mode로컬)

    current media resource미디어 데이터를 포함하고 있습니다. 이는 CORS-동일 출처입니다.

    만약 current media resource이 원시 데이터 스트림(예: 파일 객체)인 경우, 사용자 에이전트는 오디오 및 비디오를 특정하는 sniffing 규칙을 사용하여 미디어 자원의 형식을 결정해야 합니다. 그렇지 않으면, 데이터 스트림이 사전 디코딩된 경우, 형식은 관련 명세에서 제공된 형식입니다.

    언제든지 current media resource에 대한 새로운 데이터가 사용 가능해지면, 미디어 요소 작업을 큐에 추가하여 미디어 요소에서 미디어 데이터 처리 단계 목록의 첫 번째 적절한 단계를 실행합니다.

    current media resource이 영구적으로 소진된 경우(예: Blob의 모든 바이트가 처리된 경우), 디코딩 오류가 없었다면 사용자 에이전트는 아래의 최종 단계로 이동해야 합니다. current media resourceMediaStream인 경우, 이 단계는 절대로 발생하지 않을 수 있습니다.

    미디어 데이터 처리 단계 목록은 다음과 같습니다:

    네트워크 오류로 인해 미디어 데이터를 전혀 가져올 수 없는 경우, 사용자 에이전트가 자원을 가져오려는 시도를 포기하게 됩니다
    미디어 데이터를 가져올 수 있지만, 검사 결과 지원되지 않는 형식이거나 렌더링할 수 없는 경우

    사용자 에이전트가 자원이 사용 가능한지 여부를 확인하기 전의 DNS 오류, HTTP 4xx 및 5xx 오류(및 기타 프로토콜의 동등한 오류)와 같은 치명적인 네트워크 오류뿐만 아니라 파일이 지원되지 않는 컨테이너 형식을 사용하거나 모든 데이터에 대해 지원되지 않는 코덱을 사용하는 경우, 사용자 에이전트는 다음 단계를 실행해야 합니다:

    1. 사용자 에이전트는 가져오기 프로세스를 취소해야 합니다.

    2. 이 하위 알고리즘을 중단하고 자원 선택 알고리즘으로 돌아갑니다.

    미디어 자원에서 오디오 트랙을 발견한 경우
    1. AudioTrack 객체를 생성하여 오디오 트랙을 나타냅니다.

    2. 미디어 요소audioTracks 속성을 AudioTrackList 객체로 업데이트하여 새 AudioTrack 객체를 초기화합니다.

    3. enable알 수 없음으로 설정합니다.

    4. 만약 미디어 자원 또는 URL이 특정 오디오 트랙을 활성화해야 함을 나타내거나, 사용자 에이전트가 특정 오디오 트랙을 선택하여 사용자의 경험을 개선할 수 있는 정보를 가지고 있다면, 이 오디오 트랙이 활성화해야 하는 트랙 중 하나인 경우 enabletrue로 설정하고, 그렇지 않으면 enablefalse로 설정합니다.

      이것은 미디어 조각 구문에 의해 트리거될 수 있지만, 예를 들어 5.1 서라운드 사운드 오디오 트랙을 스테레오 오디오 트랙보다 선택하는 사용자 에이전트에 의해 트리거될 수도 있습니다.

    5. enable이 여전히 알 수 없음인 경우, 미디어 요소에 아직 활성화된 오디오 트랙이 없는 경우 enabletrue로 설정하고, 그렇지 않으면 enablefalse로 설정합니다.

    6. 만약 enabletrue인 경우 이 오디오 트랙을 활성화하고, 그렇지 않으면 이 오디오 트랙을 활성화하지 않습니다.

    7. 이벤트를 발생시켜 addtrack이라는 이름의 이벤트를 AudioTrackList 객체에서 발생시키고, TrackEvent를 사용하여 트랙 속성을 새 AudioTrack 객체로 초기화합니다.

    미디어 자원에서 비디오 트랙을 발견한 경우
    1. VideoTrack 객체를 생성하여 비디오 트랙을 나타냅니다.

    2. 미디어 요소videoTracks 속성을 VideoTrackList 객체로 업데이트하여 새 VideoTrack 객체를 초기화합니다.

    3. enable알 수 없음으로 설정합니다.

    4. 만약 미디어 자원 또는 URL이 특정 비디오 트랙을 활성화해야 함을 나타내거나, 사용자 에이전트가 특정 비디오 트랙을 선택하여 사용자의 경험을 개선할 수 있는 정보를 가지고 있다면, 이 비디오 트랙이 첫 번째로 활성화해야 하는 트랙인 경우 enabletrue로 설정하고, 그렇지 않으면 enablefalse로 설정합니다.

      이것은 다시 미디어 조각 구문에 의해 트리거될 수 있습니다.

    5. enable이 여전히 알 수 없음인 경우, 미디어 요소에 아직 선택된 비디오 트랙이 없는 경우 enabletrue로 설정하고, 그렇지 않으면 enablefalse로 설정합니다.

    6. 만약 enabletrue인 경우 이 트랙을 선택하고 이전에 선택된 비디오 트랙을 선택 해제합니다. 그렇지 않으면 이 비디오 트랙을 선택하지 않습니다. 다른 트랙이 선택 해제된 경우 change 이벤트가 발생합니다.

    7. 이벤트를 발생시켜 addtrack라는 이름의 이벤트를 VideoTrackList 객체에서 발생시키고, TrackEvent를 사용하여 트랙 속성을 새 VideoTrack 객체로 초기화합니다.

    미디어 데이터의 지속 시간을 결정할 수 있을 정도로 충분한 데이터가 가져와진 경우

    이는 자원이 사용 가능하다는 것을 나타냅니다. 사용자 에이전트는 다음 하위 단계를 따라야 합니다:

    1. 미디어 타임라인을 설정하여 현재 재생 위치가장 빠른 위치를 결정합니다. 이것은 미디어 데이터를 기반으로 합니다.

    2. 타임라인 오프셋을 미디어 자원의 0초에 해당하는 날짜 및 시간으로 업데이트합니다. 명시된 날짜와 시간이 없는 경우 타임라인 오프셋은 NaN(Not-a-Number)로 설정되어야 합니다.

    3. 현재 재생 위치공식 재생 위치가장 빠른 위치로 설정합니다.

    4. 미디어 타임라인에서 알려진 마지막 프레임의 시간으로 duration 속성을 업데이트합니다. 만약 알려지지 않은 경우(예: 무한한 스트림), duration 속성을 양의 무한대로 업데이트합니다.

      사용자 에이전트는 durationChange 이벤트를 발생시키기 위해 미디어 요소 작업을 큐에 추가하여 미디어 요소에서 이벤트를 발생시켜 durationchange라는 이름의 이벤트를 요소에 발생시킵니다.

    5. video 요소의 경우, videoWidthvideoHeight 속성을 설정하고, 해당 미디어 요소미디어 요소 작업을 대기열에 추가하여 미디어 요소에서 resize라는 이름의 이벤트를 발생시킵니다.

      그 이후 크기가 변경될 경우 추가 resize 이벤트가 발생할 것입니다.

    6. readyState 속성을 HAVE_METADATA로 설정합니다.

      loadedmetadata DOM 이벤트가 readyState 속성이 새 값으로 설정될 때 발생할 것입니다.

    7. jumped를 false로 설정합니다.

    8. 미디어 요소기본 재생 시작 위치가 0보다 큰 경우 해당 시간으로 탐색하고 jumped를 true로 설정합니다.

    9. 미디어 요소기본 재생 시작 위치를 0으로 설정합니다.

    10. initial playback position를 0으로 설정합니다.

    11. 만약 미디어 자원 또는 URL이 특정 시작 시간을 나타내는 경우, initial playback position를 해당 시간으로 설정하고, 만약 jumped가 여전히 false인 경우 해당 시간으로 탐색합니다.

      예를 들어, 미디어 조각 구문을 지원하는 미디어 형식의 경우, 조각을 사용하여 시작 위치를 나타낼 수 있습니다.

    12. 활성화된 오디오 트랙이 없는 경우 오디오 트랙을 활성화합니다. 이것은 change 이벤트가 발생할 것입니다.

    13. 선택된 비디오 트랙이 없는 경우 비디오 트랙을 선택합니다. 이것은 change 이벤트가 발생할 것입니다.

    readyState 속성이 HAVE_CURRENT_DATA에 도달한 후 loadeddata 이벤트가 발생한 후, 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

    사용자 에이전트가 각각의 미디어 자원의 메타데이터를 가져오는 동안 네트워크 사용을 줄이려고 시도하는 경우, 이전에 설명한 규칙에 따라 버퍼링을 중지하게 되며, 여기에는 networkState 속성이 NETWORK_IDLE 값으로 전환되고 suspend 이벤트가 발생하는 것이 포함됩니다.

    사용자 에이전트는 미디어 자원의 지속 시간을 결정하고 재생 전에 이 단계를 거쳐야 합니다.

    전체 미디어 자원이 가져와진 경우(그러나 잠재적으로 그 일부가 디코딩되기 전일 수 있음)

    이벤트를 발생시켜 미디어 요소에서 progress라는 이름의 이벤트를 발생시킵니다.

    networkStateNETWORK_IDLE로 설정하고 이벤트를 발생시켜 suspend라는 이름의 이벤트를 미디어 요소에서 발생시킵니다.

    만약 사용자 에이전트가 미디어 데이터를 버리고 다시 얻어야 하는 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 미디어 요소networkStateNETWORK_LOADING로 설정해야 합니다.

    사용자 에이전트가 미디어 자원을 로드 상태로 유지할 수 있다면, 알고리즘은 아래의 최종 단계로 계속되어 알고리즘이 중지됩니다.

    일부 미디어 데이터가 수신된 후 연결이 중단되고 사용자 에이전트가 자원을 가져오려는 시도를 포기하게 되는 경우

    사용자 에이전트가 미디어 요소readyState 속성이 더 이상 HAVE_NOTHING이 아닌 경우에만 자원이 사용 가능한지 여부를 결정한 후 발생한 치명적인 네트워크 오류는 사용자 에이전트가 다음 단계를 실행하게 해야 합니다:

    1. 사용자 에이전트는 가져오기 프로세스를 취소해야 합니다.

    2. error 속성을 MediaError 생성의 결과로 설정합니다. 이때 MEDIA_ERR_NETWORK을 사용합니다.

    3. 요소의 networkState 속성을 NETWORK_IDLE 값으로 설정합니다.

    4. 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

    5. 이벤트를 발생시켜 미디어 요소에서 error라는 이름의 이벤트를 발생시킵니다.

    6. 전체 자원 선택 알고리즘을 중단합니다.

    미디어 데이터가 손상된 경우

    사용자 에이전트가 미디어 요소readyState 속성이 더 이상 HAVE_NOTHING이 아닌 경우에만 자원이 사용 가능한지 여부를 결정한 후 발생한 미디어 데이터 디코딩의 치명적인 오류는 사용자 에이전트가 다음 단계를 실행하게 해야 합니다:

    1. 사용자 에이전트는 가져오기 프로세스를 취소해야 합니다.

    2. error 속성을 MediaError 생성의 결과로 설정합니다. 이때 MEDIA_ERR_DECODE을 사용합니다.

    3. 요소의 networkState 속성을 NETWORK_IDLE 값으로 설정합니다.

    4. 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

    5. 이벤트를 발생시켜 미디어 요소에서 error라는 이름의 이벤트를 발생시킵니다.

    6. 전체 자원 선택 알고리즘을 중단합니다.

    사용자가 미디어 데이터 가져오기 프로세스를 중단한 경우

    사용자가 "중지" 버튼을 눌러 가져오기 프로세스를 중단한 경우, 사용자 에이전트는 다음 단계를 실행해야 합니다. 이 단계는 load() 메서드 자체가 실행 중인 동안 이러한 단계를 따르지 않습니다. 이러한 종류의 중단은 위 단계에서 처리됩니다.

    1. 사용자 에이전트는 가져오기 프로세스를 취소해야 합니다.

    2. error 속성을 MediaError 생성의 결과로 설정합니다. 이때 MEDIA_ERR_ABORTED을 사용합니다.

    3. 이벤트를 발생시켜 미디어 요소에서 abort라는 이름의 이벤트를 발생시킵니다.

    4. 미디어 요소readyState 속성이 HAVE_NOTHING 값과 동일한 경우, 요소의 networkState 속성을 NETWORK_EMPTY 값으로 설정하고, 요소의 포스터 표시 플래그를 true로 설정하고 이벤트를 발생시켜 emptied라는 이름의 이벤트를 요소에서 발생시킵니다.

      그렇지 않으면, 요소의 networkState 속성을 NETWORK_IDLE 값으로 설정합니다.

    5. 요소의 로드 이벤트 지연 플래그를 false로 설정합니다. 이것은 로드 이벤트 지연을 중지합니다.

    6. 전체 자원 선택 알고리즘을 중단합니다.

    미디어 데이터를 가져올 수 있지만 비치명적 오류가 발생했거나 부분적으로만 코덱을 사용할 수 있어 사용자 에이전트가 콘텐츠를 완전히 렌더링할 수는 없지만 전체 재생을 방해하지 않는 경우

    서버가 부분적으로 사용할 수 있지만 최적으로 렌더링할 수 없는 데이터를 반환한 경우, 사용자 에이전트는 처리할 수 있는 부분만 렌더링하고 나머지는 무시해야 합니다.

    미디어 자원에서 사용자 에이전트가 지원하는 미디어 자원 전용 텍스트 트랙을 선언한 경우

    만약 미디어 데이터CORS-동일 출처인 경우, 관련 데이터를 사용하여 미디어 자원 전용 텍스트 트랙을 노출하는 단계를 실행합니다.

    교차 출처 비디오에서는 자막이 노출되지 않습니다. 이는 적대적인 사이트가 사용자의 인트라넷에서 비밀 비디오의 자막을 읽는 것과 같은 공격을 허용할 수 있기 때문입니다.

  6. 최종 단계: 사용자 에이전트가 이 단계에 도달한 경우(자원이 완전히 로드되고 사용 가능하게 유지되는 경우): 전체 자원 선택 알고리즘을 중단합니다.

미디어 요소미디어 요소의 미디어 리소스 특정 트랙을 잊어버리기로 설정될 때, 사용자 에이전트는 미디어 요소텍스트 트랙 목록에서 모든 미디어 리소스 특정 텍스트 트랙을 제거해야 하며, 그런 다음 미디어 요소audioTracks 속성의 AudioTrackList 객체를 비워야 합니다. 그런 다음 미디어 요소videoTracks 속성의 VideoTrackList 객체를 비워야 합니다. 이에 대한 이벤트(특히 removetrack 이벤트)는 발생하지 않으며, 대신 이 알고리즘을 호출하는 다른 알고리즘에 의해 발생하는 erroremptied 이벤트를 사용할 수 있습니다.


preload 속성은 다음과 같은 키워드와 상태를 가진 열거형 속성입니다:

키워드 상태 간략 설명
auto 자동 사용자 에이전트에게 서버에 위험 없이 사용자의 요구를 우선시할 수 있음을 암시하며, 낙관적으로 전체 리소스를 다운로드하는 것까지 포함할 수 있습니다.
none 없음 작성자가 사용자가 미디어 리소스를 필요로 하지 않을 것으로 예상하거나, 서버가 불필요한 트래픽을 최소화하려는 경우임을 사용자 에이전트에게 암시합니다. 이 상태는 버퍼링이 시작된 경우(예: 사용자가 "재생"을 누름) 실제로 미디어 리소스를 얼마나 적극적으로 다운로드할지에 대한 암시는 제공하지 않습니다.
metadata 메타데이터 작성자가 사용자가 미디어 리소스를 필요로 하지 않을 것으로 예상하지만, 리소스의 메타데이터(크기, 트랙 목록, 길이 등) 및 경우에 따라 몇 프레임 정도 가져오는 것이 합리적임을 사용자 에이전트에게 암시합니다. 사용자 에이전트가 정확히 메타데이터만 가져오면 미디어 요소readyState 속성은 HAVE_METADATA로 설정됩니다; 일반적으로 몇 프레임도 받아오므로 아마도 HAVE_CURRENT_DATA 또는 HAVE_FUTURE_DATA가 될 것입니다. 미디어 리소스가 재생 중일 때는 사용자 에이전트에게 대역폭이 제한적임을 암시하며, 예를 들어 다운로드를 제한하여 미디어 데이터를 일관된 재생을 유지할 수 있을 만큼만 가장 느린 속도로 가져오도록 제안합니다.

이 속성의 빈 값 기본값자동 상태입니다.

이 속성의 값이 없는 경우의 기본값잘못된 값의 기본값은 모두 구현 정의이며, 서버 로드를 줄이면서 최적의 사용자 경험을 제공하기 위한 타협으로 메타데이터 상태가 제안됩니다.

이 속성은 미디어 리소스가 버퍼링되거나 재생 중인 경우에도 변경할 수 있습니다. 위 표의 설명은 이를 염두에 두고 해석해야 합니다.

작성자는 속성을 "none" 또는 "metadata"에서 "auto"로 동적으로 변경할 수 있습니다. 예를 들어, 많은 비디오가 있는 페이지에서는 요청하지 않는 한 비디오를 다운로드하지 않도록 설정하지만, 하나가 요청되면 공격적으로 다운로드해야 함을 나타내기 위해 이 방법을 사용할 수 있습니다.

preload 속성은 작성자가 최상의 사용자 경험을 제공한다고 생각하는 것을 사용자 에이전트에게 힌트로 제공하기 위해 설계되었습니다. 이 속성은 예를 들어 명시적인 사용자 설정이나 사용 가능한 연결 상태에 따라 무시될 수 있습니다.

preload IDL 속성은 동일한 이름의 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.

autoplay 속성은 preload 속성을 재정의할 수 있습니다(미디어가 재생되면, preload 속성에 의해 제공된 힌트와 관계없이 우선 버퍼링을 해야 하기 때문에). 두 속성을 모두 포함하는 것은 오류가 아닙니다.


media.buffered

HTMLMediaElement/buffered

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

사용자 에이전트가 버퍼링한 미디어 리소스의 범위를 나타내는 TimeRanges 객체를 반환합니다.

buffered 속성은 사용자 에이전트가 버퍼링한 미디어 리소스의 범위를 나타내는 새 정적 정규화된 TimeRanges 객체를 반환해야 합니다. 사용자 에이전트는 이 속성이 평가될 때 버퍼링된 범위를 정확하게 결정해야 하며, 이는 미디어 스트림에 대해 힘든 검사로만 결정될 수 있는 경우에도 마찬가지입니다.

일반적으로 이는 0점에 고정된 단일 범위가 되지만, 예를 들어, 사용자 에이전트가 탐색에 응답하여 HTTP 범위 요청을 사용하는 경우 여러 범위가 있을 수 있습니다.

사용자 에이전트는 이전에 버퍼링된 데이터를 삭제할 수 있습니다.

따라서, 한 시점에 buffered 속성에 의해 반환된 객체의 범위 내에 포함된 시간 위치가 나중에 동일한 속성에 의해 반환된 객체의 범위에서 제외될 수 있습니다.

매번 새 객체를 반환하는 것은 속성 getter에 좋지 않은 패턴이며, 변경 비용이 높기 때문에 여기서는 그대로 유지됩니다. 새로운 API에 복사해서는 안 됩니다.

4.8.11.6 미디어 리소스의 오프셋
media.duration

HTMLMediaElement/duration

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

미디어 리소스의 길이를 초 단위로 반환한다. 이때 미디어 리소스의 시작이 시간 0이라고 가정한다.

만약 duration(길이)을 알 수 없다면 NaN을 반환한다.

한계가 없는 스트림의 경우 Infinity를 반환한다.

media.currentTime [ = value ]

HTMLMediaElement/currentTime

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

공식 재생 위치를 초 단위로 반환한다.

값을 설정할 수도 있으며, 이 경우 지정된 시간으로 탐색(seek)한다.

미디어 리소스미디어 타임라인을 가지며, 이는 시간(초 단위)을 미디어 리소스 내 위치에 매핑한다. 타임라인의 시작점은 정의된 가장 이른 위치이며, 타임라인의 길이는 마지막으로 정의된 위치이다.

미디어 타임라인 확립: 미디어 리소스가 음수가 아닌 명시적 타임라인(즉, 각 프레임에 고유의 시간 오프셋을 지정하고 첫 프레임에 0 또는 양의 오프셋을 부여함)을 제공하는 경우, 미디어 타임라인은 해당 타임라인을 따라야 한다. (미디어 리소스가 타임라인을 지정할 수 있는지 여부는 미디어 리소스의 포맷에 따라 다름.) 미디어 리소스가 명시적 시작 시간 및 날짜를 지정한다면, 해당 시간과 날짜를 미디어 타임라인의 0점으로 간주해야 하며, 타임라인 오프셋은 그 시간과 날짜가 된다. 이 값은 getStartDate() 메서드를 통해 제공된다.

미디어 리소스에 불연속적인 타임라인이 있는 경우, 사용자 에이전트는 리소스의 시작에서 사용된 타임라인을 리소스 전체에 걸쳐 확장해야 하며, 미디어 타임라인가장 이른 가능한 위치(아래 정의됨)에서 선형적으로 증가하도록 해야 한다. 이는 내부 미디어 데이터의 타임 코드가 순서가 맞지 않거나, 심지어 겹친 경우에도 마찬가지이다.

예를 들어, 두 클립을 하나의 비디오 파일로 합쳤을 때, 비디오 포맷이 두 클립의 원래 시간을 노출한다면, 비디오 데이터는 00:15..00:29 다음에 00:05..00:38 순으로 타임라인을 가질 수 있다. 그러나 사용자 에이전트는 이러한 시간을 그대로 노출하지 않고, 00:15..00:29 그리고 00:29..01:02처럼 하나의 연속된 비디오로 시간 정보를 노출한다.

(This is a tracking vector.) 드물게 미디어 리소스에 명시적 타임라인이 없는 경우, 미디어 타임라인의 0초는 미디어 리소스의 첫 프레임과 일치해야 한다. 그리고 명시적 타이밍(프레임 길이조차도) 정보가 아예 없는 미디어 리소스의 경우, 사용자 에이전트는 프레임마다 구현 정의 방식으로 시간을 결정해야 한다.

명시적 타임라인은 없지만 프레임 길이가 명확한 파일 포맷의 예로는 Animated GIF 형식이 있다. 명시적 타이밍 정보가 전혀 없는 포맷의 예로는 JPEG-push 형식(multipart/x-mixed-replace에 JPEG 프레임을 담은 스트림, 보통 MJPEG 스트림 형식)이 있다.

타이밍 정보가 전혀 없는 리소스의 경우에도, 사용자 에이전트가 서버에서 제공한 첫 프레임보다 더 이른 지점으로 탐색할 수 있다면, 0초는 미디어 리소스의 가장 이른 탐색 가능 시간과 일치해야 한다. 그렇지 않으면, 0초는 서버로부터 최초로 수신한 프레임(즉, 미디어 리소스의 스트림 수신 시작점)과 일치해야 한다.

작성 시점 기준으로, 명시적 프레임 시간 오프셋은 없지만 서버가 전송한 첫 프레임 이전으로 탐색이 가능한 포맷은 알려진 것이 없다.

TV 방송사에서 제공하는 스트림을 생각해보자. 이 스트림은 10월의 어느 화창한 금요일 오후에 시작되며, 항상 동일한 미디어 타임라인에서 사용자 에이전트에 미디어 데이터를 전송한다. 이 타임라인의 0초는 스트림이 시작된 시점에 맞춰져 있다. 몇 달 후에 접속한 사용자 에이전트라도, 처음 받는 프레임의 시간은 수백만 초가 될 수 있다. getStartDate() 메서드는 항상 방송이 시작된 날짜를 반환한다. 이를 통해 컨트롤러 UI에서는 방송 시작 이후의 상대적인 시간("8개월 4시간 12분 23초") 대신, 실제 시간("오후 2:30")을 스크러버에 표시할 수 있다.

여러 개의 비디오 조각이 이어진 영상을 스트리밍하는 서버가 있다고 하자. 이 서버는 사용자 에이전트가 특정 시점을 요청할 수 있도록 허용하지 않고, 미리 정해진 순서대로 영상 데이터를 스트림으로 전송하며, 첫 프레임은 항상 시간 0으로 식별된다. 어떤 사용자가 이 스트림에 접속해서 2010-03-20 23:15:00 UTC~2010-03-21 00:05:00 UTC, 그리고 2010-02-12 14:25:00 UTC~2010-02-12 14:35:00 UTC 범위의 프래그먼트를 받았다면, 미디어 타임라인은 0초에서 3,600초(1시간)까지로 노출된다. 스트리밍 서버가 두 번째 클립 종료 후 연결을 끊었다면, duration 속성은 3,600을 반환한다. getStartDate() 메서드는 2010-03-20 23:15:00 UTC에 해당하는 Date 객체를 반환한다. 반면, 다른 사용자가 5분 뒤에 접속하면, 2010-03-20 23:20:00 UTC~2010-03-21 00:05:00 UTC, 2010-02-12 14:25:00 UTC~2010-02-12 14:35:00 UTC 프래그먼트를 받게 되고, 미디어 타임라인은 0초에서 3,300초(55분)까지로 노출된다. 이때 getStartDate() 메서드는 2010-03-20 23:20:00 UTC에 해당하는 Date 객체를 반환한다.

위 두 예시 모두에서 seekable 속성은 컨트롤러 UI에 실제로 표시될 범위를 제공한다. 일반적으로 서버가 임의의 시점으로의 탐색을 지원하지 않는다면, 이 범위는 사용자가 스트림에 접속한 순간부터 해당 에이전트가 받은 최신 프레임까지가 된다. 다만, 사용자 에이전트가 이전 정보를 폐기하기 시작하면 실제 범위는 더 짧아질 수 있다.

어떤 경우든, 사용자 에이전트는 확립된 미디어 타임라인을 사용할 때 가장 이른 가능한 위치(아래 정의 참조)가 0 이상이 되도록 보장해야 한다.

미디어 타임라인에는 연관된 시계(clock)가 있다. 어떤 시계를 사용하는지는 사용자 에이전트의 정의에 따르며, 미디어 리소스에 따라 달라질 수 있지만, 사용자의 실제 시간(벽시계)에 가깝게 맞추는 것이 바람직하다.

미디어 요소현재 재생 위치를 가진다. 이는 (즉, 미디어 데이터가 없는 경우) 처음에는 0초여야 한다. 현재 재생 위치미디어 타임라인 상의 시간이다.

미디어 요소공식 재생 위치도 가진다. 이 값 역시 처음에는 0초로 설정되어야 한다. 공식 재생 위치현재 재생 위치의 근사값으로, 스크립트가 실행되는 동안 안정적으로 유지된다.

미디어 요소기본 재생 시작 위치도 가진다. 이는 처음엔 0초로 설정되어야 하며, 미디어가 로드되기 전에도 요소를 탐색(seek)할 수 있도록 해준다.

미디어 요소포스터 표시 플래그를 가진다. 미디어 요소가 생성될 때 이 플래그는 true로 설정되어야 한다. 이 플래그는 video 요소에 대해 사용자 에이전트가 비디오 콘텐츠 대신 포스터 프레임을 표시해야 할 시점을 제어하는 데 사용된다.

currentTime 속성은, getter일 때 미디어 요소기본 재생 시작 위치가 0이 아니면 그 값을, 0이면 요소의 공식 재생 위치를 초 단위로 반환해야 한다. setter일 때, 미디어 요소readyStateHAVE_NOTHING이라면 기본 재생 시작 위치를 새 값으로 바꾸고, 그렇지 않으면 공식 재생 위치를 새 값으로 바꾸고 seek해야 한다. 새 값은 초로 해석한다.

미디어 리소스가 스트리밍 리소스인 경우, 사용자 에이전트는 해당 리소스의 일부를 버퍼에서 만료된 후에는 다시 얻을 수 없을 수 있다. 마찬가지로, 일부 미디어 리소스는 0이 아닌 곳에서 시작하는 미디어 타임라인을 가질 수 있다. 가장 이른 가능한 위치는 사용자 에이전트가 다시 얻을 수 있는 스트림이나 리소스 내의 가장 이른 위치이다. 이 값 역시 미디어 타임라인 상의 시간이다.

가장 이른 가능한 위치는 API에서 명시적으로 노출되지 않는다. 이는 seekable 속성의 TimeRanges 객체가 있다면 그 첫 번째 범위의 시작 시간에 대응하며, 없다면 현재 재생 위치에 대응한다.

가장 이른 가능한 위치가 바뀌면, 현재 재생 위치가장 이른 가능한 위치보다 앞서 있으면, 사용자 에이전트는 seek가장 이른 가능한 위치로 수행해야 한다. 그렇지 않고, 사용자가 최근 15~250ms 이내에 해당 요소에서 timeupdate 이벤트를 발생시키지 않았으며, 해당 이벤트의 핸들러를 아직 실행 중이 아니라면, 사용자 에이전트는 미디어 요소 작업을 큐에 넣어 이벤트 timeupdate를 해당 요소에 발생시켜야 한다.

위의 요구사항과 리소스 가져오기 알고리즘의 "클립의 메타데이터를 알게 되었을 때" 동작 요구사항 때문에, 현재 재생 위치는 결코 가장 이른 가능한 위치보다 앞설 수 없다.

언제든지 사용자 에이전트가 오디오 또는 비디오 트랙이 끝났으며, 해당 미디어 데이터가 모두 미디어 타임라인 상에서 가장 이른 가능한 위치 이전임을 알게 되면, 사용자 에이전트는 미디어 요소 작업을 큐에 넣어 아래 절차를 수행할 수 있다:

  1. 트랙을 audioTracks 속성의 AudioTrackList 객체 또는 videoTracks 속성의 VideoTrackList 객체에서 적절하게 제거합니다.
  2. 이벤트를 발생시키며, 이벤트 이름은 removetrack이고, 미디어 요소의 AudioTrackList 또는 VideoTrackList 객체에서 발생합니다. TrackEvent를 사용하며, track 속성은 트랙을 나타내는 AudioTrack 또는 VideoTrack 객체로 초기화됩니다.

duration 속성은 미디어 리소스의 끝 시간을 초 단위로 반환해야 하며, 미디어 타임라인에 해당합니다. 만약 미디어 데이터가 없다면, 이 속성은 NaN 값을 반환해야 합니다. 만약 미디어 리소스가 제한되지 않은 경우(예: 스트리밍 라디오나 종료 시간이 발표되지 않은 라이브 이벤트), 이 속성은 양의 무한대 값을 반환해야 합니다.

사용자 에이전트는 미디어 리소스의 지속 시간을, 미디어 데이터의 일부를 재생하기 전에, 그리고 readyState 값을 HAVE_METADATA 이상으로 설정하기 전에 결정해야 합니다. 이를 위해 여러 부분의 리소스를 가져와야 할 수도 있습니다.

미디어 리소스의 길이가 알려진 값으로 변경될 때(예: 알 수 없는 상태에서 알려진 상태로 변경되거나, 이전에 설정된 길이에서 새로운 길이로 변경될 때) 사용자 에이전트는 미디어 요소 작업을 대기열에 추가해야 하며, 미디어 요소에서 이벤트를 발생 시키고, 그 이름은 durationchange이어야 합니다. (새로운 미디어 리소스를 로드하는 과정에서 지속 시간이 재설정될 때는 이벤트가 발생하지 않습니다.) 만약 지속 시간이 변경되어 현재 재생 위치미디어 리소스의 끝 시간보다 길어진다면, 사용자 에이전트는 또한 끝 시간으로 이동해야 합니다.

예를 들어, "무한" 스트림이 어떤 이유로 종료되면 지속 시간은 양의 무한대에서 스트림의 마지막 프레임 또는 샘플의 시간으로 변경되고, durationchange 이벤트가 발생합니다. 마찬가지로, 사용자 에이전트가 미디어 리소스의 지속 시간을 처음에 정확히 판단하지 않고 추정하여 이후 새로운 정보에 기반하여 추정을 수정하는 경우, 지속 시간이 변경되며 durationchange 이벤트가 발생합니다.

일부 비디오 파일은 미디어 타임라인의 0 시간에 해당하는 명시적 날짜 및 시간을 포함하고 있으며, 이를 타임라인 오프셋이라고 합니다. 초기에는 타임라인 오프셋은 NaN으로 설정되어야 합니다.

getStartDate() 메서드는 현재 타임라인 오프셋을 나타내는 Date 객체를 반환해야 합니다.


loop 속성은 불리언 속성으로, 지정된 경우 미디어 요소미디어 리소스의 끝에 도달했을 때 다시 시작 지점으로 이동함을 나타냅니다.

4.8.11.7 준비 상태
media.readyState

HTMLMediaElement/readyState

모든 현재 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

요소의 현재 상태를 현재 재생 위치와 관련하여 표현하는 값을 반환합니다. 아래 목록의 코드에서 해당 값을 참조할 수 있습니다.

미디어 요소준비 상태를 가지고 있으며, 이는 현재 재생 위치에서 렌더링할 준비가 어느 정도 되어 있는지를 설명합니다. 가능한 값은 다음과 같으며, 특정 시간에 미디어 요소의 준비 상태는 요소의 상태를 설명하는 최대 값입니다:

HAVE_NOTHING (숫자 값 0)

미디어 리소스에 대한 정보가 전혀 없습니다. 현재 재생 위치에 대한 데이터도 없습니다. 미디어 요소networkState 속성이 NETWORK_EMPTY로 설정된 경우 항상 HAVE_NOTHING 상태에 있습니다.

HAVE_METADATA (숫자 값 1)

리소스의 지속 시간이 확인될 만큼 충분한 데이터가 확보되었습니다. 비디오 요소의 경우, 비디오의 크기도 확인됩니다. 그러나 미디어 데이터현재 재생 위치에서 사용할 수 없습니다.

HAVE_CURRENT_DATA (숫자 값 2)

현재 재생 위치에 대한 데이터는 있지만, 해당 데이터를 이용해 재생 방향으로 재생 위치를 성공적으로 진행시킬 수 있을 만큼 충분하지 않거나, 추가적인 데이터를 확보할 수 없는 상황입니다. 예를 들어, 비디오의 경우 현재 프레임의 데이터는 있지만, 다음 프레임의 데이터가 없을 때를 의미합니다. 이 상태에서 재생이 종료된 경우와도 관련이 있습니다.

HAVE_FUTURE_DATA (숫자 값 3)

현재 재생 위치에 대한 데이터뿐만 아니라, 재생 방향으로 재생 위치를 진행시키기에 충분한 데이터도 확보되어 있습니다. 예를 들어, 비디오의 경우 현재 프레임뿐만 아니라 다음 프레임에 대한 데이터도 있습니다. 그러나 재생이 종료된 경우에는 이 상태에 있을 수 없습니다.

HAVE_ENOUGH_DATA (숫자 값 4)

HAVE_FUTURE_DATA 상태의 모든 조건이 충족되며, 추가적으로 다음 조건 중 하나가 충족됩니다:

실제로는 HAVE_METADATAHAVE_CURRENT_DATA 간의 차이는 거의 없습니다. 이 차이가 중요한 경우는 비디오 요소를 canvas에 그릴 때입니다. 여기서는 어떤 것이 그려질지 (HAVE_CURRENT_DATA 이상)와 그려지지 않을지 (HAVE_METADATA 이하)를 구분합니다. 비슷하게, HAVE_CURRENT_DATA (현재 프레임만)와 HAVE_FUTURE_DATA (현재 프레임과 다음 프레임)이 극히 미미할 때, 이 차이는 프레임 단위로 탐색하는 인터페이스를 제공할 때만 중요합니다.

networkStateNETWORK_EMPTY가 아닌 미디어 요소의 준비 상태가 변경되면, 사용자 에이전트는 아래에 제시된 단계들을 따라야 합니다.

  1. 다음 목록에서 적용 가능한 첫 번째 하위 단계를 적용합니다:

    이전 준비 상태가 HAVE_NOTHING이었고, 새로운 준비 상태가 HAVE_METADATA인 경우

    미디어 요소 작업을 큐에 추가하여 해당 요소에 이벤트를 발생시키고, loadedmetadata라는 이름의 이벤트를 요소에서 발생시킵니다.

    이 작업이 실행되기 전에, 이벤트 루프 메커니즘의 일부로서 렌더링이 업데이트되어 적절한 경우 비디오 요소의 크기가 조정됩니다.

    이전 준비 상태가 HAVE_METADATA였고, 새로운 준비 상태가 HAVE_CURRENT_DATA 또는 그 이상인 경우

    이것이 미디어 요소에 대해 load() 알고리즘이 마지막으로 호출된 이후 처음 발생한 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 해당 요소에서 이벤트를 발생시키고, loadeddata라는 이름의 이벤트를 발생시켜야 합니다.

    새로운 준비 상태가 HAVE_FUTURE_DATA 또는 HAVE_ENOUGH_DATA인 경우, 아래의 관련 단계를 추가로 실행해야 합니다.

    이전 준비 상태가 HAVE_FUTURE_DATA 이상이었고, 새로운 준비 상태가 HAVE_CURRENT_DATA 이하인 경우

    미디어 요소가 잠재적으로 재생 중이었고, readyState 속성이 HAVE_FUTURE_DATA보다 낮은 값으로 변경되었으며, 요소가 재생을 종료하지 않았고, 오류로 인해 재생이 중지되지 않았으며, 사용자 상호작용을 위해 일시정지되지 않았거나, 인밴드 콘텐츠로 인해 일시정지되지 않은 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 해당 요소에서 timeupdate라는 이름의 이벤트를 발생시키고, 미디어 요소 작업을 큐에 추가하여 해당 요소에서 이벤트를 발생시켜 waiting이라는 이름의 이벤트를 발생시켜야 합니다.

    이전 준비 상태가 HAVE_CURRENT_DATA 이하였고, 새로운 준비 상태가 HAVE_FUTURE_DATA인 경우

    사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 해당 요소에서 canplay라는 이름의 이벤트를 발생시켜야 합니다.

    요소의 paused 속성이 false인 경우, 사용자 에이전트는 해당 요소에 대해 재생 알림을 제공해야 합니다.

    새로운 준비 상태가 HAVE_ENOUGH_DATA인 경우

    이전 준비 상태가 HAVE_CURRENT_DATA 이하인 경우, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 해당 요소에서 canplay라는 이름의 이벤트를 발생시켜야 하며, 요소의 paused 속성이 false인 경우, 해당 요소에 대해 재생 알림을 제공해야 합니다.

    사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 해당 요소에서 canplaythrough라는 이름의 이벤트를 발생시켜야 합니다.

    요소가 자동 재생이 가능하지 않은 경우, 사용자 에이전트는 이 하위 단계를 중단해야 합니다.

    사용자 에이전트는 다음 하위 단계를 실행할 수 있습니다:

    1. paused 속성을 false로 설정합니다.
    2. 요소의 포스터 표시 플래그가 true이면, 이를 false로 설정하고 시간이 흐릅니다 단계를 실행합니다.
    3. 미디어 요소 작업을 큐에 추가하여 요소에서 play라는 이름의 이벤트를 발생시킵니다.
    4. 재생 알림을 제공합니다.

    또는 요소가 비디오 요소인 경우, 사용자 에이전트는 요소가 뷰포트와 교차하는지 여부를 관찰하기 시작할 수 있습니다. 요소가 뷰포트와 교차하면, 요소가 여전히 자동 재생 가능한 경우, 위의 하위 단계를 실행합니다. 선택적으로, 요소가 뷰포트와 교차하지 않으면, 자동 재생 플래그가 여전히 true이고, autoplay 속성이 여전히 지정되어 있는 경우, 다음 하위 단계를 실행합니다:

    1. 내부 일시정지 단계를 실행하고 자동 재생 플래그를 true로 설정합니다.
    2. 미디어 요소 작업을 큐에 추가하여 요소에서 pause라는 이름의 이벤트를 발생시킵니다.

    재생 및 일시정지에 대한 하위 단계는 요소가 뷰포트와 교차하는 동안, 자동 재생 플래그가 true인 한 여러 번 실행될 수 있습니다.

    사용자 에이전트는 자동 재생을 지원할 필요가 없으며, 사용자가 설정한 기본 설정을 존중하는 것이 좋습니다. 저자들은 autoplay 속성을 사용하여 비디오를 강제로 재생시키기보다는, 사용자가 원하는 경우 동작을 재정의할 수 있도록 할 것을 권장합니다.

미디어 요소의 준비 상태가 이러한 상태들 사이에서 불연속적으로 이동할 수 있습니다. 예를 들어, 미디어 요소의 상태가 HAVE_METADATA에서 HAVE_ENOUGH_DATA로 바로 점프하여, HAVE_CURRENT_DATAHAVE_FUTURE_DATA 상태를 거치지 않을 수 있습니다.

readyState IDL 속성은, 취득 시, 현재의 미디어 요소의 준비 상태를 설명하는 위에서 설명된 값을 반환해야 합니다.

autoplay 속성은 부울 속성입니다. 존재할 경우, 사용자 에이전트는 (여기에 설명된 알고리즘에 설명된 대로) 미디어 리소스를 중단 없이 자동으로 재생을 시작합니다.

저자들은 자동 재생을 트리거하기 위해 스크립트를 사용하는 것보다, autoplay 속성을 사용할 것을 권장합니다. 이렇게 하면 사용자가 원치 않을 때, 예를 들어 화면 읽기 프로그램을 사용할 때 자동 재생을 중지할 수 있습니다. 또한 저자들은 자동 재생 동작을 전혀 사용하지 않고, 사용자 에이전트가 사용자가 명시적으로 재생을 시작할 때까지 기다리도록 고려하는 것이 좋습니다.

4.8.11.8 미디어 리소스 재생
media.paused

HTMLMediaElement/paused

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

재생이 일시정지되었으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

media.ended

HTMLMediaElement/ended

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

재생이 미디어 리소스의 끝에 도달하면 true를 반환합니다.

media.defaultPlaybackRate [ = value ]

HTMLMediaElement/defaultPlaybackRate

모든 최신 엔진에서 지원됩니다.

Firefox20+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

기본 재생 속도를 반환하며, 사용자가 미디어 리소스를 빨리 감거나 되감지 않는 경우에 해당합니다.

설정할 수 있으며, 기본 재생 속도를 변경합니다.

기본 속도는 재생에 직접적인 영향을 미치지 않지만, 사용자가 빨리 감기 모드로 전환한 후 다시 일반 재생 모드로 돌아갈 때, 재생 속도가 기본 재생 속도로 돌아가게 됩니다.

media.playbackRate [ = value ]

HTMLMediaElement/playbackRate

모든 최신 엔진에서 지원됩니다.

Firefox20+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

현재 재생 속도를 반환하며, 1.0은 정상 속도를 나타냅니다.

설정할 수 있으며, 재생 속도를 변경합니다.

media.preservesPitch

HTMLMediaElement/preservesPitch

Firefox101+🔰 4+Chrome86+
Opera?Edge86+
Edge (Legacy)?Internet Explorer지원하지 않음
Firefox Android?Safari iOS🔰 4+Chrome Android?WebView Android?Samsung Internet?Opera Android?

재생 속도가 1.0이 아닐 때 피치 보정 알고리즘이 사용되면 true를 반환합니다. 기본값은 true입니다.

false로 설정하여 미디어 리소스의 오디오 피치가 재생 속도에 따라 변경되도록 할 수 있습니다. 이는 미적 및 성능상의 이유로 유용할 수 있습니다.

media.played

사용자 에이전트가 재생한 미디어 리소스의 범위를 나타내는 TimeRanges 객체를 반환합니다.

media.play()

HTMLMediaElement/play

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+

paused 속성을 false로 설정하고, 필요한 경우 미디어 리소스를 로드하여 재생을 시작합니다. 재생이 종료되었으면 처음부터 다시 시작합니다.

media.pause()

HTMLMediaElement/pause

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

paused 속성을 true로 설정하고, 필요한 경우 미디어 리소스를 로드합니다.

paused 속성은 미디어 요소가 일시정지되었는지를 나타냅니다. 이 속성은 처음에는 true여야 합니다.

미디어 요소는 다음 상태일 때 차단된 미디어 요소라고 합니다: readyState 속성이 HAVE_NOTHING 상태, HAVE_METADATA 상태, 또는 HAVE_CURRENT_DATA 상태에 있거나, 요소가 사용자 상호작용을 위해 일시정지됨 또는 인밴드 콘텐츠를 위해 일시정지됨 경우.

미디어 요소는 다음 조건이 모두 참인 경우 잠재적으로 재생 중이라고 합니다: paused 속성이 false이고, 요소가 재생을 종료하지 않았고, 재생이 오류로 인해 중지되지 않았으며, 요소가 차단된 미디어 요소가 아닌 경우.

DOM 이벤트 waiting은 요소의 readyState 속성이 HAVE_FUTURE_DATA보다 낮은 값으로 변경되어 잠재적으로 재생 중인 요소가 재생을 중지하는 결과로 발생할 수 있습니다.

미디어 요소는 다음 조건이 모두 참인 경우 자동 재생 가능하다고 합니다:

미디어 요소는 현재 컨텍스트에서 사용자 에이전트와 시스템이 미디어 재생을 허용하는 경우 재생 가능하다고 합니다.

예를 들어, 사용자 에이전트는 미디어 요소Window 객체가 일시적인 활성화를 가지고 있을 때만 재생을 허용할 수 있지만, 음소거된 상태에서 재생을 허용하는 예외를 둘 수 있습니다.

미디어 요소는 다음과 같은 경우 재생이 종료됨 상태라고 합니다:

ended 속성은 이벤트 루프1단계에 도달했을 때, 미디어 요소재생 완료 상태이고 재생 방향이 앞으로일 경우 true를 반환해야 하며, 그렇지 않으면 false를 반환해야 합니다.

미디어 요소오류로 인해 중지됨이라고 할 때는, 요소의 readyState 속성이 HAVE_METADATA 이상이고, 사용자 에이전트가 치명적이지 않은 오류미디어 데이터 처리 중에 발견했으며, 해당 오류로 인해 현재 재생 위치에서 콘텐츠를 재생할 수 없는 경우입니다.

미디어 요소사용자 상호작용으로 인해 일시정지됨이라고 할 때는, paused 속성이 false이고, readyState 속성이 HAVE_FUTURE_DATA 또는 HAVE_ENOUGH_DATA이며, 사용자 에이전트가 미디어 리소스에서 사용자가 선택을 해야 리소스가 계속될 수 있는 지점에 도달한 경우입니다.

미디어 요소재생 완료사용자 상호작용으로 인한 일시정지 상태를 동시에 가질 수 있습니다.

미디어 요소잠재적으로 재생 중인 상태에서 사용자 상호작용으로 인해 일시정지됨 때문에 재생이 중단된 경우, 사용자 에이전트는 미디어 요소 작업 큐를 해당 미디어 요소에 대해 이벤트 발생을 수행해야 하며, 이벤트 이름은 timeupdate입니다.

미디어 요소인밴드 콘텐츠로 인해 일시정지됨이라고 할 때는, paused 속성이 false이고, readyState 속성이 HAVE_FUTURE_DATA 또는 HAVE_ENOUGH_DATA이며, 사용자 에이전트가 미디어 리소스의 재생을 일시 중단하여 해당 미디어 리소스에 시간적으로 고정되어 있고 길이가 0이 아닌 콘텐츠를 재생하거나, 미디어 리소스의 특정 구간에 시간적으로 고정되어 있지만 그 구간보다 긴 콘텐츠를 재생하는 경우입니다.

미디어 요소인밴드 콘텐츠를 위해 일시정지됨 상태가 될 수 있는 예는, 사용자 에이전트가 외부 WebVTT 파일에서 오디오 설명을 재생하고, 큐의 시작 시간과 종료 시간 사이의 시간이 큐에 생성된 음성보다 짧은 경우입니다.


현재 재생 위치재생 방향이 앞으로일 때 미디어 리소스의 끝에 도달하면, 사용자 에이전트는 다음 단계를 따라야 합니다:

  1. 미디어 요소loop 속성이 지정된 경우, 미디어 리소스의 가장 이른 위치로 이동하고 종료합니다.

  2. 위에서 정의한 대로 ended IDL 속성은 이벤트 루프1단계로 돌아오면 true를 반환하기 시작합니다.

  3. 미디어 요소 작업을 큐에 추가하고 다음 단계를 실행합니다:

    1. 이벤트를 발생시키고 timeupdate라는 이름의 이벤트를 미디어 요소에서 발생시킵니다.

    2. 미디어 요소재생이 종료됨 상태이며, 재생 방향이 앞으로이고, paused가 false인 경우:

      1. paused 속성을 true로 설정합니다.

      2. 이벤트를 발생시키고 pause라는 이름의 이벤트를 미디어 요소에서 발생시킵니다.

      3. 보류 중인 재생 약속을 취소하고, 보류 중인 재생 약속을 "AbortError" DOMException으로 거부합니다.

    3. 이벤트를 발생시키고 ended라는 이름의 이벤트를 미디어 요소에서 발생시킵니다.

현재 재생 위치재생 방향이 역방향일 때 가장 이른 위치에 도달하면, 사용자 에이전트는 단순히 미디어 요소 작업을 큐에 추가하여 이벤트를 발생시키고, timeupdate라는 이름의 이벤트를 요소에서 발생시켜야 합니다.

여기서 "도달"이라는 단어는 현재 재생 위치가 일반 재생 중에 변경될 필요가 없음을 의미합니다. 예를 들어 탐색을 통해 변경될 수 있습니다.


defaultPlaybackRate 속성은 미디어 리소스가 고유 속도의 배수로 재생될 때 원하는 속도를 나타냅니다. 이 속성은 수정 가능하며, 값을 가져올 때 마지막으로 설정된 값을 반환해야 하고, 아직 설정되지 않은 경우 1.0을 반환해야 합니다. 설정 시 속성은 새 값으로 설정되어야 합니다.

defaultPlaybackRate 속성은 사용자 에이전트가 사용자에게 인터페이스를 노출할 때 사용됩니다.

playbackRate 속성은 미디어 리소스가 고유 속도의 배수로 재생될 때의 실질적인 재생 속도를 나타냅니다. 이 값이 defaultPlaybackRate와 같지 않다면, 사용자가 빨리 감기 또는 슬로 모션 재생과 같은 기능을 사용 중이라는 의미입니다. 이 속성은 수정 가능하며, 값을 가져올 때 마지막으로 설정된 값을 반환해야 하고, 아직 설정되지 않은 경우 1.0을 반환해야 합니다. 설정 시, 사용자 에이전트는 다음 단계를 따라야 합니다:

  1. 주어진 값이 사용자 에이전트에서 지원되지 않으면 "NotSupportedError" DOMException을 발생시킵니다.

  2. playbackRate 속성을 새 값으로 설정하고, 요소가 잠재적으로 재생 중이면 재생 속도를 변경합니다.

defaultPlaybackRate 또는 playbackRate 속성이 값이 변경되면(스크립트에 의해 설정되거나 사용자 에이전트에 의해 직접 변경되는 경우, 예를 들어 사용자 제어에 응답하여) 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 이벤트를 발생시키고, ratechange라는 이름의 이벤트를 미디어 요소에서 발생시켜야 합니다. 사용자 에이전트는 속성 변경을 부드럽게 처리해야 하며, 이에 따라 재생에 눈에 띄는 간격이나 음소거가 발생하지 않도록 해야 합니다.

preservesPitch getter 단계는 재생 중 피치 보정 알고리즘이 적용된 경우 true를 반환하도록 합니다. setter 단계는 피치 보정 알고리즘을 켜거나 끄도록 하고, 이에 따라 재생에 눈에 띄는 간격이나 음소거가 발생하지 않도록 해야 합니다. 기본적으로 이러한 피치 보정 알고리즘이 적용되어야 합니다(즉, getter는 초기 상태에서 true를 반환해야 합니다).


played 속성은 새로운 정적 정규화된 TimeRanges 객체를 반환해야 합니다. 이 객체는 속성이 평가될 때, 일반적인 재생 중에 현재 재생 위치미디어 리소스미디어 타임라인에서 통상적인 단조 증가를 통해 도달한 지점을 나타냅니다(있는 경우).

매번 새로운 객체를 반환하는 것은 속성 getter에 대해 좋지 않은 패턴이며, 변경하는 데 비용이 많이 들기 때문에 여기에서만 유지됩니다. 이 패턴은 새로운 API에 복사해서는 안 됩니다.


미디어 요소보류 중인 재생 약속 목록을 가지고 있으며, 이 목록은 처음에는 비어 있어야 합니다.

미디어 요소보류 중인 재생 약속을 가져오기 위해, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. promises라는 빈 약속 목록을 만듭니다.

  2. 미디어 요소보류 중인 재생 약속 목록promises로 복사합니다.

  3. 미디어 요소보류 중인 재생 약속 목록을 비웁니다.

  4. promises를 반환합니다.

미디어 요소에 대해 promises 목록을 사용하여 보류 중인 재생 약속을 해결하기 위해, 사용자 에이전트는 promises에 있는 각 약속을 undefined로 해결해야 합니다.

미디어 요소에 대해 promises 목록과 예외 이름 error를 사용하여 보류 중인 재생 약속을 거부하기 위해, 사용자 에이전트는 promises에 있는 각 약속을 error로 거부해야 합니다.

미디어 요소에 대해 재생에 대해 알리기 위해, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. 보류 중인 재생 약속을 가져오고 promises를 결과로 사용합니다.

  2. 해당 요소에 대해 미디어 요소 작업을 큐에 추가하고 다음 단계를 수행합니다:

    1. 이벤트를 발생시키고, playing이라는 이름의 이벤트를 요소에서 발생시킵니다.

    2. 보류 중인 재생 약속을 해결하여 promises를 사용합니다.

미디어 요소에 대해 play() 메서드가 호출될 때, 사용자 에이전트는 다음 단계를 수행해야 합니다.

  1. 미디어 요소재생이 허용되지 않은 경우, 다음으로 거부된 약속을 반환합니다: "NotAllowedError" DOMException.

  2. 미디어 요소error 속성이 null이 아니고, 코드MEDIA_ERR_SRC_NOT_SUPPORTED인 경우, 다음으로 거부된 약속을 반환합니다: "NotSupportedError" DOMException.

    이것은 전용 미디어 소스 실패 단계가 실행되었음을 의미합니다. 미디어 요소 로드 알고리즘error 속성을 지우기 전까지 재생이 불가능합니다.

  3. promise라는 새 약속을 만들고, 보류 중인 재생 약속 목록promise를 추가합니다.

  4. 내부 재생 단계를 실행하여 미디어 요소에 대해 실행합니다.

  5. promise를 반환합니다.

미디어 요소에 대한 내부 재생 단계는 다음과 같습니다:

  1. 미디어 요소networkState 속성이 NETWORK_EMPTY 값을 가지면, 미디어 요소리소스 선택 알고리즘을 호출합니다.

  2. 재생이 종료되었고 재생 방향이 앞으로인 경우, 미디어 리소스의 가장 이른 위치로 탐색합니다.

    이것은 사용자 에이전트가 미디어 요소를 위해 미디어 요소 작업을 큐에 추가하고 timeupdate라는 이름의 이벤트를 발생시키는 결과를 가져옵니다.

  3. 미디어 요소paused 속성이 true이면:

    1. paused의 값을 false로 변경합니다.

    2. 포스터 표시 플래그가 true이면, 요소의 포스터 표시 플래그를 false로 설정하고 시간은 흐른다 단계를 실행합니다.

    3. 미디어 요소 작업을 큐에 추가하여 play라는 이름의 이벤트를 요소에서 발생시킵니다.

    4. 미디어 요소readyState 속성이 HAVE_NOTHING, HAVE_METADATA 또는 HAVE_CURRENT_DATA 값을 가지면, 미디어 요소 작업을 큐에 추가하고 waiting이라는 이름의 이벤트를 요소에서 발생시킵니다.

      그렇지 않으면, 미디어 요소readyState 속성이 HAVE_FUTURE_DATA 또는 HAVE_ENOUGH_DATA 값을 가지면, 해당 요소에 대해 재생에 대해 알리기를 수행합니다.

  4. 그렇지 않으면, 미디어 요소readyState 속성이 HAVE_FUTURE_DATA 또는 HAVE_ENOUGH_DATA 값을 가지면, 보류 중인 재생 약속을 가져오고 미디어 요소 작업을 큐에 추가하여 보류 중인 재생 약속을 해결합니다.

    미디어 요소는 이미 재생 중입니다. 그러나, 큐에 추가된 작업이 실행되기 전에 promise거부될 가능성이 있습니다.

  5. 미디어 요소자동 재생 가능 플래그를 false로 설정합니다.


미디어 요소pause() 메서드가 호출되거나 사용자 에이전트가 미디어 요소를 일시정지해야 할 때, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. 미디어 요소networkState 속성이 NETWORK_EMPTY 값을 가지면, 미디어 요소리소스 선택 알고리즘을 호출합니다.

  2. 미디어 요소에 대해 내부 일시정지 단계를 실행합니다.

미디어 요소내부 일시정지 단계는 다음과 같습니다:

  1. 미디어 요소자동 재생 가능 플래그를 false로 설정합니다.

  2. 미디어 요소paused 속성이 false이면, 다음 단계를 실행합니다:

    1. paused 값을 true로 변경합니다.

    2. 보류 중인 재생 약속을 가져옵니다 그리고 그 결과를 promises로 저장합니다.

    3. 미디어 요소 작업을 큐에 추가하고, 다음 단계를 실행합니다:

      1. 이벤트를 발생시키고, timeupdate라는 이름의 이벤트를 요소에서 발생시킵니다.

      2. 이벤트를 발생시키고, pause라는 이름의 이벤트를 요소에서 발생시킵니다.

      3. 보류 중인 재생 약속을 promises와 함께 거부합니다, 그리고 "AbortError" DOMException을 사용합니다.

    4. 공식 재생 위치현재 재생 위치로 설정합니다.


요소의 playbackRate가 양수 또는 0이면, 재생 방향은 앞으로입니다. 그렇지 않으면, 재생 방향은 뒤로입니다.

미디어 요소잠재적으로 재생 중이고 해당 Document완전히 활성화된 Document일 때, 요소의 현재 재생 위치는 요소의 playbackRate 단위로 미디어 타임라인의 시간당 단위 시간당 단조 증가해야 합니다. (이 명세서는 항상 이를 '증가'로 지칭하지만, 요소의 playbackRate가 음수인 경우 실제로는 '감소'가 될 수 있습니다.)

요소의 playbackRate는 0.0일 수 있으며, 이 경우 재생 위치가 이동하지 않지만, 재생이 일시정지되지 않습니다 (paused 상태가 되지 않으며 pause 이벤트도 발생하지 않습니다).

이 명세서는 사용자 에이전트가 적절한 재생 속도를 어떻게 달성하는지 정의하지 않습니다. 프로토콜 및 사용 가능한 미디어에 따라, 사용자 에이전트가 서버와 협상하여 적절한 속도로 미디어 데이터를 제공받아, 클라이언트가 실제로 프레임을 드롭하거나 보간할 필요가 없도록 할 가능성도 있습니다.

사용자 에이전트가 안정된 상태를 제공할 때마다, 공식 재생 위치현재 재생 위치로 설정되어야 합니다.

재생 방향이 뒤로일 때, 해당하는 오디오는 음소거되어야 합니다. 요소의 playbackRate가 너무 낮거나 너무 높아 사용자 에이전트가 오디오를 제대로 재생할 수 없는 경우에도 해당 오디오는 음소거되어야 합니다. 요소의 playbackRate가 1.0이 아니고 preservesPitch가 true인 경우, 사용자 에이전트는 원래의 음정을 유지하도록 피치 조정을 적용해야 합니다. 그렇지 않으면, 사용자 에이전트는 피치 조정 없이 오디오를 빠르게 또는 느리게 재생해야 합니다.

미디어 요소잠재적으로 재생 중일 때, 재생된 오디오 데이터는 요소의 현재 재생 위치와 동기화되어야 하며, 효과적인 미디어 볼륨으로 재생되어야 합니다. 사용자 에이전트는 이벤트 루프가 마지막으로 1단계에 도달했을 때 활성화된 오디오 트랙에서 오디오를 재생해야 합니다.

미디어 요소잠재적으로 재생 중이 아니면, 해당 요소의 오디오는 재생되지 않아야 합니다.

미디어 요소잠재적으로 재생 중이지만, 문서에 포함되지 않은 경우, 비디오는 재생되지 않지만, 오디오 구성 요소는 재생되어야 합니다. 모든 참조가 제거되었더라도 미디어 요소는 재생을 중단해서는 안 됩니다. 미디어 요소가 더 이상 오디오를 재생할 수 없는 상태에 도달했을 때만 해당 요소가 가비지 수집될 수 있습니다.

명시적 참조가 없는 요소가 오디오를 재생하는 경우도 가능합니다. 예를 들어, 일시정지되지 않았지만 콘텐츠 버퍼링을 기다리며 중단된 상태이거나, 여전히 버퍼링 중이지만 suspend 이벤트 리스너가 재생을 시작하는 경우가 있습니다. 오디오 트랙이 없는 미디어 리소스를 가진 미디어 요소도 이벤트 리스너를 통해 미디어 리소스를 변경하면 나중에 다시 오디오를 재생할 수 있습니다.


미디어 요소새로 도입된 큐 목록을 가지며, 이는 처음에는 비어 있어야 합니다. 텍스트 트랙 큐큐 목록에 추가될 때마다, 텍스트 트랙텍스트 트랙 목록에 있는 미디어 요소에 대해, 그 미디어 요소새로 도입된 큐 목록에 추가되어야 합니다. 또한 텍스트 트랙텍스트 트랙 목록에 추가될 때마다, 그 텍스트 트랙의 모든 들은 큐 목록에 있는 모든 큐가 미디어 요소새로 도입된 큐 목록에 추가되어야 합니다. 새 큐가 추가된 경우, 사용자가 미디어 요소포스터 표시 플래그가 설정되지 않은 상태에서 새로 도입된 큐 목록에 새로운 큐가 추가되었을 때, 사용자 에이전트는 시간은 흐른다 단계를 실행해야 합니다.

텍스트 트랙 큐큐 목록에서 제거되거나 텍스트 트랙텍스트 트랙 목록에서 제거될 때마다, 만약 미디어 요소포스터 표시 플래그가 설정되지 않은 경우, 사용자 에이전트는 시간은 흐른다 단계를 실행해야 합니다.

현재 재생 위치미디어 요소의 (예: 재생 또는 탐색으로 인한) 변경될 때, 사용자 에이전트는 시간이 흐른다 단계를 실행해야 합니다. 캡션을 비디오의 장면 전환과 동기화하는 등, 큐 이벤트 실행의 타이밍 정확도에 의존하는 사용 사례를 지원하기 위해 사용자 에이전트는 큐 이벤트를 미디어 타임라인의 위치와 최대한 가깝게, 이상적으로는 20밀리초 이내에 실행해야 합니다. 현재 재생 위치가 단계가 실행되는 동안 변경되면, 사용자 에이전트는 단계가 완료될 때까지 기다렸다가 즉시 단계를 다시 실행해야 합니다. 따라서 이러한 단계는 가능한 한 자주 실행됩니다.

한 번의 반복이 오래 걸리면, 사용자가 서두르는 과정에서 짧은 지속 시간의 가 건너뛰어질 수 있어, 이러한 큐는 activeCues 목록에 나타나지 않을 수 있습니다.

시간이 흐른다 단계는 다음과 같습니다:

  1. current cues 목록으로 설정합니다. 이 목록은 숨김 또는 표시 중인 텍스트 트랙들을 초기화하여 구성됩니다. 단, 비활성화된 큐는 포함되지 않습니다. current cues에 포함될 큐는 현재 재생 위치시작 시간보다 작거나 같고, 종료 시간보다 큰 큐여야 합니다.

  2. other cues 목록으로 설정합니다. 이 목록은 숨김 또는 표시 중인 텍스트 트랙들을 초기화하여 구성됩니다. 단, current cues에 포함되지 않은 큐여야 합니다.

  3. last time을 이 알고리즘이 마지막으로 실행되었을 때의 현재 재생 위치로 설정합니다. 이 알고리즘이 처음 실행되는 것이 아니라면 last time을 설정합니다.

  4. 현재 재생 위치가 마지막으로 이 알고리즘이 실행된 이후로 정상적인 재생 동안의 통상적인 단조 증가를 통해서만 변경된 경우, missed cuesother cues 목록에서 시작 시간last time보다 크거나 같고 종료 시간현재 재생 위치보다 작거나 같은 목록으로 설정합니다. 그렇지 않으면 missed cues를 빈 목록으로 설정합니다.

  5. missed cues 목록에 있는 미디어 요소새로 도입된 큐 목록에 포함된 모든 큐를 제거한 후, 요소의 새로 도입된 큐 목록을 비웁니다.

  6. 정상적인 재생 동안 현재 재생 위치의 통상적인 단조 증가를 통해 시간이 도달되었고, 사용자 에이전트가 지난 15~250ms 동안 해당 요소에서 timeupdate 이벤트를 실행하지 않았으며 그러한 이벤트에 대한 이벤트 핸들러를 아직 실행 중이지 않은 경우, 사용자 에이전트는 해당 미디어 요소에서 timeupdate 이벤트를 큐잉해야 합니다. (다른 경우, 예를 들어 명시적인 탐색(seek)에서는 관련 이벤트가 현재 재생 위치 변경의 전체 과정의 일부로 실행됩니다.)

    따라서 이 이벤트는 약 66Hz보다 빠르게 또는 4Hz보다 느리게 실행되지 않습니다 (이벤트 핸들러가 실행되는 데 250ms 이상 걸리지 않는다고 가정할 때). 사용자 에이전트는 시스템 부하 및 이벤트가 매번 처리되는 평균 비용을 기반으로 이벤트의 빈도를 조정하여, 사용자 에이전트가 비디오를 디코딩하면서 UI 업데이트를 편안하게 처리할 수 있을 때만 빈도가 더 자주 발생하지 않도록 권장됩니다.

  7. 모든 current cues에 있는 경우, 텍스트 트랙 큐 활성 플래그가 설정되고, other cues에 있는 중 어느 것도 텍스트 트랙 큐 활성 플래그가 설정되지 않았으며, missed cues가 비어 있으면 반환합니다.

  8. 정상적인 재생 동안 현재 재생 위치의 통상적인 단조 증가를 통해 시간이 도달되었고, other cues가 있으며 해당 큐가 텍스트 트랙 큐 종료 시 일시정지 플래그가 설정되어 있고, 텍스트 트랙 큐 활성 플래그가 설정되어 있거나 missed cues에도 포함되어 있는 경우, 즉시 미디어 요소의 재생을 일시 중지합니다.

    다른 경우, 예를 들어 명시적인 탐색(seek)에서는 의 종료 시간을 넘어서도 재생이 일시 중지되지 않으며, 설령 그 텍스트 트랙 큐 종료 시 일시정지 플래그가 설정되어 있어도 마찬가지입니다.

  9. events작업 목록으로 설정합니다. 이 목록은 처음에는 비어 있습니다. 이 목록에 있는 각 작업텍스트 트랙, 텍스트 트랙 큐 및 시간을 포함합니다. 이 목록은 작업이 큐잉되기 전에 정렬됩니다.

    affected tracks텍스트 트랙 목록으로 설정합니다. 이 목록은 처음에는 비어 있습니다.

    아래 단계에서 target텍스트 트랙 큐event라는 이름의 이벤트를 준비하라고 할 때, 사용자 에이전트는 다음 단계를 실행해야 합니다:

    1. tracktarget과 연관된 텍스트 트랙으로 설정합니다.

    2. target에서 event라는 이름의 이벤트를 작업을 생성하여 실행합니다.

    3. 생성된 작업time, 텍스트 트랙 track, 텍스트 트랙 큐 target과 연관하여 events에 추가합니다.

    4. trackaffected tracks에 추가합니다.

  10. missed cues에 있는 텍스트 트랙 큐 각각에 대해 이벤트 준비를 하고 enter 라는 이름의 이벤트를 TextTrackCue 객체에서 텍스트 트랙 큐 시작 시간과 함께 실행합니다.

  11. other cues에 있는 텍스트 트랙 큐 각각에 대해 텍스트 트랙 큐 활성 플래그가 설정되었거나 missed cues에 있는 경우, 이벤트 준비를 하고 exit 라는 이름의 이벤트를 TextTrackCue 객체에서 텍스트 트랙 큐 종료 시간텍스트 트랙 큐 시작 시간 중 더 늦은 시간과 함께 실행합니다.

  12. current cues에 있지만 텍스트 트랙 큐 활성 플래그가 설정되지 않은 텍스트 트랙 큐 각각에 대해 이벤트 준비를 하고 enter 라는 이름의 이벤트를 TextTrackCue 객체에서 텍스트 트랙 큐 시작 시간과 함께 실행합니다.

  13. events에 있는 작업을 시간 순서대로 오름차순으로 정렬합니다 (작업은 더 이른 시간이 먼저 옵니다).

    events에 있는 작업 중 시간이 동일한 작업들을 텍스트 트랙 큐 순서에 따라 추가로 정렬합니다. 이 정렬은 텍스트 트랙 큐와 연관된 작업에서 수행됩니다.

    마지막으로, 동일한 시간과 동일한 텍스트 트랙 큐 순서를 가진 작업들을 정렬할 때는 작업 enter 이벤트를 실행하는 경우, exit 이벤트를 실행하는 작업보다 우선 배치합니다.

  14. events에 있는 각 작업에 대해, 미디어 요소미디어 요소 작업을 큐잉합니다. 이 작업은 리스트 순서대로 수행됩니다.

  15. affected tracks미디어 요소텍스트 트랙 목록에 나타나는 순서대로 정렬하고 중복을 제거합니다.

  16. 리스트 순서대로 affected tracks에 있는 각 텍스트 트랙에 대해 미디어 요소미디어 요소 작업을 큐잉하고 이벤트를 실행합니다. 이벤트 이름은 cuechange 이며, TextTrack 객체에서 실행됩니다. 만약 텍스트 트랙에 해당되는 track 요소가 있는 경우, 해당 이벤트를 실행하여, 이름이 cuechange 인 이벤트가 track 요소에서 실행되도록 합니다.

  17. current cues에 있는 모든 텍스트 트랙 큐 활성 플래그를 설정하고, other cues에 있는 모든 텍스트 트랙 큐 활성 플래그를 해제합니다.

  18. affected tracks에 있는 각 텍스트 트랙에 대해 텍스트 트랙 렌더링 업데이트 규칙을 실행합니다. 이때, text track텍스트 트랙 언어가 비어 있지 않으면 이를 대체 언어로 제공합니다. 예를 들어, WebVTT를 기반으로 하는 텍스트 트랙의 경우, WebVTT 텍스트 트랙 표시 업데이트 규칙을 적용합니다. [WEBVTT]

위 알고리즘의 목적을 위해, 텍스트 트랙 큐텍스트 트랙의 일부로 간주되며, 단지 텍스트 트랙과 연관되어 있는 것만으로는 간주되지 않습니다. 오직 텍스트 트랙 큐 목록에 나열되어 있는 경우에만 해당됩니다.

만약 미디어 요소노드 문서완전히 활성화된 문서 상태를 잃으면, 해당 문서가 다시 활성화될 때까지 재생이 중단됩니다.

미디어 요소문서에서 제거될 때, 사용자 에이전트는 다음 단계를 실행해야 합니다:

  1. 안정된 상태를 기다리고, 작업을 계속하여 미디어 요소 document 에서 제거합니다. 동기화된 섹션은 이 알고리즘의 나머지 단계를 포함합니다. (동기화된 섹션의 단계는 ⌛로 표시됩니다.)

  2. 미디어 요소문서에 있으면, 반환합니다.

  3. 내부 일시정지 단계미디어 요소에 대해 실행합니다.

4.8.11.9 탐색
media.seeking

사용자 에이전트가 현재 탐색 중인 경우 true를 반환합니다.

media.seekable

HTMLMediaElement/seekable

모든 현재 엔진에서 지원.

Firefox8+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

사용자 에이전트가 탐색할 수 있는 미디어 리소스의 범위를 나타내는 TimeRanges 객체를 반환합니다.

media.fastSeek(time)

HTMLMediaElement/fastSeek

Firefox31+Safari8+ChromeNo
Opera?EdgeNo
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

정밀도를 희생하여 가능한 한 빠르게 주어진 time으로 탐색합니다. (정밀하게 탐색하려면 currentTime 속성을 사용합니다.)

미디어 리소스가 로드되지 않은 경우 이 작업은 아무것도 하지 않습니다.

seeking 속성은 처음에 false 값을 가져야 합니다.

fastSeek(time) 메서드는 time으로 탐색을 수행해야 하며, approximate-for-speed 플래그가 설정되어 있어야 합니다.

사용자 에이전트가 new playback position에서 미디어 리소스탐색을 해야 하는 경우, 선택적으로 approximate-for-speed 플래그가 설정된 경우, 사용자 에이전트는 다음 단계를 실행해야 합니다. 이 알고리즘은 이벤트 루프 메커니즘과 밀접하게 상호 작용합니다. 특히, 이벤트 루프 알고리즘의 일부로서 트리거되는 동기화된 섹션이 있습니다. 이 섹션의 단계는 ⌛로 표시됩니다.

  1. 미디어 요소포스터 표시 플래그를 false로 설정합니다.

  2. 미디어 요소readyStateHAVE_NOTHING이면, 반환합니다.

  3. 요소의 seeking IDL 속성이 true인 경우, 이 알고리즘의 또 다른 인스턴스가 이미 실행 중입니다. 해당 알고리즘 인스턴스를 실행 중인 단계를 기다리지 않고 중단합니다.

  4. seeking IDL 속성을 true로 설정합니다.

  5. 탐색이 DOM 메서드 호출이나 IDL 속성 설정에 응답하여 발생한 경우, 스크립트를 계속 실행합니다. 나머지 단계는 병렬로 실행해야 합니다. ⌛로 표시된 단계를 제외하고, 이 알고리즘의 또 다른 인스턴스가 호출되어 언제든지 중단될 수 있습니다.

  6. 새로운 재생 위치가 미디어 리소스의 끝 이후인 경우, 그 위치를 대신 미디어 리소스의 끝으로 설정합니다.

  7. 새로운 재생 위치가 가장 빠른 가능한 위치보다 이전인 경우, 그 위치를 대신 가장 빠른 가능한 위치로 설정합니다.

  8. (이제 변경되었을 수도 있는) 새로운 재생 위치가 seekable 속성에 제공된 범위 중 하나에 포함되지 않는 경우, 그 위치를 대신 seekable 속성에 제공된 범위 중 새로운 재생 위치에 가장 가까운 위치로 설정합니다. 두 위치 모두 해당 조건을 만족하는 경우(즉, 새로운 재생 위치가 seekable 속성의 두 범위 사이의 정확한 중간에 있는 경우), 현재 재생 위치에 가장 가까운 위치를 사용합니다. seekable 속성에 제공된 범위가 없는 경우, seeking IDL 속성을 false로 설정하고 반환합니다.

  9. approximate-for-speed 플래그가 설정된 경우, 새로운 재생 위치를 재생이 즉시 재개될 수 있는 값으로 조정합니다. 이 단계 이전의 새로운 재생 위치가 현재 재생 위치보다 이전인 경우, 조정된 새로운 재생 위치도 현재 재생 위치 이전이어야 합니다. 마찬가지로, 이 단계 이전의 새로운 재생 위치가 현재 재생 위치 이후인 경우, 조정된 새로운 재생 위치도 현재 재생 위치 이후여야 합니다.

    예를 들어, 사용자 에이전트는 인근의 키 프레임으로 스냅하여 중간 프레임을 디코딩한 다음 폐기하는 데 시간을 소비하지 않고 재생을 재개할 수 있습니다.

  10. 미디어 요소 작업을 대기열에 추가하여 이벤트를 발생시키도록 하고, 요소에 대해 seeking이라는 이름의 이벤트를 발생시킵니다.

  11. 현재 재생 위치를 새로운 재생 위치로 설정합니다.

    미디어 요소가 탐색을 시작하기 직전에 잠재적으로 재생 중이었으나, 탐색으로 인해 readyState 속성이 HAVE_FUTURE_DATA 미만의 값으로 변경된 경우, waiting 이벤트가 요소에서 발생할 것입니다.

    이 단계는 현재 재생 위치를 설정하며, 따라서 사용자 에이전트가 실제로 해당 위치의 미디어 데이터를 렌더링할 수 있는지 여부를 결정하기 전이라도 재생이 "미디어 리소스의 끝에 도달"하는 시점에 관한 규칙과 같은 다른 조건을 즉시 트리거할 수 있습니다(루핑을 처리하는 로직의 일부입니다).

    currentTime 속성은 공식 재생 위치를 반환하며, 현재 재생 위치가 아니므로 이 알고리즘과는 별개로 스크립트 실행 전에 업데이트됩니다.

  12. 사용자 에이전트가 new playback position에 대한 미디어 데이터가 사용 가능한지 여부를 확인할 때까지 기다리고, 가능하다면 해당 위치를 재생할 수 있을 정도로 데이터를 디코딩할 때까지 기다립니다.

  13. 안정된 상태를 대기합니다. 동기화된 섹션은 이 알고리즘의 나머지 단계로 구성됩니다. (동기화된 섹션의 단계는 ⌛로 표시됩니다.)

  14. seeking IDL 속성을 false로 설정합니다.

  15. 시간이 흐른다 단계를 실행합니다.

  16. 미디어 요소 작업을 대기열에 추가하여 이벤트를 발생시키도록 하고, 요소에 대해 timeupdate라는 이름의 이벤트를 발생시킵니다.

  17. 미디어 요소 작업을 대기열에 추가하여 이벤트를 발생시키도록 하고, 요소에 대해 seeked라는 이름의 이벤트를 발생시킵니다.


seekable 속성은 사용자 에이전트가 탐색할 수 있는 미디어 리소스의 범위를 나타내는 새로운 정적 정규화된 TimeRanges 객체를 반환해야 하며, 이는 속성이 평가되는 시점에 해당합니다.

사용자 에이전트가 미디어 리소스의 어디에서든 탐색할 수 있는 경우, 예를 들어 단순한 동영상 파일이고 사용자 에이전트와 서버가 HTTP 범위 요청을 지원하기 때문에 이 속성은 하나의 범위를 가진 객체를 반환합니다. 이 범위의 시작은 첫 번째 프레임의 시간(가장 빠른 가능한 위치, 일반적으로 0)이고, 끝은 첫 번째 프레임의 시간에 duration 속성 값(마지막 프레임의 시간과 동일할 수 있으며, 양의 무한대일 수 있음)을 더한 값입니다.

이 범위는 사용자 에이전트가 무한 스트림에서 슬라이딩 윈도우를 버퍼링하는 경우와 같이 지속적으로 변경될 수 있습니다. 예를 들어 DVR이 실시간 TV를 시청할 때 이러한 동작이 나타납니다.

매번 새로운 객체를 반환하는 것은 속성 getter에 대한 나쁜 패턴이며, 변경하는 데 비용이 많이 들기 때문에 여기서만 명시됩니다. 새로운 API에는 이를 복사해서는 안 됩니다.

사용자 에이전트는 탐색 가능성에 대해 매우 자유롭고 낙관적인 견해를 취해야 합니다. 또한 가능한 경우 최근 콘텐츠를 버퍼링하여 탐색을 빠르게 할 수 있도록 해야 합니다.

예를 들어, HTTP 범위 요청을 지원하지 않는 HTTP 서버에서 제공되는 큰 비디오 파일을 고려해 봅시다. 브라우저는 이 파일을 구현할 때 현재 프레임과 이후 프레임의 데이터만 버퍼링하고, 재생을 다시 시작하여 처음으로 돌아가는 것 외에는 탐색을 허용하지 않을 수 있습니다. 그러나 이것은 좋지 않은 구현입니다. 고품질의 구현은 충분한 저장 공간이 있는 경우 최근 몇 분(또는 더 많은) 콘텐츠를 버퍼링하여 사용자가 놀라운 부분을 다시 볼 수 있도록 하고, 필요한 경우 파일을 처음부터 다시 로드하여 임의의 탐색을 허용합니다. 이 경우 속도가 느리겠지만, 비디오를 처음부터 끝까지 다시 시청해야 하는 것보다 여전히 더 편리합니다.

미디어 리소스는 내부적으로 스크립팅되거나 인터랙티브할 수 있습니다. 따라서 미디어 요소는 비선형 방식으로 재생될 수 있습니다. 이 경우, 사용자 에이전트는 현재 재생 위치가 불연속적인 방식으로 변경될 때마다 (관련 이벤트가 발생하도록) 탐색 알고리즘이 사용된 것처럼 동작해야 합니다.

4.8.11.10 여러 미디어 트랙을 가진 미디어 리소스

미디어 리소스는 여러 개의 오디오 및 비디오 트랙을 포함할 수 있습니다. 예를 들어, 주요 비디오 및 오디오 트랙 외에도, 미디어 리소스에는 외국어 더빙 대사, 감독의 해설, 오디오 설명, 대체 각도 또는 수화 오버레이가 있을 수 있습니다.

media.audioTracks

HTMLMediaElement/audioTracks

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

AudioTrackList 객체를 반환하여 미디어 리소스에서 사용할 수 있는 오디오 트랙을 나타냅니다.

media.videoTracks

HTMLMediaElement/videoTracks

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer지원 안 됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

VideoTrackList 객체를 반환하여 미디어 리소스에서 사용할 수 있는 비디오 트랙을 나타냅니다.

미디어 요소audioTracks 속성은 미디어 요소미디어 리소스에서 사용할 수 있는 오디오 트랙을 나타내는 라이브 AudioTrackList 객체를 반환해야 합니다.

미디어 요소videoTracks 속성은 미디어 요소미디어 리소스에서 사용할 수 있는 비디오 트랙을 나타내는 라이브 VideoTrackList 객체를 반환해야 합니다.

미디어 요소에는 AudioTrackList 객체와 VideoTrackList 객체가 각각 하나씩만 존재하며, 다른 미디어 리소스가 요소에 로드되더라도 이 객체들은 재사용됩니다. (그러나 AudioTrackVideoTrack 객체는 그렇지 않습니다.)

4.8.11.10.1 AudioTrackListVideoTrackList 객체

AudioTrackList

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

VideoTrackList

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

AudioTrackList

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
caniuse.com 표

AudioTrackListVideoTrackList 인터페이스는 이전 섹션에서 정의된 속성에서 사용됩니다.

AudioTrack

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari8+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

VideoTrack

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안 됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
[Exposed=Window]
interface AudioTrackList : EventTarget {
  readonly attribute unsigned long length;
  getter AudioTrack (unsigned long index);
  AudioTrack? getTrackById(DOMString id);

  attribute EventHandler onchange;
  attribute EventHandler onaddtrack;
  attribute EventHandler onremovetrack;
};

[Exposed=Window]
interface AudioTrack {
  readonly attribute DOMString id;
  readonly attribute DOMString kind;
  readonly attribute DOMString label;
  readonly attribute DOMString language;
  attribute boolean enabled;
};

[Exposed=Window]
interface VideoTrackList : EventTarget {
  readonly attribute unsigned long length;
  getter VideoTrack (unsigned long index);
  VideoTrack? getTrackById(DOMString id);
  readonly attribute long selectedIndex;

  attribute EventHandler onchange;
  attribute EventHandler onaddtrack;
  attribute EventHandler onremovetrack;
};

[Exposed=Window]
interface VideoTrack {
  readonly attribute DOMString id;
  readonly attribute DOMString kind;
  readonly attribute DOMString label;
  readonly attribute DOMString language;
  attribute boolean selected;
};
media.audioTracks.length

AudioTrackList/length

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
media.videoTracks.length

VideoTrackList/length

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

리스트의 트랙 수를 반환합니다.

audioTrack = media.audioTracks[index]
videoTrack = media.videoTracks[index]

지정된 AudioTrack 또는 VideoTrack 객체를 반환합니다.

audioTrack = media.audioTracks.getTrackById(id)

AudioTrackList/getTrackById

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
videoTrack = media.videoTracks.getTrackById(id)

VideoTrackList/getTrackById

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

주어진 식별자를 가진 AudioTrack 또는 VideoTrack 객체를 반환하며, 해당 식별자를 가진 트랙이 없는 경우 null을 반환합니다.

audioTrack.id

AudioTrack/id

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari8+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
videoTrack.id

VideoTrack/id

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

주어진 트랙의 ID를 반환합니다. 이 ID는 형식이 프래그먼트를 지원하는 경우 사용할 수 있으며, 미디어 프래그먼트 구문과 함께 사용할 수 있으며, getTrackById() 메서드와 함께 사용할 수 있습니다.

audioTrack.kind

AudioTrack/kind

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari8+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
videoTrack.kind

VideoTrack/kind

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

주어진 트랙이 속하는 범주를 반환합니다. 가능한 트랙 범주는 아래에 나와 있습니다.

audioTrack.label

AudioTrack/label

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari8+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
videoTrack.label

VideoTrack/label

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

지정된 트랙의 레이블을 반환합니다. 알려진 경우에만 반환되며, 그렇지 않으면 빈 문자열을 반환합니다.

audioTrack.language

AudioTrack/language

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari8+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
videoTrack.language

VideoTrack/language

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

지정된 트랙의 언어를 반환합니다. 알려진 경우에만 반환되며, 그렇지 않으면 빈 문자열을 반환합니다.

audioTrack.enabled [ = value ]

AudioTrack/enabled

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari8+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

지정된 트랙이 활성화된 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.

트랙을 활성화할지 여부를 변경하기 위해 설정할 수 있습니다. 여러 오디오 트랙을 동시에 활성화하면 혼합됩니다.

media.videoTracks.selectedIndex

VideoTrackList/selectedIndex

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

현재 선택된 트랙의 인덱스를 반환하며, 없으면 −1을 반환합니다.

videoTrack.selected [ = value ]

VideoTrack/selected

모든 현재 엔진에서 지원됩니다.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)아니요Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

지정된 트랙이 활성화된 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.

트랙을 선택할지 여부를 변경하기 위해 설정할 수 있습니다. 하나의 비디오 트랙이 선택됩니다. 이전 트랙을 선택 해제하고 새 트랙을 선택합니다.

AudioTrackList 객체는 하나 이상의 오디오 트랙으로 구성된 동적 목록을 나타내며, 이 중 하나 이상의 트랙이 동시에 활성화될 수 있습니다. 각 오디오 트랙은 AudioTrack 객체로 나타납니다.

VideoTrackList 객체는 하나 이상의 비디오 트랙으로 구성된 동적 목록을 나타내며, 이 중 하나의 트랙만 동시에 선택될 수 있습니다. 각 비디오 트랙은 VideoTrack 객체로 나타납니다.

AudioTrackListVideoTrackList 객체의 트랙들은 일관된 순서로 유지되어야 합니다. 미디어 리소스가 순서를 정의하는 형식인 경우 해당 순서가 사용되어야 하며, 그렇지 않으면 트랙이 미디어 리소스에 선언된 상대적 순서가 사용되어야 합니다. 사용된 순서는 목록의 자연 순서라고 합니다.

이 객체의 각 트랙에는 인덱스가 있으며, 첫 번째 트랙의 인덱스는 0이고 이후의 트랙은 이전 트랙보다 하나씩 더 높은 번호를 가집니다. 미디어 리소스가 동적으로 오디오 또는 비디오 트랙을 추가하거나 제거하면 트랙의 인덱스가 동적으로 변경됩니다. 미디어 리소스가 완전히 변경되면 모든 이전 트랙이 제거되고 새 트랙으로 대체됩니다.

AudioTrackListVideoTrackListlength 속성 게터는 조회 시점에 객체가 나타내는 트랙의 수를 반환해야 합니다.

AudioTrackListVideoTrackList 객체의 지원되는 속성 인덱스는 특정 시점에 해당 객체가 나타내는 트랙의 수에서 1을 뺀 숫자까지의 숫자입니다. 만약 트랙이 없다면 지원되는 속성 인덱스가 없습니다.

지정된 index에 대해 인덱스된 속성의 값을 결정하려면 AudioTrackList 또는 VideoTrackList 객체 list에서 해당 인덱스에 해당하는 AudioTrack 또는 VideoTrack 객체를 반환해야 합니다.

AudioTrackListVideoTrackListgetTrackById(id) 메서드는 지정된 인수와 일치하는 첫 번째 AudioTrack 또는 VideoTrack 객체를 반환해야 합니다. 일치하는 트랙이 없을 경우 메서드는 null을 반환해야 합니다.

AudioTrackVideoTrack 객체는 특정 미디어 리소스의 특정 트랙을 나타냅니다. 각 트랙에는 식별자, 범주, 레이블 및 언어가 있을 수 있습니다. 이러한 트랙의 속성들은 트랙의 생애 동안 유지되며, 트랙이 AudioTrackList 또는 VideoTrackList에서 제거되더라도 속성들은 변경되지 않습니다.

또한, 각 AudioTrack 객체는 활성화되거나 비활성화될 수 있으며, 이것이 오디오 트랙의 활성 상태입니다. AudioTrack이 생성될 때, 그 활성 상태는 false(비활성화)로 설정되어야 합니다. 리소스 가져오기 알고리즘이 이를 무시할 수 있습니다.

유사하게, VideoTrack 객체는 VideoTrackList 내에서 선택될 수 있으며, 이는 비디오 트랙의 선택 상태입니다. VideoTrack이 생성될 때, 그 선택 상태는 false(선택되지 않음)로 설정되어야 합니다. 리소스 가져오기 알고리즘이 이를 무시할 수 있습니다.

AudioTrackidVideoTrackid 속성은 해당 트랙의 식별자를 반환해야 하며, 식별자가 없는 경우 빈 문자열을 반환해야 합니다. 미디어 리소스가 미디어 조각 구문을 지원하는 형식일 경우, 특정 트랙에 대해 반환된 식별자는 해당 구문의 트랙 차원에서 트랙 이름으로 사용될 경우 트랙을 활성화할 수 있는 동일한 식별자가 되어야 합니다. [INBAND]

예를 들어, Ogg 파일에서는 이 식별자가 트랙의 Name 헤더 필드가 될 수 있습니다. [OGGSKELETONHEADERS]

AudioTrackkindVideoTrackkind 속성은 해당 트랙의 범주를 반환해야 하며, 범주가 없는 경우 빈 문자열을 반환해야 합니다.

트랙의 범주는 아래 표의 첫 번째 열에 있는 문자열 중 가장 적절한 것으로, 표의 두 번째 및 세 번째 열에 정의된 내용을 기준으로 합니다. 표의 세 번째 열에 있는 셀은 해당 범주가 어떤 항목에 적용되는지를 설명하며, 범주는 오디오 트랙에 대해 적절한 경우에만 오디오 트랙에 대해 반환되어야 하고, 비디오 트랙에 대해 적절한 경우에만 비디오 트랙에 대해 반환되어야 합니다.

Ogg 파일의 경우, 트랙의 Role 헤더 필드가 관련 메타데이터를 제공합니다. DASH 미디어 리소스의 경우, Role 요소가 정보를 전달합니다. WebM의 경우, 현재 FlagDefault 요소만이 값을 매핑합니다. 미디어 컨테이너에서 HTML로 인밴드 미디어 리소스 트랙 소싱에는 더 자세한 내용이 있습니다. [OGGSKELETONHEADERS] [DASH] [WEBMCG] [INBAND]

AudioTrackkindVideoTrackkind에 대한 반환 값
범주 정의 적용 대상... 예시
"alternative" 주 트랙의 대안으로 사용할 수 있는 트랙, 예: 다른 버전의 노래(오디오) 또는 다른 각도(비디오). 오디오 및 비디오. Ogg: "audio/alternate" 또는 "video/alternate"; DASH: "alternate" 역할, "main" 및 "commentary" 역할 없음, 오디오는 "dub" 역할 없음(다른 역할은 무시됨).
"captions" 캡션이 번인된 주 비디오 트랙의 버전. (레거시 콘텐츠의 경우, 새 콘텐츠는 텍스트 트랙 사용.) 비디오만. DASH: "caption" 및 "main" 역할 함께 사용(다른 역할 무시됨).
"descriptions" 비디오 트랙에 대한 오디오 설명. 오디오만. Ogg: "audio/audiodesc".
"main" 주 오디오 또는 비디오 트랙. 오디오 및 비디오. Ogg: "audio/main" 또는 "video/main"; WebM: "FlagDefault" 요소 설정됨; DASH: "main" 역할, "caption", "subtitle", "dub" 역할 없음(다른 역할은 무시됨).
"main-desc" 오디오 설명이 혼합된 주 오디오 트랙. 오디오만. MPEG-2 TS의 AC3 오디오: bsmod=2 및 full_svc=1.
"sign" 오디오 트랙의 수화 통역. 비디오만. Ogg: "video/sign".
"subtitles" 자막이 번인된 주 비디오 트랙의 버전. (레거시 콘텐츠의 경우, 새 콘텐츠는 텍스트 트랙 사용.) 비디오만. DASH: "subtitle" 및 "main" 역할 함께 사용(다른 역할 무시됨).
"translation" 주 오디오 트랙의 번역된 버전. 오디오만. Ogg: "audio/dub". DASH: "dub" 및 "main" 역할 함께 사용(다른 역할 무시됨).
"commentary" 주 오디오 또는 비디오 트랙에 대한 해설, 예: 감독의 해설. 오디오 및 비디오. DASH: "commentary" 역할, "main" 역할 없음(다른 역할 무시됨).
"" (빈 문자열) 명시된 유형이 없거나 트랙의 메타데이터에 의해 제공된 유형이 사용자 에이전트에 의해 인식되지 않음. 오디오 및 비디오.

AudioTracklabelVideoTracklabel 속성은 해당 트랙의 레이블을 반환해야 하며, 레이블이 없는 경우 빈 문자열을 반환해야 합니다. [INBAND]

AudioTracklanguageVideoTracklanguage 속성은 해당 트랙의 언어를 나타내는 BCP 47 언어 태그를 반환해야 하며, 언어가 없는 경우 빈 문자열을 반환해야 합니다. 사용자가 해당 언어를 BCP 47 언어 태그로 표현할 수 없는 경우(예를 들어, 미디어 리소스의 형식에서 언어 정보가 정의되지 않은 자유 형식 문자열인 경우) 메서드는 트랙에 언어가 없는 것처럼 빈 문자열을 반환해야 합니다. [INBAND]

AudioTrackenabled 속성은 조회 시 트랙이 현재 활성화되어 있으면 true를, 그렇지 않으면 false를 반환해야 합니다. 설정 시, 새로운 값이 true인 경우 트랙을 활성화하고, 그렇지 않으면 트랙을 비활성화해야 합니다. (트랙이 더 이상 AudioTrackList 객체에 포함되어 있지 않다면, 트랙이 활성화되거나 비활성화되는 것이 AudioTrack 객체의 속성 값을 변경하는 것 이외에는 아무런 영향을 미치지 않습니다.)

AudioTrackList에 있는 오디오 트랙이 비활성화되었다가 다시 활성화될 때마다, 또는 활성화된 트랙이 비활성화될 때마다, 사용자 에이전트는 미디어 요소 작업을 대기열에 추가하고, 미디어 요소에서 이벤트change라는 이름으로 AudioTrackList 객체에서 실행해야 합니다.

특정 미디어 타임라인 위치에 데이터가 없거나, 해당 위치에 존재하지 않는 오디오 트랙은 그 타임라인 위치에서 무음으로 해석되어야 합니다.

VideoTrackListselectedIndex 속성은 현재 선택된 트랙의 인덱스를 반환해야 합니다. 만약 VideoTrackList 객체가 현재 트랙을 나타내지 않거나, 선택된 트랙이 없다면, −1을 반환해야 합니다.

VideoTrackselected 속성은 조회 시 트랙이 현재 선택된 경우 true를, 그렇지 않은 경우 false를 반환해야 합니다. 설정 시, 새로운 값이 true인 경우 트랙을 선택하고, 그렇지 않으면 선택을 해제해야 합니다. VideoTrackList에 트랙이 포함된 경우, 목록의 다른 VideoTrack 객체들은 선택 해제되어야 합니다. (트랙이 더 이상 VideoTrackList 객체에 포함되어 있지 않다면, 트랙이 선택되거나 해제되는 것이 VideoTrack 객체의 속성 값을 변경하는 것 이외에는 아무런 영향을 미치지 않습니다.)

VideoTrackList의 선택되지 않은 트랙이 선택되거나, 선택된 트랙이 선택 해제될 때마다, 사용자 에이전트는 미디어 요소 작업을 대기열에 추가하고, 미디어 요소에서 이벤트change라는 이름으로 VideoTrackList 객체에서 실행해야 합니다. 이 작업resize 이벤트를 실행하는 작업보다 먼저 대기열에 추가되어야 합니다.

특정 위치에 대한 데이터가 없거나 해당 위치에 존재하지 않는 비디오 트랙은 타임라인의 해당 지점에서 투명한 검정으로 해석되어야 하며, 해당 지점 이전의 마지막 프레임과 동일한 크기를 가져야 합니다. 또는 해당 위치가 해당 트랙의 모든 데이터 이전이라면 해당 트랙의 첫 번째 프레임과 동일한 크기를 가져야 합니다. 해당 위치에 전혀 존재하지 않는 트랙은 존재하지만 데이터가 없는 것으로 취급되어야 합니다.

예를 들어, 비디오에 한 시간이 지난 후에만 소개되는 트랙이 있는 경우, 사용자가 해당 트랙을 선택한 후 처음으로 돌아가면, 사용자 에이전트는 해당 트랙이 미디어 리소스의 시작 시점에서 시작되었지만 한 시간까지는 투명했다고 간주할 것입니다.


다음은 이벤트 핸들러와 해당 이벤트 핸들러 이벤트 타입입니다. 모든 AudioTrackListVideoTrackList 인터페이스를 구현하는 객체에서 이벤트 핸들러 IDL 속성으로 지원되어야 합니다:

이벤트 핸들러 이벤트 핸들러 이벤트 타입
onchange

AudioTrackList/change_event

모든 최신 엔진에서 지원됩니다.

Firefox🔰 33+ Safari7+ Chrome🔰 37+
Opera? Edge🔰 79+
Edge (Legacy)No Internet Explorer10+
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?
change
onaddtrack

AudioTrackList/addtrack_event

모든 최신 엔진에서 지원됩니다.

Firefox🔰 33+ Safari7+ Chrome🔰 37+
Opera? Edge🔰 79+
Edge (Legacy)No Internet Explorer10+
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?
addtrack
onremovetrack

AudioTrackList/removetrack_event

모든 최신 엔진에서 지원됩니다.

Firefox🔰 33+ Safari7+ Chrome🔰 37+
Opera? Edge🔰 79+
Edge (Legacy)No Internet Explorer10+
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android?
removetrack
4.8.11.10.2 특정 오디오 및 비디오 트랙을 선언적으로 선택

audioTracksvideoTracks 속성은 스크립트로 어떤 트랙을 재생할지 선택할 수 있게 하지만, 또한 프래그먼트에 특정 트랙을 지정하여 선언적으로 트랙을 선택하는 것도 가능합니다. 이러한 프래그먼트의 형식은 MIME 타입에 따라 달라집니다. [RFC2046] [URL]

이 예제에서는 미디어 프래그먼트 구문을 지원하는 형식을 사용하는 비디오를 임베드하여 기본 비디오 트랙 대신 "Alternative"로 레이블된 대체 각도가 활성화되도록 합니다.

<video src="myvideo#track=Alternative"></video>
4.8.11.11 시간에 맞춰 표시되는 텍스트 트랙
4.8.11.11.1 텍스트 트랙 모델

미디어 요소에는 텍스트 트랙의 그룹이 있을 수 있으며, 이를 미디어 요소텍스트 트랙 목록이라고 합니다. 텍스트 트랙은 다음과 같이 정렬됩니다:

  1. 텍스트 트랙track 요소 자식 요소에 해당하는 트랙은 트리 순서대로 정렬됩니다.

  2. addTextTrack() 메서드를 사용해 추가된 텍스트 트랙은 추가된 순서대로, 가장 오래된 것부터 정렬됩니다.

  3. 미디어 리소스에 특정한 텍스트 트랙 (텍스트 트랙미디어 리소스에 해당하는 트랙)은 미디어 리소스의 형식 사양에 따라 정렬됩니다.

텍스트 트랙은 다음으로 구성됩니다:

텍스트 트랙의 종류

이는 트랙이 사용자 에이전트에 의해 어떻게 처리되는지를 결정합니다. 종류는 문자열로 표현되며, 가능한 문자열은 다음과 같습니다:

트랙의 종류텍스트 트랙track 요소에 해당하는 경우 동적으로 변경될 수 있습니다.

라벨

이는 사용자를 위한 사람이 읽을 수 있는 문자열로, 트랙을 식별하는 데 사용됩니다.

트랙의 라벨텍스트 트랙track 요소에 해당하는 경우 동적으로 변경될 수 있습니다.

텍스트 트랙의 라벨이 빈 문자열일 경우, 사용자 에이전트는 사용자 인터페이스에서 사용할 수 있는 적절한 라벨을 텍스트 트랙의 다른 속성(예: 텍스트 트랙의 종류 및 텍스트 트랙의 언어)으로부터 자동으로 생성해야 합니다. 이 자동 생성된 라벨은 API에서 노출되지 않습니다.

인밴드 메타데이터 트랙 디스패치 유형

이것은 인밴드 메타데이터 트랙을 특정 스크립트에 디스패치할 수 있도록 하기 위해 미디어 리소스에서 추출된 문자열입니다.

예를 들어, 웹에서 스트리밍되는 전통적인 TV 방송에 웹 전용 인터랙티브 기능이 추가된 경우, 광고 타겟팅을 위한 메타데이터, 게임쇼 중의 퀴즈 데이터, 스포츠 경기 중의 선수 상태, 요리 프로그램 중의 레시피 정보 등과 같은 텍스트 트랙이 포함될 수 있습니다. 각 프로그램이 시작되고 끝날 때마다 새로운 트랙이 스트림에 추가되거나 제거될 수 있으며, 각 트랙이 추가될 때마다 사용자 에이전트는 이 속성의 값을 사용하여 이를 전용 스크립트 모듈에 바인딩할 수 있습니다.

인밴드 메타데이터 텍스트 트랙 외의 경우, 인밴드 메타데이터 트랙 디스패치 유형은 빈 문자열입니다. 이 값이 다양한 미디어 형식에 대해 어떻게 채워지는지는 미디어 리소스에 특정한 텍스트 트랙을 노출하는 단계에서 설명됩니다.

언어

이것은 텍스트 트랙의 큐에 사용되는 언어를 나타내는 문자열(BCP 47 언어 태그)입니다. [BCP47]

텍스트 트랙의 언어텍스트 트랙track 요소에 해당하는 경우 동적으로 변경될 수 있습니다.

준비 상태

다음 중 하나입니다:

로딩되지 않음

텍스트 트랙의 큐가 아직 얻어지지 않았음을 나타냅니다.

로딩 중

텍스트 트랙이 로딩 중이며, 현재까지 치명적인 오류가 발생하지 않았음을 나타냅니다. 더 많은 큐가 파서에 의해 트랙에 추가될 수 있습니다.

로딩 완료

텍스트 트랙이 치명적인 오류 없이 로딩되었음을 나타냅니다.

로딩 실패

텍스트 트랙이 활성화되었으나, 사용자 에이전트가 이를 얻으려고 시도할 때 어떤 방식으로든 실패했음을 나타냅니다(예: URL파싱할 수 없음, 네트워크 오류, 알 수 없는 텍스트 트랙 형식). 일부 또는 모든 큐가 누락되었으며 더 이상 얻어지지 않을 가능성이 큽니다.

텍스트 트랙의 준비 상태는 트랙이 얻어지면서 동적으로 변경됩니다.

모드

다음 중 하나입니다:

비활성화됨

텍스트 트랙이 활성 상태가 아님을 나타냅니다. DOM에 트랙을 노출하는 목적 외에는 사용자 에이전트가 텍스트 트랙을 무시합니다. 큐가 활성화되지 않고, 이벤트가 발생하지 않으며, 사용자 에이전트는 트랙의 큐를 얻으려 시도하지 않습니다.

숨김

텍스트 트랙이 활성화되었으나, 사용자 에이전트가 큐를 적극적으로 표시하지 않음을 나타냅니다. 트랙의 큐를 얻기 위한 시도가 아직 이루어지지 않은 경우, 사용자 에이전트는 곧 그러한 시도를 할 것입니다. 사용자 에이전트는 활성화된 큐 목록을 유지하고 있으며, 이에 따라 이벤트가 발생합니다.

표시 중

텍스트 트랙이 활성화되었음을 나타냅니다. 트랙의 큐를 얻기 위한 시도가 아직 이루어지지 않은 경우, 사용자 에이전트는 곧 그러한 시도를 할 것입니다. 사용자 에이전트는 활성화된 큐 목록을 유지하고 있으며, 이에 따라 이벤트가 발생합니다. 또한, 종류subtitles 또는 captions인 텍스트 트랙의 경우, 큐가 적절히 비디오에 오버레이됩니다. 종류descriptions인 텍스트 트랙의 경우, 사용자 에이전트는 큐를 비시각적인 방식으로 사용자에게 제공합니다. 종류chapters인 텍스트 트랙의 경우, 사용자 에이전트는 사용자가 큐를 선택하여 미디어 리소스의 임의의 지점으로 이동할 수 있는 메커니즘을 제공합니다.

큐 목록

텍스트 트랙 큐 목록과 텍스트 트랙 렌더링을 업데이트하기 위한 규칙으로 구성됩니다. 예를 들어, WebVTT의 경우, WebVTT 텍스트 트랙의 디스플레이를 업데이트하는 규칙이 있습니다. [WEBVTT]

텍스트 트랙의 큐 목록은 동적으로 변경될 수 있습니다. 이는 텍스트 트랙아직 로딩되지 않았거나 로딩 중이기 때문이거나, DOM 조작으로 인해 발생할 수 있습니다.

텍스트 트랙에는 해당하는 TextTrack 객체가 있습니다.


미디어 요소는 초기에는 비어 있는 보류 중인 텍스트 트랙 목록, 초기 값이 false인 파서에 의해 차단됨 플래그, 초기 값이 false인 자동 트랙 선택 수행 여부 플래그를 가집니다.

사용자 에이전트가 보류 중인 텍스트 트랙 목록을 채워야 할 때, 사용자 에이전트는 해당 미디어 요소보류 중인 텍스트 트랙 목록에 요소의 텍스트 트랙 목록에 있는 각 텍스트 트랙을 추가해야 합니다. 단, 이 텍스트 트랙 모드비활성화됨이 아니고, 텍스트 트랙 준비 상태로딩 중인 경우에 한합니다.

track 요소의 부모 노드가 변경될 때마다, 사용자 에이전트는 해당하는 텍스트 트랙을 포함하는 모든 보류 중인 텍스트 트랙 목록에서 제거해야 합니다.

텍스트 트랙텍스트 트랙 준비 상태로딩 완료 또는 로딩 실패로 변경될 때마다, 사용자 에이전트는 해당 트랙을 포함하는 모든 보류 중인 텍스트 트랙 목록에서 해당 트랙을 제거해야 합니다.

미디어 요소HTML 파서 또는 XML 파서에 의해 생성될 때, 사용자 에이전트는 해당 요소의 파서에 의해 차단됨 플래그를 true로 설정해야 합니다. 미디어 요소열려 있는 요소 스택에서 팝핑될 때, 사용자 에이전트는 자동 텍스트 트랙 선택에 대한 사용자 기본 설정을 존중, 보류 중인 텍스트 트랙 목록을 채우고 요소의 파서에 의해 차단됨 플래그를 false로 설정해야 합니다.

텍스트 트랙미디어 요소준비됨 상태로 있으려면, 해당 요소의 보류 중인 텍스트 트랙 목록이 비어 있고 요소의 파서에 의해 차단됨 플래그가 false여야 합니다.

미디어 요소에는 보류 중인 텍스트 트랙 변경 알림 플래그가 있으며, 이는 초기에는 설정되지 않아야 합니다.

미디어 요소텍스트 트랙 목록에 있는 텍스트 트랙텍스트 트랙 모드가 변경될 때마다, 사용자 에이전트는 해당 미디어 요소에 대해 다음 단계를 실행해야 합니다:

  1. 미디어 요소보류 중인 텍스트 트랙 변경 알림 플래그가 설정된 경우, 반환합니다.

  2. 미디어 요소보류 중인 텍스트 트랙 변경 알림 플래그를 설정합니다.

  3. 미디어 요소 작업을 대기열에 추가하여 미디어 요소에서 이 단계를 실행합니다:

    1. 미디어 요소보류 중인 텍스트 트랙 변경 알림 플래그를 해제합니다.

    2. 이벤트를 발생시켜, 미디어 요소textTracks 속성의 TextTrackList 객체에서 change라는 이름의 이벤트를 발생시킵니다.

  4. 미디어 요소포스터 표시 플래그가 설정되지 않은 경우, 시간은 흘러갑니다 단계를 실행합니다.

이 섹션에 나열된 작업작업의 작업 소스는 DOM 조작 작업 소스입니다.


텍스트 트랙 큐텍스트 트랙에서 시간에 민감한 데이터를 나타내는 단위로, 자막 및 캡션의 경우 특정 시간에 나타났다 다른 시간에 사라지는 텍스트와 해당됩니다.

텍스트 트랙 큐는 다음으로 구성됩니다:

식별자

임의의 문자열입니다.

시작 시간

큐가 적용되는 미디어 데이터 범위의 시작을 나타내는 시간으로, 초와 소수점 이하의 초 단위로 표시됩니다.

종료 시간

큐가 적용되는 미디어 데이터 범위의 끝을 나타내는 시간으로, 초와 소수점 이하의 초 단위로 표시되거나, 무한 텍스트 트랙 큐의 경우 양의 무한대로 설정됩니다.

종료 시 일시정지 플래그

큐가 적용되는 범위의 끝에 도달할 때 미디어 리소스의 재생이 일시정지할지 여부를 나타내는 부울 값입니다.

추가적인 형식별 데이터

형식에 필요한 추가 필드, 예를 들어 WebVTT의 경우 텍스트 트랙 큐 작성 방향 등이 포함됩니다. [WEBVTT]

무한 텍스트 트랙 큐는 종료 시간이 양의 무한대로 설정된 텍스트 트랙 큐입니다. 활성 상태의 무한 텍스트 트랙 큐는 정상적인 재생 중에 현재 재생 위치의 단조 증가를 통해 비활성화될 수 없습니다(예: 종료 시간이 명시되지 않은 라이브 이벤트의 챕터에 대한 메타데이터 큐).

텍스트 트랙 큐의 시작 시간텍스트 트랙 큐의 종료 시간은 음수가 될 수 있습니다(단, 현재 재생 위치는 음수가 될 수 없으므로, 시간 0 이전에 완전히 있는 큐는 활성화될 수 없습니다).

텍스트 트랙 큐는 해당하는 TextTrackCue 객체(또는 더 구체적으로는 TextTrackCue에서 상속된 객체, 예를 들어 WebVTT 큐의 경우 VTTCue 인터페이스를 사용함)가 있습니다. 텍스트 트랙 큐의 메모리 내 표현은 이 TextTrackCue API를 통해 동적으로 변경될 수 있습니다. [WEBVTT]

텍스트 트랙 큐는 특정 텍스트 트랙 큐 유형에 대한 사양에서 정의된 텍스트 트랙 렌더링을 업데이트하기 위한 규칙과 연관됩니다. 이 규칙은 객체를 TextTrack 객체에 addCue() 메서드를 사용하여 추가할 때 사용됩니다.

또한, 각 텍스트 트랙 큐에는 두 가지 동적 정보가 있습니다:

활성 플래그

이 플래그는 초기에는 설정되지 않아야 합니다. 이 플래그는 큐가 활성화되거나 비활성화될 때 적절하게 이벤트가 발생하도록 하고, 올바른 큐가 렌더링되도록 보장하기 위해 사용됩니다.

사용자 에이전트는 텍스트 트랙 큐텍스트 트랙텍스트 트랙 큐 목록에서 제거될 때마다, 텍스트 트랙 자체가 미디어 요소텍스트 트랙 목록에서 제거되거나, 텍스트 트랙 모드비활성화됨으로 변경될 때마다, 미디어 요소readyState가 다시 HAVE_NOTHING으로 변경될 때마다 이 플래그를 동기적으로 해제해야 합니다. 큐가 이러한 방식으로 비활성화되는 경우, 사용자 에이전트는 영향을 받은 모든 큐의 플래그를 해제한 후, 해당 텍스트 트랙텍스트 트랙 렌더링을 업데이트하기 위한 규칙을 적용해야 합니다. 예를 들어, WebVTT 기반 텍스트 트랙의 경우, WebVTT 텍스트 트랙의 표시를 업데이트하기 위한 규칙을 따릅니다. [WEBVTT]

표시 상태

이 상태는 렌더링 모델의 일부로, 큐를 일관된 위치에 유지하기 위해 사용됩니다. 초기에는 비어 있어야 합니다. 텍스트 트랙 큐 활성 플래그가 해제될 때마다, 사용자 에이전트는 텍스트 트랙 큐 표시 상태를 비워야 합니다.

텍스트 트랙 큐미디어 요소텍스트 트랙 내에서 텍스트 트랙 큐 순서에 따라 서로 정렬됩니다. 이 순서는 다음과 같이 결정됩니다: 먼저 를 해당 텍스트 트랙별로 그룹화하고, 그룹은 미디어 요소텍스트 트랙 목록에 나타나는 순서대로 정렬됩니다. 그런 다음, 각 그룹 내에서 시작 시간을 기준으로 가장 이른 것부터 정렬됩니다. 동일한 시작 시간을 가진 종료 시간을 기준으로 가장 늦은 것부터 정렬됩니다. 마지막으로 동일한 종료 시간을 가진 는 각각의 텍스트 트랙 큐 목록에 마지막으로 추가된 순서대로 정렬되며, 가장 오래된 것이 먼저 옵니다. 예를 들어, WebVTT 파일의 경우, 초기에는 큐가 파일에 나열된 순서로 정렬됩니다. [WEBVTT]

4.8.11.11.2 인밴드 텍스트 트랙 소싱

미디어 리소스별 텍스트 트랙텍스트 트랙으로, 미디어 리소스에서 발견된 데이터에 해당합니다.

이러한 데이터의 처리 및 렌더링 규칙은 관련 사양에 정의되어 있습니다. 예를 들어, 미디어 리소스가 비디오인 경우 해당 비디오 포맷의 사양에 정의됩니다. 일부 레거시 포맷에 대한 세부 정보는 미디어 컨테이너에서 HTML로 인밴드 미디어 리소스 트랙 소싱에서 찾을 수 있습니다. [INBAND]

사용자 에이전트가 미디어 리소스에 포함된 데이터를 텍스트 트랙과 동등한 것으로 인식하고 지원하는 경우, 사용자 에이전트는 다음과 같이 관련 데이터로 미디어 리소스별 텍스트 트랙 노출 단계를 실행합니다.

  1. 해당 데이터를 새로운 텍스트 트랙과 그에 해당하는 새로운 TextTrack 객체에 연결합니다. 이 텍스트 트랙미디어 리소스별 텍스트 트랙입니다.

  2. 새로운 텍스트 트랙종류, 라벨, 그리고 언어를 관련 사양에서 정의된 데이터의 의미에 따라 설정합니다. 데이터에 라벨이 없는 경우, 라벨은 빈 문자열로 설정해야 합니다.

  3. 새로운 텍스트 트랙 큐 목록을 해당 포맷에 적합한 텍스트 트랙 렌더링 업데이트 규칙에 따라 연결합니다.

  4. 새로운 텍스트 트랙종류chapters 또는 metadata인 경우, 텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입을 미디어 리소스의 종류에 따라 다음과 같이 설정합니다:

    만약 미디어 리소스가 Ogg 파일이라면
    텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입은 Name 헤더 필드의 값으로 설정해야 한다. [OGGSKELETONHEADERS]
    만약 미디어 리소스가 WebM 파일이라면
    텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입CodecID 요소의 값으로 설정해야 한다. [WEBMCG]
    만약 미디어 리소스가 MPEG-2 파일이라면
    stream type을 파일의 프로그램 맵 섹션에서 텍스트 트랙의 타입을 나타내는 "stream_type" 필드의 값(8비트 부호 없는 정수로 해석)으로 한다. length는 같은 섹션에서 해당 트랙의 "ES_info_length" 필드의 값(정의된 정수)으로 한다. descriptor bytes는 "ES_info_length" 필드 다음의 length 바이트들이다. 텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입stream type 바이트와 0개 이상의 descriptor bytes를 연결한 값을 ASCII 대문자 16진수로 표현한 값으로 설정해야 한다. [MPEG2]
    만약 미디어 리소스가 MPEG-4 파일이라면
    stsd box를 파일의 첫 번째 moov 박스 안에 있는 텍스트 트랙trak 박스의 첫 번째 mdia 박스의 첫 번째 minf 박스의 첫 번째 stbl 박스의 첫 번째 stsd 박스로 지정하거나, 해당 stsd 박스가 없으면 null로 지정한다. stsd box가 null이거나, stsd boxmett 박스와 metx 박스가 모두 없으면, 텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입을 빈 문자열로 설정해야 한다. 그렇지 않고 stsd boxmett 박스가 있으면, 텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입을 문자열 "mett", U+0020 SPACE 문자, 그리고 stsd box의 첫 번째 mett 박스의 첫 번째 mime_format 필드 값을 이어 붙인 값(해당 필드가 박스에 없으면 빈 문자열)을 설정해야 한다. 그렇지 않고 stsd boxmett 박스는 없고 metx 박스가 있으면, 텍스트 트랙 인밴드 메타데이터 트랙 디스패치 타입을 문자열 "metx", U+0020 SPACE 문자, 그리고 stsd box의 첫 번째 metx 박스의 첫 번째 namespace 필드 값을 이어 붙인 값(해당 필드가 박스에 없으면 빈 문자열)을 설정해야 한다. [MPEG4]
  5. 지금까지 구문 분석된 큐로 새로운 텍스트 트랙텍스트 트랙 큐 목록을 채우고, 필요한 경우 동적으로 업데이트를 시작합니다.

  6. 새로운 텍스트 트랙준비 상태로드됨으로 설정합니다.

  7. 새로운 텍스트 트랙모드를 사용자의 선호와 데이터에 대한 관련 사양의 요구 사항에 일치하도록 설정합니다.

    예를 들어, 다른 활성 자막이 없고 이것이 강제 자막 트랙인 경우(오디오 트랙의 주요 언어로 된 자막을 제공하지만 실제로는 다른 언어로 된 오디오에 대해서만 자막을 제공하는 자막 트랙), 이러한 자막이 여기에 활성화될 수 있습니다.

  8. 새로운 텍스트 트랙미디어 요소텍스트 트랙 목록에 추가합니다.

  9. 이벤트addtrack으로 미디어 요소textTracks 속성의 TextTrackList 객체에서 사용하여 발생시킵니다. TrackEvent로, track 속성은 텍스트 트랙TextTrack 객체로 초기화됩니다.

4.8.11.11.3 밴드 외 텍스트 트랙 소싱

track 요소가 생성될 때, 그것은 새로운 텍스트 트랙 (그 값은 아래 정의된 대로 설정됨) 및 해당하는 새로운 TextTrack 객체와 연관되어야 합니다.

텍스트 트랙 종류는 요소의 kind 속성의 상태에 따라 다음 표에서 결정됩니다. 첫 번째 열의 상태에 따라 종류는 두 번째 열에 주어진 문자열이 됩니다:

상태 문자열
Subtitles subtitles
Captions captions
Descriptions descriptions
Chapters metadata chapters
Metadata metadata

텍스트 트랙 라벨은 요소의 트랙 라벨입니다.

텍스트 트랙 언어는 요소의 트랙 언어이며, 없을 경우 빈 문자열로 설정됩니다.

kind, label, 및 srclang 속성이 설정, 변경, 또는 제거될 때마다 텍스트 트랙은 위에서 정의한 대로 업데이트되어야 합니다.

트랙 URL 변경은 아래의 알고리즘에서 처리됩니다.

텍스트 트랙 준비 상태는 처음에는 로드되지 않음으로 설정되며, 텍스트 트랙 모드는 처음에는 비활성화됨으로 설정됩니다.

텍스트 트랙 큐 목록은 처음에는 비어 있으며, 참조된 파일이 구문 분석될 때 동적으로 수정됩니다. 이 목록과 관련된 규칙은 해당 포맷에 적합한 텍스트 트랙 렌더링 업데이트 규칙입니다; WebVTT의 경우, 이는 WebVTT 텍스트 트랙 디스플레이 업데이트 규칙입니다. [WEBVTT]

track 요소의 상위 요소가 변경되고 새로운 상위 요소가 미디어 요소인 경우, 사용자 에이전트는 track 요소의 해당 텍스트 트랙미디어 요소텍스트 트랙 목록에 추가한 후, 미디어 요소 작업을 큐에 추가하여, 이벤트addtrack 이름으로 미디어 요소textTracks 속성의 TextTrackList 객체에서 발생시킵니다. 이때 TrackEvent를 사용하며, track 속성은 텍스트 트랙TextTrack 객체로 초기화됩니다.

track 요소의 상위 요소가 변경되고 이전 상위 요소가 미디어 요소였던 경우, 사용자 에이전트는 track 요소의 해당 텍스트 트랙미디어 요소텍스트 트랙 목록에서 제거한 후, 미디어 요소 작업을 큐에 추가하여, 이벤트removetrack 이름으로 미디어 요소textTracks 속성의 TextTrackList 객체에서 발생시킵니다. 이때 TrackEvent를 사용하며, track 속성은 텍스트 트랙TextTrack 객체로 초기화됩니다.


텍스트 트랙 요소에 해당하는 텍스트 트랙미디어 요소텍스트 트랙 목록에 추가되면, 사용자 에이전트는 미디어 요소 작업을 큐에 추가하여 미디어 요소에 대해 다음 단계를 실행해야 합니다:

  1. 요소의 파서에 의해 차단됨 플래그가 true인 경우, 반환합니다.

  2. 요소의 자동 트랙 선택 수행 플래그가 true인 경우, 반환합니다.

  3. 이 요소에 대해 자동 텍스트 트랙 선택에 대한 사용자 기본 설정 준수를 수행합니다.

사용자 에이전트가 미디어 요소에 대해 자동 텍스트 트랙 선택에 대한 사용자 기본 설정 준수를 수행해야 하는 경우, 사용자 에이전트는 다음 단계를 실행해야 합니다:

  1. 자동 텍스트 트랙 선택자막캡션에 대해 수행합니다.

  2. 자동 텍스트 트랙 선택설명에 대해 수행합니다.

  3. 만약 미디어 요소텍스트 트랙 목록텍스트 트랙이 있고, 그 텍스트 트랙 종류 또는 메타데이터에 해당하는 트랙 요소와 연결된 경우, 기본값 속성이 설정되어 있으며 텍스트 트랙 모드비활성화됨으로 설정된 모든 트랙의 텍스트 트랙 모드숨김으로 설정합니다.

  4. 요소의 자동 트랙 선택 수행 플래그를 true로 설정합니다.

위의 단계에서 한 가지 이상의 텍스트 트랙 종류에 대해 자동 텍스트 트랙 선택 수행을 지시하는 경우, 다음 단계를 실행해야 합니다:

  1. candidates미디어 요소텍스트 트랙 목록에 있는 텍스트 트랙으로 구성된 목록이며, 해당 목록의 텍스트 트랙 종류는 알고리즘에 전달된 종류 중 하나로 설정되어야 합니다. (해당 목록의 순서는 텍스트 트랙 목록에 주어진 순서대로 설정됩니다.)

  2. candidates가 비어 있는 경우, 반환합니다.

  3. candidates에 있는 텍스트 트랙 중 하나라도 텍스트 트랙 모드표시됨으로 설정된 경우, 반환합니다.

  4. 사용자가 candidates에서 텍스트 트랙 종류, 텍스트 트랙 언어, 또는 텍스트 트랙 라벨에 기반하여 트랙을 활성화하려는 의사를 표시한 경우, 해당 트랙의 텍스트 트랙 모드표시됨으로 설정합니다.

    예를 들어, 사용자가 "가능할 때마다 프랑스어 자막을 원합니다" 또는 "제목에 '해설'이 포함된 자막 트랙이 있으면 활성화하십시오", 또는 "오디오 설명 트랙이 있으면 하나를 활성화하십시오, 가능하면 스위스 독일어로, 그렇지 않으면 표준 스위스 독일어나 표준 독일어로"와 같은 브라우저 기본 설정을 설정했을 수 있습니다.

    그렇지 않은 경우, candidates트랙 요소와 연결된 텍스트 트랙이 있는 경우, 그 기본값 속성이 설정되어 있고 텍스트 트랙 모드비활성화됨으로 설정된 첫 번째 트랙의 텍스트 트랙 모드표시됨으로 설정합니다.

텍스트 트랙 요소에 해당하는 텍스트 트랙이 다음 상황 중 하나를 겪을 때, 사용자 에이전트는 해당 텍스트 트랙트랙 요소에 대해 트랙 처리 모델을 시작해야 합니다:

사용자 에이전트가 텍스트 트랙과 그 트랙 요소에 대해 트랙 처리 모델을 시작해야 할 때, 다음 알고리즘을 실행해야 합니다. 이 알고리즘은 이벤트 루프 메커니즘과 밀접하게 연관되어 있으며, 특히 동기 섹션이 포함됩니다. (이 섹션은 이벤트 루프 알고리즘의 일부로 트리거됩니다.) 이 섹션의 단계는 ⌛로 표시됩니다.

  1. 이 알고리즘의 다른 인스턴스가 이미 이 텍스트 트랙과 그 트랙 요소에 대해 실행 중인 경우, 반환하고 해당 알고리즘이 이 요소를 처리하도록 합니다.

  2. 만약 텍스트 트랙텍스트 트랙 모드숨김 또는 표시됨으로 설정되지 않은 경우, 반환합니다.

  3. 만약 텍스트 트랙트랙 요소가 부모로 미디어 요소를 가지고 있지 않은 경우, 반환합니다.

  4. 나머지 단계를 병렬로 실행하여, 이러한 단계를 실행하게 만든 원인이 계속될 수 있도록 합니다.

  5. Top: 안정적인 상태를 기다립니다. 동기 섹션은 다음 단계로 구성됩니다. (이 섹션의 단계는 ⌛로 표시됩니다.)

  6. 텍스트 트랙 준비 상태로드 중으로 설정합니다.

  7. URL트랙 URL로 설정합니다.

  8. ⌛ 만약 트랙 요소의 부모가 미디어 요소인 경우, corsAttributeState를 부모 미디어 요소crossorigin 콘텐츠 속성의 상태로 설정합니다. 그렇지 않은 경우, corsAttributeState아무 CORS도 없음으로 설정합니다.

  9. 동기 섹션을 종료하고, 나머지 단계를 병렬로 계속합니다.

  10. URL이 빈 문자열이 아닌 경우:

    1. URL, "track", 및 corsAttributeState를 주어진 값으로 하여 잠재적인 CORS 요청을 생성하고, same-origin fallback flag를 설정합니다.

    2. request클라이언트트랙 요소의 노드 문서관련 설정 객체로 설정합니다.

    3. request시작자 유형을 "track"로 설정합니다.

    4. Fetch request.

    데이터가 페치되면서 처리하도록 작업큐에 추가한 후, 리소스 유형을 결정해야 합니다. 만약 리소스 유형이 지원되지 않는 텍스트 트랙 형식이라면 로드는 실패할 것이며, 이는 아래에 설명된 대로입니다. 그렇지 않으면 리소스 데이터는 WebVTT 파서와 같은 적절한 파서로 전달되어야 하며, 이 데이터는 수신된 대로 텍스트 트랙 큐 목록을 사용하여 파싱됩니다. [WEBVTT]

    적절한 파서는 이러한 네트워킹 작업 소스에서 작업이 실행될 때마다 수신된 데이터로 텍스트 트랙 큐 목록을 점진적으로 업데이트합니다.

    이 명세는 현재 텍스트 트랙의 MIME 유형을 확인하는 방법이나 실제 파일 데이터를 사용하여 파일 형식 감지(sniffing)를 수행하는 방법에 대해 명시하지 않습니다. 구현자들은 이 문제에 대해 서로 다른 의도를 가지고 있으며, 따라서 올바른 해결책이 무엇인지 불분명합니다. 이와 관련한 요구 사항이 없는 경우, HTTP 명세서의 엄격한 요구 사항이 우선됩니다("Content-Type은 기본 데이터의 미디어 유형을 지정합니다."... "미디어 유형이 Content-Type 필드에 의해 주어지지 않은 경우에만, 수신자는 리소스의 내용 및/또는 리소스를 식별하는 데 사용된 URI의 이름 확장자 등을 검사하여 미디어 유형을 추측할 수 있습니다.").

    만약 어떤 이유로든 페치가 실패하면(네트워크 오류, 서버에서 오류 코드 반환, CORS 실패 등), 또는 URL이 빈 문자열인 경우, 요소 작업을 큐에 추가하여 DOM 조작 작업 소스미디어 요소를 주어, 먼저 텍스트 트랙 준비 상태로드 실패로 변경한 다음 이벤트를 발생시킵니다.

    만약 페치가 실패하지 않고, 파일이 성공적으로 처리되었다면, 마지막 작업요소 작업을 큐에 추가하고, 네트워킹 작업 소스에서 데이터를 파싱한 후, 텍스트 트랙 준비 상태로드 완료로 변경하고 이벤트를 발생시킵니다.

    페치가 진행 중일 때 다음 중 하나가 발생하면:

    ...사용자 에이전트는 페칭을 중단하고, 해당 알고리즘에서 생성된 모든 대기 중인 작업을 취소하며(특히 URL이 변경된 순간 이후에 텍스트 트랙 큐 목록에 추가된 큐는 제외), 요소 작업을 큐에 추가하여 DOM 조작 작업 소스트랙 요소를 주고, 먼저 텍스트 트랙 준비 상태로드 실패로 변경한 후 이벤트를 발생시킵니다.

  11. 텍스트 트랙 준비 상태가 더 이상 로드 중으로 설정되지 않을 때까지 기다립니다.

  12. 트랙 URL이 더 이상 URL과 같지 않게 되고, 동시에 텍스트 트랙 모드숨김 또는 표시됨으로 설정될 때까지 기다립니다.

  13. top으로 이동합니다.

언제든지 트랙 요소가 src 속성을 설정, 변경, 또는 제거하면, 사용자 에이전트는 즉시 해당 요소의 텍스트 트랙텍스트 트랙 큐 목록을 비워야 합니다. (이 또한 위 알고리즘이 이전에 제공된 URL을 사용하여 얻어진 리소스에서 큐를 추가하는 것을 중지시킵니다.)

4.8.11.11.4 다양한 형식에서 큐를 텍스트 트랙 큐로 노출하기 위한 가이드라인

HTML 사용자 에이전트에 의해 처리되기 위해 특정 형식의 텍스트 트랙 큐가 어떻게 해석되어야 하는지는 해당 형식에 의해 정의됩니다. 이러한 사양이 없는 경우, 이 섹션은 구현이 일관되게 이러한 형식을 노출하려고 시도할 수 있는 제약을 제공합니다.

HTML의 텍스트 트랙 모델을 지원하기 위해, 각 타이밍 데이터 단위는 텍스트 트랙 큐로 변환됩니다. 해당 형식의 기능과 이 사양에 정의된 텍스트 트랙 큐의 각 측면 간의 매핑이 정의되지 않은 경우, 구현은 이러한 매핑이 앞서 정의된 텍스트 트랙 큐의 측면 정의와 일치하도록 해야 하며, 다음 제약 조건과도 일치하도록 해야 합니다:

텍스트 트랙 큐 식별자

해당 형식에 명확한 큐별 식별자가 없는 경우, 이를 빈 문자열로 설정해야 합니다.

텍스트 트랙 큐 종료 시 일시정지 플래그

False로 설정해야 합니다.

4.8.11.11.5 텍스트 트랙 API

TextTrackList

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
[Exposed=Window]
interface TextTrackList : EventTarget {
  readonly attribute unsigned long length;
  getter TextTrack (unsigned long index);
  TextTrack? getTrackById(DOMString id);

  attribute EventHandler onchange;
  attribute EventHandler onaddtrack;
  attribute EventHandler onremovetrack;
};
media.textTracks.length

HTMLMediaElement/textTracks

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet1.0+Opera Android12.1+

미디어 요소에 연결된 텍스트 트랙의 수를 반환합니다. (예: track 요소에서). 이는 텍스트 트랙의 수입니다. 미디어 요소텍스트 트랙 목록.

media.textTracks[ n ]

n번째 텍스트 트랙을 나타내는 TextTrack 객체를 반환합니다. 미디어 요소텍스트 트랙 목록.

textTrack = media.textTracks.getTrackById(id)

TextTrackList/getTrackById

모든 최신 엔진에서 지원.

Firefox31+Safari8+Chrome33+
Opera?Edge79+
Edge (Legacy)18Internet Explorer지원하지 않음
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

지정된 식별자를 가진 TextTrack 객체를 반환하거나, 해당 식별자를 가진 트랙이 없으면 null을 반환합니다.

TextTrackList 객체는 주어진 순서에 따라 텍스트 트랙의 동적으로 업데이트되는 목록을 나타냅니다.

textTracks 속성은 미디어 요소TextTrackList 객체를 반환해야 합니다. TextTrack 객체를 텍스트 트랙에 대해, 미디어 요소텍스트 트랙 목록에서 반환합니다. 이는 텍스트 트랙 목록의 동일한 순서로 반환됩니다.

TextTrackList/length

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

length 속성은 TextTrackList 객체가 나타내는 목록에 있는 텍스트 트랙의 수를 반환해야 합니다.

지원되는 속성 인덱스TextTrackList 객체의 현재 순간에 0부터 텍스트 트랙 수까지의 숫자입니다. 목록에 텍스트 트랙이 없으면 지원되는 속성 인덱스는 없습니다.

인덱스 속성의 값을 결정하려면 주어진 인덱스 index에 대해 TextTrackList 객체가 나타내는 목록의 index번째 텍스트 트랙을 반환해야 합니다.

getTrackById(id) 메서드는 TextTrackTextTrackList 객체에서 첫 번째 id IDL 속성이 인자 id와 같은 값을 반환하는 트랙을 반환해야 합니다. 일치하는 트랙이 없을 경우 메서드는 null을 반환해야 합니다.


TextTrack

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android31+Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
enum TextTrackMode { "disabled",  "hidden",  "showing" };
enum TextTrackKind { "subtitles",  "captions",  "descriptions",  "chapters",  "metadata" };

[Exposed=Window]
interface TextTrack : EventTarget {
readonly attribute TextTrackKind kind;
readonly attribute DOMString label;
readonly attribute DOMString language;

readonly attribute DOMString id;
readonly attribute DOMString inBandMetadataTrackDispatchType;

attribute TextTrackMode mode;

readonly attribute TextTrackCueList? cues;
readonly attribute TextTrackCueList? activeCues;

undefined addCue(TextTrackCue cue);
undefined removeCue(TextTrackCue cue);

attribute EventHandler oncuechange;
};
textTrack = media.addTextTrack(kind [, label [, language ] ])

새로운 TextTrack 객체를 생성하고 반환하며, 이 객체는 또한 미디어 요소텍스트 트랙 목록에 추가됩니다.

textTrack.kind

TextTrack/kind

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

텍스트 트랙의 종류 문자열을 반환합니다.

textTrack.label

TextTrack/label

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

텍스트 트랙 라벨을 반환합니다(있는 경우). 그렇지 않으면 빈 문자열을 반환합니다. (이는 객체가 사용자에게 노출될 경우 다른 속성에서 맞춤 라벨을 생성해야 함을 나타냅니다.)

textTrack.language

TextTrack/language

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

텍스트 트랙 언어 문자열을 반환합니다.

textTrack.id

TextTrack/id

모든 최신 엔진에서 지원.

Firefox31+Safari8+Chrome33+
Opera?Edge79+
Edge (Legacy)18Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

주어진 트랙의 ID를 반환합니다.

인밴드 트랙의 경우, 형식이 미디어 프래그먼트 구문을 지원하는 경우, 해당 ID는 프래그먼트와 함께 사용할 수 있습니다. 이 값은 getTrackById() 메서드와 함께 사용할 수 있습니다.

TextTrack 객체에 해당하는 track 요소의 경우, 이는 track 요소의 ID입니다.

textTrack.inBandMetadataTrackDispatchType

TextTrack/inBandMetadataTrackDispatchType

Firefox31+Safari8+ChromeNo
Opera?EdgeNo
Edge (Legacy)NoInternet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

텍스트 트랙 인밴드 메타데이터 트랙 디스패치 유형 문자열을 반환합니다.

textTrack.mode [ = value ]

TextTrack/mode

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android31+Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

텍스트 트랙 모드 문자열을 반환합니다. 다음 목록에서:

"disabled"

텍스트 트랙 비활성화 모드.

"hidden"

텍스트 트랙 숨김 모드.

"showing"

텍스트 트랙 표시 모드.

모드를 변경하기 위해 설정할 수 있습니다.

textTrack.cues

TextTrack/cues

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android31+Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

텍스트 트랙 큐 목록TextTrackCueList 객체로 반환합니다.

textTrack.activeCues

TextTrack/activeCues

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android31+Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

텍스트 트랙 큐 중 현재 활성화된 큐를 텍스트 트랙 큐 목록에서 TextTrackCueList 객체로 반환합니다. (즉, 현재 재생 위치 전후에 시작하고 끝나는 큐).

textTrack.addCue(cue)

TextTrack/addCue

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

주어진 큐를 textTrack텍스트 트랙 큐 목록에 추가합니다.

textTrack.removeCue(cue)

TextTrack/removeCue

모든 최신 엔진에서 지원.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

주어진 큐를 textTrack텍스트 트랙 큐 목록에서 제거합니다.

addTextTrack(kind, label, language) 메서드를 미디어 요소에서 호출하면 다음 단계를 수행해야 합니다:

  1. 새로운 TextTrack 객체를 생성합니다.

  2. 텍스트 트랙을 생성하고, 그 객체에 해당하는 트랙의 텍스트 트랙 종류kind로 설정합니다. 텍스트 트랙 라벨label로, 텍스트 트랙 언어language로 설정하고, 텍스트 트랙 준비 상태텍스트 트랙 로드됨 상태로, 텍스트 트랙 모드텍스트 트랙 숨김 모드로, 그리고 텍스트 트랙 큐 목록을 빈 목록으로 설정합니다.

    초기에는 텍스트 트랙 큐 목록텍스트 트랙 렌더링 업데이트 규칙과 연결되지 않습니다. 텍스트 트랙 큐가 추가되면, 텍스트 트랙 큐 목록에 규칙이 영구적으로 설정됩니다.

  3. 텍스트 트랙미디어 요소텍스트 트랙 목록에 추가합니다.

  4. 미디어 요소 작업 큐미디어 요소에서 주어졌을 때, 이벤트를 발생시키는 작업을 수행합니다. 이 이벤트는 addtrack이라는 이름의 이벤트로, 미디어 요소textTracks 속성의 TextTrackList 객체에서 발생하며, TrackEvent를 사용하여, track 속성이 새 텍스트 트랙TextTrack 객체로 초기화됩니다.

  5. TextTrack 객체를 반환합니다.


kind 속성은 텍스트 트랙 종류를 반환해야 하며, 이는 TextTrack 객체가 나타내는 텍스트 트랙에 해당합니다.

label 속성은 텍스트 트랙 레이블을 반환해야 하며, 이는 TextTrack 객체가 나타내는 텍스트 트랙에 해당합니다.

language 속성은 텍스트 트랙 언어를 반환해야 하며, 이는 TextTrack 객체가 나타내는 텍스트 트랙에 해당합니다.

id 속성은 트랙의 식별자를 반환합니다. 만약 식별자가 없다면 빈 문자열을 반환합니다. track 요소에 해당하는 트랙의 경우, 트랙의 식별자는 해당 요소의 id 속성 값입니다. 인밴드 트랙의 경우, 트랙의 식별자는 미디어 리소스에 의해 지정됩니다. 만약 미디어 리소스가 미디어 프래그먼트 구문을 지원하는 형식이라면, 특정 트랙에 대해 반환되는 식별자는 해당 트랙을 활성화하는 데 사용될 수 있는 동일한 식별자여야 합니다.

inBandMetadataTrackDispatchType 속성은 인밴드 메타데이터 트랙 디스패치 타입을 반환해야 하며, 이는 TextTrack 객체가 나타내는 텍스트 트랙에 해당합니다.

mode 속성은 텍스트 트랙 모드에 해당하는 문자열을 반환해야 하며, 이는 TextTrack 객체가 나타내는 텍스트 트랙에 정의된 목록에 따라 반환됩니다:

"disabled"
텍스트 트랙 비활성화 모드입니다.
"hidden"
텍스트 트랙 숨김 모드입니다.
"showing"
텍스트 트랙 표시 모드입니다.

설정 시, 새로운 값이 현재 속성이 반환하는 값과 다르다면, 새로운 값은 다음과 같이 처리되어야 합니다:

새로운 값이 "disabled"인 경우
텍스트 트랙TextTrack 객체에 해당하는 텍스트 트랙 모드비활성화 모드로 설정합니다.
새로운 값이 "hidden"인 경우
텍스트 트랙TextTrack 객체에 해당하는 텍스트 트랙 모드숨김 모드로 설정합니다.
새로운 값이 "showing"인 경우
텍스트 트랙TextTrack 객체에 해당하는 텍스트 트랙 모드표시 모드로 설정합니다.

만약 TextTrack 객체가 나타내는 텍스트 트랙텍스트 트랙 모드비활성화 모드가 아닌 경우, cues 속성은 TextTrackCueList 객체를 반환해야 하며, 이는 해당 TextTrack 객체가 나타내는 텍스트 트랙의 특정 종료 시간 이후에 발생하는 자막을 포함하는 목록을 나타냅니다. 그렇지 않으면 null을 반환해야 합니다. 각 TextTrack 객체에 대해 객체가 반환될 때마다 동일한 TextTrackCueList 객체가 반환되어야 합니다.

스크립트가 시작된 시점의 가능한 가장 이른 위치는 마지막으로 이벤트 루프가 1단계에 도달했을 때의 가능한 가장 이른 위치입니다.

만약 TextTrack 객체가 나타내는 텍스트 트랙텍스트 트랙 모드비활성화 모드가 아닌 경우, activeCues 속성은 TextTrackCueList 객체를 반환해야 하며, 이는 해당 TextTrack 객체가 나타내는 텍스트 트랙의 현재 활성화된 자막 목록을 나타냅니다. 그렇지 않으면 null을 반환해야 합니다. 각 TextTrack 객체에 대해 객체가 반환될 때마다 동일한 TextTrackCueList 객체가 반환되어야 합니다.

텍스트 트랙 자막활성 플래그가 스크립트가 시작된 시점에 설정된 경우는 마지막으로 이벤트 루프1단계에 도달했을 때 텍스트 트랙 자막 활성 플래그가 설정된 경우입니다.


TextTrack 객체의 addCue(cue) 메서드는 다음 단계를 실행해야 합니다:

  1. 만약 텍스트 트랙 자막 목록이 아직 텍스트 트랙 렌더링 업데이트 규칙과 연결되지 않았다면, cue에 적합한 규칙과 연결합니다.

  2. 만약 텍스트 트랙 자막 목록과 연결된 규칙이 cue에 적합한 규칙과 다르다면, InvalidStateError DOMException을 발생시킵니다.

  3. 주어진 cue가 이미 텍스트 트랙 자막 목록에 있는 경우, 해당 목록에서 cue를 제거합니다.

  4. cueTextTrack 객체의 텍스트 트랙에 추가합니다.

TextTrack 객체의 removeCue(cue) 메서드는 다음 단계를 실행해야 합니다:

  1. 주어진 cueTextTrack 객체의 텍스트 트랙텍스트 트랙 자막 목록에 없는 경우, NotFoundError DOMException을 발생시킵니다.

  2. cueTextTrack 객체의 텍스트 트랙텍스트 트랙 자막 목록에서 제거합니다.

이 예제에서는 audio 요소를 사용하여 여러 사운드 효과가 포함된 사운드 파일에서 특정 사운드 효과를 재생합니다. 스크립트를 실행 중인 브라우저에서 클립이 끝나는 시점에 오디오가 정확하게 일시 정지되도록 하기 위해 자막을 사용합니다. 페이지가 스크립트에 의존하여 오디오를 일시 정지시켰다면, 브라우저가 정확한 시간에 스크립트를 실행하지 못했을 경우 다음 클립의 시작 부분이 들릴 수 있습니다.

var sfx = new Audio('sfx.wav'); 
var sounds = sfx.addTextTrack('metadata');

// 관심 있는 사운드를 추가합니다.
function addFX(start, end, name) { 
  var cue = new VTTCue(start, end, ''); 
  cue.id = name; 
  cue.pauseOnExit = true; 
  sounds.addCue(cue); 
} 
addFX(12.783, 13.612, 'dog bark'); 
addFX(13.612, 15.091, 'kitten mew');

function playSound(id) { 
  sfx.currentTime = sounds.getCueById(id).startTime; 
  sfx.play(); 
}

// 가능한 빨리 짖는 소리를 재생합니다.
sfx.oncanplaythrough = function () { 
  playSound('dog bark'); 
} 
// 사용자가 떠나려 할 때 고양이 울음 소리를 재생하고, 브라우저가 그들에게 머물도록 요청하게 합니다.
window.onbeforeunload = function (e) { 
  playSound('kitten mew'); 
  e.preventDefault(); 
}

TextTrackCueList

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
[Exposed=Window]
interface TextTrackCueList {
  readonly attribute unsigned long length;
  getter TextTrackCue (unsigned long index);
  TextTrackCue? getCueById(DOMString id);
};
cuelist.length

목록의 수를 반환합니다.

cuelist[index]

목록의 index에 있는 텍스트 트랙 큐를 반환합니다. 큐는 텍스트 트랙 큐 순서로 정렬되어 있습니다.

cuelist.getCueById(id)

id로 식별되는 첫 번째 텍스트 트랙 큐텍스트 트랙 큐 순서에서 반환합니다.

주어진 식별자가 없거나 인수가 빈 문자열일 경우 null을 반환합니다.

TextTrackCueList 객체는 주어진 순서대로 텍스트 트랙 큐의 동적으로 업데이트되는 목록을 나타냅니다.

TextTrackCueList/length

모든 현재 엔진에서 지원됨.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

length 속성은 TextTrackCueList 객체가 나타내는 목록에 포함된 의 개수를 반환해야 합니다.

지원되는 프로퍼티 인덱스TextTrackCueList 객체의 특정 시점에서, TextTrackCueList 객체가 나타내는 목록에 포함된 의 개수에서 1을 뺀 0부터 해당 숫자까지입니다(큐가 있을 경우). 목록에 가 없으면, 지원되는 프로퍼티 인덱스는 없습니다.

주어진 인덱스 index에 대해 인덱스 프로퍼티의 값을 결정할 때, 사용자 에이전트는 TextTrackCueList 객체가 나타내는 목록에서 index번째 텍스트 트랙 큐를 반환해야 합니다.

TextTrackCueList/getCueById

모든 현재 엔진에서 지원됨.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS? Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

getCueById(id) 메서드는 빈 문자열이 아닌 인수를 사용하여 호출될 때, TextTrackCueList 객체로 표현된 목록에서 id와 동일한 텍스트 트랙 큐 중 첫 번째를 반환해야 합니다(있는 경우). 그렇지 않으면 null을 반환해야 합니다. 인수가 빈 문자열인 경우, 메서드는 null을 반환해야 합니다.


TextTrackCue

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
[Exposed=Window]
interface TextTrackCue : EventTarget {
  readonly attribute TextTrack? track;

  attribute DOMString id;
  attribute double startTime;
  attribute unrestricted double endTime;
  attribute boolean pauseOnExit;

  attribute EventHandler onenter;
  attribute EventHandler onexit;
};
cue.track

텍스트 트랙 큐가 속한 TextTrack 객체를 반환하며, 그렇지 않으면 null을 반환합니다.

cue.id [ = value ]

텍스트 트랙 큐 식별자를 반환합니다.

설정할 수 있습니다.

cue.startTime [ = value ]

초 단위로 텍스트 트랙 큐 시작 시간을 반환합니다.

설정할 수 있습니다.

cue.endTime [ = value ]

초 단위로 텍스트 트랙 큐 종료 시간을 반환합니다.

설정할 수 있습니다.

cue.pauseOnExit [ = value ]

텍스트 트랙 큐의 종료 시간에 도달했을 때 미디어 재생이 일시 중지되어야 하는지 여부를 나타내는 플래그를 반환합니다.

설정할 수 있습니다.

TextTrackCue/track

모든 현재 엔진에서 지원됩니다.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS7+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

track 속성은 가져올 때 TextTrack 객체를 반환해야 합니다. 이 객체는 텍스트 트랙 중에서 큐 목록에 속한 텍스트 트랙 큐를 나타내는 TextTrackCue 객체를 나타냅니다. 해당하는 것이 없으면 null을 반환합니다.

TextTrackCue/id

모든 현재 엔진에서 지원됩니다.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS7+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

id 속성은 가져올 때 텍스트 트랙 큐 식별자를 반환해야 합니다. 이는 텍스트 트랙 큐를 나타내며, TextTrackCue 객체에 의해 나타내어집니다. 설정할 때, 텍스트 트랙 큐 식별자는 새로운 값으로 설정되어야 합니다.

TextTrackCue/startTime

모든 현재 엔진에서 지원됩니다.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS7+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

startTime 속성은 가져올 때 텍스트 트랙 큐 시작 시간을 반환해야 합니다. 이는 텍스트 트랙 큐를 나타내며, TextTrackCue 객체에 의해 나타내어집니다. 설정할 때, 텍스트 트랙 큐 시작 시간은 새로운 값으로 설정되어야 하며, 이는 초 단위로 해석됩니다. 그런 다음, TextTrackCue 객체의 텍스트 트랙 큐텍스트 트랙큐 목록에 있고, 그 트랙이 미디어 요소텍스트 트랙 목록에 있으며, 미디어 요소포스터 표시 플래그가 설정되어 있지 않은 경우, 해당 미디어 요소에 대한 시간은 흐릅니다 단계를 실행합니다.

TextTrackCue/endTime

모든 현재 엔진에서 지원됩니다.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS7+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

endTime 속성은 가져올 때 텍스트 트랙 큐 종료 시간을 반환해야 합니다. 이는 텍스트 트랙 큐를 나타내며, TextTrackCue 객체에 의해 나타내어집니다. 설정할 때, 만약 새 값이 음의 무한대이거나 NaN(숫자가 아님) 값이면, TypeError 예외를 던집니다. 그렇지 않으면, 텍스트 트랙 큐 종료 시간은 새 값으로 설정됩니다. 그런 다음, TextTrackCue 객체의 텍스트 트랙 큐텍스트 트랙큐 목록에 있고, 그 트랙이 미디어 요소텍스트 트랙 목록에 있으며, 미디어 요소포스터 표시 플래그가 설정되어 있지 않은 경우, 해당 미디어 요소에 대한 시간은 흐릅니다 단계를 실행합니다.

TextTrackCue/pauseOnExit

모든 현재 엔진에서 지원됩니다.

Firefox31+ Safari6+ Chrome23+
Opera12.1+ Edge79+
Edge (Legacy)12+ Internet Explorer10+
Firefox Android? Safari iOS7+ Chrome Android? WebView Android? Samsung Internet? Opera Android12.1+

pauseOnExit 속성은 가져올 때 true를 반환해야 합니다. 이는 텍스트 트랙 큐 종료 시 중지 플래그가 설정되어 있는 경우입니다. 그렇지 않은 경우에는 false를 반환해야 합니다. 설정할 때, 새 값이 true이면 텍스트 트랙 큐 종료 시 중지 플래그를 설정하고, 그렇지 않으면 플래그를 해제해야 합니다.

4.8.11.11.6 텍스트 트랙 API 객체의 이벤트 핸들러

다음은 모든 TextTrackList 인터페이스를 구현하는 객체에서 이벤트 핸들러 IDL 속성으로 지원되어야 하는 이벤트 핸들러와 이에 대응하는 이벤트 핸들러 이벤트 유형입니다:

이벤트 핸들러 이벤트 핸들러 이벤트 유형
onchange change
onaddtrack addtrack
onremovetrack removetrack

다음은 모든 TextTrack 인터페이스를 구현하는 객체에서 이벤트 핸들러 IDL 속성으로 지원되어야 하는 이벤트 핸들러와 이에 대응하는 이벤트 핸들러 이벤트 유형입니다:

이벤트 핸들러 이벤트 핸들러 이벤트 유형
oncuechange

TextTrack/cuechange_event

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
cuechange

다음은 모든 TextTrackCue 인터페이스를 구현하는 객체에서 이벤트 핸들러 IDL 속성으로 지원되어야 하는 이벤트 핸들러와 이에 대응하는 이벤트 핸들러 이벤트 유형입니다:

이벤트 핸들러 이벤트 핸들러 이벤트 유형
onenter

TextTrackCue/enter_event

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
enter
onexit

TextTrackCue/exit_event

모든 현재 엔진에서 지원됩니다.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
exit
4.8.11.11.7 메타데이터 텍스트 트랙에 대한 모범 사례

이 섹션은 비규범적입니다.

텍스트 트랙은 미디어 데이터와 관련된 데이터를 저장하는 데 사용될 수 있으며, 상호작용 또는 증강된 뷰를 위한 정보를 제공할 수 있습니다.

예를 들어, 스포츠 방송을 보여주는 페이지에는 현재 점수에 대한 정보가 포함될 수 있습니다. 로봇 대회가 실시간으로 스트리밍되고 있다고 가정해봅시다. 이미지 위에 점수가 다음과 같이 오버레이될 수 있습니다:

사용자가 비디오의 임의의 지점으로 탐색할 때 점수 표시가 올바르게 렌더링되도록 하려면 메타데이터 텍스트 트랙 큐의 길이가 점수에 적합하도록 설정되어야 합니다. 예를 들어, 위의 프레임에서는 매치 번호를 표시하는 큐는 경기 시간 동안 지속되고, 블루 얼라이언스의 점수가 변경될 때까지 지속되는 큐가 하나 있으며, 레드 얼라이언스의 점수가 변경될 때까지 지속되는 큐가 하나 있을 수 있습니다. 비디오가 라이브 이벤트의 스트림일 경우, 오른쪽 하단의 시간은 아마도 큐를 기반으로 하지 않고 현재 비디오 시간에서 자동으로 유도될 것입니다. 그러나 비디오가 하이라이트만을 포함하는 경우, 이러한 정보도 큐에 포함될 수 있습니다.

다음은 이와 같은 내용이 WebVTT 파일에서 어떻게 나타날 수 있는지 보여줍니다:

WEBVTT

...

05:10:00.000 --> 05:12:15.000
matchtype:qual
matchnumber:37

...

05:11:02.251 --> 05:11:17.198
red:78

05:11:03.672 --> 05:11:54.198
blue:66

05:11:17.198 --> 05:11:25.912
red:80

05:11:25.912 --> 05:11:26.522
red:83

05:11:26.522 --> 05:11:26.982
red:86

05:11:26.982 --> 05:11:27.499
red:89

...

여기서 중요한 점은 관련 이벤트가 적용되는 시간 동안 정보를 제공하는 큐가 설정된다는 것입니다. 만약 점수가 05:11:17.198에 "red+2", 05:11:25.912에 "red+3" 등으로 변경될 때, 0길이(또는 매우 짧은 거의 0길이)의 큐로 설정된다면 문제점이 발생합니다. 주로 탐색을 구현하기가 훨씬 어려워지며, 스크립트가 모든 큐 목록을 순회하여 놓친 알림이 없는지 확인해야 하기 때문입니다. 또한 큐가 짧으면 스크립트가 이를 활성화된 상태로 인식하지 못할 수 있습니다.

이와 같은 방식으로 큐를 사용할 때, 작성자는 현재 주석을 업데이트하기 위해 cuechange 이벤트를 사용하는 것이 좋습니다. 특히, timeupdate 이벤트를 사용하는 것은 적절하지 않을 수 있습니다. 이는 큐가 변경되지 않았을 때에도 작업을 수행해야 하며, 더 중요한 것은 timeupdate 이벤트가 속도 제한을 받기 때문에 메타데이터 큐가 활성화된 시점과 디스플레이가 업데이트되는 시점 사이에 더 높은 지연을 초래할 수 있기 때문입니다.

4.8.11.12 URL을 통해 트랙 종류 식별하기

다른 명세서나 포맷에서 AudioTrack kind 또는 VideoTrack kind IDL 속성의 반환 값을 식별하거나 텍스트 트랙의 종류를 식별하기 위해 URL이 필요한 경우, about:html-kind URL을 사용해야 합니다.

4.8.11.13 사용자 인터페이스

controls 속성은 불리언 속성입니다. 이 속성이 존재할 경우, 저자가 스크립트로 제어할 수 없는 컨트롤러를 제공하지 않았음을 나타내며, 사용자 에이전트가 자체 컨트롤 세트를 제공하기를 원한다는 의미입니다.

이 속성이 존재하거나 스크립트가 비활성화된 경우 미디어 요소에 대해 사용자 에이전트는 사용자에게 사용자 인터페이스를 노출해야 합니다. 이 인터페이스는 재생 시작, 일시 정지, 콘텐츠에서 임의의 위치로 탐색, 볼륨 변경, 닫힌 자막이나 내장된 수화 트랙의 표시 변경, 다른 오디오 트랙 선택 또는 오디오 설명 켜기, 전체 화면 비디오나 독립된 크기 조절 가능한 창 등 사용자에게 더 적합한 방식으로 미디어 콘텐츠를 표시하는 기능을 포함해야 합니다. 또한 다른 컨트롤도 제공될 수 있습니다.

그러나 이 속성이 없더라도 사용자 에이전트는 미디어 리소스 재생에 영향을 미치는 컨트롤(예: 재생, 일시 정지, 탐색, 트랙 선택, 볼륨 조절)을 제공할 수 있습니다. 이러한 기능은 페이지의 정상적인 렌더링을 방해하지 않아야 합니다. 예를 들어, 이러한 기능은 미디어 요소의 컨텍스트 메뉴, 플랫폼 미디어 키 또는 리모컨에 노출될 수 있습니다. 사용자 에이전트는 이 기능을 간단히 사용자에게 사용자 인터페이스를 노출함으로써 구현할 수 있습니다(예를 들어 controls 속성이 존재하는 것처럼).

사용자 에이전트가 사용자 인터페이스를 사용자에게 노출하여 미디어 요소에 대해 컨트롤을 표시하는 경우, 사용자 에이전트가 이 인터페이스와 상호작용할 때 모든 사용자 상호작용 이벤트를 억제해야 합니다. (예를 들어, 사용자가 비디오의 재생 컨트롤을 클릭할 때, mousedown 이벤트 등이 페이지의 다른 요소에서 동시에 발생하지 않아야 합니다.)

가능한 경우(특히 재생 시작, 정지, 일시 정지, 재개, 탐색, 재생 속도 변경, 빠른 감기 또는 되감기, 텍스트 트랙 나열, 활성화 및 비활성화, 음소거 또는 오디오 볼륨 변경) 사용자 에이전트가 노출하는 사용자 인터페이스 기능은 위에서 설명한 DOM API를 통해 구현되어야 하며, 예를 들어 동일한 이벤트가 모두 발생해야 합니다.

빠른 감기나 되감기와 같은 기능은 playbackRate 속성만 변경하여 구현해야 하며, defaultPlaybackRate 속성은 변경하지 않아야 합니다.

탐색은 탐색을 통해 요청된 위치로 미디어 요소미디어 타임라인에서 탐색해야 합니다. 임의의 위치로의 탐색이 느린 미디어 리소스의 경우, 사용자 에이전트는 탐색 막대와 같은 근사 위치 인터페이스를 사용자가 조작할 때 속도를 위한 근사 플래그를 사용하는 것이 좋습니다.


media.volume [ = value ]

HTMLMediaElement/volume

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS🔰 3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

현재 재생 볼륨을 반환합니다. 반환 값은 0.0에서 1.0 범위의 숫자로, 0.0이 가장 조용하고 1.0이 가장 큽니다.

설정할 수 있으며, 볼륨을 변경합니다.

새 값이 0.0에서 1.0 범위 내에 없을 경우, "IndexSizeError" DOMException 예외가 발생합니다.

media.muted [ = value ]

HTMLMediaElement/muted

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

오디오가 음소거된 경우 true를 반환하며, 이는 volume 속성을 무시하게 됩니다. 음소거되지 않은 경우 volume 속성이 반영됩니다.

설정할 수 있으며, 오디오가 음소거된 상태를 변경할 수 있습니다.

미디어 요소는 0.0(무음)에서 1.0(가장 큰 소리) 범위의 비율로 표현되는 재생 볼륨을 가지고 있습니다. 초기 볼륨은 1.0이어야 하지만, 사용자 에이전트는 세션 간 또는 사이트별로 마지막 설정 값을 기억하여 다른 값으로 시작할 수 있습니다.

volume IDL 속성은 재생 볼륨을 반환해야 합니다. 설정 시, 새로운 값이 0.0에서 1.0 범위 내에 있다면 미디어 요소재생 볼륨을 해당 값으로 설정해야 합니다. 새로운 값이 0.0에서 1.0 범위 밖에 있다면, 설정 시 "IndexSizeError" DOMException 예외를 발생시켜야 합니다.

미디어 요소음소거될 수도 있습니다. 어떤 요소가 요소를 음소거하고 있다면, 그 요소는 음소거됩니다. (예를 들어, 재생 방향이 역방향일 때, 해당 요소는 음소거됩니다.)

muted IDL 속성은 마지막으로 설정된 값을 반환해야 합니다. 미디어 요소가 생성될 때, 요소에 muted 콘텐츠 속성이 지정되어 있으면, muted IDL 속성을 true로 설정해야 합니다. 그렇지 않은 경우, 사용자 에이전트는 사용자의 선호도에 따라 값을 설정할 수 있습니다(예: 세션 간 또는 사이트별로 마지막 설정 값을 기억). muted IDL 속성이 true로 설정된 동안 미디어 요소음소거되어야 합니다.

volumemuted IDL 속성이 반환하는 값이 변경될 때마다, 사용자 에이전트는 미디어 요소 작업을 큐에 추가해야 하며, 미디어 요소에서 이벤트를 발생시켜야 합니다. 그런 다음, 미디어 요소재생이 허용되지 않는 경우, 사용자 에이전트는 내부 일시 정지 단계를 수행해야 합니다.

사용자 에이전트는 볼륨 잠금(불리언)을 가지고 있습니다. 이 값은 구현 정의이며, 재생 볼륨이 적용되는지 여부를 결정합니다.

요소의 유효한 미디어 볼륨은 다음과 같이 결정됩니다:

  1. 사용자가 사용자 에이전트가 요소의 볼륨을 재정의하도록 지정한 경우, 사용자가 원하는 볼륨을 반환합니다.

  2. 사용자 에이전트의 볼륨 잠금이 true인 경우, 시스템 볼륨을 반환합니다.

  3. 요소의 오디오 출력이 음소거된 경우, 0을 반환합니다.

  4. volume재생 볼륨으로 설정합니다. 이 값은 미디어 요소의 오디오 부분에서 0.0(무음)에서 1.0(가장 큰 소리) 범위 내에 있습니다.

  5. volume 값을 반환합니다. 이 값은 0.0(무음)에서 1.0(가장 큰 소리) 범위 내에서 해석됩니다. 0.0은 무음이고 1.0은 가장 큰 소리이며, 그 사이의 값은 음량이 증가합니다. 이 범위는 선형일 필요는 없습니다. 가장 큰 소리는 시스템의 가장 큰 가능한 설정보다 낮을 수 있습니다. 예를 들어, 사용자가 최대 볼륨을 설정했을 수 있습니다.

muted 콘텐츠 속성은 미디어 요소에 있으며, 불리언 속성으로 미디어 리소스의 오디오 출력을 기본적으로 음소거할지를 제어하며, 사용자 선호도를 무시할 수 있습니다.

이 속성은 동적 효과가 없습니다(요소의 기본 상태만 제어합니다).

이 비디오(광고)는 자동으로 재생되지만, 사용자에게 불쾌감을 주지 않기 위해 소리를 끄고 재생되며, 사용자가 소리를 켤 수 있습니다. 사용자 에이전트는 사용자가 상호작용하지 않은 상태에서 소리가 켜지면 비디오를 일시 정지할 수 있습니다.

<video src="adverts.cgi?kind=video" controls autoplay loop muted></video>
4.8.11.14 시간 범위

TimeRanges

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari3.1+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

TimeRanges 인터페이스를 구현하는 객체는 시간의 범위(기간) 목록을 나타냅니다.

[Exposed=Window]
interface TimeRanges {
  readonly attribute unsigned long length;
  double start(unsigned long index);
  double end(unsigned long index);
};
media.length

TimeRanges/length

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari3.1+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

객체 내의 범위 수를 반환합니다.

time = media.start(index)

TimeRanges/start

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari3.1+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

지정된 인덱스의 범위 시작 시간을 반환합니다.

인덱스가 범위를 벗어나면 "IndexSizeError" DOMException을 발생시킵니다.

time = media.end(index)

TimeRanges/end

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari3.1+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

지정된 인덱스의 범위 끝 시간을 반환합니다.

인덱스가 범위를 벗어나면 "IndexSizeError" DOMException을 발생시킵니다.

length IDL 속성은 객체가 나타내는 범위의 수를 반환해야 합니다.

start(index) 메서드는 객체가 나타내는 index번째 범위의 시작 위치를 반환해야 합니다. 이 위치는 객체가 포함하는 타임라인의 시작부터 초 단위로 측정됩니다.

end(index) 메서드는 객체가 나타내는 index번째 범위의 끝 위치를 반환해야 합니다. 이 위치는 객체가 포함하는 타임라인의 시작부터 초 단위로 측정됩니다.

이 메서드들은 index 인자가 객체가 나타내는 범위 수보다 크거나 같은 값으로 호출될 경우 "IndexSizeError" DOMException을 발생시켜야 합니다.

TimeRanges 객체가 정규화된 TimeRanges 객체라고 할 때, 그것이 나타내는 범위는 다음 기준을 따라야 합니다:

즉, 이러한 객체 내의 범위는 정렬되어 있으며, 겹치지 않고, 서로 맞닿지 않습니다(인접한 범위는 하나의 더 큰 범위로 통합됩니다). 범위는 비어 있을 수 있습니다(단일 시간 순간만 참조). 예를 들어, 사용자 에이전트가 미디어 요소가 일시 정지된 상태에서 현재 프레임을 제외한 모든 미디어 리소스를 삭제한 경우, 현재 프레임만이 버퍼링된 경우를 나타낼 수 있습니다.

TimeRanges 객체의 범위는 포함적이어야 합니다.

따라서 범위의 끝은 다음 인접 범위(겹치지 않지만 맞닿아 있는)의 시작과 같아야 합니다. 마찬가지로, 타임라인 전체를 포함하는 범위가 0에서 시작되는 경우, 시작은 0이고 끝은 타임라인의 지속 시간과 같아야 합니다.

buffered, seekable, 및 played IDL 속성에 의해 반환되는 객체들이 사용하는 타임라인은 해당 요소의 미디어 타임라인이어야 합니다.

4.8.11.15 TrackEvent 인터페이스

TrackEvent

모든 최신 엔진에서 지원됩니다.

Firefox27+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
[Exposed=Window]
    interface TrackEvent : Event {
      constructor(DOMString type, optional TrackEventInit eventInitDict = {});
    
      readonly attribute (VideoTrack or AudioTrack or TextTrack)? track;
    };
    
    dictionary TrackEventInit : EventInit {
      (VideoTrack or AudioTrack or TextTrack)? track = null;
    };
event.track

TrackEvent/track

모든 최신 엔진에서 지원됩니다.

Firefox27+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

이벤트와 관련된 트랙 객체(TextTrack, AudioTrack, 또는 VideoTrack)를 반환합니다.

track 속성은 초기화된 값을 반환해야 합니다. 이 속성은 이벤트에 대한 컨텍스트 정보를 나타냅니다.

4.8.11.16 이벤트 요약

이 섹션은 규범적이지 않습니다.

다음 이벤트는 위에서 설명한 처리 모델의 일부로서 미디어 요소에서 발생합니다:

이벤트 이름 인터페이스 발생 조건 선행 조건
loadstart

HTMLMediaElement/loadstart_event

모든 최신 엔진에서 지원됩니다.

Firefox6+Safari4+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
이벤트 사용자 에이전트가 미디어 데이터를 찾기 시작할 때, 리소스 선택 알고리즘의 일부로. networkState 값이 NETWORK_LOADING일 때
progress

HTMLMediaElement/progress_event

모든 최신 엔진에서 지원됩니다.

Firefox6+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
이벤트 사용자 에이전트가 미디어 데이터를 가져오고 있을 때. networkState 값이 NETWORK_LOADING일 때
suspend

HTMLMediaElement/suspend_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 사용자 에이전트가 의도적으로 현재 미디어 데이터를 가져오지 않고 있을 때. networkState 값이 NETWORK_IDLE일 때
abort

HTMLMediaElement/abort_event

모든 최신 엔진에서 지원됩니다.

Firefox9+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
이벤트 사용자 에이전트가 미디어 데이터를 완전히 다운로드하지 않고 중단할 때, 그러나 오류로 인한 것은 아닙니다. error는 코드가 MEDIA_ERR_ABORTED인 객체입니다. networkState 값은 NETWORK_EMPTYNETWORK_IDLE 중 하나입니다, 다운로드가 중단된 시점에 따라 다릅니다.
error

HTMLMediaElement/error_event

모든 최신 엔진에서 지원됩니다.

Firefox6+Safari3.1+Chrome3+
Opera11.6+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android?Samsung Internet?Opera Android12+
이벤트 미디어 데이터를 가져오는 중에 오류가 발생하거나 리소스의 형식이 지원되지 않는 미디어 형식일 때. error는 코드가 MEDIA_ERR_NETWORK 이상인 객체입니다. networkState 값은 NETWORK_EMPTYNETWORK_IDLE 중 하나입니다, 다운로드가 중단된 시점에 따라 다릅니다.
emptied

HTMLMediaElement/emptied_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 이전에 NETWORK_EMPTY 상태가 아니었던 미디어 요소가 해당 상태로 전환될 때 (로드 중에 치명적인 오류가 발생했거나 리소스 선택 알고리즘이 이미 실행 중일 때 load() 메서드가 호출된 경우). networkState 값은 NETWORK_EMPTY; 모든 IDL 속성은 초기 상태에 있습니다.
stalled

HTMLMediaElement/stalled_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 사용자 에이전트가 미디어 데이터를 가져오려고 시도하지만 데이터가 예상치 않게 제공되지 않을 때. networkState 값이 NETWORK_LOADING일 때
loadedmetadata

HTMLMediaElement/loadedmetadata_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 사용자 에이전트가 미디어 리소스의 지속 시간 및 차원을 결정했고, 텍스트 트랙이 준비된 상태일 때. readyState 값이 처음으로 HAVE_METADATA 이상이 된 경우.
loadeddata

HTMLMediaElement/loadeddata_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 사용자 에이전트가 처음으로 미디어 데이터를 렌더링할 수 있을 때, 현재 재생 위치에서. readyState 값이 처음으로 HAVE_CURRENT_DATA 이상으로 증가했을 때.
canplay

HTMLMediaElement/canplay_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 사용자 에이전트가 미디어 데이터를 재생할 수 있지만, 현재 재생 속도로 콘텐츠를 추가 버퍼링 없이 끝까지 렌더링할 수 없다고 판단될 때. readyState 값이 HAVE_FUTURE_DATA 이상으로 새로 증가했을 때.
canplaythrough

HTMLMediaElement/canplaythrough_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 사용자 에이전트가 현재 재생 속도로 끝까지 렌더링할 수 있을 만큼 충분한 데이터를 로드했다고 판단될 때 콘텐츠를 추가 버퍼링 없이 재생할 수 있습니다. readyState 값이 HAVE_ENOUGH_DATA로 새로 설정되었을 때.
playing

HTMLMediaElement/playing_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 미디어 데이터가 부족하여 일시 중지되거나 지연된 후 재생이 시작될 준비가 되었을 때. readyState 값이 새로 HAVE_FUTURE_DATA 이상이 되며, paused 값이 false인 경우 또는 paused 값이 새로 false가 되었고 readyState 값이 새로 HAVE_FUTURE_DATA 이상이 되었을 때. 이 이벤트가 발생하더라도 요소가 잠재적으로 재생 중이 아닐 수도 있습니다. 예를 들어, 요소가 사용자 상호작용으로 인해 일시 중지된 경우 또는 인밴드 콘텐츠로 인해 일시 중지된 경우에 해당할 수 있습니다.
waiting

HTMLMediaElement/waiting_event

모든 최신 엔진에서 지원됩니다.

Firefox6+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+
이벤트 다음 프레임을 사용할 수 없어서 재생이 중지되었지만, 사용자 에이전트는 그 프레임이 곧 사용 가능할 것으로 예상할 때. readyState 값이 HAVE_CURRENT_DATA 이하이고, paused 값이 false일 때. seeking 값이 true이거나 현재 재생 위치buffered의 범위에 포함되지 않은 경우입니다. paused 값이 false가 아닌 다른 이유로 재생이 중지될 수도 있지만, 이러한 이유는 이 이벤트를 발생시키지 않습니다. (그리고 이러한 상황이 해결되면 별도의 재생 중 이벤트가 발생하지 않습니다): 예를 들어, 재생이 종료되었거나, 재생이 오류로 인해 중지되었거나, 요소가 사용자 상호작용으로 인해 일시 중지되었거나 또는 인밴드 콘텐츠로 인해 일시 중지된 경우에 해당할 수 있습니다.
seeking

HTMLMediaElement/seeking_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 seeking IDL 속성이 true로 변경되고, 사용자 에이전트가 새 위치로 탐색을 시작했을 때.
seeked

HTMLMediaElement/seeked_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 seeking IDL 속성이 false로 변경된 후, 현재 재생 위치가 변경되었을 때.
ended

HTMLMediaElement/ended_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 미디어 리소스의 끝에 도달하여 재생이 중지되었을 때. currentTime 값이 미디어 리소스의 끝에 도달했으며, ended 값이 true일 때.
durationchange

HTMLMediaElement/durationchange_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 duration 속성이 업데이트되었을 때.
timeupdate

HTMLMediaElement/timeupdate_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 현재 재생 위치가 정상적인 재생의 일부로서 또는 불연속적으로 변경되었을 때.
play

HTMLMediaElement/play_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 요소가 더 이상 일시 중지되지 않음. play() 메서드가 반환된 후 또는 autoplay 속성이 재생을 시작하도록 했을 때. paused 속성이 새롭게 false로 설정됨.
pause

HTMLMediaElement/pause_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 요소가 일시 중지됨. pause() 메서드가 반환된 후 발생. paused 속성이 새롭게 true로 설정됨.
ratechange

HTMLMediaElement/ratechange_event

모든 최신 엔진에서 지원됩니다.

Firefox3.5+Safari3.1+Chrome3+
Opera10.5+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android11+
이벤트 defaultPlaybackRate 또는 playbackRate 속성이 업데이트되었을 때.
resize 이벤트 videoWidth 또는 videoHeight 속성 중 하나 이상이 업데이트되었을 때. 미디어 요소비디오 요소일 때, readyStateHAVE_NOTHING이 아닐 때.
volumechange

HTMLMediaElement/volumechange_event

모든 최신 엔진에서 지원됩니다.

Firefox6+Safari3.1+Chrome3+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+
이벤트 volume 속성 또는 muted 속성이 변경되었을 때 발생. 관련 속성의 setter가 반환된 후 발생.

다음 이벤트는 source 요소에서 발생합니다:

이벤트 이름 인터페이스 발생 조건
error Event 미디어 데이터를 가져오는 동안 오류가 발생하거나 리소스 형식이 지원되지 않는 미디어 형식일 때.

다음 이벤트는 AudioTrackList, VideoTrackList, 그리고 TextTrackList 객체에서 발생합니다:

이벤트 이름 인터페이스 발생 조건
change

AudioTrackList/change_event

모든 현재 엔진에서 지원됨.

Firefox🔰 33+Safari7+🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

TextTrackList/change_event

모든 현재 엔진에서 지원됨.

Firefox31+Safari7+Chrome33+
Opera?Edge79+
Edge (Legacy)18Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android4.4+Samsung Internet?Opera Android?

VideoTrackList/change_event

모든 현재 엔진에서 지원됨.

Firefox🔰 33+Safari7+Chrome🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
Event 트랙 목록의 하나 이상의 트랙이 활성화되거나 비활성화될 때.
addtrack

AudioTrackList/addtrack_event

모든 현재 엔진에서 지원됨.

Firefox🔰 33+Safari7+🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

TextTrackList/addtrack_event

모든 현재 엔진에서 지원됨.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

VideoTrackList/addtrack_event

모든 현재 엔진에서 지원됨.

Firefox🔰 33+Safari7+🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
TrackEvent 트랙이 트랙 목록에 추가될 때.
removetrack

AudioTrackList/removetrack_event

모든 현재 엔진에서 지원됨.

Firefox🔰 33+Safari7+🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

TextTrackList/removetrack_event

모든 현재 엔진에서 지원됨.

Firefox31+Safari7+Chrome33+
Opera20+Edge79+
Edge (Legacy)18Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android4.4+Samsung Internet?Opera Android20+

VideoTrackList/removetrack_event

모든 현재 엔진에서 지원됨.

Firefox🔰 33+Safari7+🔰 37+
Opera?Edge🔰 79+
Edge (Legacy)지원 안됨Internet Explorer10+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
TrackEvent 트랙이 트랙 목록에서 제거될 때.

다음 이벤트는 TextTrack 객체와 track 요소에서 발생합니다:

이벤트 이름 인터페이스 발생 조건
cuechange

HTMLTrackElement/cuechange_event

모든 현재 엔진에서 지원됨.

Firefox68+Safari10+Chrome32+
Opera19+Edge79+
Edge (Legacy)14+Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android4.4.3+Samsung Internet?Opera Android19+

TextTrack/cuechange_event

모든 현재 엔진에서 지원됨.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
Event 트랙의 하나 이상의 큐가 활성화되거나 비활성화될 때.

다음 이벤트는 track 요소에서 발생합니다:

이벤트 이름 인터페이스 발생 조건
error Event 트랙 데이터를 가져오는 동안 오류가 발생하거나 리소스 형식이 지원되지 않는 텍스트 트랙 형식일 때.
load Event 트랙 데이터를 가져와 성공적으로 처리했을 때.

다음 이벤트는 TextTrackCue 객체에서 발생합니다:

이벤트 이름 인터페이스 발생 조건
enter

TextTrackCue/enter_event

모든 현재 엔진에서 지원됨.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
Event 큐가 활성화될 때.
exit

TextTrackCue/exit_event

모든 현재 엔진에서 지원됨.

Firefox31+Safari6+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS7+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
Event 큐가 더 이상 활성화되지 않을 때.
4.8.11.17 보안 및 개인정보 보호 고려사항

videoaudio 요소의 주요 보안 및 개인정보 보호 영향은 크로스 오리진 미디어를 임베드할 수 있는 기능에서 비롯됩니다. 위협은 두 가지 방향으로 발생할 수 있습니다: 악성 콘텐츠에서 피해자 페이지로, 또는 악성 페이지에서 피해자 콘텐츠로.


피해자 페이지가 악성 콘텐츠를 임베드할 경우, 콘텐츠가 임베드된 document(Document)와 상호작용하려는 스크립트 코드가 포함될 수 있다는 위협이 있습니다. 이를 방지하기 위해, 사용자 에이전트는 콘텐츠가 임베드된 페이지에 접근하지 못하도록 해야 합니다. DOM 개념을 사용하는 미디어 콘텐츠의 경우, 임베드된 콘텐츠는 독립적인 최상위 탐색 가능 항목(top-level traversable)에 있는 것처럼 취급되어야 합니다.

예를 들어, SVG 애니메이션이 video 요소에 임베드된 경우, 사용자 에이전트는 해당 애니메이션이 외부 페이지의 DOM에 접근하지 못하도록 합니다. SVG 리소스 내의 스크립트 관점에서 보면, SVG 파일은 부모가 없는 단독 최상위 탐색 가능 항목에 있는 것처럼 보일 것입니다.


악성 페이지가 피해자 콘텐츠를 임베드할 경우, 임베드된 페이지는 원래 접근할 수 없었던 콘텐츠의 정보를 얻을 수 있다는 위협이 존재합니다. API는 미디어의 존재 여부, 유형, 길이, 크기 및 호스트의 성능 특성 등의 정보를 노출합니다. 이러한 정보는 이미 잠재적으로 문제가 될 수 있지만, 실제로는 img 요소를 사용하여 거의 동일한 정보를 얻을 수 있기 때문에 수용 가능한 것으로 간주되었습니다.

그러나, 사용자 에이전트가 콘텐츠 내의 메타데이터(예: 자막)를 추가로 노출하면 훨씬 더 민감한 정보를 얻을 수 있습니다. 따라서 이러한 정보는 비디오 리소스가 CORS를 사용하는 경우에만 노출됩니다. crossorigin 속성을 통해 작성자는 CORS를 활성화할 수 있습니다. [FETCH]

이 제한이 없다면, 공격자는 사용자를 속여 회사 네트워크 내에서 유출된 위치에서 비디오를 로드하려고 시도하는 사이트를 방문하게 할 수 있습니다. 해당 비디오에 새로운 제품의 기밀 계획이 포함된 자막이 있다면, 자막을 읽을 수 있게 되는 것은 심각한 기밀 유출을 초래할 수 있습니다.

4.8.11.18 미디어 요소를 사용하는 작성자를 위한 모범 사례

이 섹션은 비규범적입니다.

셋톱박스나 모바일 폰과 같은 소형 기기에서 오디오 및 비디오 리소스를 재생하는 것은 종종 기기의 제한된 하드웨어 자원으로 인해 제약을 받습니다. 예를 들어, 어떤 기기는 세 개의 동시 비디오만 지원할 수 있습니다. 이러한 이유로, 미디어 요소가 재생을 마쳤을 때, 요소에 대한 모든 참조를 제거하여 요소가 가비지 수집될 수 있도록 하거나, 더 나은 방법으로는 요소의 src 속성을 빈 문자열로 설정하여 리소스를 해제하는 것이 좋은 습관입니다. srcObject가 설정된 경우, srcObject를 null로 설정합니다.

마찬가지로, 재생 속도가 정확히 1.0이 아닐 때, 하드웨어, 소프트웨어 또는 포맷의 제한으로 인해 비디오 프레임이 드롭되거나 오디오가 끊기거나 음소거될 수 있습니다.

4.8.11.19 미디어 요소 구현자를 위한 모범 사례

이 섹션은 비규범적입니다.

미디어 요소 API의 다양한 측면이 얼마나 정확하게 구현되는지는 구현 품질 문제로 간주됩니다.

예를 들어, buffered 속성을 구현할 때, 버퍼된 범위의 정확성을 보고하는 방법은 사용자 에이전트가 데이터를 얼마나 신중하게 검사하는지에 따라 달라집니다. API는 범위를 시간으로 보고하지만, 데이터는 바이트 스트림으로 얻어지므로, 가변 비트레이트 스트림을 수신하는 사용자 에이전트는 모든 데이터를 실제로 디코딩해야만 정확한 시간을 결정할 수 있을 수도 있습니다. 그러나 사용자 에이전트가 이를 반드시 수행해야 하는 것은 아니며, 대신 지금까지 관찰된 평균 비트레이트를 기반으로 한 추정치를 반환하고 더 많은 정보가 제공되면 이를 수정할 수 있습니다.

일반적으로 사용자 에이전트는 낙관적이기보다는 보수적인 태도를 취할 것을 권장합니다. 예를 들어, 모든 것이 버퍼링되었음을 보고했지만 실제로는 그렇지 않은 경우, 이는 좋지 않습니다.

또 다른 구현 품질 문제는 코덱이 전방 재생만을 위해 설계된 경우(예: 키 프레임이 많지 않고, 이들이 멀리 떨어져 있으며, 중간 프레임은 이전 프레임에서의 델타만 포함) 비디오를 역방향으로 재생하는 것입니다. 사용자 에이전트는 예를 들어 키 프레임만 보여주는 등의 저품질 작업을 수행할 수 있지만, 더 나은 구현은 실제로 비디오의 일부를 전방으로 디코딩하고, 전체 프레임을 저장한 후 프레임을 역방향으로 재생하는 등 더 많은 작업을 수행할 것입니다.

마찬가지로, 구현은 언제든지 버퍼된 데이터를 삭제할 수 있으며(미디어 요소의 수명 동안 모든 미디어 데이터를 유지할 필요는 없음), 이것도 다시 구현 품질 문제입니다. 충분한 자원을 가진 사용자 에이전트는 가능한 모든 데이터를 유지하여 더 나은 사용자 경험을 제공할 것을 권장합니다. 예를 들어, 사용자가 라이브 스트림을 시청하는 경우, 사용자 에이전트는 사용자에게 라이브 비디오만 볼 수 있도록 할 수 있지만, 더 나은 사용자 에이전트는 모든 것을 버퍼링하여 사용자가 이전 자료를 탐색하고, 일시 정지하고, 앞뒤로 재생하는 등의 기능을 허용할 것입니다.


일시 정지된 미디어 요소가 문서에서 제거되고 다음에 이벤트 루프1단계에 도달하기 전에 다시 삽입되지 않는 경우, 자원이 제한된 구현은 그 기회를 이용하여 미디어 요소가 사용하는 모든 하드웨어 자원(예: 비디오 평면, 네트워크 자원 및 데이터 버퍼)을 해제하는 것이 좋습니다. (사용자 에이전트는 나중에 재생이 다시 시작될 경우를 대비해 재생 위치 등을 계속 추적해야 합니다.)

4.8.12 map 요소

Element/map

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (레거시)12+Internet ExplorerYes
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLMapElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (레거시)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
명시적 콘텐츠.
이 요소가 사용될 수 있는 문맥:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
투명.
text/html에서 태그 생략:
태그를 생략할 수 없음.
콘텐츠 속성:
전역 속성
name이미지 맵의 이름을 정의하여 usemap 속성에서 참조할 수 있음.
접근성 고려사항:
작성자를 위한 안내.
구현자를 위한 안내.
DOM 인터페이스:
[Exposed=Window]
interface HTMLMapElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString name;
  [SameObject] readonly attribute HTMLCollection areas;
};

map 요소는 img 요소 및 area 요소와 결합하여 이미지 맵을 정의합니다. 이 요소는 자식 요소를 대표합니다.

name 속성은 맵에 이름을 부여하여 참조할 수 있도록 합니다. 이 속성은 존재해야 하며 ASCII 공백이 없는 비어 있지 않은 값을 가져야 합니다. name 속성의 값은 동일한 name 속성을 가진 다른 map 요소와 같아서는 안 됩니다. 트리 내에서 id 속성도 지정된 경우, 두 속성의 값이 같아야 합니다.

map.areas

map 요소 안의 area 요소들의 HTMLCollection을 반환합니다.

areas 속성은 HTMLCollection을 반환해야 하며, 이는 map 요소를 루트로 하고, 필터는 area 요소만 일치시켜야 합니다.

이미지 맵은 페이지의 다른 콘텐츠와 결합하여 정의될 수 있으며, 유지 관리를 용이하게 합니다. 이 예시는 페이지 상단에 이미지 맵이 있고 하단에 해당 텍스트 링크 세트가 있는 페이지의 예입니다.

<!DOCTYPE HTML>
<HTML LANG="EN">
<TITLE>Babies™: Toys</TITLE>
<HEADER>
 <H1>Toys</H1>
 <IMG SRC="/images/menu.gif"
      ALT="Babies™ navigation menu. Select a department to go to its page."
      USEMAP="#NAV">
</HEADER>
 ...
<FOOTER>
 <MAP NAME="NAV">
  <P>
   <A HREF="/clothes/">Clothes</A>
   <AREA ALT="Clothes" COORDS="0,0,100,50" HREF="/clothes/"> |
   <A HREF="/toys/">Toys</A>
   <AREA ALT="Toys" COORDS="100,0,200,50" HREF="/toys/"> |
   <A HREF="/food/">Food</A>
   <AREA ALT="Food" COORDS="200,0,300,50" HREF="/food/"> |
   <A HREF="/books/">Books</A>
   <AREA ALT="Books" COORDS="300,0,400,50" HREF="/books/">
  </P>
 </MAP>
</FOOTER>

4.8.13 area 요소

Element/area

현재 모든 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement

현재 모든 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLAreaElement/rel

Support in all current engines.

Firefox30+Safari9+Chrome54+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLAreaElement/relList

Support in all current engines.

Firefox30+Safari9+Chrome65+
Opera41+Edge79+
Edge (Legacy)18Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android41+
카테고리:
흐름 콘텐츠.
구 콘텐츠.
이 요소가 사용할 수 있는 컨텍스트:
어디에서 구 콘텐츠가 예상됩니다. 하지만 map 요소 조상이 있는 경우에만 그렇습니다.
콘텐츠 모델:
없음.
text/html에서의 태그 생략:
아니요 종료 태그.
콘텐츠 속성:
전역 속성
alt — 이미지가 없을 때 사용할 대체 텍스트
coords — 이미지 맵에서 생성할 모양의 좌표
shape — 이미지 맵에서 생성할 모양의 종류
href — 하이퍼링크의 주소
target네비게이션 하이퍼링크 내비게이션에 대한
download — 리소스를 탐색하는 대신 다운로드할지 여부와 파일 이름이 그럴 경우
pingURL을 ping하기 위해
rel — 하이퍼링크가 포함된 문서 위치와 대상 리소스 사이의 관계
referrerpolicy리퍼러 정책은 요소에 의해 시작된 가져오기에 대한
접근성 고려 사항:
요소에 href 속성이 있는 경우: 저자를 위해; 구현자를 위해.
그렇지 않으면: 저자를 위해; 구현자를 위해.
DOM 인터페이스:
[Exposed=Window]
interface HTMLAreaElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect] attribute DOMString alt;
  [CEReactions, Reflect] attribute DOMString coords;
  [CEReactions, Reflect] attribute DOMString shape;
  [CEReactions, Reflect] attribute DOMString target;
  [CEReactions, Reflect] attribute DOMString download;
  [CEReactions, Reflect] attribute USVString ping;
  [CEReactions, Reflect] attribute DOMString rel;
  [SameObject, PutForwards=value, Reflect="rel"] readonly attribute DOMTokenList relList;
  [CEReactions] attribute DOMString referrerPolicy;

  // 이전 멤버도 포함됩니다
};
HTMLAreaElement includes HTMLHyperlinkElementUtils;

area 요소는 하이퍼링크를 사용하여 이미지 맵에서 지정된 영역과 연결된 텍스트를 나타내거나 이미지 맵에서 선택할 수 없는 영역을 나타냅니다.

부모 노드를 가진 area 요소는 map 요소의 조상을 가져야 합니다.

area 요소에 href 속성이 있는 경우, area 요소는 하이퍼링크를 나타냅니다. 이 경우 alt 속성이 있어야 합니다. 이 속성은 하이퍼링크의 텍스트를 지정합니다. 그 값은 이미지 자체가 아닌 다른 하이퍼링크의 텍스트 및 이미지의 대체 텍스트와 함께 제공될 때 하이퍼링크가 텍스트 없이 이미지에 적용된 모양으로 사용할 때와 동일한 종류의 선택을 사용자에게 제공하는 텍스트여야 합니다. alt 속성은 동일한 리소스를 가리키며 비어 있지 않은 alt 속성이 있는 동일한 이미지 맵의 다른 area 요소가 있는 경우 비워 둘 수 있습니다.

area 요소에 href 속성이 없는 경우 요소가 나타내는 영역을 선택할 수 없으며, alt 속성은 생략되어야 합니다.

두 경우 모두 shapecoords 속성은 영역을 지정합니다.

shape 속성은 다음 키워드와 상태를 가진 열거형 속성입니다:

키워드 준수 상태 간단한 설명
circle 원 상태 정확히 세 개의 정수를 사용하여 coords 속성에 원을 지정합니다.
circ 아니요
default 기본 상태 이 영역은 전체 이미지입니다. (coords 속성은 사용되지 않습니다.)
poly 다각형 상태 적어도 여섯 개의 정수를 사용하여 coords 속성에 다각형을 지정합니다.
polygon 아니요
rect 사각형 상태 정확히 네 개의 정수를 사용하여 coords 속성에 사각형을 지정합니다.
rectangle 아니요

속성의 누락된 값 기본값잘못된 값 기본값은 모두 사각형 상태입니다.

coords 속성은 지정된 경우 유효한 부동 소수점 수 목록을 포함해야 합니다. 이 속성은 shape 속성에 의해 설명된 모양의 좌표를 제공합니다. 이 속성의 처리는 이미지 맵 처리 모델의 일부로 설명됩니다.

원 상태에서, area 요소는 coords 속성이 있어야 하며, 세 개의 정수를 포함해야 하며, 마지막 정수는 음수가 아니어야 합니다. 첫 번째 정수는 이미지의 왼쪽 가장자리에서 원의 중심까지의 거리이며, 두 번째 정수는 이미지의 상단 가장자리에서 원의 중심까지의 거리여야 하며, 세 번째 정수는 다시 CSS 픽셀로 반경을 나타내야 합니다.

기본 상태에서, area 요소에는 coords 속성이 없어야 합니다. (이 영역은 전체 이미지입니다.)

다각형 상태에서, area 요소에는 적어도 여섯 개의 정수가 포함된 coords 속성이 있어야 하며, 정수의 개수는 짝수여야 합니다. 각 정수 쌍은 각각 이미지의 왼쪽 및 상단에서 CSS 픽셀로 측정한 거리를 나타내야 하며, 모든 좌표는 순서대로 다각형의 점을 나타내야 합니다.

사각형 상태에서, area 요소는 정확히 네 개의 정수를 포함한 coords 속성이 있어야 하며, 첫 번째 정수는 세 번째 정수보다 작아야 하며, 두 번째 정수는 네 번째 정수보다 작아야 합니다. 네 개의 점은 각각 이미지의 왼쪽 가장자리에서 사각형의 왼쪽 면까지의 거리, 상단 가장자리에서 상단 면까지의 거리, 왼쪽 가장자리에서 오른쪽 면까지의 거리, 상단 가장자리에서 하단 면까지의 거리를 나타내야 합니다. 이 모두는 CSS 픽셀로 측정됩니다.

사용자 에이전트가 사용자가 하이퍼링크를 따라갈 수 있도록 허용할 때 하이퍼링크를 다운로드하거나, href, target, download, ping 속성은 링크가 따라가는 방식을 결정합니다. rel 속성은 사용자가 링크를 따르기 전에 대상 리소스의 성격을 사용자에게 나타내는 데 사용할 수 있습니다.

target, download, ping, rel, 그리고 referrerpolicy 속성은 href 속성이 없는 경우 생략해야 합니다.

속성 itemproparea 요소에 지정된 경우, href 속성도 지정해야 합니다.

HTMLAreaElement/referrerPolicy

Support in all current engines.

Firefox50+Safari14.1+Chrome52+
Opera?Edge79+
Edge (Legacy)?Internet ExplorerNo
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

IDL 속성 referrerPolicyreferrerpolicy 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한되어야 합니다.

4.8.14 이미지 맵

4.8.14.1 작성

이미지 맵은 이미지의 기하학적 영역을 하이퍼링크와 연결할 수 있게 합니다.

img 요소 형태의 이미지는 map 요소 형태의 이미지 맵과 연결될 수 있으며, img 요소에 usemap 속성을 지정하여 연결할 수 있습니다. 지정된 경우, usemap 속성은 반드시 map 요소에 대한 유효한 해시 이름 참조이어야 합니다.

다음과 같은 이미지를 고려하십시오:

네 가지 모양이 똑같은 간격으로 배치된 선: 빨간색 속이 빈 상자, 초록색 원, 파란색 삼각형, 노란색 네모난 별.

색깔이 있는 영역만 클릭 가능하도록 하려면 다음과 같이 할 수 있습니다:

<p>
 선택할 모양을 선택하십시오:
 <img src="shapes.png" usemap="#shapes"
      alt="네 가지 모양이 있습니다: 빨간색 속이 빈 상자, 초록색 원, 파란색 삼각형, 노란색 네모난 별.">
 <map name="shapes">
  <area shape=rect coords="50,50,100,100"> <!-- 빨간 상자의 구멍 -->
  <area shape=rect coords="25,25,125,125" href="red.html" alt="빨간 상자.">
  <area shape=circle coords="200,75,50" href="green.html" alt="초록 원.">
  <area shape=poly coords="325,25,262,125,388,125" href="blue.html" alt="파란 삼각형.">
  <area shape=poly coords="450,25,435,60,400,75,435,90,450,125,465,90,500,75,465,60"
        href="yellow.html" alt="노란 별.">
 </map>
</p>
4.8.14.2 처리 모델

img 요소에 usemap 속성이 지정된 경우, 사용자 에이전트는 다음과 같이 처리해야 합니다:

  1. 해당 속성 값을 해시-이름 참조 구문 분석 규칙에 따라, 그 요소를 컨텍스트 노드로 하여 map 요소로 파싱한다. 이 과정은 요소(map) 또는 null을 반환한다.

  2. null을 반환했다면, 리턴한다. 즉, 해당 이미지는 이미지 맵에 연결되지 않는다.

  3. 그렇지 않으면, 사용자 에이전트는 map의 모든 area 자손 요소를 수집해야 한다. areas를 이 리스트로 한다.

area 요소 리스트(areas)를 얻은 뒤, 인터랙티브 사용자 에이전트는 아래 두 가지 방식 중 하나로 이 리스트를 처리해야 한다.

만약 사용자 에이전트가 img 요소가 나타내는 텍스트를 보여주려 한다면, 다음 절차를 따라야 한다:

  1. areasarea 요소 중 href 속성이 없는 것은 모두 제거한다.

  2. areasarea 요소 중 alt 속성이 없거나, 그 값이 빈 문자열인 경우, 같은 href 값을 가지며 빈 문자열이 아닌 alt 값을 가진 다른 area 요소가 areas 내에 있다면, 이 요소를 제거한다.

  3. 남은 각 area 요소는 하이퍼링크를 나타낸다. 이러한 하이퍼링크는 img의 텍스트와 연관된 방식으로 모두 사용자에게 제공되어야 한다.

    이 상황에서, 사용자 에이전트는 areaimg 요소가 alt 속성을 지정하지 않았거나, 그 값이 빈 문자열 혹은 눈에 보이지 않는 텍스트인 경우, 적절한 작성자 제공 텍스트가 없음을 나타내도록 구현 정의 방식으로 표현할 수 있다.

사용자 에이전트가 이미지를 보여주고, 이미지와의 상호작용을 통해 하이퍼링크를 선택할 수 있도록 하려는 경우, 이미지는 areasarea 요소들로부터 얻은 계층적 도형 집합과 연결되어야 하며, 이때 트리 순서의 역순(즉, map 내 마지막 요소가 가장 아래, 첫 요소가 가장 위)이 된다.

areas 내 각 area 요소는 다음과 같이 처리해 이미지에 계층적으로 추가할 도형을 얻는다:

  1. 해당 요소의 shape 속성이 나타내는 상태를 찾는다.

  2. 요소에 coords 속성이 있다면 부동 소수점 수 목록 파싱 규칙으로 파싱한 결과를 coords 리스트로 한다. 속성이 없다면 coords 리스트는 빈 리스트로 한다.

  3. coords 리스트의 항목 수가 아래 표에서 해당 area 요소의 상태별 최소 개수보다 적으면, 도형은 비어있으므로 반환한다.

    상태 최소 항목 개수
    원(circle) 상태 3
    기본(default) 상태 0
    다각형(polygon) 상태 6
    사각형(rectangle) 상태 4
  4. coords 리스트의 초과 항목은 shape 속성 상태별로 아래 규칙을 따른다:

    원(circle) 상태
    세 번째 이후 항목은 모두 버린다.
    기본(default) 상태
    모든 항목을 버린다.
    다각형(polygon) 상태
    항목 수가 홀수라면 마지막 항목을 버린다.
    사각형(rectangle) 상태
    네 번째 이후 항목은 모두 버린다.
  5. shape 속성이 사각형 상태이고, 리스트 첫 번째 숫자가 세 번째 숫자보다 크면, 두 숫자를 서로 바꾼다.

  6. shape 속성이 사각형 상태이고, 리스트 두 번째 숫자가 네 번째 숫자보다 크면, 두 숫자를 서로 바꾼다.

  7. shape 속성이 원 상태이고, 리스트 세 번째 숫자가 0 이하이면, 도형은 비어 있으므로 반환한다.

  8. 이제, 요소가 나타내는 도형은 아래 각 상태별 설명과 같다:

    원(circle) 상태

    xcoords의 첫 번째 값, y는 두 번째 값, r는 세 번째 값이다.

    이 도형은 중심이 이미지의 왼쪽에서 x CSS 픽셀, 위쪽에서 y CSS 픽셀만큼 떨어져 있고, 반지름이 r CSS 픽셀인 원이다.

    기본(default) 상태

    이 도형은 이미지를 완전히 덮는 사각형이다.

    다각형(polygon) 상태

    xicoords의 (2i)번째 항목, yi는 (2i+1)번째 항목이다(0부터 시작).

    the coordinates는 모든 정수 i(0~(N/2)-1)에 대해 (xi, yi)로, 이미지의 왼쪽 위 모서리에서 CSS 픽셀 단위로 해석한다. (Ncoords의 항목 수)

    이 도형은 the coordinates로 주어진 꼭짓점을 갖는 다각형이며, 내부는 even-odd 규칙으로 정해진다. [GRAPHICS]

    사각형(rectangle) 상태

    x1: coords 첫 번째 값, y1: 두 번째 값, x2: 세 번째 값, y2: 네 번째 값.

    이 도형은 왼쪽 위 모서리가 (x1, y1), 오른쪽 아래 모서리가 (x2, y2)인 사각형이며, 이 좌표들은 이미지의 왼쪽 위에서 CSS 픽셀 단위로 해석한다.

    역사적 이유로, 좌표는 CSS 'width''height' 속성(비-CSS 브라우저라면 이미지 요소의 widthheight 속성 — CSS 브라우저는 이것을 해당 CSS 속성에 매핑함)으로 인한 이미지의 표시된 크기 기준으로 해석해야 한다.

    브라우저 확대/축소 기능이나 CSS/SVG 변환(transform)은 좌표에 영향을 주지 않는다.

포인팅 장치로 위 알고리즘으로 지정된 계층적 도형이 연결된 이미지와 상호작용할 때, 해당 지점을 덮는 가장 위의 도형이 있다면 해당 도형에, 없다면 이미지 요소 자체에 사용자 인터랙션 이벤트를 먼저 발생시켜야 한다. 또한, 사용자 에이전트는 area 요소가 나타내는 하이퍼링크를(예: 키보드 사용 등으로) 개별적으로 선택·활성화할 수 있도록 허용할 수 있다.

map 요소(및 그 area 요소)는 여러 img 요소와 연결될 수 있으므로, 하나의 area 요소가 문서 내 여러 포커스 가능 영역에 대응할 수 있다.

이미지 맵은 라이브하다; DOM이 변경되면, 사용자 에이전트는 이미지 맵 알고리즘을 다시 실행한 것처럼 동작해야 한다.

4.8.15 MathML

HTML/HTML5/HTML5_Parser#Inline_SVG_and_MathML_support

모든 현재 엔진에서 지원됨.

Firefox4+Safari5.1+Chrome7+
Opera11.6+Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android5+Safari iOS5+Chrome Android18+WebView Android3+Samsung Internet1.0+Opera Android12+

MathML math 요소는 이 명세서의 콘텐츠 모델을 위해 포함된 콘텐츠, 구문 콘텐츠, 흐름 콘텐츠명확한 콘텐츠 범주에 속합니다.

MathML annotation-xml 요소가 HTML 네임스페이스의 요소를 포함하는 경우, 그러한 요소는 모두 흐름 콘텐츠여야 합니다.

MathML 토큰 요소(mi, mo, mn, ms, 및 mtext) 이 HTML 요소의 하위 요소일 때, HTML 네임스페이스에서 구문 콘텐츠 요소를 포함할 수 있습니다.

MathML 콘텐츠 모델이 직문자를 허용하지 않는 MathML 요소에서 발견된 요소 간 공백이 아닌 텍스트를 MathML 콘텐츠 모델, 레이아웃 및 렌더링 목적으로 해당 텍스트가 실제로 MathML mtext 요소로 래핑된 것처럼 처리해야 합니다. (그러나 이러한 텍스트는 규격에 맞지 않습니다.)

콘텐츠가 요소의 콘텐츠 모델과 일치하지 않는 MathML 요소는 MathML 레이아웃 및 렌더링 목적으로 MathML merror 요소로 대체된 것처럼 작동해야 하며, 적절한 오류 메시지를 포함해야 합니다.

MathML 요소의 의미론은 MathML다른 적용 가능한 명세서에 의해 정의됩니다. [MATHML]

HTML 문서에서 MathML을 사용하는 예는 다음과 같습니다:

<!DOCTYPE html>
<html lang="en">
 <head>
  <title>The quadratic formula</title>
 </head>
 <body>
  <h1>The quadratic formula</h1>
  <p>
   <math>
    <mi>x</mi>
    <mo>=</mo>
    <mfrac>
     <mrow>
      <mo form="prefix"></mo> <mi>b</mi>
      <mo>±</mo>
      <msqrt>
       <msup> <mi>b</mi> <mn>2</mn> </msup>
       <mo></mo>
       <mn>4</mn> <mo></mo> <mi>a</mi> <mo></mo> <mi>c</mi>
      </msqrt>
     </mrow>
     <mrow>
      <mn>2</mn> <mo></mo> <mi>a</mi>
     </mrow>
    </mfrac>
   </math>
  </p>
 </body>
</html>

4.8.16 SVG

HTML/HTML5/HTML5_Parser#Inline_SVG_and_MathML_support

모든 현재 엔진에서 지원됨.

Firefox37+Safari11.1+Chrome7+
Opera15+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android37+Safari iOS11.3+Chrome Android18+WebView Android4.4+Samsung Internet4+Opera Android15+

SVG svg 요소는 이 명세서의 콘텐츠 모델에서 포함된 콘텐츠, 구문 콘텐츠, 흐름 콘텐츠, 명확한 콘텐츠 범주에 속합니다.

SVG foreignObject 요소가 HTML 네임스페이스의 요소를 포함하는 경우, 그러한 요소는 모두 흐름 콘텐츠여야 합니다.

SVG title 요소의 HTML 문서 내 콘텐츠 모델은 구문 콘텐츠입니다. (이는 SVG 2에서 제시된 요구 사항을 추가로 제한합니다.)

SVG 요소의 의미론은 SVG 2다른 적용 가능한 명세서에 의해 정의됩니다. [SVG]


doc = iframe.getSVGDocument()
doc = embed.getSVGDocument()
doc = object.getSVGDocument()

document(Document) 객체를 반환하며, iframe, embed 또는 object 요소를 사용하여 SVG를 포함하는 경우에 해당됩니다.

getSVGDocument() 메서드의 단계는 다음과 같습니다:

  1. documentthis콘텐츠 문서로 설정합니다.

  2. 만약 document가 null이 아니며, XML 파일의 페이지 로드 처리 모델 섹션에 따라 생성된 경우, 리소스의 계산된 유형image/svg+xml이므로, document를 반환합니다.

  3. null을 반환합니다.

4.8.17 크기 속성

작성자 요구사항: img, iframe, embed, object, video, source 요소에 대한 widthheight 속성은 부모가 picture 요소인 경우, type 속성이 이미지 버튼 상태일 때 input 요소는 요소의 시각적 콘텐츠의 크기(출력 매체의 명목상 방향에 상대적인 너비와 높이)를 지정할 수 있습니다. 지정된 속성이 있는 경우, 이 속성들은 CSS 픽셀로 유효한 음수가 아닌 정수 값이어야 합니다.

지정된 크기는 리소스 자체에 지정된 크기와 다를 수 있으며, 리소스의 해상도가 CSS 픽셀 해상도와 다를 수 있기 때문입니다. (화면에서는 CSS 픽셀 해상도가 96ppi이지만, 일반적으로 CSS 픽셀 해상도는 읽기 거리와 관련이 있습니다.) 두 속성이 모두 지정된 경우, 다음 문장 중 하나가 참이어야 합니다:

target ratio은 리소스의 자연 너비자연 높이의 비율입니다. specified widthspecified height는 각각 widthheight 속성의 값입니다.

해당 리소스에 자연 너비자연 높이가 모두 없는 경우 이 두 속성은 생략되어야 합니다.

두 속성이 모두 0인 경우, 이는 요소가 사용자를 대상으로 하지 않는다는 것을 나타냅니다(예: 페이지 조회수를 계산하는 서비스의 일부일 수 있음).

크기 속성은 이미지를 늘리는 데 사용되지 않도록 해야 합니다.

사용자 에이전트 요구사항: 사용자 에이전트는 이러한 속성을 렌더링에 대한 힌트로 사용해야 합니다.

iframe, embed, object의 경우 IDL 속성은 DOMString입니다; videosource의 경우 IDL 속성은 unsigned long입니다.

imginput 요소에 해당하는 IDL 속성은 해당 요소의 다른 동작과 더 밀접하게 관련되어 있으므로 각 요소의 섹션에서 정의됩니다.

4.9 표 형식 데이터

4.9.1 table 요소

요소/table

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLTableElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
실체 콘텐츠.
이 요소를 사용할 수 있는 맥락:
플로우 콘텐츠가 예상되는 곳.
콘텐츠 모델:
이 순서대로: 선택적으로 caption 요소, 그 뒤에 0개 이상의 colgroup 요소, 그 뒤에 선택적으로 thead 요소, 그 뒤에 0개 이상의 tbody 요소 또는 1개 이상의 tr 요소, 그 뒤에 선택적으로 tfoot 요소, 선택적으로 1개 이상의 스크립트 지원 요소와 혼합되어 사용될 수 있음.
text/html에서 태그 생략:
태그는 생략할 수 없습니다.
콘텐츠 속성:
글로벌 속성
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTableElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions] attribute HTMLTableCaptionElement? caption;
  HTMLTableCaptionElement createCaption();
  [CEReactions] undefined deleteCaption();

  [CEReactions] attribute HTMLTableSectionElement? tHead;
  HTMLTableSectionElement createTHead();
  [CEReactions] undefined deleteTHead();

  [CEReactions] attribute HTMLTableSectionElement? tFoot;
  HTMLTableSectionElement createTFoot();
  [CEReactions] undefined deleteTFoot();

  [SameObject] readonly attribute HTMLCollection tBodies;
  HTMLTableSectionElement createTBody();

  [SameObject] readonly attribute HTMLCollection rows;
  HTMLTableRowElement insertRow(optional long index = -1);
  [CEReactions] undefined deleteRow(long index);

  // also has obsolete members
};

table 요소는 형식으로 2차원 이상의 데이터를 표현합니다.

table 요소는 표 모델에 참여합니다. 표는 자손들에 의해 제공된 행, 열 및 셀을 가집니다. 행과 열은 그리드를 형성하며, 표의 셀은 겹침 없이 해당 그리드를 완전히 덮어야 합니다.

이 적합성 요구사항이 충족되는지 여부를 결정하는 정확한 규칙은 표 모델 설명에 나와 있습니다.

작성자들은 복잡한 표를 해석하는 방법을 설명하는 정보를 제공하는 것이 권장됩니다. 이러한 정보를 제공하는 방법에 대한 지침은 아래에 나와 있습니다.

표는 레이아웃 도구로 사용되어서는 안 됩니다. 역사적으로 일부 웹 작성자들이 HTML의 표를 페이지 레이아웃을 제어하는 방법으로 오용해 왔습니다. 이러한 사용은 비적합하며, 그러한 문서에서 표 데이터를 추출하려는 도구들은 매우 혼란스러운 결과를 얻게 될 것입니다. 특히 스크린 리더와 같은 접근성 도구 사용자들은 레이아웃에 사용된 표로 구성된 페이지를 탐색하기가 매우 어려울 수 있습니다.

레이아웃을 위해 HTML 표를 사용하는 대신 CSS 그리드 레이아웃, CSS 플렉서블 박스 레이아웃("flexbox"), CSS 다중 열 레이아웃, CSS 포지셔닝, CSS 표 모델 등 다양한 대안이 있습니다. [CSS]


표는 이해하고 탐색하기 어렵습니다. 사용자가 이를 돕기 위해, 사용자 에이전트는 해당 표가 (비적합한) 레이아웃 표로 분류되지 않은 이상, 표의 셀들을 명확하게 구분해야 합니다.

작성자와 구현자는 아래에 설명된 표 설계 기술 중 일부를 사용하여 사용자가 표를 더 쉽게 탐색할 수 있도록 고려하는 것이 좋습니다.

특히 임의의 콘텐츠에서 표 분석을 수행하는 사용자 에이전트는 실제 데이터를 포함하는 표와 단순히 레이아웃에 사용되는 표를 구별하는 휴리스틱을 찾는 것이 좋습니다. 이 명세에서는 정확한 휴리스틱을 정의하지 않지만, 다음과 같은 것이 가능한 지표로 제안됩니다:

특징 지표
role 속성에 presentation 값을 사용하는 경우 아마도 레이아웃 표일 가능성이 높습니다.
비적합한 값 0을 가진 border 속성을 사용하는 경우 아마도 레이아웃 표일 가능성이 높습니다.
값 0을 가진 비적합한 cellspacingcellpadding 속성을 사용하는 경우 아마도 레이아웃 표일 가능성이 높습니다.
caption, thead 또는 th 요소를 사용하는 경우 아마도 레이아웃 표가 아닐 가능성이 높습니다.
headersscope 속성을 사용하는 경우 아마도 레이아웃 표가 아닐 가능성이 높습니다.
값이 0이 아닌 비적합한 border 속성을 사용하는 경우 아마도 레이아웃 표가 아닐 가능성이 높습니다.
CSS를 사용해 명시적으로 표시된 테두리를 사용하는 경우 아마도 레이아웃 표가 아닐 가능성이 높습니다.
summary 속성을 사용하는 경우 좋은 지표가 아님 (역사적으로 레이아웃 표와 비레이아웃 표 모두 이 속성을 가졌습니다.)

위의 제안이 잘못되었을 가능성도 있습니다. 구현자들은 레이아웃 표 탐지 휴리스틱을 만들려고 시도한 경험을 바탕으로 피드백을 제공할 것을 권장합니다.

만약 table 요소가 (비적합한) summary 속성을 가지고 있고, 사용자 에이전트가 해당 표를 레이아웃 표로 분류하지 않은 경우, 사용자 에이전트는 그 속성의 내용을 사용자에게 보고할 수 있습니다.


table.caption [ = value ]

HTMLTableElement/caption

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블의 caption 요소를 반환합니다.

설정하면 caption 요소를 교체합니다.

caption = table.createCaption()

HTMLTableElement/createCaption

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블에 caption 요소가 없으면 새로 생성하고 반환합니다.

table.deleteCaption()

HTMLTableElement/deleteCaption

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블에 caption 요소가 없도록 합니다.

table.tHead [ = value ]

HTMLTableElement/tHead

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블의 thead 요소를 반환합니다.

설정하면 thead 요소를 교체합니다. 새 값이 thead 요소가 아닌 경우, "HierarchyRequestError" DOMException을 던집니다.

thead = table.createTHead()

HTMLTableElement/createTHead

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블에 thead 요소가 없으면 새로 생성하고 반환합니다.

table.deleteTHead()

HTMLTableElement/deleteTHead

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블에 thead 요소가 없도록 합니다.

table.tFoot [ = value ]

HTMLTableElement/tFoot

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블의 tfoot 요소를 반환합니다.

설정하면 tfoot 요소를 교체합니다. 새 값이 tfoot 요소가 아닌 경우, "HierarchyRequestError" DOMException을 던집니다.

tfoot = table.createTFoot()

HTMLTableElement/createTFoot

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블에 tfoot 요소가 없으면 새로 생성하고 반환합니다.

table.deleteTFoot()

HTMLTableElement/deleteTFoot

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블에 tfoot 요소가 없도록 합니다.

table.tBodies

HTMLTableElement/tBodies

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블의 HTMLCollection을 반환합니다.

tbody = table.createTBody()

HTMLTableElement/createTBody

모든 최신 엔진에서 지원됩니다.

Firefox25+Safari6+Chrome20+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer9+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

새로운 tbody 요소를 생성하고 테이블에 삽입하며, 이를 반환합니다.

table.rows

HTMLTableElement/rows

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

테이블의 HTMLCollection을 반환합니다.

tr = table.insertRow([ index ])

HTMLTableElement/insertRow

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS3+Chrome Android?WebView Android37+Samsung Internet?Opera Android10.1+

tr 요소와 tbody가 필요한 경우, 새로 생성하고 테이블에 삽입하며 이를 반환합니다.

위치는 테이블의 행을 기준으로 합니다. 인덱스 −1은 기본값이며, 인수 없이 호출할 경우 테이블 끝에 삽입하는 것과 동일합니다.

지정된 위치가 −1보다 작거나 행의 수보다 클 경우, "IndexSizeError" DOMException을 던집니다.

table.deleteRow(index)

HTMLTableElement/deleteRow

모든 최신 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

지정된 위치에 있는 tr 요소를 테이블에서 제거합니다.

위치는 테이블의 행을 기준으로 합니다. 인덱스 −1은 테이블의 마지막 행을 삭제하는 것과 동일합니다.

지정된 위치가 −1보다 작거나 마지막 행의 인덱스보다 클 경우, 또는 행이 없을 경우 "IndexSizeError" DOMException을 던집니다.

다음의 모든 속성 및 메서드 정의에서 요소가 table-created되어야 하는 경우, 이는 table 요소의 node document, 주어진 로컬 이름, 및 HTML namespace를 사용하여 요소를 생성하는 것을 의미합니다.

caption IDL 속성은 table 요소의 첫 번째 caption 자식 요소를 반환해야 하며, 그렇지 않으면 null을 반환해야 합니다. 설정할 때, table 요소의 첫 번째 caption 자식 요소를 제거해야 하며, 새로운 값이 null이 아닌 경우 첫 번째 노드로 삽입해야 합니다.

createCaption() 메서드는 table 요소의 첫 번째 caption 자식 요소를 반환해야 하며, 그렇지 않으면 새로운 caption 요소를 table-created하고, table 요소의 첫 번째 노드로 삽입한 다음 반환해야 합니다.

deleteCaption() 메서드는 table 요소의 첫 번째 caption 자식 요소를 제거해야 합니다.

tHead IDL 속성은 table 요소의 첫 번째 thead 자식 요소를 반환해야 하며, 그렇지 않으면 null을 반환해야 합니다. 설정할 때, 새로운 값이 null이거나 thead 요소인 경우 table 요소의 첫 번째 thead 자식 요소를 제거해야 하며, 새로운 값이 null이 아니면 table 요소에서 caption 요소나 colgroup 요소가 아닌 첫 번째 요소 앞에 삽입해야 하며, 그런 요소가 없다면 테이블의 끝에 삽입해야 합니다. 새로운 값이 null이거나 thead 요소가 아닌 경우, "HierarchyRequestError" DOMException을 던져야 합니다.

createTHead() 메서드는 table 요소의 첫 번째 thead 자식 요소를 반환해야 하며, 그렇지 않으면 새로운 thead 요소를 table-created하고, table 요소에서 caption 요소나 colgroup 요소가 아닌 첫 번째 요소 앞에 삽입해야 하며, 그런 요소가 없다면 테이블의 끝에 삽입한 다음 그 요소를 반환해야 합니다.

deleteTHead() 메서드는 table 요소의 첫 번째 thead 자식 요소를 제거해야 합니다.

tFoot IDL 속성은 table 요소의 첫 번째 tfoot 자식 요소를 반환해야 하며, 그렇지 않으면 null을 반환해야 합니다. 설정할 때, 새로운 값이 null이거나 tfoot 요소인 경우 table 요소의 첫 번째 tfoot 자식 요소를 제거해야 하며, 새로운 값이 null이 아닌 경우 테이블 끝에 삽입해야 합니다. 새로운 값이 null이거나 tfoot 요소가 아닌 경우, "HierarchyRequestError" DOMException을 던져야 합니다.

createTFoot() 메서드는 table 요소의 첫 번째 tfoot 자식 요소를 반환해야 하며, 그렇지 않으면 새로운 tfoot 요소를 table-created하고 테이블의 끝에 삽입한 다음 그 요소를 반환해야 합니다.

deleteTFoot() 메서드는 table 요소의 첫 번째 tfoot 자식 요소를 제거해야 합니다.

tBodies 속성은 table 노드를 기준으로 필터가 tbody 요소에만 일치하는 HTMLCollection을 반환해야 합니다.

createTBody() 메서드는 새로운 tbody 요소를 table-create하고, table 요소의 마지막 tbody 자식 요소 다음에 삽입하거나, table 요소에 tbody 자식 요소가 없을 경우 테이블의 끝에 삽입해야 하며, 그 다음 새 요소를 반환해야 합니다.

rows 속성은 table 노드를 기준으로 필터가 tr 요소에만 일치하는 HTMLCollection을 반환해야 하며, 이 요소들은 thead의 자식인 요소가 먼저 포함되고, table 또는 tbody 요소의 자식인 요소가 그 다음으로 포함되며, 마지막으로 tfoot의 자식인 요소가 포함되어야 합니다.

insertRow(index) 메서드의 동작은 테이블의 상태에 따라 달라집니다. 호출될 때 메서드는 테이블의 상태와 index 인수를 설명하는 다음 조건 목록에서 요구되는 첫 번째 항목을 수행해야 합니다:

인덱스가 −1보다 작거나 rows 컬렉션에 있는 요소의 개수보다 큰 경우:
메서드는 "IndexSizeError" DOMException을 던져야 합니다.
rows 컬렉션에 요소가 하나도 없고 tabletbody 요소가 없는 경우:
메서드는 tbody 요소를 table-create한 다음, tr 요소를 table-create하고, tr 요소를 tbody 요소에 추가한 후, tbody 요소를 table 요소에 추가하고, 마지막으로 tr 요소를 반환해야 합니다.
rows 컬렉션에 요소가 하나도 없는 경우:
메서드는 tr 요소를 table-create하고, 마지막 tbody 요소에 추가한 후 tr 요소를 반환해야 합니다.
인덱스가 −1이거나 rows 컬렉션의 항목 개수와 같은 경우:
메서드는 tr 요소를 table-create하고, rows 컬렉션에서 마지막 tr 요소의 부모에 추가해야 하며, 그런 다음 새로 생성된 tr 요소를 반환해야 합니다.
그 외의 경우:
메서드는 tr 요소를 table-create하고, rows 컬렉션에서 index번째 tr 요소 바로 앞에 삽입한 후 새로 생성된 tr 요소를 반환해야 합니다.

deleteRow(index) 메서드가 호출될 때, 사용자 에이전트는 다음 단계를 수행해야 합니다:

  1. index가 -1보다 작거나 rows 컬렉션에 있는 요소 수보다 크거나 같으면, "IndexSizeError" DOMException을 던져야 합니다.

  2. index가 -1인 경우, rows 컬렉션에서 마지막 요소를 제거하거나, rows 컬렉션이 비어 있는 경우 아무 작업도 하지 않아야 합니다.

  3. 그렇지 않은 경우, index 번째 요소를 rows 컬렉션에서 제거해야 합니다.

여기 수수께끼 퍼즐을 마크업하는 테이블 사용 예가 있습니다. 이러한 테이블에는 헤더가 필요하지 않음을 확인합니다.

<style>
 #sudoku { border-collapse: collapse; border: solid thick; }
 #sudoku colgroup, table#sudoku tbody { border: solid medium; }
 #sudoku td { border: solid thin; height: 1.4em; width: 1.4em; text-align: center; padding: 0; }
</style>
<h1>Today's Sudoku</h1>
<table id="sudoku">
 <colgroup><col><col><col>
 <colgroup><col><col><col>
 <colgroup><col><col><col>
 <tbody>
  <tr> <td> 1 <td>   <td> 3 <td> 6 <td>   <td> 4 <td> 7 <td>   <td> 9
  <tr> <td>   <td> 2 <td>   <td>   <td> 9 <td>   <td>   <td> 1 <td>
  <tr> <td> 7 <td>   <td>   <td>   <td>   <td>   <td>   <td>   <td> 6
 <tbody>
  <tr> <td> 2 <td>   <td> 4 <td>   <td> 3 <td>   <td> 9 <td>   <td> 8
  <tr> <td>   <td>   <td>   <td>   <td>   <td>   <td>   <td>   <td>
  <tr> <td> 5 <td>   <td>   <td> 9 <td>   <td> 7 <td>   <td>   <td> 1
 <tbody>
  <tr> <td> 6 <td>   <td>   <td>   <td> 5 <td>   <td>   <td>   <td> 2
  <tr> <td>   <td>   <td>   <td>   <td> 7 <td>   <td>   <td>   <td>
  <tr> <td> 9 <td>   <td>   <td> 8 <td>   <td> 2 <td>   <td>   <td> 5
</table>
4.9.1.1 테이블 설명 기법

첫 번째 행과 첫 번째 열에 헤더가 있는 셀의 그리드로만 구성된 테이블 이상의 것과, 일반적으로 독자가 내용을 이해하기 어려울 수 있는 테이블의 경우, 작성자는 테이블을 소개하는 설명 정보를 포함해야 합니다. 이 정보는 모든 사용자에게 유용하지만, 특히 테이블을 볼 수 없는 사용자, 예를 들어 화면 판독기 사용자에게 매우 유용합니다.

이러한 설명 정보는 테이블의 목적을 소개하고, 기본적인 셀 구조를 개략적으로 설명하며, 어떤 경향이나 패턴을 강조하고, 일반적으로 사용자가 테이블을 사용하는 방법을 가르쳐야 합니다.

예를 들어, 다음과 같은 테이블이 있습니다:

긍정적 및 부정적인 측면이 있는 특성
부정적 특성 긍정적
슬픔 기분 행복
실패 성적 합격

...이 테이블은 "특성은 두 번째 열에 제공되며, 왼쪽 열에는 부정적인 측면이, 오른쪽 열에는 긍정적인 측면이 있습니다"와 같은 설명이 유용할 수 있습니다.

이 정보를 포함하는 다양한 방법이 있습니다:

테이블을 둘러싼 산문에서
<p>다음 테이블에서는 특성이 두 번째 열에 제공되며, 왼쪽 열에는 부정적인 측면이, 오른쪽 열에는 긍정적인 측면이 있습니다.</p>
<table>
 <caption>긍정적 및 부정적인 측면이 있는 특성</caption>
 <thead>
  <tr>
   <th id="n"> 부정적
   <th> 특성
   <th> 긍정적
 </thead>
  <tr>
   <td headers="n r1"> 슬픔
   <th id="r1"> 기분
   <td> 행복
  </tr>
   <td headers="n r2"> 실패
   <th id="r2"> 성적
   <td> 합격
</table>
테이블의 caption
<table>
 <caption>
  <strong>긍정적 및 부정적인 측면이 있는 특성.</strong>
  <p>특성은 두 번째 열에 제공되며, 왼쪽 열에는 부정적인 측면이, 오른쪽 열에는 긍정적인 측면이 있습니다.</p>
 </caption>
 <thead>
  <tr>
   <th id="n"> 부정적
   <th> 특성
   <th> 긍정적
 </thead>
  <tr>
   <td headers="n r1"> 슬픔
   <th id="r1"> 기분
   <td> 행복
  </tr>
   <td headers="n r2"> 실패
   <th id="r2"> 성적
   <td> 합격
</table>
테이블의 caption에, details 요소 내에서
<table>
 <caption>
  <strong>Characteristics with positive and negative sides.</strong>
  <details>
   <summary>Help</summary>
   <p>Characteristics are given in the second column, with the
   negative side in the left column and the positive side in the right
   column.</p>
  </details>
 </caption>
 <thead>
  <tr>
   <th id="n"> Negative
   <th> Characteristic
   <th> Positive
 <tbody>
  <tr>
   <td headers="n r1"> Sad
   <th id="r1"> Mood
   <td> Happy
  <tr>
   <td headers="n r2"> Failing
   <th id="r2"> Grade
   <td> Passing
</table>
테이블 옆에, 동일한 figure 내에
<figure>
 <figcaption>긍정적 및 부정적인 측면이 있는 특성</figcaption>
 <p>특성은 두 번째 열에 제공되며, 왼쪽 열에는 부정적인 측면이, 오른쪽 열에는 긍정적인 측면이 있습니다.</p>
 <table>
  <thead>
   <tr>
    <th id="n"> 부정적
    <th> 특성
    <th> 긍정적
  </tbody>
   <tr>
    <td headers="n r1"> 슬픔
    <th id="r1"> 기분
    <td> 행복
   </tr>
    <td headers="n r2"> 실패
    <th id="r2"> 성적
    <td> 합격
 </table>
</figure>
테이블 옆에, figurefigcaption 내에
<figure>
 <figcaption>
  <strong>긍정적 및 부정적인 측면이 있는 특성</strong> 
  <p>특성은 두 번째 열에 제공되며, 왼쪽 열에는 부정적인 측면이, 오른쪽 열에는 긍정적인 측면이 있습니다.</p>
 </figcaption>
 <table>
  <thead>
   <tr>
    <th id="n"> 부정적
    <th> 특성
    <th> 긍정적
  </tbody>
   <tr>
    <td headers="n r1"> 슬픔
    <th id="r1"> 기분
    <td> 행복
   </tr>
    <td headers="n r2"> 실패
    <th id="r2"> 성적
    <td> 합격
 </table>
</figure>

작성자는 위의 기법 외에도 적절한 다른 기법이나 기법의 조합을 사용할 수 있습니다.

물론, 테이블이 배치된 방식을 설명하는 설명을 작성하는 것보다, 설명이 필요 없도록 테이블을 조정하는 것이 가장 좋은 방법입니다.

위의 예제에서 사용된 테이블의 경우, 테이블을 간단히 재배치하여 헤더가 상단과 왼쪽에 있도록 하면 설명이 필요 없으며, headers 속성을 사용할 필요도 없습니다:

<table>
 <caption>긍정적 및 부정적인 측면이 있는 특성</caption>
 <thead>
  <tr>
   <th> 특성
   <th> 부정적
   <th> 긍정적
 </thead>
  <tr>
   <th> 기분
   <td> 슬픔
   <td> 행복
  </tr>
   <th> 성적
   <td> 실패
   <td> 합격
</table>
4.9.1.2 테이블 설계를 위한 기법

좋은 테이블 설계는 테이블을 더 읽기 쉽고 사용하기 쉽게 만드는 데 중요한 역할을 합니다.

시각적 매체에서 열과 행 경계를 제공하고 행 배경을 번갈아 가며 사용하는 것은 복잡한 테이블을 더 읽기 쉽게 만드는 데 매우 효과적일 수 있습니다.

대량의 숫자 콘텐츠가 포함된 테이블의 경우, 모노스페이스 폰트를 사용하면 사용자 에이전트가 경계를 렌더링하지 않는 상황에서도 패턴을 쉽게 볼 수 있습니다. (유감스럽게도, 역사적 이유로 테이블의 경계를 렌더링하지 않는 것은 일반적인 기본값입니다.)

음성 매체에서 테이블 셀은 셀의 내용을 읽기 전에 해당 헤더를 보고하여 구분할 수 있으며, 사용자가 테이블의 전체 내용을 소스 순서대로 직렬화하는 대신 그리드 방식으로 테이블을 탐색할 수 있도록 허용합니다.

저자들은 이러한 효과를 얻기 위해 CSS를 사용하는 것이 권장됩니다.

사용자 에이전트는 페이지가 CSS를 사용하지 않고 테이블이 레이아웃 테이블로 분류되지 않은 경우, 이러한 기법을 사용하여 테이블을 렌더링하는 것이 권장됩니다.

4.9.2 caption 요소

Element/caption

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLTableCaptionElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
table 요소의 첫 번째 자식 요소로 사용됩니다.
콘텐츠 모델:
플로우 콘텐츠이지만, 자손 table 요소는 포함되지 않습니다.
text/html에서 태그 생략:
caption 요소의 종료 태그caption 요소가 ASCII 공백 문자 또는 주석으로 바로 뒤따르지 않는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTableCaptionElement : HTMLElement {
  [HTMLConstructor] constructor();

  // 더 이상 사용되지 않는 멤버도 포함됩니다
};

caption 요소는 table 요소를 부모로 가지는 경우 해당 표의 제목을 나타냅니다.

caption 요소는 테이블 모델에 참여합니다.

table 요소가 figure 요소의 유일한 콘텐츠이고 figcaption 외에는 다른 콘텐츠가 없을 때, caption 요소는 figcaption 요소로 대체되어야 합니다.

캡션은 테이블에 대한 맥락을 제공하여 이해하기 훨씬 쉽게 만들 수 있습니다.

예를 들어, 다음 테이블을 고려해 보십시오:

1 2 3 4 5 6
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9
4 5 6 7 8 9 10
5 6 7 8 9 10 11
6 7 8 9 10 11 12

추상적으로 보면 이 테이블은 명확하지 않습니다. 그러나 테이블 번호(주요 본문에서 참조하기 위해)를 제공하고 테이블의 용도를 설명하는 캡션이 있으면 더 이해하기 쉬워집니다:

<caption>
<p>Table 1.
<p>이 테이블은 두 개의 6면체 주사위를 굴려 얻은 총 점수를 보여줍니다. 첫 번째 행은 첫 번째 주사위의 값을 나타내고, 첫 번째 열은 두 번째 주사위의 값을 나타냅니다. 총 점수는 두 주사위 값에 해당하는 셀에 표시됩니다.
</caption>

이렇게 하면 사용자에게 더 많은 맥락을 제공합니다:

Table 1.

이 테이블은 두 개의 6면체 주사위를 굴려 얻은 총 점수를 보여줍니다. 첫 번째 행은 첫 번째 주사위의 값을 나타내고, 첫 번째 열은 두 번째 주사위의 값을 나타냅니다. 총 점수는 두 주사위 값에 해당하는 셀에 표시됩니다.

1 2 3 4 5 6
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9
4 5 6 7 8 9 10
5 6 7 8 9 10 11
6 7 8 9 10 11 12

4.9.3 colgroup 요소

Element/colgroup

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLTableColElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
table 요소의 자식으로, caption 요소 뒤, thead, tbody, tfoot, tr 요소 앞에 사용됩니다.
콘텐츠 모델:
span 속성이 존재할 경우: 아무것도 포함하지 않음.
span 속성이 존재하지 않을 경우: 0개 이상의 coltemplate 요소.
text/html에서 태그 생략:
colgroup 요소의 시작 태그colgroup 요소 내부의 첫 번째 항목이 col 요소인 경우 생략할 수 있으며, 요소가 종료 태그가 생략된 다른 colgroup 요소 바로 뒤에 있지 않은 경우에만 생략할 수 있습니다. (요소가 비어 있는 경우에는 생략할 수 없습니다.)
colgroup 요소의 종료 태그colgroup 요소가 ASCII 공백 문자 또는 주석 바로 뒤에 오지 않는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
span — 요소가 가로지르는 열의 수
접근성 고려 사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTableColElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect, ReflectDefault=1, ReflectRange=(1, 1000)] attribute unsigned long span;

  // also has obsolete members
};

colgroup 요소는 table 요소의 부모가 있을 경우, 부모가 table 요소일 때, 그 부모에서 하나 이상의 열 그룹표현합니다.

colgroup 요소에 col 요소가 포함되지 않은 경우, 요소는 span 콘텐츠 속성을 지정할 수 있으며, 해당 값은 0보다 크고 1000 이하인 유효한 비음수 정수이어야 합니다.

colgroup 요소와 그 span 속성은 테이블 모델의 일부를 형성합니다.

4.9.4 col 요소

Element/col

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
colgroup 요소의 자식으로, span 속성이 없는 경우에만 사용됩니다.
콘텐츠 모델:
아무것도 포함하지 않음.
text/html에서 태그 생략:
종료 태그 없음.
콘텐츠 속성:
전역 속성
span — 요소가 가로지르는 열의 수
접근성 고려 사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
HTMLTableColElement 사용, colgroup 요소와 동일하게 정의됨.

col 요소가 부모를 가지고 있고, 그 부모가 colgroup 요소이며, 그 자체가 table 요소인 경우, col 요소는 colgroup이 표현하는 열 그룹 내에서 하나 이상의 표현합니다.

요소는 span 콘텐츠 속성을 지정할 수 있으며, 해당 값은 0보다 크고 1000 이하인 유효한 비음수 정수이어야 합니다.

col 요소와 그 span 속성은 테이블 모델의 일부를 형성합니다.

4.9.5 tbody 요소

Element/tbody

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer지원됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLTableSectionElement

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
table 요소의 자식으로, caption, colgroup, thead 요소들 다음에 위치해야 하며, tr 요소가 table 요소의 자식으로 존재하지 않아야 합니다.
콘텐츠 모델:
0개 이상의 tr스크립트 지원 요소.
text/html에서 태그 생략:
tbody 요소의 시작 태그tr 요소가 첫 번째 자식 요소로 있을 경우 생략할 수 있으며, 이 요소가 바로 앞에 tbody, thead, 또는 tfoot 요소가 생략된 종료 태그로 끝나지 않는 경우에만 생략할 수 있습니다. (요소가 비어있으면 생략할 수 없습니다.)
tbody 요소의 종료 태그tbody 또는 tfoot 요소가 뒤따르거나 부모 요소에 더 이상 내용이 없을 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려 사항:
저자를 위한 정보.
구현자를 위한 정보.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTableSectionElement : HTMLElement {
  [HTMLConstructor] constructor();

  [SameObject] readonly attribute HTMLCollection rows;
  HTMLTableRowElement insertRow(optional long index = -1);
  [CEReactions] undefined deleteRow(long index);

  // 이전에 사용되었던 멤버들도 포함됩니다.
};

HTMLTableSectionElement 인터페이스는 theadtfoot 요소에도 사용됩니다.

tbody 요소는 대표합니다 행 그룹으로, 부모 table 요소에 대한 데이터를 담고 있는 tbody 요소가 부모를 가지고 있으며, 그 부모가 table 요소인 경우에 해당합니다.

tbody 요소는 테이블 모델에 참여합니다.

tbody.rows

이 요소에 뿌리를 둔 HTMLCollection으로 반환되며, 필터는 이 요소의 자식 요소인 tr 요소만 일치시킵니다.

tr = tbody.insertRow([ index ])

tr 요소를 생성하여, 지정된 인덱스 위치에 삽입하고, 해당 tr을 반환합니다.

인덱스 위치는 테이블 섹션의 행을 기준으로 합니다. 인덱스 -1은 인덱스를 생략했을 때의 기본값으로, 테이블 섹션의 끝에 삽입하는 것과 동일합니다.

주어진 위치가 -1보다 작거나 행의 개수보다 크면, "IndexSizeError" DOMException을 던집니다.

tbody.deleteRow(index)

테이블 섹션에서 지정된 인덱스 위치의 tr 요소를 제거합니다.

인덱스 위치는 테이블 섹션의 행을 기준으로 합니다. 인덱스 -1은 테이블 섹션의 마지막 행을 삭제하는 것과 동일합니다.

주어진 위치가 -1보다 작거나 행의 마지막 인덱스보다 크거나 행이 없으면, "IndexSizeError" DOMException을 던집니다.

rows 속성은 이 요소에 뿌리를 둔 HTMLCollection을 반환하며, 필터는 이 요소의 자식 요소인 tr 요소만 일치시킵니다.

insertRow(index) 메서드는 다음과 같이 동작해야 합니다:

  1. index가 -1보다 작거나 rows 컬렉션의 요소 수보다 크면, "IndexSizeError" DOMException을 던집니다.

  2. 이 요소의 노드 문서, "tr", 그리고 HTML 네임스페이스를 사용하여 요소를 생성한 결과를 table row로 합니다.

  3. index가 -1이거나 rows 컬렉션의 항목 수와 같으면 이 요소에 table row추가합니다.

  4. 그렇지 않으면 이 요소의 자식으로 rows 컬렉션의 index번째 tr 요소 바로 앞에 table row삽입합니다.

  5. table row를 반환합니다.

deleteRow(index) 메서드는 호출되었을 때, 다음과 같이 동작해야 합니다:

  1. 인덱스가 -1보다 작거나 rows 컬렉션의 마지막 요소보다 크거나 같으면, "IndexSizeError" DOMException을 던집니다.

  2. 인덱스가 -1이면 rows 컬렉션에서 마지막 요소를 제거하거나, 컬렉션이 비어있으면 아무 작업도 하지 않습니다.

  3. 그렇지 않으면, 이 요소에서 index 번째 rows 컬렉션의 요소를 제거합니다.

4.9.6 thead 요소

Element/thead

모든 최신 브라우저 엔진에서 지원합니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?
카테고리:
없음.
이 요소를 사용할 수 있는 맥락:
table 요소의 자식 요소로, captioncolgroup 요소 이후, tbody, tfoot, tr 요소들 이전에 위치해야 합니다. 그러나 table 요소의 자식 요소로 다른 thead 요소가 없을 경우에만 해당됩니다.
콘텐츠 모델:
tr 요소와 스크립트 지원 요소를 0개 이상 포함할 수 있습니다.
텍스트/HTML에서 태그 생략:
thead 요소의 종료 태그thead 요소 뒤에 바로 tbody 또는 tfoot 요소가 올 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLTableSectionElement 사용.

thead 요소는 대표로서 부모 table 요소의 열 머리글(헤더)과 보조 비헤더 셀들로 구성된 행 그룹을 나타냅니다. thead 요소가 부모를 가지며, 그 부모가 table인 경우에 해당합니다.

thead 요소는 테이블 모델에 참여합니다.

이 예시는 thead 요소의 사용 예시를 보여줍니다. thtd 요소가 thead 요소 내에서 사용된 것을 확인할 수 있습니다: 첫 번째 행은 헤더이고, 두 번째 행은 테이블 작성 방법에 대한 설명입니다.

<table>
 <caption> School auction sign-up sheet </caption>
 <thead>
  <tr>
   <th><label for=e1>Name</label>
   <th><label for=e2>Product</label>
   <th><label for=e3>Picture</label>
   <th><label for=e4>Price</label>
  <tr>
   <td>Your name here
   <td>What are you selling?
   <td>Link to a picture
   <td>Your reserve price
 <tbody>
  <tr>
   <td>Ms Danus
   <td>Doughnuts
   <td><img src="https://example.com/mydoughnuts.png" title="Doughnuts from Ms Danus">
   <td>$45
  <tr>
   <td><input id=e1 type=text name=who required form=f>
   <td><input id=e2 type=text name=what required form=f>
   <td><input id=e3 type=url name=pic form=f>
   <td><input id=e4 type=number step=0.01 min=0 value=0 required form=f>
</table>
<form id=f action="/auction.cgi">
 <input type=button name=add value="Submit">
</form>

4.9.7 tfoot 요소

Element/tfoot

모든 최신 브라우저 엔진에서 지원합니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 맥락:
table 요소의 자식 요소로, caption, colgroup, thead, tbody, tr 요소들 이후에 위치해야 합니다. 그러나 table 요소의 자식 요소로 다른 tfoot 요소가 없을 경우에만 해당됩니다.
콘텐츠 모델:
tr 요소와 스크립트 지원 요소를 0개 이상 포함할 수 있습니다.
텍스트/HTML에서 태그 생략:
tfoot 요소의 종료 태그는 부모 요소에 더 이상 콘텐츠가 없는 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
HTMLTableSectionElement 사용.

tfoot 요소는 부모 table 요소의 열 요약(푸터)으로 구성된 행 그룹을 나타냅니다. tfoot 요소가 부모를 가지며, 그 부모가 table인 경우에 해당합니다.

tfoot 요소는 테이블 모델에 참여합니다.

4.9.8 tr 요소

Element/tr

모든 최신 브라우저 엔진에서 지원합니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer지원
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLTableRowElement

모든 최신 브라우저 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 맥락:
thead 요소의 자식으로.
tbody 요소의 자식으로.
tfoot 요소의 자식으로.
table 요소의 자식으로, caption, colgroup, thead 요소들 이후에 위치하지만, tbody 요소가 없는 경우에만 해당됩니다.
콘텐츠 모델:
td, th, 스크립트 지원 요소를 0개 이상 포함할 수 있습니다.
텍스트/HTML에서 태그 생략:
tr 요소의 종료 태그tr 요소가 바로 다음에 위치하거나, 부모 요소에 더 이상 콘텐츠가 없으면 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
접근성 고려사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTableRowElement : HTMLElement {
  [HTMLConstructor] constructor();

  readonly attribute long rowIndex;
  readonly attribute long sectionRowIndex;
  [SameObject] readonly attribute HTMLCollection cells;
  HTMLTableCellElement insertCell(optional long index = -1);
  [CEReactions] undefined deleteCell(long index);

  // 사용되지 않는 멤버 포함
};

tr 요소는 테이블 내의 나타냅니다.

tr 요소는 테이블 모델에 참여합니다.

tr.rowIndex

HTMLTableRowElement/rowIndex

모든 최신 브라우저 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

행의 위치를 테이블의 rows 목록에서 반환합니다.

요소가 테이블에 없으면 -1을 반환합니다.

tr.sectionRowIndex

행의 위치를 테이블 섹션의 rows 목록에서 반환합니다.

요소가 테이블 섹션에 없으면 -1을 반환합니다.

tr.cells

이 행의 HTMLCollection을 반환하며, 필터는 이 요소의 자식인 tdth 요소만 일치합니다.

cell = tr.insertCell([ index ])

HTMLTableRowElement/insertCell

모든 최신 브라우저 엔진에서 지원합니다.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (구버전)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

td 요소를 생성하여 인덱스 위치에 삽입하고 생성된 td 요소를 반환합니다.

위치는 행의 셀들에 상대적입니다. 인덱스 −1은 기본값으로, 인덱스가 생략된 경우 마지막에 삽입하는 것과 같습니다.

주어진 인덱스가 −1보다 작거나 셀 수보다 크면 "IndexSizeError" DOMException 예외가 발생합니다.

tr.deleteCell(index)

지정된 인덱스 위치의 td 또는 th 요소를 행에서 제거합니다.

위치는 행의 셀들에 상대적입니다. 인덱스 −1은 행의 마지막 셀을 삭제하는 것과 같습니다.

주어진 인덱스가 −1보다 작거나 셀 수보다 크거나 셀이 없으면 "IndexSizeError" DOMException 예외가 발생합니다.

rowIndex 속성은 이 요소에 부모 table 요소, 또는 부모 tbody, thead, tfoot 요소와 조부모 table 요소가 있는 경우, 해당 table 요소의 rows 컬렉션에서 이 tr 요소의 인덱스를 반환해야 합니다. 그러한 table 요소가 없다면, 이 속성은 −1을 반환해야 합니다.

sectionRowIndex 속성은 이 요소에 부모 table, tbody, thead, 또는 tfoot 요소가 있는 경우, 부모 요소의 rows 컬렉션에서 tr 요소의 인덱스를 반환해야 합니다 (테이블의 경우, 이는 HTMLTableElementrows 컬렉션입니다; 테이블 섹션의 경우, 이는 HTMLTableSectionElementrows 컬렉션입니다). 그러한 부모 요소가 없다면, 이 속성은 −1을 반환해야 합니다.

cells 속성은 이 tr 요소를 루트로 하고, 필터가 tdth 요소와 일치하는 HTMLCollection을 반환해야 하며, 이는 tr 요소의 자식 요소들만 필터링합니다.

insertCell(index) 메서드는 다음과 같이 동작해야 합니다:

  1. index가 -1보다 작거나 cells 컬렉션의 요소 수보다 크면 "IndexSizeError" DOMException을 발생시킵니다.

  2. tr 요소의 노드 문서, "td", 그리고 HTML 네임스페이스를 사용하여 요소를 생성한 결과를 table cell로 합니다.

  3. index가 -1과 같거나 cells 컬렉션의 항목 수와 같으면 이 tr 요소에 table cell추가합니다.

  4. 그렇지 않으면 이 tr 요소의 자식으로 cells 컬렉션의 index번째 td 또는 th 요소 바로 앞에 table cell삽입합니다.

  5. table cell을 반환합니다.

deleteCell(index) 메서드는 다음과 같이 동작해야 합니다:

  1. index가 −1보다 작거나 cells 컬렉션의 요소 수보다 크거나 같으면, "IndexSizeError" DOMException을 던집니다.

  2. index가 −1이면, cells 컬렉션이 비어 있지 않은 경우, 마지막 요소를 제거하고, 그렇지 않으면 아무 것도 하지 않습니다.

  3. 그 외의 경우, cells 컬렉션의 index번째 요소를 부모로부터 제거합니다.

4.9.9 td 요소

Element/td

모든 현재 엔진에서 지원됨.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLTableCellElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
범주:
없음.
이 요소가 사용할 수 있는 문맥:
tr 요소의 자식으로서.
콘텐츠 모델:
플로우 콘텐츠.
text/html에서의 태그 생략:
td 요소의 종료 태그td 요소가 바로 뒤에 오거나 th 요소가 뒤따르거나 상위 요소에 더 이상 콘텐츠가 없으면 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
colspan — 셀이 걸쳐야 하는 열 수
rowspan — 셀이 걸쳐야 하는 행 수
headers — 이 셀의 헤더 셀
접근성 고려 사항:
저자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLTableCellElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect, ReflectDefault=1, ReflectRange=(1, 1000)] attribute unsigned long colSpan;
  [CEReactions, Reflect, ReflectDefault=1, ReflectRange=(0, 65534)] attribute unsigned long rowSpan;
  [CEReactions, Reflect] attribute DOMString headers;
  readonly attribute long cellIndex;

  [CEReactions] attribute DOMString scope; // only conforming for th elements
  [CEReactions, Reflect] attribute DOMString abbr;  // only conforming for th elements

  // also has obsolete members
};

HTMLTableCellElement 인터페이스는 th 요소에도 사용됩니다.

td 요소는 테이블의 데이터 을 나타냅니다.

td 요소와 그 colspan, rowspan, headers 속성은 테이블 모델에 참여합니다.

사용자 에이전트는 특히 비시각적 환경에서 또는 테이블을 2D 그리드로 표시하는 것이 비실용적인 경우 셀의 내용을 렌더링할 때 셀의 위치를 제공하거나 셀의 헤더 셀을 나열하는 등의 방법으로 셀에 대한 사용자의 컨텍스트를 제공할 수 있습니다(셀의 헤더 셀을 할당하는 알고리즘에 의해 결정됨). 셀의 헤더 셀이 나열될 때, 사용자 에이전트는 해당 헤더 셀에 abbr 속성 값이 있는 경우 해당 값을 대신 사용할 수 있습니다.

이 예제에서는 편집 가능한 셀 그리드(본질적으로 간단한 스프레드시트)로 구성된 웹 애플리케이션의 스니펫을 보여줍니다. 셀 중 하나는 위의 셀의 합계를 표시하도록 설정되었습니다. 셋은 제목으로 표시되며, th 요소 대신 td 요소를 사용합니다. 스크립트가 이 요소에 이벤트 핸들러를 연결하여 합계를 유지합니다.

<table>
 <tr>
  <th><input value="Name">
  <th><input value="Paid ($)">
 <tr>
  <td><input value="Jeff">
  <td><input value="14">
 <tr>
  <td><input value="Britta">
  <td><input value="9">
 <tr>
  <td><input value="Abed">
  <td><input value="25">
 <tr>
  <td><input value="Shirley">
  <td><input value="2">
 <tr>
  <td><input value="Annie">
  <td><input value="5">
 <tr>
  <td><input value="Troy">
  <td><input value="5">
 <tr>
  <td><input value="Pierce">
  <td><input value="1000">
 <tr>
  <th><input value="Total">
  <td><output value="1060">
</table>

4.9.10 th 요소

Element/th

모든 현재 엔진에서 지원됩니다.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
없음.
이 요소를 사용할 수 있는 문맥:
tr 요소의 자식 요소로 사용.
콘텐츠 모델:
플로우 콘텐츠, 하지만 header, footer, 섹셔닝 콘텐츠, 또는 헤딩 콘텐츠 자손은 없음.
text/html에서 태그 생략:
th 요소의 종료 태그th 요소가 즉시 td 또는 th 요소로 이어지거나 부모 요소에 더 이상 콘텐츠가 없을 경우 생략할 수 있습니다.
콘텐츠 속성:
전역 속성
colspan — 셀이 걸쳐야 할 열의 수
rowspan — 셀이 걸쳐야 할 행의 수
headers — 이 셀에 대한 헤더 셀
scope — 헤더 셀이 적용되는 셀을 지정
abbr — 다른 문맥에서 셀을 참조할 때 사용할 대체 레이블
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
HTMLTableCellElement를 사용하며, td 요소에 대해 정의됩니다.

th 요소는 테이블에서 헤더 을 나타냅니다.

th 요소는 scope 콘텐츠 속성을 가질 수 있습니다.

scope 속성은 다음과 같은 키워드와 상태를 가지는 열거형 속성입니다:

키워드 상태 간략한 설명
row Row 헤더 셀은 동일한 행의 일부 후속 셀에 적용됩니다.
col Column 헤더 셀은 동일한 열의 일부 후속 셀에 적용됩니다.
rowgroup Row Group 헤더 셀은 행 그룹의 모든 남은 셀에 적용됩니다.
colgroup Column Group 헤더 셀은 열 그룹의 모든 남은 셀에 적용됩니다.

이 속성의 누락된 값 기본값유효하지 않은 값 기본값은 모두 Auto 상태입니다. (이 상태에서는 헤더 셀이 문맥에 따라 선택된 셀 집합에 적용됩니다.)

th 요소의 scope 속성은 요소가 행 그룹에 연결되지 않은 경우 행 그룹 상태에 있어서는 안 되며, 요소가 열 그룹에 연결되지 않은 경우 열 그룹 상태에 있어서는 안 됩니다.

th 요소는 abbr 콘텐츠 속성을 지정할 수 있습니다. 이 값은 셀을 다른 문맥에서 참조할 때 사용되는 헤더 셀의 대체 라벨이어야 합니다 (예: 데이터 셀에 적용되는 헤더 셀을 설명할 때). 일반적으로 전체 헤더 셀의 약어 형태이지만, 확장되거나 단순히 다른 표현일 수도 있습니다.

th 요소와 그 colspan, rowspan, headers, 그리고 scope 속성은 테이블 모델에 참여합니다.

다음 예제는 scope 속성의 rowgroup 값이 헤더 셀이 적용되는 데이터 셀에 어떻게 영향을 미치는지를 보여줍니다.

다음은 테이블을 나타내는 마크업 조각입니다:

<table>
<thead>
<tr> <th> ID <th> 측정 <th> 평균 <th> 최대값
<tbody>
<tr> <td> <th scope=rowgroup> 고양이 <td> <td>
<tr> <td> 93 <th> 다리 <td> 3.5 <td> 4
<tr> <td> 10 <th> 꼬리 <td> 1 <td> 1
<tbody>
<tr> <td> <th scope=rowgroup> 영어 사용자 <td> <td>
<tr> <td> 32 <th> 다리 <td> 2.67 <td> 4
<tr> <td> 35 <th> 꼬리 <td> 0.33 <td> 1
</table>

이것은 다음과 같은 테이블을 생성합니다:

ID 측정 평균 최대값
고양이
93 다리 3.5 4
10 꼬리 1 1
영어 사용자
32 다리 2.67 4
35 꼬리 0.33 1

첫 번째 행의 헤더는 모두 열의 아래쪽으로 직접 적용됩니다.

Row Group 상태의 scope 속성을 가진 헤더는 첫 번째 열에 있는 셀을 제외한 행 그룹의 모든 셀에 적용됩니다.

나머지 헤더는 오른쪽에 있는 셀에만 적용됩니다.

4.9.11 tdth 요소에 공통된 속성

tdth 요소에는 colspan 콘텐츠 속성이 지정될 수 있으며, 그 값은 0보다 크고 1000 이하인 유효한 0이 아닌 정수이어야 합니다.

tdth 요소에는 또한 rowspan 콘텐츠 속성이 지정될 수 있으며, 그 값은 65534 이하의 유효한 0이 아닌 정수이어야 합니다. 이 속성의 값이 0인 경우 셀이 행 그룹의 남은 모든 행에 걸쳐야 함을 의미합니다.

이 속성들은 각각 셀이 걸칠 열과 행의 수를 나타냅니다. 이러한 속성들은 테이블 모델 설명에서 언급된 대로 셀이 겹치도록 사용해서는 안 됩니다.


tdth 요소에는 headers 콘텐츠 속성이 지정될 수 있습니다. 이 headers 속성이 지정된 경우, 그 값은 고유한 공백으로 구분된 토큰들의 정렬되지 않은 집합으로 구성된 문자열이어야 하며, 그 중 어떤 것도 서로 동일하지 않아야 하며 각 토큰은 th 요소의 ID 값을 가져야 하며, 이 td 또는 th 요소가 테이블 모델에서 정의된 동일한 테이블에 참여해야 합니다.

th 요소는 ID id를 가지고 있을 때, 동일한 table 내에서 headers 속성의 값에 하나의 토큰으로 해당 ID id를 포함하는 tdth 요소들에 의해 직접 타겟팅된다고 합니다. th 요소 Ath 또는 td 요소 B에 의해 타겟팅되었다고 합니다. 이는 AB에 의해 직접 타겟팅되었거나, 또는 B에 의해 타겟팅된 요소 C가 존재하고 AC에 의해 직접 타겟팅되는 경우입니다.

th 요소는 스스로 대상화되어서는 안 됩니다.

colspan, rowspan, 그리고 headers 속성들은 테이블 모델에 참여합니다.


cell.cellIndex

셀의 위치를 행의 cells 목록에서 반환합니다. 이는 셀이 테이블에서 x-축에 있는 위치와 반드시 일치하는 것은 아닙니다. 앞서 있는 셀이 여러 행이나 열에 걸칠 수 있기 때문입니다.

요소가 행에 포함되지 않은 경우 -1을 반환합니다.

cellIndex IDL 속성은 요소가 부모 tr 요소를 가지고 있는 경우, 부모 요소의 cells 컬렉션에서 셀 요소의 인덱스를 반환해야 합니다. 그러한 부모 요소가 없는 경우, 속성은 -1을 반환해야 합니다.

scope IDL 속성은 같은 이름의 콘텐츠 속성을 반영해야 하며, 알려진 값만으로 제한됩니다.

4.9.12 처리 모델

다양한 테이블 요소와 그 콘텐츠 속성들은 함께 테이블 모델을 정의합니다.

테이블은 좌표 (x, y)를 가진 슬롯의 2차원 그리드에 정렬된 셀로 구성됩니다. 그리드는 유한하며, 비어 있거나 하나 이상의 슬롯을 가질 수 있습니다. 그리드에 하나 이상의 슬롯이 있는 경우, x 좌표는 항상 0 ≤ x < xwidth 범위에 있고, y 좌표는 항상 0 ≤ y < yheight 범위에 있습니다. xwidthyheight 중 하나 또는 둘 다 0인 경우, 테이블은 비어 있습니다(슬롯이 없습니다). 테이블은 table 요소에 해당합니다.

은 특정 widthheight를 가진 슬롯의 집합으로, 셀이 cellx, celly 슬롯에 앵커링되어 있어 cellxx < cellx+widthcellyy < celly+height인 좌표의 모든 슬롯을 커버합니다. 셀은 데이터 셀 또는 헤더 셀이 될 수 있습니다. 데이터 셀은 td 요소에, 헤더 셀은 th 요소에 해당합니다. 두 유형의 셀 모두 하나 이상의 연관된 헤더 셀을 가질 수 있습니다.

일부 오류 상황에서는 두 개의 셀이 동일한 슬롯을 차지할 수 있습니다.

은 특정 y 값에 대해 x=0에서 x=xwidth-1까지 슬롯의 완전한 집합입니다. 행은 보통 tr 요소에 해당하지만, 행 그룹은 여러 행에 걸친 셀과 관련된 경우 끝에 일부 암시된 을 가질 수 있습니다.

은 특정 x 값에 대해 y=0에서 y=yheight-1까지 슬롯의 완전한 집합입니다. 열은 col 요소에 해당할 수 있습니다. col 요소가 없는 경우 열은 암시적으로 생성됩니다.

행 그룹은 (0, groupy) 슬롯에 앵커링된 의 집합으로, 특정 height를 가지고 0 ≤ x < xwidthgroupyy < groupy+height인 좌표의 모든 슬롯을 커버합니다. 행 그룹은 tbody, thead, 그리고 tfoot 요소에 해당합니다. 모든 행이 반드시 행 그룹에 속하는 것은 아닙니다.

열 그룹은 (groupx, 0) 슬롯에 앵커링된 의 집합으로, 특정 width를 가지고 groupxx < groupx+width0 ≤ y < yheight인 좌표의 모든 슬롯을 커버합니다. 열 그룹은 colgroup 요소에 해당합니다. 모든 열이 반드시 열 그룹에 속하는 것은 아닙니다.

행 그룹은 서로 겹칠 수 없습니다. 마찬가지로, 열 그룹도 서로 겹칠 수 없습니다.

은 두 개 이상의 행 그룹에 걸쳐 있는 슬롯을 커버할 수 없습니다. 그러나 셀이 여러 열 그룹에 속할 수는 있습니다. 하나의 셀을 구성하는 모든 슬롯은 0개 또는 1개의 행 그룹 및 0개 이상의 열 그룹에 속합니다.

, , , 행 그룹, 열 그룹 외에도, 테이블에는 caption 요소가 연결될 수 있습니다. 이는 테이블에 제목이나 설명을 제공합니다.

테이블 모델 오류table 요소 및 그 하위 요소로 표현된 데이터의 오류입니다. 문서에는 테이블 모델 오류가 없어야 합니다.

4.9.12.1 테이블 구성하기

table 요소와 연결된 테이블에서 어떤 요소가 어떤 슬롯에 해당하는지, 테이블의 크기(xwidthyheight)를 결정하고, 테이블 모델 오류가 있는지 여부를 확인하려면, 사용자 에이전트는 다음 알고리즘을 사용해야 합니다:

  1. xwidth를 0으로 설정합니다.

  2. yheight를 0으로 설정합니다.

  3. 보류 중인 tfoot 요소들을, 초기에는 비어 있는 tfoot 요소들의 목록으로 설정합니다.

  4. the tabletable 요소로 표현된 테이블로 설정합니다. xwidthyheight 변수는 the table의 크기를 나타냅니다. the table은 초기에는 비어 있습니다.

  5. table 요소에 자식 요소가 없으면, the table을 반환합니다 (이 경우 테이블은 비어 있습니다).

  6. table 요소의 첫 번째 caption 자식 요소를 the table에 연결합니다. 그러한 자식이 없으면, 연결된 caption 요소가 없습니다.

  7. current elementtable 요소의 첫 번째 자식 요소로 설정합니다.

    이 알고리즘의 어떤 단계에서 current elementtable의 다음 자식으로 이동해야 할 때, 다음 자식이 없는 경우, 사용자 에이전트는 이 알고리즘의 끝부분에 있는 단계로 이동해야 합니다.

  8. current element가 다음 요소 중 하나가 아닐 때, table의 다음 자식으로 이동합니다:

  9. current elementcolgroup 요소인 경우, 다음 하위 단계를 따릅니다:

    1. 열 그룹: current element를 다음의 적절한 경우에 따라 처리합니다:

      current elementcol 자식 요소를 가진 경우

      다음 단계를 따릅니다:

      1. xstartxwidth 값을 설정합니다.

      2. current columncolgroup 요소의 첫 번째 col 자식 요소로 설정합니다.

      3. : current column col 요소에 span 속성이 있는 경우, 음수가 아닌 정수의 구문 분석 규칙을 사용하여 그 값을 구문 분석합니다.

        값의 구문 분석 결과가 오류가 아니거나 0이 아니면 span을 그 값으로 설정합니다.

        그렇지 않고 col 요소에 span 속성이 없거나, 속성 값을 구문 분석하려는 시도가 오류나 0을 반환한 경우, span을 1로 설정합니다.

        span이 1000을 초과하면 1000으로 설정합니다.

      4. xwidthspan만큼 증가시킵니다.

      5. 테이블의 마지막 span current column col 요소에 해당합니다.

      6. current columncolgroup 요소의 마지막 col 자식 요소가 아닌 경우, current columncolgroup 요소의 다음 col 자식 요소로 설정하고, 이라는 레이블이 붙은 단계로 돌아갑니다.

      7. 테이블의 마지막 x=xstart부터 x=xwidth-1까지 새로운 열 그룹을 형성하며, 슬롯 (xstart, 0)에 앵커링되고, 너비는 xwidth-xstartcolgroup 요소에 해당합니다.

      current elementcol 자식 요소가 없는 경우
      1. colgroup 요소에 span 속성이 있는 경우, 음수가 아닌 정수의 구문 분석 규칙을 사용하여 그 값을 구문 분석합니다.

        값의 구문 분석 결과가 오류가 아니거나 0이 아니면 span을 그 값으로 설정합니다.

        그렇지 않고 colgroup 요소에 span 속성이 없거나, 속성 값을 구문 분석하려는 시도가 오류나 0을 반환한 경우, span을 1로 설정합니다.

        span이 1000을 초과하면 1000으로 설정합니다.

      2. xwidthspan만큼 증가시킵니다.

      3. 테이블의 마지막 span 이 새로운 열 그룹을 형성하며, 슬롯 (xwidth-span, 0)에 앵커링되고, 너비는 span으로 설정됩니다. 이 그룹은 colgroup 요소에 해당합니다.

    2. 현재 요소table의 다음 자식으로 이동합니다.

    3. current element가 다음 요소 중 하나가 아닐 때, table의 다음 자식으로 이동합니다:

    4. current elementcolgroup 요소인 경우, 위의 열 그룹 단계로 이동합니다.

  10. ycurrent를 0으로 설정합니다.

  11. list of downward-growing cells을 빈 목록으로 설정합니다.

  12. : current element가 다음 요소 중 하나가 아닐 때, table의 다음 자식으로 이동합니다:

  13. current elementtr인 경우, 행 처리 알고리즘을 실행하고, current elementtable의 다음 자식으로 이동한 후, 단계로 돌아갑니다.

  14. 행 그룹 종료 알고리즘을 실행합니다.

  15. current elementtfoot인 경우, 해당 요소를 보류 중인 tfoot 요소들 목록에 추가하고, current elementtable의 다음 자식으로 이동한 후, 단계로 돌아갑니다.

  16. current elementthead 또는 tbody입니다.

    행 그룹 처리 알고리즘을 실행합니다.

  17. current elementtable의 다음 자식으로 이동합니다.

  18. 단계로 돌아갑니다.

  19. : 트리 순서에 따라 보류 중인 tfoot 요소들 목록에 있는 각 tfoot 요소에 대해 행 그룹 처리 알고리즘을 실행합니다.

  20. 테이블 내에 이 연결되지 않은 슬롯만 포함하는 이나 이 있는 경우, 이는 테이블 모델 오류입니다.

  21. the table을 반환합니다.

위의 단계 세트에서 thead, tbodytfoot 요소를 처리하기 위해 호출되는 행 그룹 처리 알고리즘은 다음과 같습니다:

  1. ystartyheight 값을 설정합니다.

  2. 처리 중인 요소의 자식인 각 tr 요소에 대해 트리 순서로 행 처리 알고리즘을 실행합니다.

  3. yheightystart보다 큰 경우, 테이블의 마지막 y=ystart에서 y=yheight-1까지 새로운 행 그룹을 형성하며, 슬롯의 좌표 (0, ystart)에 앵커링되고, 높이는 yheight-ystart로 설정됩니다. 이 그룹은 처리 중인 요소에 해당합니다.

  4. 행 그룹 종료 알고리즘을 실행합니다.

위의 단계 세트에서 행의 블록을 시작하고 종료할 때 호출되는 행 그룹 종료 알고리즘은 다음과 같습니다:

  1. ycurrentyheight보다 작은 동안, 다음 단계를 따릅니다:

    1. 아래로 확장되는 셀 확장 알고리즘을 실행합니다.

    2. ycurrent를 1씩 증가시킵니다.

  2. list of downward-growing cells을 비웁니다.

tr 요소를 처리하기 위해 위의 단계 세트에서 호출되는 행 처리 알고리즘은 다음과 같습니다:

  1. yheightycurrent와 같으면 yheight를 1씩 증가시킵니다. (ycurrentyheight보다 크지 않습니다.)

  2. xcurrent를 0으로 설정합니다.

  3. 아래로 확장되는 셀 확장 알고리즘을 실행합니다.

  4. 처리 중인 tr 요소에 td 또는 th 자식 요소가 없으면 ycurrent를 1씩 증가시키고, 이 단계 세트를 중단한 다음 위의 알고리즘으로 돌아갑니다.

  5. current cell을 처리 중인 tr 요소의 첫 번째 td 또는 th 자식 요소로 설정합니다.

  6. : xcurrentxwidth보다 작고 좌표 (xcurrent, ycurrent)를 가진 슬롯에 이미 셀이 할당되어 있는 동안, xcurrent를 1씩 증가시킵니다.

  7. xcurrentxwidth와 같으면 xwidth를 1씩 증가시킵니다. (xcurrentxwidth보다 크지 않습니다.)

  8. current cellcolspan 속성이 있는 경우, 그 속성의 값을 구문 분석하고, colspan을 결과로 설정합니다.

    값 구문 분석에 실패하거나 0을 반환했거나 속성이 없는 경우, colspan을 대신 1로 설정합니다.

    colspan이 1000을 초과하면 1000으로 설정합니다.

  9. current cellrowspan 속성이 있는 경우, 그 속성의 값을 구문 분석하고, rowspan을 결과로 설정합니다.

    값 구문 분석에 실패했거나 속성이 없는 경우, rowspan을 대신 1로 설정합니다.

    the-input-element:the-input-element

    rowspan이 65534를 초과하면 65534로 설정합니다.

  10. cell grows downward을 false로 설정한다.

  11. rowspan이 0이면, cell grows downward을 true로 설정하고 rowspan을 1로 설정한다.

  12. xwidth < xcurrent+colspan이면 xwidthxcurrent+colspan으로 설정합니다.

  13. yheight < ycurrent+rowspan이면 yheightycurrent+rowspan으로 설정합니다.

  14. 좌표 (x, y)를 가진 슬롯으로서 xcurrentx < xcurrent+colspanycurrenty < ycurrent+rowspan를 포함하는 슬롯을 새로운 c로 덮으며, 앵커링된 좌표는 (xcurrent, ycurrent)입니다. 이 셀의 너비는 colspan, 높이는 rowspan으로 설정되며, 현재 셀 요소에 해당합니다.

    current cell 요소가 th 요소인 경우, 이 새로운 셀 c는 헤더 셀이 되고, 그렇지 않으면 데이터 셀이 됩니다.

    current cell 요소에 적용되는 헤더 셀을 설정하려면, 다음 섹션에 설명된 헤더 셀 할당 알고리즘을 사용합니다.

    관련된 슬롯에 이미 이 덮여 있는 경우, 이는 테이블 모델 오류입니다. 이 슬롯들은 이제 두 개의 셀이 겹쳐집니다.

  15. cell grows downward이 true인 경우, c, xcurrent, colspan 튜플을 list of downward-growing cells에 추가합니다.

  16. xcurrentcolspan만큼 증가시킵니다.

  17. current cell이 처리 중인 tr 요소의 마지막 td 또는 th 자식 요소인 경우, ycurrent를 1씩 증가시키고, 이 단계 세트를 중단한 다음 위의 알고리즘으로 돌아갑니다.

  18. current cell을 처리 중인 tr 요소의 다음 td 또는 th 자식 요소로 설정합니다.

  19. 이라는 레이블이 붙은 단계로 돌아갑니다.

위의 알고리즘에서 아래로 확장되는 셀 확장 알고리즘을 실행해야 할 때, 사용자 에이전트는 list of downward-growing cells에 있는 각 {cell, cellx, width} 튜플에 대해, cell이 좌표 (x, ycurrent)를 가진 슬롯도 덮도록 확장합니다. 이때 cellxx < cellx+width 조건을 만족해야 합니다.

4.9.12.2 데이터 셀과 헤더 셀 간의 관계 형성

각 셀에는 0개 이상의 헤더 셀이 할당될 수 있습니다. 셀 principal cell에 헤더 셀을 할당하기 위한 헤더 셀 할당 알고리즘은 다음과 같습니다.

  1. header list를 빈 셀 목록으로 설정합니다.

  2. principalx, principalyprincipal cell이 고정된 슬롯의 좌표로 설정합니다.

  3. principal cellheaders 속성이 지정된 경우
    1. principal cellheaders 속성 값을 가져와 ASCII 공백으로 분리하여 id list를 얻은 토큰 목록으로 설정합니다.

    2. id list의 각 토큰에 대해, 해당 토큰과 동일한 ID를 가진 문서에서 첫 번째 요소가 동일한 테이블의 셀이며, 해당 셀이 principal cell이 아닌 경우 해당 셀을 header list에 추가합니다.

    principal cellheaders 속성이 지정되지 않은 경우
    1. principalwidthprincipal cell의 너비로 설정합니다.

    2. principalheightprincipal cell의 높이로 설정합니다.

    3. principaly에서 principaly+principalheight-1까지의 각 y 값에 대해 헤더 셀을 스캔하고 할당하는 내부 알고리즘을 실행합니다. 이때 principal cell, header list, 초기 좌표 (principalx, y), 그리고 증가량 Δx=−1Δy=0을 사용합니다.

    4. principalx에서 principalx+principalwidth-1까지의 각 x 값에 대해 헤더 셀을 스캔하고 할당하는 내부 알고리즘을 실행합니다. 이때 principal cell, header list, 초기 좌표 (x, principaly), 그리고 증가량 Δx=0Δy=−1을 사용합니다.

    5. principal cell행 그룹에 고정된 경우, 동일한 행 그룹에 고정된 행 그룹 헤더 셀들을 모두 header list에 추가합니다. 이때 x 좌표는 principalx+principalwidth-1 이하이고, y 좌표는 principaly+principalheight-1 이하이어야 합니다.

    6. principal cell열 그룹에 고정된 경우, 동일한 열 그룹에 고정된 열 그룹 헤더 셀들을 모두 header list에 추가합니다. 이때 x 좌표는 principalx+principalwidth-1 이하이고, y 좌표는 principaly+principalheight-1 이하이어야 합니다.

  4. 빈 셀header list에서 모두 제거합니다.

  5. header list에서 중복 항목을 모두 제거합니다.

  6. principal cellheader list에 포함되어 있으면 이를 제거합니다.

  7. header list에 있는 헤더를 principal cell에 할당합니다.

주어진 principal cell, header list, 초기 좌표 (initialx, initialy), Δx, Δy 증가량에 대해 헤더 셀을 스캔하고 할당하는 내부 알고리즘은 다음과 같습니다:

  1. xinitialx로 설정합니다.

  2. yinitialy로 설정합니다.

  3. opaque headers를 빈 셀 목록으로 설정합니다.

  4. principal cell이 헤더 셀인 경우

    in header block을 true로 설정하고, headers from current header blockprincipal cell만 포함하는 셀 목록으로 설정합니다.

    그 외의 경우

    in header block을 false로 설정하고, headers from current header block을 빈 셀 목록으로 설정합니다.

  5. Loop: Δx만큼 x를 증가시키고, Δy만큼 y를 증가시킵니다.

    이 알고리즘이 호출될 때마다 Δx와 Δy 중 하나는 −1이 되고, 다른 하나는 0이 됩니다.

  6. x 또는 y가 0보다 작으면 이 내부 알고리즘을 중단합니다.

  7. 슬롯 (x, y)을 덮는 셀이 없거나, 그 슬롯을 덮는 셀이 둘 이상 있으면 Loop로 돌아갑니다.

  8. 슬롯 (x, y)을 덮는 셀을 current cell로 설정합니다.

  9. current cell이 헤더 셀인 경우
    1. in header block을 true로 설정합니다.

    2. current cellheaders from current header block에 추가합니다.

    3. blocked을 false로 설정합니다.

    4. Δx가 0인 경우

      opaque headers 목록에 있는 셀이 current cell과 동일한 x 좌표로 고정되어 있고, current cell과 동일한 너비를 가진 경우 blocked를 true로 설정합니다.

      current cellcolumn header가 아닌 경우 blocked를 true로 설정합니다.

      Δy가 0인 경우

      opaque headers 목록에 있는 셀이 current cell과 동일한 y 좌표로 고정되어 있고, current cell과 동일한 높이를 가진 경우 blocked를 true로 설정합니다.

      current cellrow header가 아닌 경우 blocked를 true로 설정합니다.

    5. blocked가 false인 경우, current cellheader list에 추가합니다.

    current cell이 데이터 셀이면서 in header block이 true인 경우

    in header block을 false로 설정합니다. headers from current header block에 있는 모든 셀을 opaque headers 목록에 추가하고, headers from current header block 목록을 비웁니다.

  10. Loop로 돌아갑니다.

헤더 셀이 x, y 좌표에 고정되어 있고, widthheight를 가진 경우, 다음 조건 중 하나라도 충족되면 해당 셀은 column header로 간주됩니다:

헤더 셀이 x, y 좌표에 고정되어 있고, widthheight를 가진 경우, 다음 조건 중 하나라도 충족되면 해당 셀은 row header로 간주됩니다:

헤더 셀이 column group header로 간주되는 경우, 해당 셀의 scope 속성이 Column Group 상태인 경우입니다.

헤더 셀이 row group header로 간주되는 경우, 해당 셀의 scope 속성이 Row Group 상태인 경우입니다.

셀은 요소가 없고 자식 텍스트 콘텐츠ASCII 공백으로만 구성된 경우 empty cell로 간주됩니다.

4.9.13 예시

이 섹션은 비규범적입니다.

다음은 Smithsonian 물리 테이블, Volume 71의 표 45의 하단 부분을 마크업하는 방법을 보여줍니다:

<table>
 <caption>사양 값: <b>Steel</b>, <b>Castings</b>,
 Ann. A.S.T.M. A27-16, Class B;* P max. 0.06; S max. 0.05.</caption>
 <thead>
  <tr>
   <th rowspan=2>Grade.</th>
   <th rowspan=2>Yield Point.</th>
   <th colspan=2>Ultimate tensile strength</th>
   <th rowspan=2>Per cent elong. 50.8&nbsp;mm or 2&nbsp;in.</th>
   <th rowspan=2>Per cent reduct. area.</th>
  </tr>
  </tr>
   <th>kg/mm<sup>2</sup></th>
   <th>lb/in<sup>2</sup></th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Hard</td>
   <td>0.45 ultimate</td>
   <td>56.2</td>
   <td>80,000</td>
   <td>15</td>
   <td>20</td>
  </tr>
  <tr>
   <td>Medium</td>
   <td>0.45 ultimate</td>
   <td>49.2</td>
   <td>70,000</td>
   <td>18</td>
   <td>25</td>
  </tr>
  </tr>
   <td>Soft</td>
   <td>0.45 ultimate</td>
   <td>42.2</td>
   <td>60,000</td>
   <td>22</td>
   <td>30</td>
  </tr>
 </tbody>
</table>

이 표는 다음과 같이 보일 수 있습니다:

사양 값: Steel, Castings, Ann. A.S.T.M. A27-16, Class B;* P max. 0.06; S max. 0.05.
Grade. Yield Point. Ultimate tensile strength Per cent elong. 50.8 mm or 2 in. Per cent reduct. area.
kg/mm2 lb/in2
Hard 0.45 ultimate 56.2 80,000 15 20
Medium 0.45 ultimate 49.2 70,000 18 25
Soft 0.45 ultimate 42.2 60,000 22 30

다음은 Apple, Inc의 2008 회계연도 10-K 파일링의 46페이지에 있는 총 마진 표를 마크업하는 방법을 보여줍니다:

<table>
 <thead>
  <tr>
   <th><th>2008
   <th>2007
   <th>2006
 <tbody>
  <tr>
   <th>Net sales
   <td>$ 32,479
   <td>$ 24,006
   <td>$ 19,315
  </tr>
  <tr>
   <th>Cost of sales
   <td>  21,334
   <td>  15,852
   <td>  13,717
 </tbody>
  <tr>
   <th>Gross margin
   <td>$ 11,145
   <td>$  8,154
   <td>$  5,598
 <tfoot>
  <tr>
   <th>Gross margin percentage
   <td>34.3%
   <td>34.0%
   <td>29.0%
</table>

이 표는 다음과 같이 보일 수 있습니다:

2008 2007 2006
Net sales $ 32,479 $ 24,006 $ 19,315
Cost of sales 21,334 15,852 13,717
Gross margin $ 11,145 $ 8,154 $ 5,598
Gross margin percentage 34.3% 34.0% 29.0%

다음은 같은 페이지의 하단에 있는 운영 비용 표를 마크업하는 방법을 보여줍니다:

<table>
 <colgroup> <col>
 <colgroup> <col> <col> <col>
 <thead>
  <tr> <th> <th>2008 <th>2007 <th>2006
 </tr>
 </thead>
 <tbody>
  <tr> <th scope=rowgroup>Research and development
       <td> $ 1,109 <td> $ 782 <td> $ 712
  </tr>
  <tr> <th scope=row>Percentage of net sales
       <td> 3.4% <td> 3.3% <td> 3.7%
 </tr>
 </tbody>
 </tbody>
 </table>

이 표는 다음과 같이 보일 수 있습니다:

2008 2007 2006
Research and development $ 1,109 $ 782 $ 712
Percentage of net sales 3.4% 3.3% 3.7%
Selling, general, and administrative $ 3,761 $ 2,963 $ 2,433
Percentage of net sales 11.6% 12.3% 12.6%

4.10 양식

Element#Forms

모든 최신 엔진에서 지원됩니다.

Firefox4+ Safari4+ Chrome61+
Opera52+ Edge79+
Edge (Legacy)16+ Internet Explorer10+
Firefox Android5+ Safari iOS3.2+ Chrome Android61+ WebView Android61+ Samsung Internet8.0+ Opera Android47+

4.10.1 소개

이 섹션은 비규범적입니다.

폼은 텍스트, 버튼, 체크박스, 범위, 또는 색상 선택 컨트롤과 같은 폼 컨트롤이 포함된 웹 페이지의 구성 요소입니다. 사용자는 이러한 폼과 상호 작용하여 서버로 전송할 수 있는 데이터를 제공할 수 있습니다(예: 검색 결과 또는 계산 결과 반환). 많은 경우에 클라이언트 측 스크립팅이 필요하지 않지만, 스크립트가 사용자 경험을 증대시키거나 데이터를 서버에 제출하는 것 외의 목적으로 폼을 사용할 수 있도록 API가 제공됩니다.

폼 작성은 사용자 인터페이스 작성, 서버 측 처리 구현, 사용자 인터페이스를 서버와 통신하도록 설정하는 등의 여러 단계를 포함하며, 이들은 어떤 순서로도 수행할 수 있습니다.

4.10.1.1 폼의 사용자 인터페이스 작성

이 섹션은 비규범적입니다.

이 간단한 소개의 목적으로, 피자 주문 폼을 작성해 보겠습니다.

모든 폼은 form 요소로 시작하며, 그 안에 컨트롤이 배치됩니다. 대부분의 컨트롤은 기본적으로 텍스트 컨트롤을 제공하는 input 요소로 표현됩니다. 컨트롤에 레이블을 지정하려면 label 요소를 사용합니다. 레이블 텍스트와 컨트롤 자체는 label 요소 내에 배치됩니다. 폼의 각 부분은 단락으로 간주되며, 일반적으로 다른 부분과 p 요소를 사용하여 분리됩니다. 이를 조합하여 고객의 이름을 요청하는 방법은 다음과 같습니다:

<form>
 <p><label>고객 이름: <input></label></p>
</form>

사용자가 피자 크기를 선택할 수 있도록 하기 위해, 라디오 버튼 세트를 사용할 수 있습니다. 라디오 버튼은 또한 input 요소를 사용하며, 이 경우 type 속성의 값이 radio로 설정됩니다. 라디오 버튼을 그룹으로 작동하게 하려면 name 속성을 사용하여 공통 이름을 부여합니다. 라디오 버튼과 같은 컨트롤 배치를 그룹화하려면 fieldset 요소를 사용할 수 있습니다. 이러한 컨트롤 그룹의 제목은 fieldset의 첫 번째 요소이며, legend 요소가 되어야 합니다.

<form>
 <p><label>고객 이름: <input></label></p>
 <fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size> 소형 </label></p>
  <p><label> <input type=radio name=size> 중형 </label></p>
  <p><label> <input type=radio name=size> 대형 </label></p>
 </fieldset>
</form>

사용자가 토핑을 선택할 수 있도록 하기 위해, 체크박스를 사용할 수 있습니다. 체크박스는 input 요소를 사용하며, type 속성의 값이 checkbox로 설정됩니다:

<form>
 <p><label>고객 이름: <input></label></p>
 <fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size> 소형 </label></p>
  <p><label> <input type=radio name=size> 중형 </label></p>
  <p><label> <input type=radio name=size> 대형 </label></p>
 </fieldset>
 <fieldset>
  <legend> 피자 토핑 </legend>
  <p><label> <input type=checkbox> 베이컨 </label></p>
  <p><label> <input type=checkbox> 추가 치즈 </label></p>
  <p><label> <input type=checkbox> 양파 </label></p>
  <p><label> <input type=checkbox> 버섯 </label></p>
 </fieldset>
</form>

이 폼이 작성되는 피자 가게는 항상 실수를 저지르기 때문에 고객과 연락할 방법이 필요합니다. 이를 위해 전화번호 (input 요소와 type 속성을 tel로 설정한 경우)와 이메일 주소 (input 요소와 type 속성을 email로 설정한 경우)를 위한 폼 컨트롤을 사용할 수 있습니다:

<form>
 <p><label>고객 이름: <input></label></p>
 <p><label>전화번호: <input type=tel></label></p>
 <p><label>이메일 주소: <input type=email></label></p>
 <fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size> 소형 </label></p>
  <p><label> <input type=radio name=size> 중형 </label></p>
  <p><label> <input type=radio name=size> 대형 </label></p>
 </fieldset>
 <fieldset>
  <legend> 피자 토핑 </legend>
  <p><label> <input type=checkbox> 베이컨 </label></p>
  <p><label> 추가 치즈 </input type=checkbox></label></p>
  <p><label> 양파 </input type=checkbox></label></p>
  <p><label> 버섯 </input type=checkbox></label></p>
 </fieldset>
 <p><label>선호하는 배달 시간: <input type=time min="11:00" max="21:00" step="900"></label></p>
</form>

textarea 요소를 사용하여 다중 줄 텍스트 컨트롤을 제공할 수 있습니다. 이번에는 고객이 배달 지침을 제공할 수 있는 공간으로 사용할 것입니다:

<form>
 <p><label>고객 이름: <input></label></p>
 <p><label>전화번호: <input type=tel></label></p>
 <p><label>이메일 주소: <input type=email></label></p>
 <fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size> 소형 </label></p>
  <p><label> <input type=radio name=size> 중형 </label></p>
  <p><label> <input type=radio name=size> 대형 </label></p>
 </fieldset>
 <fieldset>
  <legend> 피자 토핑 </legend>
  <p><label> <input type=checkbox> 베이컨 </label></p>
  <p><label> 추가 치즈 </input type=checkbox></label></p>
  <p><label> 양파 </input type=checkbox></label></p>
  <p><label> 버섯 </input type=checkbox></label></p>
 </fieldset>
 <p><label>선호하는 배달 시간: <input type=time min="11:00" max="21:00" step="900"></label></p>
 <p><label>배달 지침: <textarea></textarea></label></p>
</form>

마지막으로, 폼을 제출할 수 있게 하기 위해 button 요소를 사용합니다:

<form>
 <p><label>Customer name: <input></label></p>
 <p><label>Telephone: <input type=tel></label></p>
 <p><label>Email address: <input type=email></label></p>
 <fieldset>
  <legend> Pizza Size </legend>
  <p><label> <input type=radio name=size> Small </label></p>
  <p><label> <input type=radio name=size> Medium </label></p>
  <p><label> <input type=radio name=size> Large </label></p>
 </fieldset>
 <fieldset>
  <legend> Pizza Toppings </legend>
  <p><label> <input type=checkbox> Bacon </label></p>
  <p><label> <input type=checkbox> Extra Cheese </label></p>
  <p><label> <input type=checkbox> Onion </label></p>
  <p><label> <input type=checkbox> Mushroom </label></p>
 </fieldset>
 <p><label>Preferred delivery time: <input type=time min="11:00" max="21:00" step="900"></label></p>
 <p><label>Delivery instructions: <textarea></textarea></label></p>
 <p><button>Submit order</button></p>
</form>
4.10.1.2 폼의 서버 측 처리 구현

이 섹션은 비규범적입니다.

서버 측 처리기를 작성하는 구체적인 세부 사항은 이 명세의 범위를 벗어납니다. 이 소개를 위해 우리는 https://pizza.example.com/order.cgi에 있는 스크립트가 application/x-www-form-urlencoded 형식을 사용하여 제출을 수락하도록 구성되었으며, HTTP POST 본문에서 다음 매개변수를 수신할 것으로 가정합니다.

custname
고객의 이름
custtel
고객의 전화번호
custemail
고객의 이메일 주소
size
피자의 크기, small, medium, large 중 하나
topping
토핑, 선택된 토핑마다 한 번씩 지정하며, 허용되는 값은 bacon, cheese, onion, mushroom입니다.
delivery
요청된 배달 시간
comments
배달 지침
4.10.1.3 폼이 서버와 통신하도록 구성하기

이 섹션은 비규범적입니다.

폼 제출은 서버에 다양한 방법으로 노출되며, 가장 일반적으로는 HTTP GET 또는 POST 요청으로 이루어집니다. 사용된 정확한 방법을 지정하려면, method 속성을 form 요소에 지정합니다. 이는 폼 데이터가 어떻게 인코딩되는지를 지정하지 않습니다. 이를 지정하려면, enctype 속성을 사용합니다. 또한 제출된 데이터를 처리할 서비스의 URLaction 속성을 사용하여 지정해야 합니다.

제출하려는 각 폼 컨트롤에는 제출 시 데이터를 참조하는 데 사용되는 이름을 지정해야 합니다. 이전에 라디오 버튼 그룹에 대해 이름을 지정했습니다. 동일한 속성(name)이 제출 시 사용할 이름을 지정하는 데 사용됩니다. 라디오 버튼을 서로 구분하기 위해서는 value 속성을 사용하여 값을 다르게 지정할 수 있습니다.

여러 컨트롤이 동일한 이름을 가질 수 있습니다. 예를 들어, 여기에서는 모든 체크박스에 동일한 이름을 지정하고, 서버는 해당 이름과 함께 제출된 값으로 체크된 항목을 구분합니다. 라디오 버튼과 마찬가지로, 이들은 value 속성을 사용하여 고유한 값을 지정합니다.

이전 섹션에서 설정된 내용에 따르면, 결과는 다음과 같습니다.

<form method="post"
  enctype="application/x-www-form-urlencoded"
  action="https://pizza.example.com/order.cgi">
<p><label>고객 이름: <input name="custname"></label></p>
<p><label>전화 번호: <input type=tel name="custtel"></label></p>
<p><label>이메일 주소: <input type=email name="custemail"></label></p>
<fieldset>
 <legend> 피자 크기 </legend>
 <p><label> <input type=radio name=size value="small"> Small </label></p>
 <p><label> <input type=radio name=size value="medium"> Medium </label></p>
 <p><label> <input type=radio name=size value="large"> Large </label></p>
</fieldset>
</fieldset>
<fieldset>
 <legend> 피자 토핑 </legend>
 <p><label> <input type=checkbox name="topping" value="bacon"> Bacon </label></p>
 <p><label> <input type=checkbox name="topping" value="cheese"> Extra Cheese </label></p>
 <p><label> <input type=checkbox name="topping" value="onion"> Onion </label></p>
 </fieldset>
</fieldset>
</form>

어떤 속성 값이 인용부호로 묶여 있고 그렇지 않은 것에는 특별한 의미가 없습니다. HTML 구문은 다양한 동등하게 유효한 방법으로 속성을 지정할 수 있으며, 이는 구문 섹션에서 다루고 있습니다. 구문 섹션에서 설명합니다.

예를 들어, 고객이 "Denise Lawrence"라는 이름을 입력하고, "555-321-8642"라는 전화번호를 입력하고, 이메일 주소를 지정하지 않고, 중간 크기의 피자를 주문하고, Extra Cheese와 Mushroom 토핑을 선택하고, 배달 시간을 7pm으로 지정하고, 배달 지침 텍스트 컨트롤을 비워둔 경우, 사용자 에이전트는 온라인 웹 서비스에 다음과 같은 데이터를 제출합니다:

custname=Denise+Lawrence&custtel=555-321-8642&custemail=&size=medium&topping=cheese&topping=mushroom&delivery=19%3A00&comments=
4.10.1.4 클라이언트 측 폼 검증

Form_validation

모든 최신 엔진에서 지원됩니다.

Firefox4+Safari5+Chrome4+
Opera≤12.1+Edge79+
Edge (Legacy)12+Internet Explorer10+
Firefox Android?Safari iOS4+Chrome Android?WebView Android≤37+Samsung Internet?Opera Android≤12.1+

이 섹션은 규범적이지 않습니다.

폼은 사용자가 폼을 제출하기 전에 사용자 에이전트가 사용자의 입력을 확인하도록 주석을 달 수 있습니다. 서버는 여전히 입력이 유효한지 확인해야 하지만(악의적인 사용자는 쉽게 폼 검증을 우회할 수 있기 때문에), 사용자가 서버가 유일한 검증자가 되어 발생하는 대기 시간을 피할 수 있도록 합니다.

가장 간단한 주석은 required 속성으로, 이 속성은 input 요소에 지정할 수 있으며, 값을 제공하기 전에는 폼이 제출되지 않도록 합니다. 이 속성을 고객 이름, 피자 크기 및 배달 시간 필드에 추가하면, 사용자가 이러한 필드를 채우지 않고 폼을 제출할 때 사용자 에이전트가 사용자에게 알리도록 할 수 있습니다:

<form method="post"
      enctype="application/x-www-form-urlencoded"
      action="https://pizza.example.com/order.cgi">
 <p><label>고객 이름: <input name="custname" required></label></p>
 <p><label>전화번호: <input type=tel name="custtel"></label></p>
 <p><label>이메일 주소: <input type=email name="custemail"></label></p>
 <fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size required value="small"> 작은 </label></p>
  <p><label> <input type=radio name=size required value="medium"> 중간 </label></p>
  <p><label> <input type=radio name=size required value="large"></label></p>
 </fieldset>
 <fieldset>
  <legend> 피자 토핑 </legend>
  <p><label> <input type=checkbox name="topping" value="bacon"> 베이컨 </label></p>
  <p><label> <input type=checkbox name="topping" value="cheese"> 추가 치즈 </label></p>
  <p><label> <input type=checkbox name="topping" value="onion"> 양파 </label></p>
  <p><label> <input type=checkbox name="topping" value="mushroom"> 버섯 </label></p>
 </fieldset>
 <p><label>희망 배달 시간: <input type=time min="11:00" max="21:00" step="900" name="delivery" required></label></p>
 <p><label>배달 지침: <textarea name="comments"></textarea></label></p>
 <p><button>주문 제출</button></p>
</form>

입력의 길이를 제한할 수도 있으며, maxlength 속성을 사용하여 가능합니다. textarea 요소에 이 속성을 추가하여 사용자가 1000자까지 입력할 수 있도록 제한할 수 있습니다. 이를 통해 배달원에게 긴 글을 작성하지 않고 요점에 집중할 수 있도록 할 수 있습니다:

<form method="post"
      enctype="application/x-www-form-urlencoded"
      action="https://pizza.example.com/order.cgi">
 <p><label

>고객 이름: <input name="custname" required></label></p>
 <p><label>전화번호: <input type=tel name="custtel"></label></p>
 <p><label>이메일 주소: <input type=email name="custemail"></label></p>
 <fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size required value="small"> 작은 </label></p><p><label> <input type=radio name=size required value="medium"> 중간 </label></p><p><label> <input type=radio name=size required value="large"></label></p></fieldset><fieldset><legend> 피자 토핑 </legend><p><label> <input type=checkbox name="topping" value="bacon"> 베이컨 </label></p><p><label> <input type=checkbox name="topping" value="cheese"> 추가 치즈 </label></p><p><label> <input type=checkbox name="topping" value="onion"> 양파 </label></p><p><label> <input type=checkbox name="topping" value="mushroom"> 버섯 </label></p></fieldset><p><label>희망 배달 시간: <input type=time min="11:00" max="21:00" step="900" name="delivery" required></label></p><p><label>배달 지침: <textarea name="comments" maxlength=1000></textarea></label></p><p><button>주문 제출</button></p></form>

폼이 제출될 때, invalid 이벤트가 유효하지 않은 각 폼 컨트롤에서 발생합니다. 이는 폼의 문제에 대한 요약을 표시하는 데 유용할 수 있습니다. 브라우저 자체는 일반적으로 한 번에 하나의 문제만 보고하기 때문입니다.

4.10.1.5 폼 컨트롤의 클라이언트 측 자동 채우기 활성화

이 섹션은 비규범적입니다.

일부 브라우저는 사용자가 정보를 매번 다시 입력하지 않도록 폼 컨트롤을 자동으로 채워 사용자를 돕습니다. 예를 들어, 사용자의 전화번호를 묻는 필드는 사용자의 전화번호로 자동으로 채워질 수 있습니다.

이를 돕기 위해 autocomplete 속성을 사용하여 필드의 목적을 설명할 수 있습니다. 이 폼의 경우, 피자 배달 정보를 위해 유용하게 주석을 달 수 있는 세 개의 필드가 있습니다. 이 정보를 추가하는 방법은 다음과 같습니다:

<form method="post"
  enctype="application/x-www-form-urlencoded"
  action="https://pizza.example.com/order.cgi">
<p><label>고객 이름: <input name="custname" required autocomplete="shipping name"></label></p>
<p><label>전화번호: <input type=tel name="custtel" autocomplete="shipping tel"></label></p>
<p><label>이메일 주소: <input type=email name="custemail" autocomplete="shipping email"></label></p>
<fieldset>
  <legend> 피자 크기 </legend>
  <p><label> <input type=radio name=size required value="small"> Small </label></p>
  <p><label> <input type=radio name=size required value="medium"> Medium </label></p>
  <p><label> <input type=radio name=size required value="large"> Large </label></p>
</fieldset> 
<fieldset> 
  <legend> 피자 토핑 </legend> 
  <p><label> <input type=checkbox name="topping" value="bacon"> Bacon </label></p> 
  <p><label> <input type=checkbox name="topping" value="cheese"> Extra Cheese </label></p> 
  <p><label> <input type=checkbox name="topping" value="onion"> Onion </label></p> 
  <p><label> <input type=checkbox name="topping" value="mushroom"> Mushroom </label></p> 
</fieldset> 
<p><label>선호하는 배달 시간: <input type=time min="11:00" max="21:00" step="900" name="delivery" required></label></p> 
<p><label>배달 지침: <textarea name="comments" maxlength=1000></textarea></label></p> 
<p><button>주문 제출</button></p> 
</form>
4.10.1.6 모바일 기기에서 사용자 경험 개선

이 섹션은 비규범적입니다.

일부 기기, 특히 가상 키보드를 사용하는 기기는 사용자에게 여러 입력 모드를 제공합니다. 예를 들어, 신용카드 번호를 입력할 때는 0-9의 숫자 키만 보이도록 하고, 이름을 입력할 때는 각 단어를 대문자로 시작하도록 하는 폼 필드를 보고 싶을 수 있습니다.

inputmode 속성을 사용하면 적절한 입력 모드를 선택할 수 있습니다:

<form method="post"
  enctype="application/x-www-form-urlencoded"
  action="https://pizza.example.com/order.cgi">
<p><label>고객 이름: <input name="custname" required autocomplete="shipping name"></label></p>
<p><label>전화번호: <input type=tel name="custtel" autocomplete="shipping tel"></label></p>
<p><label>버저 코드: <input name="custbuzz" inputmode="numeric"></label></p>
<p><label>이메일 주소: <input type=email name="custemail" autocomplete="shipping email"></label></p>
<fieldset> 
  <legend> 피자 크기 </legend> 
  <p><label> <input type=radio name=size required value="small"> Small </label></p> 
  <p><label> <input type=radio name=size required value="medium"> Medium </label></p> 
  <p><label> <input type=radio name=size required value="large"> Large </label></p> 
</fieldset> 
<fieldset> 
  <legend> 피자 토핑 </legend> 
  <p><label> <input type=checkbox name="topping" value="bacon"> Bacon </label></p> 
  <p><label> <input type=checkbox name="topping" value="cheese"> Extra Cheese </label></p> 
  <p><label> <input type=checkbox name="topping" value="onion"> Onion </label></p> 
  <p><label> <input type=checkbox name="topping" value="mushroom"> Mushroom </label></p> 
</fieldset> 
<p><label>선호하는 배달 시간: <input type=time min="11:00" max="21:00" step="900" name="delivery" required></label></p> 
<p><label>배달 지침: <textarea name="comments" maxlength=1000></textarea></label></p> 
<p><button>주문 제출</button></p> 
</form>
4.10.1.7 필드 타입, 자동완성 필드 이름 및 입력 모드의 차이

이 섹션은 비규범적입니다.

type, autocomplete, inputmode 속성은 혼란스럽게 유사하게 보일 수 있습니다. 예를 들어, 세 가지 경우 모두에서 "email" 문자열이 유효한 값이 될 수 있습니다. 이 섹션에서는 이 세 가지 속성의 차이를 설명하고 이들을 사용하는 방법에 대한 조언을 제공합니다.

type 속성은 input 요소에 적용되며, 사용자 에이전트가 필드를 표시하는 방법을 결정합니다. 이 속성의 다른 값을 선택하는 것은 input 요소, textarea 요소, select 요소 등을 선택하는 것과 동일합니다.

autocomplete 속성은 사용자가 입력할 값이 실제로 무엇을 나타내는지를 설명합니다. 이 속성의 다른 값을 선택하는 것은 해당 요소에 대한 라벨을 선택하는 것과 동일합니다.

우선, 전화번호를 고려해보세요. 페이지가 사용자에게 전화번호를 요청하는 경우, 사용할 적절한 폼 컨트롤은 <input type=tel>입니다. 그러나 어떤 autocomplete 값을 사용할지는 페이지가 요청하는 전화번호의 유형(국제 형식 또는 지역 형식) 등에 따라 달라집니다.

예를 들어, 친구에게 선물을 배송하는 고객이 결제 문제 발생 시 고객의 전화번호와 배송 문제 발생 시 친구의 전화번호가 모두 필요한 전자상거래 사이트의 체크아웃 과정의 일부인 페이지는 국제 전화번호(국가 코드 포함)를 기대할 수 있습니다. 이 경우, 다음과 같이 표시될 수 있습니다:

<p><label>귀하의 전화번호: <input type=tel name=custtel autocomplete="billing tel"></label>
<p><label>수신자 전화번호: <input type=tel name=shiptel autocomplete="shipping tel"></label>
<p>국가 코드 접두사 포함한 전화번호를 입력해 주세요, 예: "+1 555 123 4567".

그러나 사이트가 영국 고객과 수신자만 지원하는 경우, 다음과 같이 표시될 수 있습니다 (tel-national 대신 tel이 사용된 것을 확인하십시오):

<p><label>귀하의 전화번호: <input type=tel name=custtel autocomplete="billing tel-national"></label>
<p><label>수신자 전화번호: <input type=tel name=shiptel autocomplete="shipping tel-national"></label>
<p>UK 전화번호를 입력해 주세요, 예: "(01632) 960 123".

다음으로, 선호 언어를 고려해보세요. 적절한 autocomplete 값은 language입니다. 그러나 이 목적을 위해 사용되는 폼 컨트롤은 텍스트 컨트롤(<input type=text>), 드롭다운 리스트(<select>), 라디오 버튼(<input type=radio>) 등이 될 수 있습니다. 이는 원하는 인터페이스 유형에 따라 달라집니다.

마지막으로, 이름을 고려해보세요. 페이지가 사용자에게 이름 하나만 요청하는 경우, 적절한 컨트롤은 <input type=text>입니다. 페이지가 사용자의 전체 이름을 묻는다면, 관련 autocomplete 값은 name입니다.

<p><label>일본어 이름: <input name="j" type="text" autocomplete="section-jp name"></label> 
<label>로마자 이름: <input name="e" type="text" autocomplete="section-en name"></label>

이 예에서, section-* 키워드는 사용자 에이전트에게 두 필드가 다른 이름을 기대하고 있음을 알립니다. 그렇지 않으면, 사용자 에이전트는 사용자가 첫 번째 필드에 값을 입력했을 때 두 번째 필드를 자동으로 첫 번째 필드의 값으로 채울 수 있습니다.

-jp-en 키워드의 부분은 사용자 에이전트에 불투명하며, 사용자 에이전트는 이러한 키워드로부터 두 이름이 각각 일본어와 영어로 입력되어야 한다고 추측할 수 없습니다.

typeautocomplete와 별도로, inputmode 속성은 텍스트 컨트롤이 있는 경우에 사용할 입력 모드(예: 가상 키보드)를 결정합니다.

신용카드 번호를 고려해보세요. 적절한 입력 유형은 <input type=number>아닙니다 (아래에서 설명한 대로), 대신 <input type=text>입니다. 사용자 에이전트가 숫자 입력 모드(예: 숫자만 표시하는 가상 키보드)를 사용하도록 권장하기 위해 페이지는 다음과 같이 사용할 수 있습니다.

<p><label>신용카드 번호:
            <input name="cc" type="text" inputmode="numeric" pattern="[0-9]{8,19}" autocomplete="cc-number"> 
</label></p>
4.10.1.8 날짜, 시간, 및 숫자 형식

이 섹션은 비규범적입니다.

이 피자 배달 예제에서, 시간은 "HH:MM" 형식으로 지정됩니다: 두 자리 숫자로 된 시간(24시간 형식)과 두 자리 숫자로 된 분입니다. (초를 지정할 수도 있지만, 이 예제에서는 필요하지 않습니다.)

그러나 일부 지역에서는 시간 표시 형식이 사용자에게 다르게 표현되는 경우가 많습니다. 예를 들어, 미국에서는 여전히 "2pm"과 같이 am/pm 표시기를 사용하는 12시간 시계를 사용하는 것이 일반적입니다. 프랑스에서는 "14h00"과 같이 "h" 문자를 사용하여 시간을 분과 구분하는 것이 일반적입니다.

날짜의 경우에도 비슷한 문제가 있으며, 구성 요소의 순서조차 일관되지 않은 경우가 있습니다. 예를 들어, 키프로스에서는 2003년 2월 1일을 "1/2/03"으로 쓰는 반면, 일본에서는 그 같은 날짜를 "2003年02月01日"로 표기하는 것이 일반적입니다. 숫자에서도 지역에 따라 소수점 구분자와 천 단위 구분자로 어떤 구두점을 사용하는지 다를 수 있습니다.

따라서 HTML과 폼 제출에서 사용되는 시간, 날짜, 숫자 형식(항상 이 사양에서 정의된 형식이며, 컴퓨터에서 읽을 수 있는 날짜 및 시간 형식을 위한 잘 확립된 ISO 8601 표준을 기반으로 함)과 브라우저가 사용자에게 표시하고 사용자가 입력한 내용을 수락하는 시간, 날짜, 숫자 형식을 구별하는 것이 중요합니다.

HTML 마크업과 폼 제출에서 사용되는 형식, 즉 "전송 형식"은 사용자 지역에 관계없이 일관되고 컴퓨터에서 읽을 수 있는 형태로 작성됩니다. 예를 들어, 날짜는 항상 "YYYY-MM-DD" 형식으로 작성되며, "2003-02-01"과 같이 표시됩니다. 일부 사용자는 이 형식을 볼 수 있지만, 다른 사용자는 "01.02.2003" 또는 "2003년 2월 1일"과 같이 볼 수 있습니다.

페이지에서 전송 형식으로 제공된 시간, 날짜 또는 숫자는 사용자가 보기 전에 사용자의 선호도나 페이지의 지역 설정에 따라 사용자가 선호하는 표시 형식으로 변환됩니다. 마찬가지로, 사용자가 선호하는 형식으로 시간, 날짜 또는 숫자를 입력하면 사용자 에이전트는 이를 다시 전송 형식으로 변환하여 DOM에 넣거나 제출합니다.

이렇게 하면 페이지와 서버의 스크립트가 시간, 날짜, 숫자를 일관된 방식으로 처리할 수 있으며, 다양한 형식을 지원할 필요 없이 사용자의 요구를 충족할 수 있습니다.

양식 컨트롤의 지역화에 관한 구현 노트도 참조하세요.

4.10.2 카테고리

주로 역사적인 이유로, 이 섹션의 요소들은 플로우 콘텐츠, 구문 콘텐츠, 인터랙티브 콘텐츠와 같은 일반적인 카테고리 외에도 여러 중첩되지만 미묘하게 다른 카테고리로 분류됩니다.

여러 요소들은 폼 관련 요소로 분류되며, 이는 폼 소유자를 가질 수 있음을 의미합니다.

폼 관련 요소들은 여러 하위 카테고리로 나뉩니다:

리스트된 요소

이는 form.elementsfieldset.elements API에 나열된 요소들을 나타냅니다. 이 요소들은 또한 form 콘텐츠 속성과 일치하는 form IDL 속성을 가지며, 저자가 명시적인 폼 소유자를 지정할 수 있게 합니다.

제출 가능한 요소

이는 form 요소가 제출될 때 엔트리 목록을 구성하는 데 사용할 수 있는 요소를 나타냅니다.

일부 제출 가능한 요소는 속성에 따라 버튼이 될 수 있습니다. 아래의 본문에서는 요소가 버튼인 경우를 정의합니다. 일부 버튼은 특별히 제출 버튼입니다.

재설정 가능한 요소

이는 form 요소가 재설정될 때 영향을 받을 수 있는 요소를 나타냅니다.

자동 대문자화 및 자동 수정 상속 요소

이 요소들은 자신의 폼 소유자로부터 autocapitalizeautocorrect 속성을 상속받습니다.

일부 요소는 폼 관련 요소가 아닌 것도 있지만, 라벨 가능 요소로 분류됩니다. 이러한 요소들은 label 요소와 연결될 수 있는 요소입니다.

4.10.3 form 요소

Element/form

현재 모든 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLFormElement

현재 모든 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

HTMLFormElement/acceptCharset

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLFormElement/name

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

HTMLFormElement/target

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
명백한 콘텐츠.
이 요소를 사용할 수 있는 컨텍스트:
플로우 콘텐츠가 기대되는 곳.
콘텐츠 모델:
플로우 콘텐츠, 하지만 하위 요소로 form 요소는 허용되지 않음.
text/html에서 태그 생략:
둘 다 생략할 수 없음.
콘텐츠 속성:
전역 속성
accept-charset폼 제출에 사용할 문자 인코딩
actionURL폼 제출에 사용할 URL
autocomplete — 폼 내 컨트롤에 대한 자동 완성 기능의 기본 설정
enctype엔트리 목록 인코딩 유형 — 폼 제출에 사용할 인코딩
method폼 제출에 사용할 메소드
namedocument.forms API에서 사용할 폼의 이름
novalidate폼 제출을 위한 폼 컨트롤 검증 건너뛰기
target네비게이션 대상폼 제출을 위한 네비게이션 대상
rel
접근성 고려 사항:
작성자를 위한 지침.
구현자를 위한 지침.
DOM 인터페이스:
[Exposed=Window,
 LegacyOverrideBuiltIns,
 LegacyUnenumerableNamedProperties]
interface HTMLFormElement : HTMLElement {
  [HTMLConstructor] constructor();

  [CEReactions, Reflect="accept-charset"] attribute DOMString acceptCharset;
  [CEReactions, ReflectSetter] attribute USVString action;
  [CEReactions] attribute DOMString autocomplete;
  [CEReactions] attribute DOMString enctype;
  [CEReactions] attribute DOMString encoding;
  [CEReactions] attribute DOMString method;
  [CEReactions, Reflect] attribute DOMString name;
  [CEReactions, Reflect] attribute boolean noValidate;
  [CEReactions, Reflect] attribute DOMString target;
  [CEReactions, Reflect] attribute DOMString rel;
  [SameObject, PutForwards=value, Reflect="rel"] readonly attribute DOMTokenList relList;

  [SameObject] readonly attribute HTMLFormControlsCollection elements;
  readonly attribute unsigned long length;
  getter Element (unsigned long index);
  getter (RadioNodeList or Element) (DOMString name);

  undefined submit();
  undefined requestSubmit(optional HTMLElement? submitter = null);
  [CEReactions] undefined reset();
  boolean checkValidity();
  boolean reportValidity();
};

form 요소는 하이퍼링크를 나타내며, 일부는 편집 가능한 값을 나타내는 폼 연관 요소들 모음을 통해 조작될 수 있으며, 이러한 값들은 서버로 제출되어 처리될 수 있습니다.

accept-charset 속성은 제출에 사용할 문자 인코딩을 지정합니다. 지정된 경우, 값은 "UTF-8"에 대해 ASCII 대소문자 구분 없음 일치여야 합니다. [ENCODING]

name 속성은 form의 이름을 forms 컬렉션 내에서 나타냅니다. 값은 빈 문자열이 아니어야 하며, 해당 컬렉션 내의 다른 form 요소와 고유해야 합니다.

autocomplete 속성은 다음의 키워드와 상태를 가진 열거된 속성입니다:

키워드 상태 간략한 설명
on On 폼 컨트롤이 기본적으로 "on"으로 설정된 자동 완성 필드 이름을 가집니다.
off Off 폼 컨트롤이 기본적으로 "off"으로 설정된 자동 완성 필드 이름을 가집니다.

속성의 누락된 값 기본값잘못된 값 기본값은 모두 On 상태입니다.

action, enctype, method, novalidate, 및 target 속성은 폼 제출을 위한 속성입니다.

rel 속성은 form 요소에서 생성하는 링크 종류를 제어합니다. 속성의 값은 고유한 공백으로 구분된 토큰의 무순서 집합이어야 합니다. 허용된 키워드와 그 의미는 이전 섹션에서 정의되었습니다.

rel지원되는 토큰HTML 링크 유형에서 허용된 키워드들로, 처리 모델에 영향을 미치고 사용자 에이전트에서 지원되는 키워드입니다. 가능한 지원되는 토큰noreferrer, noopener, 및 opener입니다. rel지원되는 토큰은 사용자 에이전트가 처리 모델을 구현한 목록에 있는 토큰만 포함해야 합니다.

form.elements

HTMLFormElement/elements

현재 모든 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

폼 컨트롤의 HTMLFormControlsCollection을 반환합니다 (역사적인 이유로 이미지 버튼은 제외됩니다).

form.length

HTMLFormElement/length

현재 모든 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

폼 내 컨트롤의 수를 반환합니다 (역사적인 이유로 이미지 버튼은 제외됨).

form[index]

폼 내에서 index번째 요소를 반환합니다 (역사적인 이유로 이미지 버튼은 제외됨).

form[name]

지정된 ID 또는 name으로 폼 내에서 폼 컨트롤을 반환합니다 (여러 개가 있는 경우, 해당 폼 컨트롤의 RadioNodeList를 반환); 없으면, 지정된 ID의 img 요소를 반환합니다.

특정 이름을 사용해 요소가 참조된 이후에는, 해당 이름은 요소가 트리 내에 있는 한 해당 방법에서 요소를 참조하는 방법으로 계속 사용 가능합니다, 실제 ID 또는 name이 변경되더라도.

일치하는 항목이 여러 개 있는 경우, 해당 요소들을 모두 포함하는 RadioNodeList 객체가 반환됩니다.

form.submit()

HTMLFormElement/submit

현재 모든 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

폼을 제출하며, 인터랙티브 제약 조건 검증을 우회하며 submit 이벤트를 발생시키지 않습니다.

form.requestSubmit([ submitter ])

HTMLFormElement/requestSubmit

현재 모든 엔진에서 지원됨.

Firefox75+Safari16+Chrome76+
Opera?Edge79+
Edge (Legacy)?Internet Explorer지원 안됨
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

폼을 제출하도록 요청합니다. submit() 메소드와 달리, 이 메소드는 인터랙티브 제약 조건 검증submit 이벤트를 포함하며, 이들 중 하나가 제출을 취소할 수 있습니다.

submitter 인수를 사용하여 특정 제출 버튼을 지정할 수 있으며, 이 버튼의 formaction, formenctype, formmethod, formnovalidate, 및 formtarget 속성이 제출에 영향을 줄 수 있습니다. 또한, 제출 버튼은 제출을 위한 엔트리 목록 구성에 포함되며, 일반적으로 버튼은 제외됩니다.

form.reset()

HTMLFormElement/reset

현재 모든 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

폼을 리셋합니다.

form.checkValidity()

폼의 컨트롤이 모두 유효한 경우 true를 반환합니다. 그렇지 않은 경우 false를 반환합니다.

form.reportValidity()

폼의 컨트롤이 모두 유효한 경우 true를 반환하며, 그렇지 않은 경우 false를 반환하고 사용자에게 알립니다.

autocomplete IDL 속성은 동일한 이름의 콘텐츠 속성을 반영해야 하며, 알려진 값으로만 제한됩니다.


elements IDL 속성은 HTMLFormControlsCollection을 반환해야 하며, form 요소의 루트에서, 필터는 리스트된 요소들에 맞고 폼 소유자form 요소인 경우, input 요소의 type 속성이 이미지 버튼 상태에 있는 경우를 제외하고, 역사적인 이유로 이 특정 컬렉션에서 제외해야 합니다.

length IDL 속성은 elements 컬렉션에 의해 대표되는 노드의 수를 반환해야 합니다.

지원되는 속성 인덱스는 해당 순간에 elements 속성에 의해 반환된 객체에 의해 지원되는 인덱스입니다.

인덱싱된 속성의 값을 결정하기 위해, form 요소의 경우, 사용자 에이전트는 주어진 인덱스를 인수로 하여 item 메소드를 호출할 때 elements 컬렉션에서 반환된 값을 반환해야 합니다.


form 요소에는 과거 이름 맵이라 불리는 이름과 요소의 매핑이 있습니다. 이는 요소가 이름을 변경하더라도 이름을 유지하는 데 사용됩니다.

지원되는 속성 이름은 다음 알고리즘에서 얻은 이름들로 구성되며, 알고리즘에서 얻은 순서대로 나열됩니다:

  1. sourced names라는 초기에는 비어 있는 튜플의 순서 리스트를 만드세요. 이 튜플은 문자열, 요소, 소스(id, name, 또는 past)로 구성됩니다. 소스가 past인 경우, 나이를 추가합니다.

  2. 리스트된 요소 candidate에 대해, 그 폼 소유자form 요소인 경우, input 요소의 type 속성이 이미지 버튼 상태인 경우는 제외합니다:

    1. 만약 candidateid 속성을 가지고 있다면, 그 id 속성의 값을 문자열로, candidate를 요소로, 그리고 id를 소스로 하여 sourced names에 항목을 추가하세요.

    2. 만약 candidatename 속성을 가지고 있다면, 그 name 속성의 값을 문자열로, candidate를 요소로, 그리고 name을 소스로 하여 sourced names에 항목을 추가하세요.

  3. img 요소 candidate에 대해, 그 폼 소유자form 요소인 경우:

    1. 만약 candidateid 속성을 가지고 있다면, 그 id 속성의 값을 문자열로, candidate를 요소로, 그리고 id를 소스로 하여 sourced names에 항목을 추가하세요.

    2. 만약 candidatename 속성을 가지고 있다면, 그 name 속성의 값을 문자열로, candidate를 요소로, 그리고 name을 소스로 하여 sourced names에 항목을 추가하세요.

  4. 각 항목 past entry에 대해 과거 이름 맵에 항목을 추가하여, past entry의 이름을 문자열로, past entry의 요소를 요소로, past를 소스로, 그리고 과거 이름 맵에 항목이 존재한 기간을 나이로 설정하여 sourced names에 항목을 추가하세요.

  5. sourced names를 정렬하세요. 요소 항목의 트리 순서를 기준으로 정렬하며, 동일한 요소 항목이 있는 경우 id 소스 항목을 먼저, name 소스 항목을 그 다음, past 소스 항목을 그 다음으로 배치하고, 동일한 요소 및 소스 항목이 있는 경우에는 나이 순으로 오래된 항목을 먼저 배치하세요.

  6. 이름이 빈 문자열인 sourced names의 항목을 제거하세요.

  7. 이전 항목과 동일한 이름을 가진 sourced names의 항목을 제거하세요.

  8. 이름의 리스트를 sourced names에서 반환하고, 그들의 상대적인 순서를 유지하세요.

속성 이름 name의 값을 결정하기 위해, form 요소의 경우, 사용자 에이전트는 다음 단계를 실행해야 합니다:

  1. candidates라는 라이브 RadioNodeList 객체를 만들어, 리스트된 요소들 중에서 폼 소유자form 요소인 경우 input 요소의 type 속성이 이미지 버튼 상태인 경우를 제외하고, name과 동일한 id 또는 name 속성을 가진 요소를 포함하세요. 트리 순서로 정렬합니다.

  2. 만약 candidates가 비어 있다면, candidates라이브 RadioNodeList 객체로 설정하여, img 요소 중에서 폼 소유자form 요소인 경우, name과 동일한 id 또는 name 속성을 가진 요소를 포함하세요. 트리 순서로 정렬합니다.

  3. 만약 candidates가 비어 있다면, nameform 요소의 과거 이름 맵에 있는 이름 중 하나인지 확인하고, 그렇다면 그 맵에서 name과 연관된 객체를 반환하세요.

  4. 만약 candidates에 하나 이상의 노드가 포함되어 있다면, candidates를 반환하세요.

  5. 그렇지 않으면, candidates에 정확히 하나의 노드만 포함되어 있습니다. name에서 candidates의 노드로 매핑을 추가하고, form 요소의 과거 이름 맵에 동일한 이름을 가진 이전 항목이 있으면 교체하세요.

  6. candidates에 있는 노드를 반환하세요.

만약 form 요소의 과거 이름 맵에 나열된 요소가 폼 소유자를 변경하면, 그 항목은 해당 맵에서 제거되어야 합니다.


submit() 메서드 단계는 제출을 실행하는 것으로, this에서 시작하며, submit() 메서드에서 제출됨이 true로 설정됩니다.

requestSubmit(submitter) 메서드가 호출되면, 다음 단계를 실행해야 합니다:

  1. submitter가 null이 아닌 경우:

    1. submitter제출 버튼이 아닌 경우, TypeError를 발생시킵니다.

    2. submitter폼 소유자가 이 form 요소가 아닌 경우, "NotFoundError" DOMException를 발생시킵니다.

  2. 그렇지 않으면, submitter를 이 form 요소로 설정하세요.

  3. form 요소를 submitter에서 제출합니다.

reset() 메서드가 호출되면, 다음 단계를 실행해야 합니다:

  1. form 요소가 초기화 잠금으로 표시된 경우, 종료합니다.

  2. form 요소를 초기화 잠금으로 표시합니다.

  3. form 요소를 초기화합니다.

  4. form 요소에서 초기화 잠금 표시를 해제합니다.

checkValidity() 메서드가 호출되면, 사용자 에이전트는 제약 조건을 정적으로 검증해야 하며, 제약 조건 검증이 긍정적인 결과를 반환하면 true를, 부정적인 결과를 반환하면 false를 반환해야 합니다.

reportValidity() 메서드가 호출되면, 사용자 에이전트는 제약 조건을 상호작용적으로 검증해야 하며, 제약 조건 검증이 긍정적인 결과를 반환하면 true를, 부정적인 결과를 반환하면 false를 반환하고, 사용자에게 알립니다.

이 예시는 두 개의 검색 폼을 보여줍니다:

<form action="https://www.google.com/search" method="get">
 <label>Google: <input type="search" name="q"></label> <input type="submit" value="Search...">
</form>
<form action="https://www.bing.com/search" method="get">
 <label>Bing: <input type="search" name="q"></label> <input type="submit" value="Search...">
</form>

4.10.4 label 요소

Element/label

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

HTMLLabelElement

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android37+Samsung Internet?Opera Android12.1+

HTMLLabelElement/htmlFor

Support in all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer5.5+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+
카테고리:
플로우 콘텐츠.
구문 콘텐츠.
대화형 콘텐츠.
구체적 콘텐츠.
이 요소가 사용될 수 있는 맥락:
구문 콘텐츠가 예상되는 곳.
콘텐츠 모델:
구문 콘텐츠이지만, 후손에 라벨 가능 요소가 없거나, 이 요소의 라벨된 제어 요소일 때만 허용되며, 후손에 label 요소가 없어야 합니다.
태그 생략:
태그 생략 불가.
콘텐츠 속성:
글로벌 속성
for — 폼 제어와 라벨 연결
접근성 고려사항:
작성자용.
구현자용.
DOM 인터페이스:
[Exposed=Window]
interface HTMLLabelElement : HTMLElement {
  [HTMLConstructor] constructor();

  readonly attribute HTMLFormElement? form;
  [CEReactions, Reflect="for"] attribute DOMString htmlFor;
  readonly attribute HTMLElement? control;
};

label 요소는 사용자 인터페이스에서 캡션을 나타냅니다. 이 캡션은 label 요소의 라벨된 제어로 알려진 특정 폼 제어와 연결될 수 있으며, for 속성을 사용하거나, 폼 제어를 label 요소 내부에 배치하여 연결할 수 있습니다.

다음 규칙에 의해 달리 명시되지 않은 경우, label 요소는 라벨된 제어를 가지지 않습니다.

Attributes/for

모든 현재 엔진에서 지원됨.

Firefox1+Safari4+Chrome1+
Opera?Edge79+
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

for 속성은 캡션이 연결될 폼 컨트롤을 지정하기 위해 사용할 수 있습니다. 이 속성이 지정된 경우, 속성의 값은 해당 ID여야 하며, label 요소와 동일한 트리 내의 라벨 가능한 요소여야 합니다. 만약 이 속성이 지정되었고, 트리 내에 IDfor 속성 값과 동일한 요소가 존재하며, 그 중 첫 번째 요소가 라벨 가능한 요소인 경우, 그 요소는 label 요소의 라벨된 컨트롤이 됩니다.

for 속성이 지정되지 않았지만, label 요소가 라벨 가능 요소 후손을 가지고 있다면, 트리 순서에서 첫 번째 후손이 label 요소의 라벨된 제어가 됩니다.

label 요소의 기본 표시와 동작은 플랫폼의 라벨 동작을 따릅니다. label 요소의 후손에 대한 이벤트 타겟의 대화형 콘텐츠에서 활성화 동작은 아무런 동작도 하지 않습니다.

폼 관련 사용자 정의 요소라벨 가능 요소로 간주되며, label 요소의 활성화 동작이 라벨된 제어에 영향을 미치면, 기본 요소와 커스텀 요소 모두 영향을 받습니다.

예를 들어, 라벨을 클릭하면 폼 제어가 활성화되는 플랫폼에서는, 아래 예제에서 label을 클릭하면 사용자 에이전트가 클릭 이벤트를 발생시키며, input 요소에서 해당 이벤트가 발생된 것처럼 작동할 수 있습니다:

<label><input type=checkbox name=lost> Lost</label>

마찬가지로, my-checkbox폼 관련 사용자 정의 요소로 선언된 경우 (예: 이 예제), 다음 코드도 동일하게 동작합니다:

<label><my-checkbox name=lost></my-checkbox> Lost</label>

다른 플랫폼에서는, 두 경우 모두 컨트롤에 포커스를 맞추거나 아무 동작도 하지 않을 수 있습니다.

다음 예제는 각 라벨에 연결된 세 개의 폼 제어를 보여주며, 그 중 두 개는 사용자가 올바른 형식을 사용할 수 있도록 작은 텍스트를 포함하고 있습니다.

<p><label>Full name: <input name=fn> <small>Format: First Last</small></label></p>
<p><label>Age: <input name=age type=number min=0></label></p>
<p><label>Post code: <input name=pc> <small>Format: AB12 3CD</small></label></p>
label.control

HTMLLabelElement/control

모든 현재 엔진에서 지원됨.

Firefox4+Safari5.1+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)18Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

이 요소와 연결된 폼 제어를 반환합니다.

label.form

HTMLLabelElement/form

모든 현재 엔진에서 지원됨.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer6+
Firefox Android?Safari iOS1+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

이 요소와 관련된 폼 제어의 폼 소유자를 반환합니다.

없다면 null을 반환합니다.

control IDL 속성은 label 요소의 라벨된 제어를 반환하거나, 없다면 null을 반환해야 합니다.

form IDL 속성은 다음 단계를 실행해야 합니다:

  1. label 요소가 라벨된 제어를 가지고 있지 않다면, null을 반환합니다.

  2. label 요소의 라벨된 제어폼 관련 요소가 아니라면 null을 반환합니다.

  3. label 요소의 라벨된 제어폼 소유자를 반환합니다(이 값은 null일 수 있습니다).

form IDL 속성은 label 요소의 form IDL 속성과 다르며, 리스트된 폼 관련 요소에서 label 요소는 form 콘텐츠 속성을 가지지 않습니다.


control.labels

HTMLButtonElement/labels

모든 현재 엔진에서 지원됨.

Firefox56+Safari5.1+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)18Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

HTMLInputElement/labels

모든 현재 엔진에서 지원됨.

Firefox56+Safari5+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)18Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android3+Samsung Internet?Opera Android12.1+

HTMLMeterElement/labels

모든 현재 엔진에서 지원됨.

Firefox56+Safari6+Chrome6+
Opera12.1+Edge79+
Edge (Legacy)18Internet Explorer아니요
Firefox Android?Safari iOS?Chrome Android?WebView Android?