문제

제목에서 설명하듯이 사용 가능한 다양한 문서 유형은 무엇이며 그 의미는 무엇입니까?IE7에서 전환하면 레이아웃이 약간 다르게 보입니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

에게

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

다른 것이 있습니까? 그 영향이나 결과는 무엇입니까?

감사해요!

도움이 되었습니까?

해결책

Doctype, 또는 문서 유형 선언 문서를 a 문서 유형 정의.

그만큼 문서 유형 정의 XML 문서의 표준입니다. XML 및 XHTML 문서 모두에 대한 많은 DTD가 있습니다. XML 자체에는 모든 것이 잘 형성되어야한다는 요구 사항과는 별도로 스키마 나 매우 구체적인 규칙 세트가 없습니다. DTD를보다 구체적으로 생각할 수 있습니다. 문서 스키마.

렌더링 모드

표준 이동으로 인해 대부분의 최신 브라우저는 실제로 다른 렌더링 모드를 가지고 있습니다 (표준 모드, 최근 웹 표준에 따라 문서와 CSS를 렌더링하고 퀴크스 모드, 여기서 브라우저는 웹 초기부터 일부 렌더링 아이디어를 되 찾습니다). 이 모드는 후진 호환성을 위해 설립됩니다. 웹의 첫 번째 시대에 만들어진 웹 페이지의 광대 한 환경은 시간의 규칙에 따라 렌더링되며 새로운 문서는 새로운 표준의 물결에 어필 할 수 있습니다. 시간이 지남에 따라 새로운 형식이 상상되면 해당 DTD가 생성 될 수 있습니다.

브라우저 불일치

이상적인 세상에서 브라우저에서로드되는 페이지는 상단의 DocType를 읽고 문서 유형 정의를 찾는 데 사용합니다. 그런 다음 해당 DTD의 스키마를 문서의 나머지 부분을 읽기위한 기초로 사용합니다. 그러므로 DocTypes는 마크 업 문서를 검증하는 데 필수적입니다. DTD는 문서를 검증 할 표준을 제공합니다.

불행히도, 그것은 이상적인 세상이 아닙니다. 브라우저가 반드시 여기서 일관되게 행동하는 것은 아니며, 그렇다면 일관된 행동이 DocTypes에 대한 원래 비전과 일치하지는 않습니다. 구문 분석은 DocType와 독립적으로 수행되지만 주요 브라우저는 최소한 DocType를 검사하여 렌더링 모드를 결정합니다. DocType가 없거나 불완전한 경우 브라우저가 렌더링 될 것입니다. 퀴크스 모드. 잘 작성된 현대 문서가 올바르게 나타나려면 브라우저가 렌더링해야합니다. 표준 모드. Mozilla, Safari 및 최근의 Opera 버전은 실제로 거의 표준 전적으로 과도기 페이지에 전념하는 모드.

DocType를 변경하고 페이지가 표시되는 방식의 변경 사항이 변경되면 브라우저가 문서를 구문 분석하려고 할 때 약간 다른 규칙 세트를 적용 할 수 있기 때문입니다. 결과적으로, 결과 페이지는 모든 부품이 DTD를 준수하는지 또는 최소한 브라우저에 따라 DocType가 제안한 렌더링 모드 내에서 검증되는지에 따라 약간 다를 수 있습니다.

DocType 선택

표준 준수를 추구하기 위해, 가능한 한 엄격한 문서를 사용해야합니다.

글을 쓸 때 XHTML,이 문서 유형은 일반적입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

글을 쓸 때 HTML 4.1, 이것은 대신 일반적입니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

XHTML 및 HTML 4에 대한 다른 일반적인 문서 유형은 여기에 나열되어 있습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

엄격한 대 전이 도관에 대한 토론

표준 전도자들은 웹 개발자들이 새로운 페이지에서 과도기적 인 문서 사용을 중단하고 대신 엄격한 사용을 요구했습니다. 다시 말하지만, 이것은 이론과 실천이 화해하기 어려운 경우입니다. 과도기적 DocType의 원래 희망은 레거시 웹 사이트를 표준 준수로 전환하기위한 중간 집을 제공하는 것이 었습니다. 과도기적 인 doctypes를 사용하면 요소와 속성에 대한 제한이 문자 그대로 "엄격하지"않으므로 개발자는 표준 모드에서 더 빨리 작업을 실행하고 시간이 지남에 따라 미결제 차이를 단계적으로 중단 할 수 있습니다.

