(무효) 자체 폐쇄 태그가 HTML5에서 유효합니까?


670

W3C 유효성 검사기는 자동 폐쇄 태그 (와 그이를 "처럼하지 않습니다 />에") void 이외의 요소. (공백 요소는 내용을 포함하지 않을 수있는 요소입니다.) HTML5에서도 유효합니까?

허용되는 void 요소 의 몇 가지 예 :

<br />
<img src="" />
<input type="text" name="username" />

거부 되지 않은 무효 요소 의 몇 가지 예 :

<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />

참고 :
W3C 유효성 검사기는 실제로 void 자체 닫기 태그를 허용합니다. 작성자는 원래 간단한 오타 () \>대신 문제가있었습니다 />. 그러나 자체 폐쇄 태그는 일반적으로 HTML5에서 100 % 유효하지 않으며 다양한 HTML 버전에서 자체 폐쇄 태그 문제에 대한 답변이 자세히 설명되어 있습니다.


2
@Ben : 아, 죄송합니다. 당신이 옳다고 생각합니다. 이 경우 원래 질문을 오해했습니다. OP는 HTML5에서 자체 폐쇄 태그가 전혀 유효한지 알고 싶어한다고 생각했습니다. 그러나 이것은 코드에서 오타를 만들었거나 자체 폐쇄 태그를 올바르게 작성하는 방법을 알지 못했기 때문에 W3C 유효성 검사기가 코드를 유효하지 않은 것으로 표시했음을 의미합니다.
Sk8erPeter

16
미래의 독자들을 위해 시간을 절약하려면 : 그렇습니다. 질문의 구문이 잘못되었으므로 변경하지 않아야합니다. OP는 이유를 명확하고 정당하게 설명했다 . 이 질문을 유발 한 유효성 검사 오류가 발생했기 때문에 구문을 수정해서는 안됩니다.
Jordan Gray

2
사람들은 여전히 슬래시가 어느 방향을 향해야하는지 싸우고 있습니까? 어서
BoltClock

3
@BoltClock Yup, 여전히 싸우고 있습니다. Guys :이 질문에 대해 질문이 있으면 \>쓸모없는 fix-my-typo 질문으로 종료해야합니다. 답변은 모든 주소 />입니다. />버전은 유용 하나입니다. 순리에 맡기다.
Gilles 'SO- 악마 그만해'

1
그런 다음 W3C 유효성 검사기가 실제로 자체 닫기 태그를 허용하므로 질문을 다시 작성해야합니다. 원래의 의도와 관련하여 그 완전성을 손상시키지 않으면 서 그런 식으로 질문을 바꾸는 것은 어렵다. 따라서 우리가 SO의 규칙을 고수하고 싶다면, 질문을 편집하는 것이 현명한 일인 것처럼 보이지만, 이와 같은 질문에서 명확성을 희생해야 할 수도 있습니다. 평균. 비슷한 문제에 대해 다른 질문이 많이 있으면 메타에 대한 또 다른 토론을 시작할 수 있습니다.
osa

답변:


1238
  • 에서 HTML 4 , <foo /(예, 아니오 >모두에서) 수단 <foo>(이 리드 <br />의미 <br>>(예 <br>&gt;)와 <title/hello/의미 <title>hello</title>). 이것은 브라우저가 지원을 매우 잘 수행하지 못한 SGML 규칙이며 , 스펙은 작성자에게 구문을 피하도록 권고합니다 .

  • 에서는 XHTML , <foo />수단<foo></foo> . 이것은 모든 XML 문서에 적용되는 XML 규칙입니다. 즉, XHTML은로 제공되는 text/html문서와 다른 파서를 사용하여 브라우저에서 처리하는 경우가 많습니다 (적어도 역사적으로) application/xhtml+xml. W3C는 XHTML을 위해 다음과 같은 호환성 지침 을 제공합니다 text/html. (필수적으로 : 요소가 EMPTY로 정의되고 HTML 태그에서 종료 태그가 금지 된 경우에만 자체 닫기 태그 구문을 사용하십시오).

  • 에서 HTML5 의 의미는 <foo /> 요소의 유형에 따라 달라집니다 .

    • void 요소 로 지정된 HTML 요소 (본질적으로 "HTML5 이전에 존재했으며 내용이 금지 된 요소")에서 종료 태그는 단순히 금지됩니다. 시작 태그의 끝에 슬래시는 허용되지만 의미는 없습니다. XML에 중독 된 사람 (및 구문 강조 표시 자)의 구문 설탕 일뿐입니다.
    • 다른 HTML 요소에서 슬래시는 오류이지만 오류 복구로 인해 브라우저에서이를 무시하고 태그를 일반 시작 태그로 취급합니다. 일반적으로 후속 태그가 형제 대신 하위 요소가되는 종료 태그가 누락됩니다.
    • SVG와 같은 XML 응용 프로그램에서 가져온 외부 요소는이 요소를 자체 닫기 구문으로 처리합니다.

