HTML5는 HTML 주석 표준을 변경합니까?


131

최근에 HTML5에 새로운 주석 달기 방법이 있음을 발견했습니다.

대신 일반의 <!-- -->나에 대해 읽은 주석 멀티 라인, 나는 생각 내 IDE가 정기적으로 만든 것으로 나타났습니다 <!div >주석을. 그래서 나는 그것을 테스트했고 놀랍게도 크롬이 그 태그를 주석으로 처리했습니다. 그것은 div의 내용이 아닌 태그 주석 처리 했으므로 <!/div>다른 div를 닫지 않도록 가까이 주석을 달아야했습니다.

다른 테스트를 한 결과 일반적으로 태그 열기 앞에 느낌표를 넣으면이 기호 <가 주석 처리됩니다.

이것은 실제로 새로운 것인가? 나쁜 습관입니까? 실제로 매우 편리하지만 아직 실용적이지 않습니까 (새롭지 않은 경우)?

추가 세부 정보 수정 : 이 특정 구문의 구문 오류 또는 잘못된 해석이 좋은 이유이지만 Chrome에서 실제로 전체 주석으로 렌더링 하는 방법은 무엇입니까?

코드는 다음과 같이 작성됩니다 .

<!div displayed> some text here that is still displayed <!/div>

그리고 다음과 같이 렌더링됩니다 .

<!--div displayed--> some text here that is still displayed <!--/div-->

19
아마도 구문 오류 및 / 또는 넌센스 태그 일 가능성이 높으므로 무시됩니다.
deceze

@deceze 나는 브라우저가 덜 엄격한 규칙에 따라 HTML을 렌더링하는 방법에 관대 할 수 있기를 다소 기대했다.
앤드류

1
@ Lemony-Andrew 어떤 IDE를 사용합니까? 선택된 답변에 따르면, 우리는 이것을 문제로보고 할 수 있습니다 (또는 오픈 소스 인 경우 수정).
Dereckson

1
@Derecksonit 공식 답변을 얻은 후 내 눈이 나를 속이지 않았는지 확인한 후 IDE를 두 번 확인했습니다. 실제로 주석 처리되지 않았지만 비슷한 일반 텍스트 색상이었습니다. 이것은 우연히였습니다.
Andrew

답변:


196

HTML5에는 주석에 대한 새로운 표준이 없습니다. 유효한 주석 구문은 여전히 ​​유일합니다 <!-- -->. 에서 W3C HTML5의 섹션 8.1.6 :

주석은 4 개의 문자 시퀀스 U + 003C LESS-THAN SIGN, U + 0021 EXCLAMATION MARK, U + 002D HYPHEN-MINUS, U + 002D HYPHEN-MINUS ( <!--)로 시작해야합니다.

<!구문은 HTML5의 일부가 아닌 SGML DTD 마크 업에서 시작됩니다. HTML5에서는 주석, CDATA 섹션 및 DOCTYPE 선언 용으로 예약되어 있습니다. 따라서이 대안이 잘못된 방법인지 여부는 더 이상 사용되지 않는 마크 업의 사용을 나쁜 방법으로 간주하는지 여부에 따라 다릅니다.

Validator.nu는 "Bogus 의견"이있는 것을 호출합니다. — 유효한 주석이 아니더라도 주석처럼 취급됨을 의미합니다. 이것은 아마도 HTML5 이전 버전과 호환되며 SGML 기반이었고 마크 업 선언이 형식을 취 <!FOO>했기 때문에이 새로운 것으로 부르지 않을 것입니다. 그들이 처리하고 그 이유 처럼 SGML 마크 업 선언을하지 렌더링 할 의미가 특별 선언했기 때문에 의견이다, 그러나 의미는 (위의 예외) HTML5에 있기 때문에, 멀리 HTML5 DOM에 관한 한 그들은 없는 댓글 더 이상 아무것도 .

