1.3 HTML 5与HTML 4的区别
HTML 5以HTML 4以及之前的版本为基础,对HTML 4进行大量的修改,这些修改内容包含语法的改变、元素的废除和增加、属性的废除和增加,以及全局属性等。
1.3.1 语法的改变
HTML的语法是在SGML的基础上建立起来的。SGML的语法非常复杂,要开发能够解析SGML语法的程序也很不容易,因此,很多浏览器都不包含SGML的分析器,这也导致之前的HTML的执行在各个浏览器之间并没有一个统一的标准。
HTML 5所要解决的问题之一就是提高Web浏览器之间的兼容性,为了确保兼容性,就需要有一个统一的标准。因此,HTML 5围绕着Web标准重新定义了一套在现有的HTML的基础上修改而来的语法,使它运行在各个浏览器时都能够符合这个通用标准。
HTML 5在HTML 4的语法上进行了很大的改变,如下代码演示为一个基本的HTML 5页面的框架。
<!DOCTYPE html> <html lang="zh-cn"> <meta charset="utf-8" /> <title>运行第一个网页</title> <head> <title>无标题文档</title> </head> <body> 这是HTML 5页面。 </body> </html>
从上述代码中可以看到,HTML 5的页面与之前的版本相比要简单得多,它在语法上有了很大的改变。
1.DOCTYPE声明
DOCTYPE声明是HTML文档中的第一个内容,它位于<html>标记之前,告知浏览器文档所使用的HTML规范。
虽然HTML 4与HTML 5中都包含DOCTYPE的声明,但是它们之间也存在着差异。前者有三个不同的文档类型,由于它基于SGML,因此,它需要引用一个DTD。而HTML 5不再基于SGML,因此不需要引用DTD,直接声明文档类型让浏览器按照它们应该的方式运行。HTML 5中的声明代码如下:
<!DOCTYPE html>
当使用工具时可以在DOCTYPE声明方式中加入SYSTEM识别符。代码如下:
<!DOCTYPE html SYSTEM "about:legacy-compat">
2.命名空间声明
HTML 5不需要再像HTML 4中那样为html元素添加命名空间。例如,在HTML 4中声明html元素时的代码如下:
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn">
HTML 4中的xmlns属性在XHTML中是必需的,它没有任何实际效果,但是由于验证原因,在把HTML转换为XHTML的过程中是很有帮助的。HTML 5中没有理由这么做,但是仍然可以定义此属性的值,并且此属性的值只有一个。HTML 5中可以直接通过以下代码声明文档:
<html lang="zh-cn">
另外,HTML 5中新增加了一个名称是manifest的属性,此属性的值指向一个URL地址,表示脱机使用时定义的缓存信息。
3.元信息标记指定字符编码
<meta>表示元信息标记,它可以提供有关页面的元信息,例如,针对搜索引擎和更新频度的描述和关键词等。
<meta>标记位于文档的头部时,不包含任何内容,并且此标记中的属性定义了与文档相关联的名称/值对。HTML 4中使用以下代码定义元信息:
<meta http-equiv="content-type" content="text/html; charset="UTF-8">
在HTML 5中可以直接指定charset属性,代码如下:
<meta charset="UTF-8">
<meta>标记中可以添加多个属性,同时HTML 4中废除了scheme属性,同时又添加了charset属性,如表1-1所示为HTML 4和HTML 5对此标记属性的支持情况。在该表中,“√”表示此版本支持某属性,而“×”则表示不支持某属性。
表1-1 HTML 4和HTML 5对<meta>标记属性的支持
【练习1】
例如,本次练习分别通过为<meta>标记的属性指定不同的属性实现不同的内容设置,设置步骤如下所示。
(1)将name属性的值指定为keywords,可以定义针对搜索引擎的关键词。代码如下:
<meta name="keywords" content="HTML, CSS, XML, XHTML, JavaScript" />
(2)将name属性的值指定为description,可以定义对页面的描述。代码如下:
<meta name="description" content="免费的Web技术教程。" />
(3)将name属性的值指定为revised,可以定义页面的最新版本。代码如下:
<meta name="revised" content="David, 2008/8/8/" />
(4)设置http-equiv属性的值为refresh,指定每5s刷新一次页面。代码如下:
<meta http-equiv="refresh" content="5" />
4.省略引号
在HTML 4以及之前的版本中,指定属性值时,属性值不仅可以使用双引号,也可以使用引号,甚至是省略引号。HTML 5在此基础上进行了改进,如果属性值不包含空字符串、“<”、“>”、“=”、单引号以及双引号等字符时,属性两边的引号可以省略。示例代码如下:
<input type=text checked=checked/>
5.省略标记语法
HTML 5继承了HTML 4中标记可以省略的特点,使页面结构更加灵活。它将省略标记语法的情况分为三类,说明如下。
1)省略开始和结束标记
简单来说,就是省略了一个元素的开始标记和结束标记,这时,这些元素是隐式存在的。这类元素包括html、head、body、colgroup和tbody等。例如,在HTML文档页面中,body元素可以省略不写,但是它仍然会存在于文档结构中,可以使用document.body进行访问。
2)省略结束标记
这类元素可以省略标记,HTML 5会自动为其添加相应的结束标记。这些元素包括li、dt、dd、p、rt、rp、optgroup、option、colgroup、thead、tbody、tfoot、tr、td、th。
3)不允许写结束标记
这类元素只能通过“<元素名称/>”的形式进行使用,它们包括area、base、br、col、command、embed、hr、img、input、keygen、link、meta、param、source、track、wbr。
6.省略逻辑属性
HTML 5中的许多属性都是逻辑值,例如checked和disabled等。这些属性的默认值都是false,如果不指定属性,则表示不使用属性。而如果将一个逻辑属性的值指定为true,则有三种方式,说明如下。
(1)直接指定属性,不赋任何属性值。
(2)将属性名称作为该属性的值。
(3)使用空字符串作为该属性的值。
【练习2】
例如,下面的代码演示了将逻辑属性值设置为true时的示例。
<input type="checkbox" checked /> <!--直接指定属性--> <input type="checkbox" checked="checked" /> <!--指定属性值=属性名--> <input type="checkbox" checked=" " /> <!--属性值为空字符串-->
注意
虽然HTML 5的语法进行了很大的改变,但是它的文档扩展符与内容类型是保持不变的,仍然以.html或.htm为后缀名,而内容类型仍然是text/html。
1.3.2 新增元素和废除元素
HTML 5不仅对HTML 4之前的语法进行了改进,同时也对元素和属性等方面进行了改进。对于元素来说,HTML 5增加了许多新的元素,例如,与页面有关的主体元素、非主体元素、结构元素,以及新增的与表单有关的元素等。同时也废除了一些原来的元素。
1.新增的结构元素
HTML 5中新增加了一些结构元素,通过使用这些结构元素可以代替传统的使用div元素表示头部、底部或者导航的内容,新增的结构元素如表1-2所示。
表1-2 HTML 5新增的结构元素
结构元素的使用与其他元素一样,但是,它比之前的代码更加简单。例如,如果要定义某个网站的头部内容,HTML 4中定义的代码如下:
<div id="header">…</div>
定义上述内容完成后需要在CSS样式表中定义名称是header的ID选择器。但是,HTML 5中不再那样麻烦,直接在页面定义header元素,然后在样式表中直接将header作为标签选择器。
2.新增的块级语义元素
HTML 5中还提供了一些常用的块级元素,最常用的是aside和figure,除了这两种元素外,还有一种dialog元素,如表1-3所示。
表1-3 HTML 5新增的块级语义元素
如表1-3所示的块级语义元素的使用与其他元素一样,如下代码演示为figure元素的使用方法。
<figure> <p>北京天安门方位图</p> <img src="beijing_location_allpic.jpg" width="500" height="350" /> </figure>
3.新增的行内语义元素
行内(inline)语义元素也叫内联元素,它们一般都是基于语义级的基本元素,行内语义元素只能容纳文本或者其他行内元素,常见的内联元素是a。HTML 5中新增加了一些行内语义元素,如表1-4所示。
表1-4 HTML 5新增的行内语义元素
例如,下面的代码演示了meter元素的简单使用。
<p>本次考试李少海同学所得的分数是:<meter value="88.7" min="0" max="100" low="65" high="96" optimum="100">B+</meter>分(满分100分)</p>
4.新增的交互元素
HTML 5中所提供的交互元素进一步发展了交互能力,它们就是为了提高页面的交互体验而生的,如表1-5所示为新增的交互元素。
表1-5 HTML 5新增的交互元素
5.新增的绘图和多媒体元素
在整个HTML 5的知识中,绘图元素和多媒体元素是相当重要的一部分内容,通过使用这些元素可以实现绚丽图形的绘制,也可以显示音频和视频文件。HTML 5中新增加的canvas元素用来绘图,而audio元素和video元素则分别用来显示音频文件和视频文件。
例如,下面的代码通过audio元素指定显示当前名称是mysong的MP3格式的文件。
<audio controls autoplay="autoplay" loop src="mysong.mp3"> </audio>
6.新增的表单元素和样式
HTML 5还对表单进行了大的改进,例如,增加了一些与表单有关的元素,具体说明如表1-6所示。
表1-6 HTML 5新增的表单元素
例如,下面的代码演示了datalist元素的简单使用。
<input id="myCar" list="cars" /> <datalist id="cars"> <option value="BMW"> <option value="Ford"> <option value="Volvo"> </datalist>
除了新增与表单有关的元素外,HTML 5还对表单中input元素的类型提供了多个支持,类型说明如表1-7所示。
表1-7 HTML 5对input元素新增的类型
Data Pickers通常被称为数据检出器,它有6种显示样式,即HTML 5提供了6个可供选取日期和时间的新的输入类型,如下所示。
(1)date:可选取日、月、年的文本框。
(2)month:可选取月份和年份的文本框。
(3)week:可选择星期和年份的文本框。
(4)time:可选择时间(小时和分钟)的文本框。
(5)datetime:可选择时间、日、月、年(UTC时间)的文本框。
(6)datetime-local:可选择时间、日、月、年(本地时间)的文本框。
提示
HTML 5中包含成百个元素,新增加的元素远远不止上面所列举的这些(如abbr和del),感兴趣的读者可以通过其他途径(如在网络上查找)了解所有的新增元素。
由于各种原因,HTML 5中还废除了HTML 4原先存在的一些元素,这些废除元素的说明如下。
1.能使用CSS替代的元素
对于basefont、big、center、font、s、strike、tt以及u这些元素来说,它们的功能都是为画面展示服务的。在HTML 5中提倡将画面展示性功能放在CSS样式表中统一编辑,因此将这些元素废除了,并使用编辑CSS、添加CSS样式表的方式进行替代。例如,s元素和strike元素可以由del元素替代。
2.不再使用frame框架的元素
HTML 5中废除了frame元素,这是因为frame框架对页面存在着负面影响,同时还废除了frameset、frame与noframes三个元素。HTML 5只支持iframe框架,或者用服务器方创建的由多个页面组成的复合页面的形式。
3.只有部分浏览器支持的元素
HTML 5还废除了只有部分浏览器支持的元素,如applet、bgsound、blink和marquee等元素。废除这些元素后,又增加了新的元素来代替,如applet元素由embed元素替代;marquee元素由JavaScript脚本编程的方式来替代。
4.其他被废除的元素
除了上面三种类型的元素被废除外,还有其他的元素也被废除了,这些元素在HTML 5中也被新的元素替代了,如下所示。
(1)废除rb元素,使用ruby元素替代。
(2)废除acronym元素,使用abbr元素替代。
(3)废除dir元素,使用ul元素替代。
(4)废除isindex元素,使用form元素与input元素相结合的方式替代。
(5)废除listing元素,使用pre元素替代。
(6)废除xmp元素,使用code元素替代。
(7)废除nextid元素,使用GUIDS元素替代。
(8)废除plaintext元素,使用“text/plain”MIME类型替代。
1.3.3 新增属性和废除属性
HTML 5在新增属性的同时,也废除了HTML 4中的许多属性,下面将进行说明。
1.事件属性的新增与废除
HTML 5中的元素可以拥有事件属性,这些属性在浏览器中触发行为。例如,当用户单击一个HTML 5元素时调用一段JavaScript脚本代码执行程序。HTML 5中保留了HTML 4版本中的许多事件属性,如onblur、onchange、onclick、ondbclick、onselect、onsubmit以及一系列与按键有关的事件属性等。
但是,HTML 5中新增加了多个事件属性,同时也废除了一些事件属性,如表1-8所示。在表1-8中,“√”表示在HTML 4或HTML 5所支持的事件属性,而“×”表示HTML 4或HTML 5不支持的属性。
表1-8 事件属性的新增与废除
2.标准属性的新增与废除
HTML中的标记都有属性,可以在每个标记的参考页中找到相应的特殊属性,标准属性是指每个标记都有的通用属性。如表1-9所示为HTML 5中新增的标准属性,这里列出的标准属性主要是指核心属性和语言属性(个别例外)。
表1-9 HTML 5中新增的标准属性
对于每个标记的标准属性来说,HTML 5中废除了accesskey属性,该属性设置访问一个元素的键盘快捷键。
3.新增的特殊属性
上面只是列举了一些新增的标准属性,对于部分标记来说,它们都有自己特有的属性,HTML 5为某个标记增加了特殊属性,也会废除一些属性,例如,废除在<meta>标记中的scheme属性,新增了charset属性。
1)与表单有关的新增属性
HTML 5中新增加了一些与表单有关的属性,这些属性的具体说明如下。
(1)autocomplete属性:规定form或input元素应该拥有自动完成的功能。
(2)autofocus属性:规定在页面加载时,文本域是否自动获取焦点,适用于所有input元素的类型。
(3)form属性:此属性规定输入域所属的一个或多个表单,适用于所有input元素类型。
(4)表单重写属性:表单重写属性允许重写form表单中的某些属性设定。表单重写属性适用于input元素类型的submit和image,相关属性的说明如下。
① formaction属性:重写表单的action属性。
② formenctype属性:重写表单的enctype属性。
③ formmethod属性:重写表单的method属性。
④ formnovalidate属性:重写表单的novalidate属性。
⑤ formnotarget属性:重写表单的target属性。
2)与表单输入域有关的新增属性
HTML 5新增了许多与表单输入域有关的属性,这些属性如表1-10所示。
表1-10 HTML 5中新增的与输入域有关的属性
3)与链接有关的特殊属性
HTML 5中新增了5个与链接有关的属性,其说明如表1-11所示。
表1-11 HTML 5中与链接有关的属性
1.3.4 全局属性
HTML 5新增加了“全局属性”的概念,全局属性是指可以对任何标记使用的属性,可以理解为前面所介绍的标准属性。
1.hidden属性
hidden属性告诉浏览器元素的内容要以何种方式进行显示,此属性的值是一个布尔类型。默认情况下此属性的值为false,如果将此属性的值设置为true,那么元素的内容将会被隐藏,不会在页面中进行显示。
【练习3】
本次练习演示如何通过hidden属性控制显示文本框的内容,当用户单击按钮时会触发Click事件调用脚本函数,在脚本函数中进行判断,具体步骤如下所示。
(1)通过Dreamweaver工具创建新的网页,在页面中添加一个文本框和一个按钮。代码如下:
<input type="text" hidden="true" id="inputName" value="我要隐藏了!" /> <input type="button" onClick="HidTxt()" value="Click Me"/>
(2)添加名称是HidTxt的脚本函数,在此函数中首先获取文本框元素,然后判断该元素的hidden属性的值,如果为true则重新设置为false,如果为false则重新设置为true。代码如下:
<script language="javascript"> function HidTxt() { var input = document.getElementById("inputName"); if(input.hidden) input.hidden = false; else input.hidden=true; } </script>
(3)运行网页单击页面中的按钮进行测试,具体效果不再显示。
2.contentEditable属性
contentEditable属性的主要功能是允许用户编辑元素中的内容,所以要求拥有此属性的元素必须是可以获得鼠标焦点的,而且在单击鼠标后要向用户提供一个插入符号,提示用户此元素中的内容允许编辑。
contentEditable属性的值也是一个布尔类型,属性值为true时指定允许编辑,为false时指定为不允许编辑。另外,此属性还存在一个隐藏的inherit(继承)状态,如果没有指定属性值时,则由inherit状态来决定,如果元素的父元素是可编辑的,则该元素是可编辑的。
例如,下面通过一个简单的练习演示如何使用contentEditable属性。
【练习4】
在本次练习中,为要更改内容的页面添加contentEditable属性,并且属性值设置为true。部分代码如下:
<div class="detail_text" contentEditable="true"> 我不喜欢一个苦孩子求学的故事。家庭十分困难,父亲逝去,弟妹嗷嗷待哺,可他大学毕业后,还要坚持读研究生,母亲只有去卖血……我以为那是一个自私的学子。求学的路很漫长,一生一世的事业,何必太在意几年蹉跎?况且这时间的分分秒秒都苦涩无比,需用母亲的鲜血灌溉!一个连母亲都无法挚爱的人,还能指望他会爱谁?把自己的利益放在至高无上位置的人,怎能成为人类的大师?孝心无价,我也不喜欢父母重病在床,断然离去的游子,无论你有多少理由。地球离了谁都照样转动,不必将个人的力量夸大到不可思议的程度。在一位老人行将就木的时候,将他对人世间最期冀的希望斩断,以绝望之心在寂寞中远行,那是对生命的大不敬。<br/><br/> </div>
运行页面查看效果,在添加contentEditable属性处直接单击修改,此时的效果如图1-1所示。在如图1-1所示的当前光标处添加或者删除内容,执行完成后直接单击页面空白处即可。
图1-1 编辑文本内容
3.spellcheck属性
spellcheck属性规定是否对元素内容进行拼写检查,其属性值也是一个布尔类型。如果属性值为true时表示检测输入框的值,反之则不检测。如果没有此属性,默认的状态表示元素根据默认行为来操作,可能是根据父元素的spellcheck状态。
使用spellcheck属性可以对文本内容进行拼写检查,例如,检查textarea元素中的值;类型为text的input元素中的值(非密码);以及可编辑元素中的值。
【练习5】
本次练习演示spellcheck属性的简单使用,首先添加并且设计页面,然后将表示作者个人信息介绍的<textarea>标记的spellcheck属性的值设置为true。相关代码如下:
<textarea min="1" id="intro_id" max="100" class="txt1" name="intro" spellcheck="true"></textarea>
在浏览器中运行页面,然后输入内容进行测试,如图1-2所示。
图1-2 spellcheck属性检查效果
注意
虽然目前许多主流的浏览器提供了对spellcheck属性的支持,但是,各个浏览器支持的元素还是有差异的。例如,Chrome浏览器中支持<textarea>输入框元素,而不支持<input>元素中的文本框;Firefox或其他浏览器还需要手动配置。