24
" ... XML에 중독 된 사람. ". XML 준수가 좋지 않다고 제안하는 것 같습니다. 그러나 HTML5의 최종 결과는 어쨌든 여전히 꺾쇠 괄호를 처리해야하는 것 같습니다 (예 : XML의 불편 함이 가장 큰 것) .XML 기반 도구 (예 : 템플릿 도구 또는 다양한 프로세서)를 사용하기가 더 어렵습니다. ). 심지어보기의 발생 지점에서, 그 보일 것 <object data="..." /><img src="..."></src>동시에,하지 OK입니다 <object data="..."></object><img src="..." />도구의 일관성을 어렵게 만드는입니다. 이것은 잃어버린 상황처럼 보입니다.
Bruno

7
@Bruno — HTML이 XML보다 우선합니다. 사람들을 XHTML로 옮기려는 노력은 실패했습니다. 을 사용 text/html하면 브라우저는 슬래시에 특별한 의미를 부여하지 않으므로 브라우저를 포함하면 실용적인 목적으로 사용되지 않습니다. 습관에서 벗어날 수없는 사람들을 위해 XML처럼 보이게 만드는 것만 있습니다.
Quentin

6
@Quentin 나는 전적으로 동의하지 않습니다. 유효한 XML에 해당하는 것이 반드시 유효한 HTML5 일 필요는 없다는 것이 부끄러운 일입니다 (예 : 또는 <img ...></img>대신 ). HTML5는 일반적으로 덜 엄격하기 때문에 (아마도 XHTML이 실패한 이유 일 수 있음) 다음과 같은 내용을 잘 견뎌 낼 수 있습니다. 불행히도 XML 기반 템플릿 생성기는 void 요소 또는 자체 닫는 요소의 생성을 구별하는 방법을 알아야합니다 . 모든 빈 요소를로 작성한다고 말하는 규칙은 없습니다 . <img ...><img ... /><img ...></img><tag></tag>
Bruno

3
HTML 5도 수평선에 전에 XHTML 실패, 당신은 긴 XHTML은 치료 등의 작업을 수행 할 것前의 브라우저 오류 수정 때문에 빈 요소를 형성 할 수 없습니다 </br><br>이렇게 <br></br>이중 줄 바꿈 될 것입니다. (와 같은 실제 잘못된 마크 업과의 호환성 </br>은 HTML 5의 디자인 목표 중 하나입니다).
Quentin

1
FROM W3C : 공허 요소 : 영역, 기본, br, 열, 임베드, hr, img, 입력, keygen, 링크, 메타, 매개 변수, 소스, 트랙, wbr "공백 요소에는 시작 태그 만 있습니다. 종료 태그는 지정하지 않아야합니다. 공극 요소의 경우 " w3.org/TR/html5/syntax.html#void-elements
Fabio Nolasco

406

Nikita Skvortsov가 지적했듯이 자체 결산 사업부는 유효성을 검사하지 않습니다. 이는 div가 void 요소가 아닌 일반 요소 이기 때문 입니다.

HTML5 spec 에 따르면 , 어떤 내용도 가질 수없는 태그 ( void elements )는 자체 닫힘 *이 될 수 있습니다. 여기에는 다음과 같은 태그가 포함됩니다.

