요소에 대한 셀프 닫는 태그를 쓰는 것이 전통적으로 빈 나쁜 연습이 아닌가?

StackOverflow https://stackoverflow.com/questions/348736

  •  20-08-2019
  •  | 
  •  

문제

jQuery (또는 Firefox입니까)가 내 일부를 돌릴 것임을 알았습니다. <span class="presentational"></span> into <span class="presentational" />

이제 내 질문은 이렇게 마크 업을 작성해도 괜찮습니까? 브라우저가 질식됩니까?

개인적으로, 나는 그것이 더 깨끗해 보인다고 생각합니다 <span class="presentational" /> 비어 있다면.

도움이 되었습니까?

해결책

Firefox에서 소스를 볼 때 귀하의 질문이 자체 폐쇄 요소의 빨간색 후드 슬래시와 관련이 있다고 가정합니다. 그렇다면, 당신은 브라우저 제작자 대 웹 개발자 전쟁에서 가장 격렬하지만 동시에 수동적 인 공격적인 논쟁에 빠져 들었습니다. XHTML은 문서의 마크 업에 관한 것이 아닙니다. 또한 웹을 통해 문서가 어떻게 제공되는지에 관한 것입니다.

내가 시작하기 전에; 나는 여기서 측면을 취하지 않기 위해 열심히 노력하고 있습니다.

XHTML 1.1 사양에 따르면 웹 서버는 컨텐츠 유형의 응용 프로그램/XHTML+XML과 함께 XHTML을 제공해야한다고 말합니다. Firefox는 application/xhtml+xml 대신 텍스트/html로 제공되기 때문에 후행 슬래시를 유효하지 않은 것으로 싱글하고 있습니다. 이 두 가지 예를 들어보십시오. 동일한 마크 업, 하나는 Application/XHTML+XML로, 다른 하나는 Text/HTML로 사용되었습니다.

http://alanstorm.com/testbed/xhtml-as-html.php

http://alanstorm.com/testbed/xhtml-as-xhtml.php

Firefox는 Meta 태그의 후행 슬래시를 텍스트/html과 함께 제공되는 문서의 유효하지 않은 것으로 표시하고 Application/XHTML+XML과 함께 제공되는 문서에 유효합니다.

이것이 논란의 여지가있는 이유

브라우저 개발자에게 XHTML의 요점은 문서를 XML로 취급 할 수 있다는 것입니다. 즉, 누군가가 유효하지 않은 것을 보내면 사양에 따라 구문 분석 할 필요가 없다고합니다. 따라서 문서가 응용 프로그램/XHTML+XML로 제공되고 well이 형성되지 않은 컨텐츠가 있으면 개발자는 "내 문제가 아님"이라고 말할 수 있습니다. 여기에서 실제로 볼 수 있습니다

http://alanstorm.com/testbed/xhtml-not-valid.php

문서가 텍스트/html로 제공되면 Firefox는이를 평범한 오래된 HTML 문서로 취급하고 용서를 사용하여 귀하를 위해 수정, 구문 분석 루틴

http://alanstorm.com/testbed/xhtml-not-valid-as-html.php

따라서 브라우저 제조업체에게 XHTML은 텍스트/html로 사용되었습니다. 브라우저의 렌더링 엔진에 의해 XML로 취급되지 않기 때문입니다.

몇 년 전, 웹 개발자는 태그 원숭이 이상의 것을 원한다는 웹 개발자 (면책 조항 : 나 자신을 그들 중 하나로 포함 함)는 세 번의 중첩 테이블과 관련이없는 모범 사례를 개발할 수있는 방법을 찾기 시작했지만 여전히 매력적인 디자인 경험을 허용했습니다. . W3C는 이것이 미래라고 말했기 때문에 XHTML/CSS에 걸렸고, 다른 선택은 단일 공급 업체 (Microsoft)가 DEFACTO 마크 업 사양을 제어 한 세계였습니다. 진정한 악 단일 공급 업체, Microsoft는 그리 많지 않습니다. 맹세합니다.

그렇다면 논쟁은 어디에 있습니까? Application/XHTML+XML에는 두 가지 문제가 있습니다. 첫 번째는 인터넷 익스플로러입니다. IE에는 컨텐츠가 Application/XHTML+XML로 제공되는 레거시 버그/기능이 있습니다. 위에 나열된 xhtml-as-xhtml.php를 방문하려고하면 IE가 발생했을 가능성이 있습니다. 이것은 응용 프로그램/xhtml+xml을 사용하려면 IE를위한 브라우저 스니핑, 허용 헤더를 점검하고이를 허용하는 해당 브라우저에 Application/XHTML+XML 만 제공하십시오. 이것은 사소한 것이 아닙니다 그것이 바로 올바르게 들리는 것처럼, 또한 웹 개발자들이 노력하고있는 "한 번 쓰기"원칙에 반대했습니다.

두 번째 문제는 XML의 가혹함입니다. 이것은 다시 불꽃이 발생하기 쉬운 문제 중 하나이지만, 단일 잘못된 태그 또는 단일 문자를 부적절하게 인코딩 한 사람이 사용자가 원하는 문서를 보지 못하게해서는 안됩니다. 다시 말해, 사양은 XML이 잘 형성되지 않으면 처리를 중단해야한다고 말하지만 사용자는 사양에 신경 쓰지 않으며 고양이 웹 사이트가 고장 났다고 생각합니다.

