Monthly Archive for 六月, 2010

HTML 5 学习 (一)介绍

HTML5是下一代Web页标准,所以对于网络从业者来说如果希望跟紧时代,这是不可能绕过的门槛。

目前Safari, Chrome,  Firefox和Opera的最新版本已经支持了一部分的HTML5功能,未来IE9也将会支持HTML5部分功能,从时间的角度来说,并不紧迫。如果全面支持HTML5,国内用户至少要等到IE 10的出现,相匹配的Windows,应该是介于Win 8到9之间,时间大致是2012年以后吧。希望地球还在。^_^

关于HTML5目前还没什么中文资料,我以一个学习笔记(dive into html5)的角度简要把要点梳理一下,但不会遗漏。

(个人水平有限,有错误欢迎更正):

开始之前请看演示页面

一,新的语法

1,DOCTYPE变更

打开每个网页,我们大都会看到顶部的一行文字。

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”

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

这个东东主要当年是用于解决IE5在Mac下的兼容性问题,具体资料可以自行了解。

HTML5的doctyple(文档类型说明)变更为了

<!DOCTYPE html>

目前这两者在主流浏览器下都有效。

2,根元素(Element ,不管别人怎么说,我译为元素,)

目前如下:

<html xmlns=”http://www.w3.org/1999/xhtml” lang=”zh-CN” xml:lang=”zh-CN”>

xmlns这句是声明XHTML1.0的一个命名空间,在HTML5中已不再必要,lang后面大家都知道是语言声明,比如english就是en,简体中文就是zh-CN,如果xml的语言和网页相同,则后面也可以省略,html5中可写为:

<html lang=”en”> ,老的语句也是有效的,意味着html5在某些部分向下兼容。

3,<HEAD> 元素

<HTML>的第一个子元素,包含很多metadata(元数据)

例子代码:

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

<title>我的博客</title>

<link rel=”stylesheet” type=”text/css” href=”style.css” />

<link rel=”alternate” type=”application/atom+xml” title=”我的博客 feed”  href=”/feed/” />

<link rel=”search” type=”application/opensearchdescription+xml” title=”我的博客 search” href=”opensearch.xml” />

<link rel=”shortcut icon” href=”/favicon.ico” />

</head>

当前网页的第一项往往是:

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

用以声明向服务器发送页面为编码为utf-8的html文件。国内常见GB2312或GBK(台湾为Big5),随着国内网络标准化趋势,用utf-8的逐步成为主流了。

html5中精简为<meta charset=”utf-8″ /> (html5兼容旧语句)。

<link…>关联的意思是说明这个网页链接到其他文件的方式

rel=”stylesheet” ….:在文件内应用如下..css样式表

rel=”alternate” ….:feed内容等同于本页面内容,是一个标准的订阅格式。

rel=”search…:本页面xml搜索格式,是一个标准的开放搜索描述。

rel=”shortcut icon”….:这个大家都知道,是网页小图标。在标签页或加入收藏夹时候会看到。比如我的博客是“CQ”字样。

样式表那句:

<link rel=”stylesheet” href=”style.css” type=”text/css” />

HTML5中可以去掉最后部分,变为:<link rel=”stylesheet” href=”style.css” />

<link rel=”alternate” type=”application/atom+xml” title=”我的博客 feed”  href=”/feed/” />

alternate除了Atom Feed格式外,还可以定义pdf格式。这句html5没什么变化。

rel还有很多其他参数可用,包括博客用的”archives”和“external”,以及Google用的”nofollow”,还有microformat的”license”等等,其中一些不属于html内建用法,不一定具有通用性。

header部分大致这样了,比较枯燥,因为大部分时候我们改变了header部分,页面无法直接体现。

4,html5中新的元素

除了<header>,<title>这类我们都很熟悉的东东外,html5新增了<section>,<nav>,<article>,<aside>,<hgroup>,<header>,<footer>,<time>,<mark>。这些代码块其实用词都很简单,个人认为如果你熟悉wordpress或joomla一类流行的脚本软件,就应该很好理解这些含义,先不做解释以后会用详细章节说明。

5,关于未知元素的处理

浏览器中支持对诸如<p>这类内建元素的解释,<p>的效果是产生上下空白/换行,不同的浏览器内建支持的元素不尽相同,比如Mozilla系的浏览器支持的元素列表在这里。这里涉及一个浏览器DOM(文档对象模型)的概念,可以自行了解。

我们都知道<p>用</p>来结束,表示<p>的作用范围结束。如果是<p></span>这样,</span>不能结束<p>,这就产生了一个问题,浏览器如何处理这个情况?不同浏览器对此处理方式是不同的。Mozilla的浏览器,比如Firefox的处理方式是把<span>作为<p>的一个子元素。

如下代码:

<style type=”text/css”>
article { display: block; border: 1px solid red }
</style>

