찾다
웹 프론트엔드HTML 튜토리얼月半小夜曲下的畅想DOCTYPE模式_html/css_WEB-ITnose

引子

  猜猜我现在在干嘛?看在天朗气清的份上,告诉你好了,我现在做在电脑旁,然后听着月半小夜曲,然后思绪开始飞扬了,此时的我感觉很惬意,音乐的旋律虽伤感,但好像触碰到内心的柔软,心弦为之一动,就是那么好听,在这动听的乐曲下,我想到了doctype,因为它也让我伤感,让我动心,还得动脑。

正文

 

什么是DOCTYPE?

百度百科上的介绍:

文档类型标签,该标签是将特定的标准通用标记语言或者XML文档(网页就是其中一种)与文档类型定义(DTD)联系起来的指令。该标记应该出现在文件的第一行。它在文档中出现的格式如下:

用的字符串" --公共标识符-->

“引用的字符串”被称为公共标识符,它通过业界约定的公共标识符名称(通常是一个相关的标准)指向某个特定的文档类型定义(DTD)。(外语原文:A DOCTYPE is a SGML document type declaration. Its purpose is to tell an SGML parser what DTD it should use to parse the document.) 

标签完整格式为,语法参见!DOCTYPE。只有确定了一个正确的文档类型,超文本标记语言或可扩展超文本标记语言中的标签和层叠样式表才能生效,甚至对JavaScript脚本都会有所影响。

常用集合:

超文本标记语言

互联网工程任务组超文本标记语言2.0:

/p>

PUBLIC "-//IETF//DTD HTML//en">

公共标识符称为:“-//IETF//DTD HTML//en”。

万维网联盟:

大多数万维网浏览器实际上并没有使用标准通用标记语言解析器,其中许多基于对文档的!DOCTYPE声明,显示有所不同的文件或缺乏。

在超级文本标记语言下的作用是告知浏览器当前文档所使用的是哪种超文本或可扩展超文本规范。

超文本4.01 规定了叁种文档类型:严格、过渡以及框架集。

超文本严格文档类型定义:

如果您需要干净的标记,免于表现层的混乱,请使用此类型。请与层叠样式表配合使用:

