짧은 답변
현재 사양에 따르면 예, style
요소 는 항상에 있어야 합니다 head
. 예외는 없습니다 ( style
요소 를 계산하려는 경우 element 내부의 template
요소 제외 ).
역사적으로 항상 그런 것은 아닙니다. 스펙의 세부 사항 및 히스토리에 관심이있는 경우 계속 읽으십시오.
사양 사용, 말씀 상관없이 style
요소 body
않는 모든 주요 브라우저에서 다소간 일을. 그러나 스펙을 위반하고 렌더링 성능 저하 또는 "스타일이 지정되지 않은 컨텐츠의 플래시"와 같은 바람직하지 않은 결과를 초래할 수 있기 때문에 나쁜 습관으로 간주됩니다.
사양 내역
style
요소가 HTML 2에 존재하지 않았습니다 . 그것들은 HTML 3.0에서 도입되었으며, 여기서 Head Element 에는 포함될 수있는 요소 목록에는 포함 되었지만 The Body Element 에는있을 수있는 요소 목록에는 포함 되지 않았습니다 . 따라서 요소가 처음 지정된 시점에는 해당 요소 만에 포함될 수 있습니다 head
.
HTML 5 scoped
가 style
요소에 대해 (제거 된 이후) 속성을 도입 할 때까지는 (다른 표현을 사용하여 표현되었지만) 여전히 그렇습니다 . 이 속성은 존재 style
하는 경우 해당 요소의 하위 항목 만 스타일링하기 위해 요소를 본문의 요소 내에 배치 할 수 있도록하기 위한 것입니다. 그러나이 기능은 실제 브라우저에서는 구현되지 않았으며 (적어도 개발자 플래그를 통해 활성화하지 않아도 됨) "구현 자의 관심 부족으로 인해" W3C 및 WhatWG 사양에서 제거되었습니다 . 그 이후에는 style
메타 데이터 컨텐츠를 허용하는 컨텍스트에서만 요소가 허용되었으며, 이는 헤드뿐입니다. 따라서 우리는 HTML 5 이전과 같은 규칙으로 돌아 왔습니다.
그러나, 두 규격 조직에 의한 오류로 인해, 두 규격에 부록으로 포함 된 비 규범 적 요소의 인덱스는의 제거를 반영하도록 적절히 업데이트되지 않아 scoped
, 규범 규격과 일치하지 않습니다. 나는 이것을 WhatWG 와 W3C에 지적했다. 했으며, 두 가지 사양이 발산되는 모션 이벤트에 무의식적으로 설정했습니다.
규범 사양과 비 규범 색인 사이의 불일치에 대한 WhatWG의 솔루션은 내 패치 를 수락하는 것이 었습니다 수정하는 .
반면에 W3C는 대신 에 표준을 업데이트하여 표준 사양 을 업데이트하기 위해 동등한 패치를 거부 style
했습니다.body
문제를 일으킬 수 있으며 "주의를 기울여"수행해야한다는 점에주의를 기울였습니다. 이 변경의 원인은 사양을 실제 브라우저 동작과 일치시키는 것입니다.
따라서 2017 년 3 월부터이 질문에 대한 공식 답변은 귀하가 청취하기로 선택한 표준 조직에 따라 다릅니다. (일반적으로 더 존경받는) WhatWG 사양에 나열된 경우에는 style
요소가 허용되지 않습니다 body
. W3C 사양에 나열된 경우 허용되었지만 권장되지는 않습니다.
W3C와 WhatWG 사이의 2019 년 4 월 평화 조약으로이 어리석은 일이 (아마도 다른 많은 불일치와 같이) 끝났으며 , WhatWG 사양이 진정한 살아있는 HTML 표준이 될 것이라는 데 동의했으며 W3C는 단순히 번호가 매겨진 스냅 샷을 공개합니다. 경쟁 사양을 병렬로 개발하는 대신 HTML 사양. 따라서 2017 년에서 W3C 포크로 변경 style
하여body
임의의 전류 사양의 더이상 부분 없다; 그것은 단지 역사의 호기심 일뿐입니다.
따라서 오늘날 공식적으로 허용되는 사항을 결정 하기 위해 WhatWG 사양 만 검토하면 됩니다. 다음과 같이 말합니다.
4.2.6. 그만큼style
요소
메타 데이터 내용 .
어디 메타 데이터 콘텐츠는 예상된다.
A의 <noscript>
A 원소의 자식입니다 <head>
요소입니다.
단일 페이지 스펙을 통한 CTRL-Fing 은 컨텐츠 모델에 메타 데이터 컨텐츠가 포함 된 유일한 요소가 요소라는 것을 보여줍니다 head
.
앞에서 언급 한 비 규범 적 요소 색인은 요소에 대해 허용되는 유일한 부모 style
가 head
또는 noscript
요소 임을 확인합니다 .