문제에 더 많은 휘발유를 추가하는 것은 XHTML 1.0 (1.1이 아님) 사양입니다. 5월 확실한 가정에서 텍스트/html로 제공됩니다 호환성 가이드 라인 따라야합니다. IMG 태그와 같은 것들이 자체 폐쇄 등입니다. 여기의 핵심 단어는입니다 5월. ~ 안에 RFC 말하기, 선택 사항을 의미 할 수 있습니다. Firefox는 XHTML DocType와 함께 제공되는 문서를 처리하지 않고 XHTML로 텍스트 유형/html을 처리하기로 선택했습니다. 그러나 W3C Validator는 이러한 문서를 행복하게보고합니다.

나는 독자들에게 단어가 의미하는 바를 정의하기 위해 문서를 작성하는 문화의 동시 경이/공포를 숙고하도록 떠날 것입니다. 5월.

앞으로 나아가 다

마지막으로, 이것이 전체입니다 HTML 5 문제가 있습니다. XHTML은 언어를 앞으로 움직이고 싶어하는 많은 사람들이 다른 방향으로 가기로 결정한 정치적인 뜨거운 감자가되었습니다. 그들은 HTML 5에 대한 사양을 생산했습니다. 이것은 현재 W3C에서 해시되고 있으며 향후 10 년 동안 언젠가 끝날 것으로 예상됩니다. 그 동안 브라우저 공급 업체는 진행중인 사양에서 기능을 선택하고 선택하고 구현하고 있습니다.

주석에서 업데이트

의견에서 알렉스 무언가를 위해 스니핑하려면 Application/XHTML+XML이 사용자 에이전트가 수락하는지 확인하기 위해 Hecccent 헤더를 확인해야한다고 지적합니다.

이것은 절대적으로 정확합니다. 일반적으로 스니핑하려면 브라우저가 아닌 기능을 스니핑하십시오.

다른 팁

다른 답변에 추가 : 즉, 요소가 있습니다. <span /> 마크 업에서 JavaScript에서 DOM Traversal 방법에 대한 모든 종류의 문제를 일으킬 것입니다.. 다음 XHTML 문서를 살펴보십시오.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test</title>
    <script type="text/javascript">
        function show() {
            var span = document.getElementById("span");
            alert(span.innerHTML);
        }
    </script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
           an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>

아이디어는 페이지가로드되면 JavaScript가 빈 범위에 대한 참조를 얻고 HTML 내용을 표시한다는 것입니다. 그것은 빈 줄이 될 것입니다. 즉, 그렇지 않습니다. 즉, 전체 문서의 스팬 뒤에 모든 내용을 얻습니다.

</P>
<P id=p2>Second paragraph just containing text</P>

또한 두 번째 <p> 스팬에 나타납니다 childNodes 수집. 그다지 똑같습니다 <p> 또한 몸에 있습니다 childNodes 수집, 의미 노드에는 효과적으로 여러 부모가있을 수 있습니다. 이것은 DOM을 가로 지르는 스크립트에 대한 좋은 소식이 아닙니다.

나도 가지고있다 이것에 대해 블로그를 작성했습니다.

예. 그것은이다. 구식 브라우저의 경우 어떤 경우에는 문제가 발생합니다.

<script type='text/javascript' src='script.js' />

이 경우 기존 브라우저는 <script> 태그가 끝났습니다.

Application/XHTML+XML로 u003Cspan />사용되면 콘텐츠가없는 스팬 요소를 생성합니다.u003C/span>

텍스트/html로 제공 u003Cspan />되면 태그가 발생할 때까지 요소의 내용 이이 태그를 따르거나 요소가 암시 적으로 닫히는 다른 태그 (또는 EOF)가 발생하는 스팬 요소를 생성합니다u003C/span> . 즉,이 경우 u003Cspan />와 동일 함을 의미합니다 u003Cspan>.u003C/span>u003C/span>

제외 : HTML 5는 HTML 및 XHTML 직렬화를 모두 정의 하므로이 문제에 영향을 미치지 않습니다. XHTML 1.1과 달리 XHTML 1.1과 같이 XHTML은 XHTML 1.0과 달리 애플리케이션/XHTML+XML로 제공되어야합니다. 그러나 실제로 모든 브라우저가 XHTML 버전을 TAG 수프로 텍스트/html로 사용하기 때문에 아무것도 변경하지 않습니다.

또한 주목할만한 가치가 있습니다 <?xml ...?> DocType 이전의 선언은 IE를 Quirks 모드로 던졌습니다.

XHMTL 실무 그룹의 주제 양식에 대한 메모를 참조하십시오. http://www.w3.org/tr/xhtml-media-types/

요컨대 - XHTML이 XHTML로 취급 될 경우 괜찮습니다. HTML 인 척하려면 (인터넷 익스플로러 (버전 8, 글쓰기 시점에 최신)에 의해로드되기를 원한다면해야 할 경우해야합니다.

후프는 대부분의 사람들이 HTML 4.01을 고수하는 것을 추천 할만 큼 충분히 성가신 일입니다.

일반적으로 빈 요소에 속기를 사용하는 것은 문제가되지 않지만 문제를 일으킬 수있는 예외가 있습니다.

<script> 닫아야하는 중요한 것입니다. </script> 문제를 피하기 위해.

다른 하나는 <meta> 이것은 거미와 함께 훨씬 더 잘 작동합니다 <meta></meta> 대신에 <meta />

정확히 질문이 아니라 형식 측면에서 IE 버전은 빈 요소에 문제가 있습니다. <div></div> 또는 <div />. 이 경우 <div>&nbsp;</div> 서식을 유지하려면

HTML에는 자체 폐쇄 된 태그가 없다고 설명해야하므로 브라우저가 XHTML을 HTML로 처리하기로 결정할 때마다 태그가 닫혀 있음을 인식하지 못할 것입니다. HTML에서 닫을 필요가없는 태그에 문제가되지 않습니다. <img>, 그러나 분명히 태그와 같은 나쁘다 <span>.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top