개발자가 엔터프라이즈 환경에서 DocType을 변경하는 것이 항상 그렇게 간단하지는 않기 때문에 논쟁이 있습니다. 중소형 웹 사이트의 프리랜서 개발자 및 제조업체는 종종 DocType를 결정하고 이러한 전환을하기가 더 쉬울 수 있습니다. 고도로 굴린 웹 기반 서비스를위한 엔터프라이즈 프로덕션 환경에서는 레거시 시스템 및 타사 코드 제품에 대한 본질적으로 더 복잡한 의존성이 있으며, 이는 자체적으로 제거 또는 재 설계를위한 로드맵에있을 수 있지만 이러한 변경 사항의 실행은이어야합니다. 체계적으로 그리고 점진적으로 완료되었습니다.

유용한 도구

W3C (월드 와이드 웹 컨소시엄)는 이러한 종류의 표준을 정의하는 데 적극적인 역할을하는 그룹입니다. 그들은 유용한 온라인 도구를 유지합니다 http://validator.w3.org/ 표준에 대한 문서를 확인하고 검증하는 것. 다른 타사 도구가 많이 있습니다 브라우저 확장 비슷한 기능으로.

다른 팁

브라우저 신경 쓰지 마세요 당신이 사용하는 doctype (잘, 거의 사실), 그들은 한 가지와 한 가지만 사용합니다. 렌더 모드 사용. 예를 들어보십시오 FX 또는 오페라 문서 어떤 알고리즘이 사용되어야하는지에 대한 실제 예제의 경우 (MSDN 어딘가에 묻힌 IE에 대한 문서가 있다고 생각합니다 ... [이것은 올바른 페이지 일 수도 있습니다] (http://msdn.microsoft.com/en-us/library/ms535242(vs.85).aspx), 모르겠어요, 죄송합니다).

그러나 대부분의 브라우저에는 두 가지 주요 모드가 있습니다 (일부 브라우저에는 거의 표준 모드 도):

  • 퀴크스 모드 (브라우저의 관점에서 "올바른"문서가 발견되지 않은 경우에 사용) : IE의 이전 버전이 할 수있는 경우 문서를 렌더링하려고 시도합니다 (가장 중요한 차이점 중 하나, 즉 가장 중요한 차이점 중 하나는 가장 큰 영향을 미칩니다. 일부 브라우저는 IE 박스 모델 버그 이 모드에서),
  • 그리고 표준 모드 (브라우저가 DocType를 찾았을 때 사용) : 표준이 말한대로 시도하십시오.

사용할 수 있습니다 (비표준) document.compatMode 이전에 언급 된 브라우저의 속성 현재 문서를 렌더링하는 데 사용 된 모드를 확인합니다.

(XHTML에 대한 참고 : 문서를 HTML로 제공한다고 가정했습니다.text/html), 당신이 당신에게 xhtml로 문서를 제공한다면 (아마도 application/xhtml+xml) 대부분의 브라우저는 표준 모드로 직접 이동하여 Afaik의 전혀 다원지에 신경 쓰지 않습니다.)

BTW : 다른 답변에서 권장 사항 (또는 추천처럼 보이는 것)은 깨졌습니다. 과도기 DTD는 새로운 문서에 사용해서는 안됩니다. 항상 엄격한 사용 ( "엄격한"이라는 용어는 오해의 소지가 있으며, "기본값"또는 기타 비 스카리 여야합니다).

저자는 가능한 경우 엄격한 DTD를 사용해야하지만 프리젠 테이션 속성 및 요소가 필요한 경우 전환 DTD를 사용할 수 있습니다. - HTML 4.01 : 22 전환 문서 유형 정의.

저자는이 사양에 의해 정의 된 다른 DTD보다는 엄격한 DTD를 준수하는 문서를 작성하는 것이 좋습니다. - HTML 4.01 : 4 적합성 : 요구 사항 및 권장 사항

그리고 이것에 대한 블로그 게시물이 많이 있습니다. 더 이상 과도기적 인 문서화가 없습니다 (2006 년부터 약간, 분명히, 여전히 이것에 문제가 있습니다 :).

이 게시물은 브라우저가 선택한 것을 신경 쓰지 않는다는 점을 지적하는 것으로 시작하여 올바른 DTD를 선택하는 방법에 대해 열광적으로 발전했습니다. 그러나 시간과 에너지를 소비하려는 경우 DTD를 선택하려면 올바른 것을 선택할 수도 있습니다 (HTML 4.01 표준 관점에서).

또는, 당신은이 모든 것을 무시하고 대신 다음을 사용할 수 있습니다. 그래도:

<!doctype html>

(이 답변 "HTML 5 Doctype 사용을 시작하지 않는 이유가 있습니까?" 마지막 부분과 관련이있었습니다.)

다음은 W3C의 다양한 DTD에 대한 공식 설명입니다.

http://www.w3.org/qa/2002/04/valid-dtd-list.html

다음과 같은 유익한 것을 찾을 수도 있습니다.

http://www.freedivs.com/tutorials/choosing%20A%20doctype/

Doctype에 대한 잘못된 정보가 많이 있습니다.혼란은 문서 유형이 원래 한 가지 목적(DTD를 식별하는 것, 즉HTML 버전이 사용됨), 실제 브라우저에서는 완전히 관련 없는 목적으로 사용됩니다.

Doctype 선언은 다음 용도로만 사용됩니다. 한 가지 오늘날의 브라우저에서는 특이한 점 렌더링 모드 및 표준 CSS의 렌더링 모드.따라서 기본적으로 HTML이 아닌 CSS입니다.

Quirks 모드 렌더링은 이전 브라우저의 일부 오래된 렌더링 버그와 호환되며 수정하고 싶지 않은 기존 콘텐츠에 주로 유용합니다.새 콘텐츠는 항상 표준 모드를 ​​사용해야 합니다. 브라우저 간에 더 정확하고 일관되게 렌더링되기 때문입니다.(표준 모드를 ​​사용할 때 브라우저 간에 렌더링 차이가 여전히 있지만 쿼크 모드에서는 훨씬 더 나쁩니다.)

그렇습니다 ~ 아니다 HTML을 선택하든 XHTML 문서 유형을 선택하든 차이가 없으며 엄격한 문서 유형이나 전환 문서 유형을 선택해도 아무런 차이가 없습니다.렌더링 모드는 기본적으로 다음과 같이 선택됩니다.

  • 문서에 문서 유형이 없는 경우 특이한 점 모드가 선택되었습니다.
  • 문서에 다음이 있는 경우 인식할 수 없음 문서 유형, 표준 모드가 선택되었습니다.이는 다음과 같은 임의의 문서 유형을 작성할 수 있음을 의미합니다. <!DOCTYPE Chris> 그러면 완벽하게 잘 작동할 거예요.
  • 공식 W3C 문서 유형 없이 올바른 URL(태그의 두 번째 문자열)이 선택됩니다. 특이한 점 방법.다른 모든 문서 유형은 표준 모드를 ​​선택합니다.(편집하다:물론 그것은 그보다 더 복잡하며, 인식된 문서 유형 중 어느 것이 쿼크 모드를 트리거하는지는 브라우저마다 다릅니다.Se hsivonens 개요, 다른 답변에서 연결되었습니다.)

역사적으로 문서 유형은 사용된 HTML 버전과 하위 집합을 선언하기 위한 것이었습니다.HTML4는 "transitional"이 "strict"에서 허용되지 않는 (FONT와 같은) 여러 요소와 속성을 허용하는 여러 버전을 정의합니다.브라우저는 이론적으로 "과도기" 문서와 다른 "엄격한" 문서를 처리할 수 있습니다.하지만 실제로 어떤 브라우저도 이 작업을 수행하지 않습니다..

편집하다:scunliffe는 IE8이 "IE8 표준" 모드라는 또 다른 렌더링 모드를 갖게 될 것이라고 지적합니다.그러나 AFAIK 이 모드는 doctype이 아니라 메타 태그에 의해 트리거됩니다.

기본적으로, DocType는 IE가 얼마나 미친 지 결정합니다.

XHTML로 설정하지 않거나 "엄격한"경우 IE와 관련하여 상처의 세계에 살게 될 것입니다. 훨씬 낫다).

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