<article>
<h1>欢迎</h1>
<p>这是 <span>一段话</span>。</p>
</article>

效果是在文字周围产生一条红色实线方框,IE下是无效的,Firefox下是有效的,有兴趣的朋友可以把这代码改作为一个htm文件看下。IE 9会解决这个问题。这段代码的结构在正常看起来是如下样子的:

article
|
+–h1 (article的儿子)
|  |
|  +–text node “欢迎”
|
+–p (article的儿子,  h1的兄弟)
|
+–text node “这是 ”
|
+–span
|  |
|  +–text node “一段文字”
|
+–text node “.”

在IE看起来是这样:

article (没孩子)
h1 (article的兄弟)
|
+–text node “欢迎”
p (h1的兄弟)
|
+–text node “这是 ”
|
+–span
|  |
|  +–text node “一段文字”
|
+–text node “.”

前面说“比如Firefox的处理方式是把<span>作为<p>的一个子元素。”,但IE不会,在这个例子中,IE把article作为h1和p的平行元素。因为IE遇到不认识(自定义)的元素,会在DOM中生成一个新的没有子类的空节点(empty node)。这个节点按我理解就是和已定义的节点地位相等。

解决方案:

利用javascript定义伪元素,IE可以识别。代码:

<html>
<head>
<style>
article { display: block; border: 1px solid red }
</style>
<script>document.createElement(“article”);</script>
</head>
<body>
<article>
<h1>欢迎</h1>
<p>这是 <span>一段话</span>。</p>
</article>
</body>
</html>

这行脚本没有在浏览器DOM中生效,但是解决了从IE6起所有版本的问题。这样我们可以用这个方法为HTML5在IE中建立所有伪元素,一个例子:

<!–[if lt IE 9]>
<script>
var e = (“abbr,article,aside,audio,canvas,datalist,details,” +
“figure,footer,header,hgroup,mark,menu,meter,nav,output,” +
“progress,section,time,video”).split(‘,’);
for (var i = 0; i < e.length; i++) {
document.createElement(e[i]);
}
</script>
<![endif]–>

<!–[if lt IE 9]>的意思是如果访问者用的是版本在9以下的所有IE浏览器,那么执行中间这段代码。这个用法现在已经很流行了,大部分是为IE6或7单独制定CSS使用的。Remy Sharp(人名)为我们解决了这个问题,他把一个经过完善的脚本放在了Google Project上,这样一次性调用,就可以解决在HTML5在IE中的兼容性问题:

<head>
<meta charset=”utf-8″ />
<title>我的博客</title>
<!–[if lt IE 9]>
<script src=”http://html5shiv.googlecode.com/svn/trunk/html5.js”></script>
<![endif]–>
</head>

HTML5提供了类似自然语言的专属标签,比如<header></header>(注意,不是头部标签<head>,更多的可以在这里查询),很自然的能体现是身体的上半部分。比如<header><p>这是我的头部</p></header>。

我们在html4中描述文章层次时候往往用<h1><h2>…<h6>这类标签,这样可以区分标题、副标题、段落标题或正文。虽然不错但产生了一个问题,就是同一页面不同文章部分的层次问题,这篇文章的<h2>可能和另一篇文章的<h3>是同一层次,所以html5给出了解决方案 — <hgroup>标签,利用<hgroup></hgroup>来包含一部分内容,类似于函数的定义域和作用域,括起来以后只在<hgroup>范围内生效。

潮流这东西

今天浏览中关村在线,忽然发现排名前三的数码相机都是单反。虽然知道单反相机早就开始流行,但这么大的关注度仍让我感觉怪怪的,虽说现在单反相机比较便宜,5,6千元就可以买到。但是我还是没法想象人手一台单反的情况,你可以说在旅游景区处处可见这样的场景。不过问题是有多少消费者有必要常用这东西呢?单反再便宜,也相当于大部分人1个月的收入了,这份投资是否值得?

潮流这东西害死人,有能力指鹿为马,如果你不跟着大家一起SX,你倒像个真正的SX。

大家是否还记着几年前的一个场景 — 某某朋友花大几千元买的手机,最后只是打打电话用。这次镜头转到相机 — 当你不懂摄影的年轻的朋友拿着单反摆弄炫耀的时候,很可能刚咽下去啃了1个月的窝头。—  尽管这是个人自由。

罗大佑2004演唱会 袁凤瑛 天若有情

袁凤瑛这么多年风采依旧,到现在转眼又过了6年,时间真快。

已升级为wordpress 3.0

刚才那个帖子居然因为主机回档而丢失了,WordPress 3.0没有想象的变更那么大,不知道如何评价。

雷锋的故事

国家投资2100万人民币制作出的3D动画,从制作技术到内涵全面秒杀最终幻想,蔑视阿凡达。

看完这个视频,我激动的想入党,因为油水太多啦。^_^