area, base, br, col, embed, hr, img, input, 
keygen, link, meta, param, source, track, wbr

위의 태그에서 "/"는 완전히 선택 사항이므로 <img/>와 다르지 <img>않지만 <img></img>유효하지 않습니다.

* 참고 : 외부 요소 도 자체 폐쇄 될 수 있지만이 답변의 범위에 해당한다고 생각하지 않습니다.


1
IE10의 개발자 도구에서 "HTML1500 : 태그를 직접 닫을 수 없습니다. 명시적인 닫기 태그를 사용하십시오." 줄에 <meta charset = "UTF-8"/> 왜 그런지 아십니까?
James in Indy

좋아, 자체 닫는 태그에는 슬래시가 없어야한다는 것을 알았습니다 (제거하면 오류가 수정됩니다). 인용 : tiffanybbrown.com/2011/03/23/…
James in Indy

사양이 변경되었습니다. 이제 "void"또는 "self-closing"요소는 HTML 5 doctype으로 제공 될 때 슬래시를 포함 하지 않아야합니다 . 그러나 XHTML로 제공되는 경우 닫는 슬래시가 필요할 수 있습니다 (이 경우 문서 확인). 실제로 사용하면 닫는 /부분이 포함되어 있어도 페이지가 일반적으로 예상대로 표시 되지만 이는 보증되지 않습니다 (브라우저가 코드를 효과적으로 다시 작성하고 의도 한대로 해석하는 브라우저에 따라 달라짐). 어떤 이유로 든 페이지가 HTML 5 유효성 검사를 통과해야하는 경우 void 요소의 태그를 닫으면 통과하지 못할 수 있습니다.
SherylHohman

@SherylHohman의 의견과 관련하여 사양이 변경되었다고 생각하지 않습니다 (또는 변경된 경우). w3.org/TR/html5/syntax.html#start-tags(8.1.2.1.6 )를 참조하십시오. void (또는 외부) 요소에는 여전히 슬래시가 포함될 수 있습니다.
ChrisC

63

실제로 HTML에서 자체 폐쇄 태그를 사용하면 예상대로 작동합니다. 그러나 유효한 글을 쓰는 것이 걱정된다면 HTML5 있는 경우 사용할 수있는 두 개의 서로 다른 두 구문 양식에서 이러한 태그를 사용하는 방법을 이해해야합니다. HTML5는 유사하지만 동일하지 않은 HTML 구문과 XHTML 구문을 모두 정의합니다. 어떤 것이 사용되는지는 웹 서버가 보낸 미디어 유형에 따라 다릅니다.

아마도 귀하의 페이지는 text/html보다 관대 한 HTML 구문을 따르는 로 제공되고 있습니다. 이 경우 HTML5를 사용하면 종료하기 전에 특정 시작 태그에 / 옵션을 지정할 수 있습니다. 이 경우, / 그래서, 선택과 무시 <hr><hr />동일하다. HTML 사양에서는 이러한 "void elements"를 호출하고 유효한 요소 목록을 제공합니다. 엄밀히 말하면, 선택적 /은 이러한 void 요소의 시작 태그 내에서만 유효합니다. 예를 들어, <br /><hr />유효 HTML5 있지만,<p /> 아니다.

HTML5 사양은 HTML 작성자와 웹 브라우저 개발자에게 올바른 내용을 명확하게 구분하며, 두 번째 그룹은 모든 종류의 유효하지 않은 "레거시"구문을 수용해야합니다. 이 경우 HTML5 호환 브라우저는와 같이 잘못된 자체 폐쇄 태그를 허용하고 <p />예상대로 렌더링합니다. 그러나 저자에게는 해당 페이지가 유효한 HTML5 가 아닙니다 . (더 중요한 것은 이러한 종류의 잘못된 구문을 사용하여 얻은 DOM 트리가 심각하게 망가질 수 있습니다. <span />예를 들어 자체 폐쇄 태그는 일을 많이 망칠 경향이 있습니다. ).