(公共标识符称为:“-//W3C//DTD HTML 4.01//en”。)

/p>

PUBLIC "-//W3C//DTD HTML 4.01//en"

"http://www.w3. org/TR/html4/strict.dtd">

超文本过渡文档类型定义

可包含万维网联盟所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表的浏览器以至于您不得不使用超文本标记语言的呈现特性时,请使用此类型:

(公共标识符称为:“-//W3C//DTD HTML 4.01 Transitional//en”。)

/p>

PUBLIC "-//W3C//DTD HTML 4.01 Transitional//en"

"http://www.w3. org/TR/html4/loose.dtd">

超文本框架集文档类型定义

框架集文档类型定义应当被用于带有框架的文档。除 frameset 元素取代了 body 元素之外,等同于过渡文档类型定义:

(公共标识符称为:“-//W3C//DTD HTML 4.01 Frameset//en”。)

/p>

PUBLIC "-//W3C//DTD HTML 4.01 Frameset//en"

"http://www.w3. org/TR/html4/frameset.dtd"

扩展超文本标记语言

万维网联盟:

可扩展超文本标记语言 1.0 规定了叁种文档类型:严格、过渡以及框架集。

可扩展超文本标记语言严格文档类型定义

(公共标识符称为:“-//W3C//DTD XHTML 1.0 Strict//en”。)

/p>

PUBLIC "-//W3C//DTD XHTML 1.0 Strict//en"

"http://www.w3. org/TR/xhtml1/DTD/xhtml1-strict.dtd">

可扩展超文本标记语言过渡文档类型定义

可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 XHTML 的呈现特性时,请使用此类型:

(公共标识符称为:“-//W3C//DTD XHTML 1.0 Transitional//en”。)

/p>

PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//en"

"http://www.w3. org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

可扩展超文本标记语言框架集文档类型定义

当您希望使用框架时,请使用此文档类型定义!

(公共标识符称为:“-//W3C//DTD XHTML 1.0 Frameset//en”。)

/p>

PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//en"

 

"http://www.w3. org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

数学标记语言

万维网联盟:

下面例子中的声明都指定了遵从“MathML”数学标记语言 2.0 文档类型定义。

(公共标识符统称为:“-//W3C//DTD MathML 2.0//en”。)

/p>

PUBLIC "-//W3C//DTD MathML 2.0//en"

"http://www.w3 .org/Math/DTD/mathml2/mathml2.dtd">

第二种将设置MATHML命名空间的前缀到MML。

/p>

PUBLIC "-//W3C//DTD MathML 2.0//en"

"http://www.w3 .org/Math/DTD/mathml2/mathml2.dtd"

[

]

>

第三种附加了检查文档类型定义(DTD)

/p>

PUBLIC "-//W3C//DTD MathML 2.0//en"

"http://www.w3 .org/Math/DTD/mathml2/mathml2.dtd"

[

]

>

符号交换文件格式(音乐)

公共标识符称为:“-//IPTC-NAA//DTD NITF 2.0//en”

/p>

PUBLIC "-//IPTC-NAA//DTD NITF 2.0//en" >

翻译存储交换

公共标识符称为:“-//LISA OSCAR:1998//DTD for Translation Memory eXchange//en”

/p>

PUBLIC "-//LISA OSCAR:1998//DTD for Translation Memory eXchange//en">

电子日历

公共标识符称为:“-//IETF//DTD iCalendar//en”

/p>

PUBLIC "-//IETF//DTD iCalendar//en">

 

无线标记语言

公共标识符称为:“-//WAPFORUM//DTD WML 1.1//en”

/p>

PUBLIC "-//WAPFORUM//DTD WML 1.1//en">

音乐可扩展标记语言

三点零版本:

score-partwise

PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//en">

 

上面的 DOCTYPE 包含 6 部分:

  1. 字符串“
  2. 根元素通用标识符“HTML”
  3. 字符串“PUBLIC”
  4. 被引号括起来的公共标识符(publicId)“-//W3C//DTD HTML 4.01//en”
  5. 被引号括起来的系统标识符(systemId)“http://www.w3.org/TR/html4/strict.dtd”
  6. 字符串“>”

其中根元素通用标识符、公共标识符、系统标识符均可以通过脚本调用 DOM 接口获得,分别对应 document.doctype.name、document.doctype.publicId、document.doctype.systemId

 

最后,我查看了在淘宝网,京东,天猫,还有博客园上都是用的,这个是html5标准网页声明,原先的是一串很长的字符串,现在是这个简洁形式,支持html5标准的主流浏览器都认识这个声明。表示网页采用html5,而HTML 4.01 中的doctype需要对DTD进行引用,因为HTML 4.01基于SGML,而HTML5不基于SGML,因此不需要对 DTD 进行引用,但是需要 doctype 来规范浏览器的行为。我平时也是运用,一方面简洁,不会写错,另外一方面,标准主流浏览器都认识,所以可以放心写。

DTD:文档类型定义(Document Type Definition)是一套关于标记符的语法规则。它是标准通用标记语言和可扩展标记语言1.0版规格的一部分,是文档的验证机制。文档类型定义是一种保证标准通用标记语言、可扩展标记语言文档格式正确的有效方法,可通过比较文档和文档类型定义文件来看文档是否符合规范,元素和标签使用是否正确。具体解释参照:http://baike.baidu.com/link?url=bA_s20lIL9cApp0e-fGvm2bbCvhblqjc7_1BF1gdMMdjNREQr6VZOEcylzuG5eMaJF_-olsL6ZWWQ4QKgXUwIq

SGML:标准通用标记语言(以下简称"通用标言"),是一种定义电子文档结构和描述其内容的国际标准语言;通用标言为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在数据分类和索引中非常有用;是所有电子文档标记语言的起源,早在万维网发明之前"通用标言"就已存在。具体解释参照:http://baike.baidu.com/link?url=dTCobBuXTUw0jTNi4dpsIOU2Dt0owC8WnazmV1gsgQXOegyPSDZAMZ95BN81ckCyspnO5TTgrX-hm3_ktPagruZzvIfqBISloJIXiFgJcs_euma9v9I5iABX7g0Zyxpo3zJAzbDPCoH7zBJFg13TKa

浏览器的两种文档模式历史:

随着 IE 的发展,其渲染引擎(早期为 MSHTML.dll,后来命名为 Trident)也在不断加入新的特性以及修正一些早先版本的错误。在 2001 年 IE6 正式发布之前,当时的市面主要就是 IE 和 Netscape 的 Navigator 两款浏览器,而 IE 拥有很大的用户群,所以大多数的页面都是针对 IE 而设计的,但是 IE 的渲染引擎却没有遵循 W3C 的规范,当时微软已经认识到 W3C 规范的重要性,所以当 IE 发展到 IE6 的时候,渲染引擎(MSHTML.dll)做出了一个重要的改变,将自己原先不符合 W3C 规范中的盒模型 box mode 绘制方式改为与 W3C 标准一致,由于这个重大的改动,原先针对 IE 旧版本所设计的 HTML 页面都不能正确显示了,所以在 IE6 发布的时候附带了一个切换回 IE5 页面渲染方式的功能,这个功能中就首次提出了 Quirks Mode。IE6.0以后的版本在浏览器内嵌了两种表现模式:Standards Mode(标准模式或Strict Mode)和Quirks mode(怪异模式或兼容模式Compatibility Mode)。在标准模式中,浏览器根据W3C所定的规范来显示页面;而在怪异模式中,页面将以IE5,甚至IE4的显示页面的方式来表现,以保持以前的网页能正常显示。

浏览器是如何决定文档模式?

浏览器在准备解析、绘制一个页面的时候,它是如何决定文档模式的呢?实际上浏览器在渲染页面之前会检查两个内容,一个是页面是否有 doctype 信息,另外一个是页面是否有 x-ua-compatible 信息(暂时不讨论,先讨论doctype)。

 

Doctype 检测

 

对于一个 HTML 页面,声明位于其中最前面的位置,处于标签之前,这个可以告知浏览器使用哪种 HTML 规范,针对每种规范浏览器同样也会选择对应的文档模式。平时最常见的三种 doctype 信息对应的文档模式如下。

 

  当 doctype 信息如下时,表明该页面是遵守了 HTML5 规范的,浏览器会选择 Standards Mode,这种 doctype 是最推荐的一种,我们平时设计页面都应该加上这一个 doctype。

  

  当 doctype 如下时,浏览器同样会选择 Standards Mode,虽然和第一种 doctype 有一些区别,但是几乎可以认为是一样的。

  

  当 doctype 缺失的时候,浏览器会选择 Quirks Mode,这是非常不推荐的方式,我们应该尽量避免 Quirks Mode,这对一个 web 应用是非常不利的地方。

标准模式(Standards Mode)与怪异模式(Quirks Mode)下的页面区别

由于历史原因,早期的 IE 浏览器(IE 6 以前)将盒子的 padding 和 border 算到了盒子的尺寸中,这一模型被称为 IE 盒模型。

在 IE 盒模型中,

box width = content width + padding left + padding right + border left + border right

box height = content height + padding top + padding bottom + border top + border bottom

而在W3C 标准的盒模型中,box 的大小就是 content 的大小。

box width = content width,

box height = content height

如下代码所示:

 

IE5.5下的盒子总宽度为100px.

 

谷歌上的盒子总宽度为160px

由此可见,Quirks 和 Standards 这两种文档模式渲染页面的时候会有很大的差别,特别是盒子模型的解释造成很多麻烦,这些差别主要是由于渲染引擎在历史的发展过程中与 W3C 标准的差异性而导致的。

所以对doctype的声明尤为重要,假如没有声明doctype,那么就会开启怪异模式!

如下代码效果:

IE5.5/IE6/IE7/IE8效果图如下:

 

就会在Quirks Mode下,而其他的主流标准浏览器的效果是怎样的呢?由于其他主流的标准浏览器都是用的W3C标准,所以效果如下:

(分别是谷歌,360,safari,opera的测试效果)

假如加上了doctype声明,IE5.5/IE6/IE7/IE8的效果是怎样的呢?

IE5.5还是

 

而IE6/IE7/IE8则是:

跟其他采用W3C的标准浏览器的盒子模型一样。

现在大家已经忽视了IE5的存在,为了更好实现兼容,所以doctype声明一定不可用缺省。而你可以使用即可。

CSS3的box-sizing属性(因为也是尺寸相关,一起总结)

定义和用法

box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素。

例如,假如您需要并排放置两个带边框的框,可通过将 box-sizing 设置为 "border-box"。这可令浏览器呈现出带有指定宽度和高度的框,并把边框和内边距放入框中。

默认值: 继承性: 版本: JavaScript 语法:
content-box
no
CSS3
object.style.boxSizing="border-box"

语法

box-sizing: content-box|border-box|inherit;

描述

content-box

这是由 CSS2.1 规定的宽度高度行为。

宽度和高度分别应用到元素的内容框。

在宽度和高度之外绘制元素的内边距和边框。

border-box

为元素设定的宽度和高度决定了元素的边框盒。

就是说,为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。

通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

inherit

规定应从父元素继承 box-sizing 属性的值。

 

代码如下:

由上面代码所示,就可以看出,当设置box-sizing:border-box;

为元素设定的宽度和高度决定了元素的边框盒。

就是说,为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。

通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

即是,内容content只有130px,width:150px,在已设定的150px内,减去左右两边border,就是内容值130px。

-moz-box-sizing:border-box; /* Firefox */
-webkit-box-sizing:border-box; /* Safari */

上面两行代码则兼容了Firefox和Safari,同时测试了opera,效果图一致如下:

 

那么IE5.5的效果如下:

IE6/IE7的效果如下:

IE8的效果如下:

从以上可以看出,box-sizing属性在IE8上是可以实现其他标准浏览器的效果,可是IE5.5/IE6/IE7 却不能完全兼容,从兼容性上考虑,在大型的项目上尽量不用box-sizing。有兴趣的朋友,可以去查下box-sizing 如何实现兼容咯。

重要的一点就是一定要有doctype声明,为了简洁,建议你写上即可。本篇文章还涉及了很多知识点,就不一一赘述了,至于页面渲染引擎这个点,我还不是很清楚,所以后面再总结写文咯。

假如有错误的地方,欢迎大家指正,谢谢咯。

音乐结束,我这篇文章也就到这咯,呵呵。----妙瞳

 

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
HTML의 미래 : 웹 디자인의 진화 및 트렌드HTML의 미래 : 웹 디자인의 진화 및 트렌드Apr 17, 2025 am 12:12 AM

HTML의 미래는 무한한 가능성으로 가득합니다. 1) 새로운 기능과 표준에는 더 많은 의미 론적 태그와 WebComponents의 인기가 포함됩니다. 2) 웹 디자인 트렌드는 반응적이고 접근 가능한 디자인을 향해 계속 발전 할 것입니다. 3) 성능 최적화는 반응 형 이미지 로딩 및 게으른로드 기술을 통해 사용자 경험을 향상시킬 것입니다.

HTML vs. CSS vs. JavaScript : 비교 개요HTML vs. CSS vs. JavaScript : 비교 개요Apr 16, 2025 am 12:04 AM

웹 개발에서 HTML, CSS 및 JavaScript의 역할은 다음과 같습니다. HTML은 컨텐츠 구조를 담당하고 CSS는 스타일을 담당하며 JavaScript는 동적 동작을 담당합니다. 1. HTML은 태그를 통해 웹 페이지 구조와 컨텐츠를 정의하여 의미를 보장합니다. 2. CSS는 선택기와 속성을 통해 웹 페이지 스타일을 제어하여 아름답고 읽기 쉽게 만듭니다. 3. JavaScript는 스크립트를 통해 웹 페이지 동작을 제어하여 동적 및 대화식 기능을 달성합니다.

HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?Apr 15, 2025 am 12:13 AM

Htmlisnotaprogramminglanguage; itisamarkuplanguage.1) htmlstructuresandformatswebcontentusingtags.2) itworksporstylingandjavaScriptOfforIncincivity, WebDevelopment 향상.

HTML : 웹 페이지 구조 구축HTML : 웹 페이지 구조 구축Apr 14, 2025 am 12:14 AM

HTML은 웹 페이지 구조를 구축하는 초석입니다. 1. HTML은 컨텐츠 구조와 의미론 및 사용 등을 정의합니다. 태그. 2. SEO 효과를 향상시키기 위해 시맨틱 마커 등을 제공합니다. 3. 태그를 통한 사용자 상호 작용을 실현하려면 형식 검증에주의를 기울이십시오. 4. 자바 스크립트와 결합하여 동적 효과를 달성하기 위해 고급 요소를 사용하십시오. 5. 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함되며 검증 도구가 필요합니다. 6. 최적화 전략에는 HTTP 요청 감소, HTML 압축, 시맨틱 태그 사용 등이 포함됩니다.

텍스트에서 웹 사이트로 : HTML의 힘텍스트에서 웹 사이트로 : HTML의 힘Apr 13, 2025 am 12:07 AM

HTML은 웹 페이지를 작성하는 데 사용되는 언어로, 태그 및 속성을 통해 웹 페이지 구조 및 컨텐츠를 정의합니다. 1) HTML과 같은 태그를 통해 문서 구조를 구성합니다. 2) 브라우저는 HTML을 구문 분석하여 DOM을 빌드하고 웹 페이지를 렌더링합니다. 3) 멀티미디어 기능을 향상시키는 HTML5의 새로운 기능. 4) 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함됩니다. 5) 최적화 제안에는 시맨틱 태그 사용 및 파일 크기 감소가 포함됩니다.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서HTML, CSS 및 JavaScript 이해 : 초보자 안내서Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 역할 : 웹 컨텐츠 구조HTML의 역할 : 웹 컨텐츠 구조Apr 11, 2025 am 12:12 AM

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

HTML 및 코드 : 용어를 자세히 살펴 봅니다HTML 및 코드 : 용어를 자세히 살펴 봅니다Apr 10, 2025 am 09:28 AM

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기