섹션 8.2.4 의 다음 단계는 이 결론으로 ​​이어 지며 Chrome은 편지를 따르는 것으로 보입니다.

  1. 8.2.4.1 데이터 상태 :

    다음 입력 문자를 사용하십시오.

    "<"(U + 003C)
    태그 열기 상태로 전환합니다.

  2. 8.2.4.8 태그 열림 상태 :

    다음 입력 문자를 사용하십시오.

    "!" (U + 0021)
    마크 업 선언 열기 상태로 전환하십시오.

  3. 8.2.4.45 마크 업 선언 공개 상태 :

    다음 두 문자가 모두 "-"(U + 002D) 문자이면이 두 문자를 사용하고 데이터가 빈 문자열 인 주석 토큰을 ​​작성한 후 주석 시작 상태로 전환하십시오.

    그렇지 않으면 다음 7자가 "DOCTYPE"이라는 단어와 ASCII의 대소 문자를 구분하지 않으면 해당 문자를 사용하여 DOCTYPE 상태로 전환하십시오.

    그렇지 않으면, 조정 된 현재 노드가 있고 HTML 네임 스페이스에 요소가없고 다음 7 개의 문자가 문자열 "[CDATA ["(U +를 가진 5 개의 대문자 "CDATA")와 대소 문자를 구분하는 경우 005B LEFT SQUARE BRACKET 문자 앞뒤), 해당 문자를 소비하고 CDATA 섹션 상태로 전환하십시오.

    그렇지 않으면 이것은 구문 분석 오류입니다. 가짜 댓글 상태로 전환합니다. 소비되는 다음 문자 (있는 경우)는 주석에 포함될 첫 번째 문자입니다.

    일련의 문자가 발생하는 경우에만 주석 시작 상태로 전환하라는 메시지가 표시됩니다 <!--. 그렇지 않으면 가짜 주석입니다. 이것은 8.1.6 항에 명시된 내용을 반영합니다.

  4. 8.2.4.44 가짜 댓글 상태 :

    첫 번째 ">"(U + 003E) 문자 또는 파일 끝 (EOF)을 포함하여 모든 문자를 사용하십시오. 데이터가 상태 머신이 가짜 주석 상태로 전환하게하는 문자를 포함하여 모든 문자의 연결을 포함하는 주석 토큰을 ​​방출합니다. 마지막으로 소비 된 문자 직전의 문자까지 (즉, 문자까지) U + 003E 또는 EOF 문자 바로 앞에 있지만 U + 0000 NULL 문자는 U + FFFD REPLACEMENT CHARACTER 문자로 바뀝니다. (파일의 끝까지 주석이 시작된 경우 (EOF) 토큰은 비어 있습니다. 마찬가지로 " <!>" 문자열로 생성 된 토큰도 비어 있습니다.)

    일반 영어,이 턴 <!div displayed><!--div displayed--><!/div>로는 <!--/div-->, 정확히 같은 질문에 설명.

마지막으로, 다른 HTML5 호환 파서는 Chrome과 동일하게 작동 할 것으로 예상 할 수 있습니다.


11
이 사건의 공식 추론을 찾기 위해 시간을내어 주셔서 감사합니다. 그것은 꽤 많은 것을 정리하고 나의 잘못된 가정에 많은 타당성을 제공합니다.
Andrew

2
HTML5 스펙에 "유효하지 않은"컨텐츠를 처리하는 규칙이있는 것은 이상합니다. 유효하지 않은 경우 전혀 처리하지 않아야합니다.
Arturo Torres Sánchez

2
이것이 바로 HTML과 웹 언어가 엄격했던 방식입니다. 부적절한 코드 구조가 너무 관대하게 처리되는 이유는 더 나은 품질의 사이트입니다. 브라우저가 더 많은 웹 사이트를보고 잘못된 구문으로 올바르게 볼수록 최종 사용자는 더 행복해집니다. 일반적인 웹 표준 작성자 (대부분 w3는 아님)는 브라우저 공급 업체가 이로 인해 지침을 따르지 않는다는 것을 깨달았습니다. HTML5는 디자인을 공식적으로보다 관대하게 만들기위한 아이디어를 기반으로 제작되었습니다.
Andrew

3
@ ArturoTorresSánchez : XHTML은 "유효하지 않은 콘텐츠 = 오류"접근 방식을 시도하고 비참하게 실패했습니다. 게다가 규칙은 기본적으로 "이 가짜 주석을 구문 분석하지 말고 주석으로 취급하고 찾은 다음 유효한 것을 구문 분석하십시오"라고 말합니다. 따라서 관점에 따라 HTML5는 원하는 것이 짜증나거나 HTML5는 원하는 것을 정확하게하기 때문에 원하는 것을하지 않습니다.
slebetman

1
@ ArturoTorresSánchez : 역사적으로 HTML 서버는 모든 종류의 브라우저에 동일한 문자 시퀀스를 제공 할 것으로 예상했습니다. 이전 파서는 무시할 수있는 "선택적"최신 기능을 사용하는 문서, 중요한 새로운 기능을 사용하고 브라우저를 통해 거부해야하는 문서를 구별 할 수있는 방식으로 문서 형식을 설계 할 수 있습니다. 그것들을 지원하지 않으며, 단지 유효하지 않은 문서들도 그러한 형식의 시절에는 HTML로 수행되지 않았습니다.
supercat

12

나는 이것이 <!마크 업 선언을 의미하기 때문에 좋은 습관이라고 생각하지 않습니다 <!DOCTYPE. 따라서 당신은 그것이 논평되었다고 생각합니다 (잘 ... 브라우저는 그것을 해석하려고 시도 할 것입니다).

표시되지 않더라도 HTML 코드 주석을위한 올바른 구문이 아닌 것 같습니다.


그것이 사실 일지 모르지만 크롬이 실제로 어떻게 태그를 주석 처리하지만 이제는 doctype을 주석 처리합니까?
앤드류

4
제안 (잘 모르겠습니다, 그냥 추측) : 해석하려고> 수 없습니다> 주석?
Yves Lange

그것은 충분히 합리적으로 보입니다.
앤드류

다시 말하지만 (죄송합니다), 이것은 단지 가정 일뿐입니다!
Yves Lange
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.