(서버가 XHTML 파일을 XML MIME 유형으로 보내는 방법을 알고있는 드문 경우, 페이지는 XHTML DTD 및 XML 구문을 준수해야합니다. 이는 자체 정의 태그가 이와 같이 정의 된 요소에 필요함 을 의미 합니다 .)


31
<p />는 자체 닫힘 태그가 아닌 시작 태그로 취급됩니다. 즉, 문서의 나머지 전체가 P 요소 내에있는 것으로 취급됩니다. 그것은 내가 "아마도 기대하는"것이 아니며, 사소한 페이지에도 심각한 혼란을 초래할 것입니다.
mhsmith

12

HTML5는 기본적으로 후행 슬래시가없는 것처럼 동작합니다. HTML5 구문에는 자체 닫는 태그와 같은 것이 없습니다.

  • 에 태그를 자동 폐쇄 되지 않은 무효 등의 요소 <p/>, <div/>전혀 작동하지 않습니다. 후행 슬래시는 무시되고 시작 태그로 취급됩니다. 이로 인해 중첩 문제가 발생할 수 있습니다.

    이 여부에 관계없이 사실이다 슬래시 앞에 공백이있다 : <p /><div />같은 이유로 작동하지 않습니다.

  • 에 태그를 셀프 - 폐쇄 무효 등의 요소 <br/>또는 <img src="" alt=""/> 것입니다 작동하지만 후행 슬래시는 무시됩니다 때문, 올바른 동작이 발생하는 일이 경우이다.

결과적으로, 이전의 "XHTML 1.0은 텍스트 / html로 제공됨"에서 작동 한 모든 항목이 이전과 같이 계속 작동합니다. 비 공여 태그의 후행 슬래시는 해당 위치에서 승인되지 않은 반면, 무효 요소의 후행 슬래시는 작동했습니다.

한 가지 더 참고 : HTML5 문서를 XML로 표현할 수 있으며 "XHTML 5.0"이라고도합니다. 이 경우 XML 적용 규칙 및 자체 닫기 태그가 항상 처리됩니다. 항상 XML MIME 유형으로 제공해야합니다.


5

자체 닫기 태그는 HTML5에서 유효하지만 필수는 아닙니다.

<br>그리고 <br />둘 다 괜찮습니다.


12
HTML5 사양에 따르면 자체 닫는 구문 ( />)은 비공식 HTML 요소에서 사용할 수 없습니다.
naXa

3
문제는 자동 폐쇄에 태그에 대해이었다 void 이외의 요소 , 같은 <p/><div/>.
thomasrutter

2
처음에 질문은 비 공백 요소에 대한 것이 아닙니다. <... />XHTML에서와 같이 계속 사용 하거나 /HTML5에서 제거해야합니까? 질문은 여러 번 변경되었습니다.
Nick

어느 쪽이든, 대답은 슬래시가 무시되어 무효로 선언되지 않은 요소를 깨뜨리지 만 무효 요소와 호환되는 것입니다.
thomasrutter

4

이 예제에서 보여주는 것처럼 자체 닫는 태그에 매우주의해야합니다.

var a = '<span/><span/>';
var d = document.createElement('div');
d.innerHTML = a
console.log(d.innerHTML) // "<span><span></span></span>"

내 직감은 <span></span><span></span>대신에


2
이것은 허용 된 답변에 설명되어 있습니다 :On other [than void] HTML elements, the slash is an error, but error recovery will cause browsers to ignore it and treat the tag as a regular start tag. This will usually end up with a missing end tag causing subsequent elements to be children instead of siblings.
Palec

-1

그러나-레코드에 대해서만-이것은 유효하지 않습니다.

<address class="vcard">
  <svg viewBox="0 0 800 400">
    <rect width="800" height="400" fill="#000">
  </svg>
</address>

그리고 슬래시가 다시 유효 해집니다.

    <rect width="800" height="400" fill="#000"/>

1
svg가 html이 아닌 xml로 작성 되었기 때문입니다. 그것은 다른 파싱 규칙을 사용합니다
Electric Coffee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.