求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
HTML5 新元素标签系列:使用 HTML5 设计自己的博客
 

作者:H5Boy ,发布于2013-2-25,来源:博客

 

许多 HTML5 特性需要 Javascript API,,它们将开发交互式应用变的更简单。但是还有很多新的元素标签,你可以把它们用在你的 Web 1.0 网页上。我们要对它们做一些研究,让我们一起做一个博客吧。

首先,我们要使用 header,footer 和 nav 元素先搭建页面结构。接着通过使用新的数据类型和HTML 浏览器内置的验证,来使我们的博客的评论格式更加的智能。

然后,我们将使用 HTML5 的ariticle 元素,更好的对博客内容和评论进行标记,来完成页面的主要部分。并且展示如何使用section元素,来更好的构架可访问站点的层级标题。同时因为博客是按时间排序的,我们要看看 HTML5 在日期和时间展示上会带给我们什么。

好,关掉手机,沏杯茶,我们开始吧。

设置 DOCTYPE

HTML5, 如果仅仅使用HTML而非它的兄弟 XHTML5,你是不需要设置DOCTYPE的。但是这对浏览器却很重要,否则你的页面将进入Quirksmode模式,这绝对不是你想看到的:Quirks模式就像正负电子对撞,世界随之反转并让你的内裤着火。

所以,基于以上警告,我们要在页面的最顶上添加一行<!DOCTYPE html>。

一些站点声称“使用”了HTML5,但是事实上只是改变了DOCTYPE,现有的代码并没有变。这是没问题的——如果你之前的代码是有效的和符合语义的——HTML5与有效的HTML4.01非常相似,这两个语言的差别并不多,以前这篇 HTML 5 differences from HTML 4有所总结。

但是,我并不打算简单的修改我现在的代码,我会使用新的架构元素。

使用新的结构元素

我的博客,像其他千百万博客一样,一个页眉标记是<div id="header">,一个页脚<div id="footer">,一些文章(被一些叫做“内容”的区域包裹,<div id="content">),还有一些导航(被一些侧面的工作条<div id="sidebar">所包裹)。许多站点都有相同的结构,虽然叫法不同,有叫“branding”或“info”或“menu”的,随你的便。

虽然它们在页面上的功能不同,它们都使用相同的标记div,因为HTML4没有其他的标签可以标记它们。HTML5 有一些新的元素来区分这些逻辑区域:header, nav, footer等一些相关元素。我们的整体目标是将下面的这个结构:

替换为:

将HTML 的 div们替换为新的元素标签是非常简单的。唯一的难点是对于侧面的内容条选择什么元素 ,因为它除了导航条以外,还包含一个查找框以及一个“说明信息标签”。最初我选择使用 aside 标签,它的说明是这样的:

“可以表示页面的一个部分,它的内容与其周围的内容是不相关的 ,可以看作能从页面内容中分离出去”

但是我的这部分是导航用的,并不是完全不相关,所以最后选择nav这个最贴近的标签。我把主要内容包裹在了一个section标签里(之前在div里)。section 的定义是这样的:

section 元素表示一个普通文档或应用区域。一个section,在上下文中,是页面的主题部分,一般有一个标题,或者还有一个脚标。

请注意:我不在建议把整个页面放在一个section里,而是建议使用div元素。请阅读相关介 绍正确使用section.
在本例中,“普通文档区域”是主要内容。我保留了 id 这样的的话,以使页面的跳转链接能工作, 虽然我希望未来,辅助工具可以提供自动的方式能直接到第一个section 或article.如果你保留仍然使用div,因为考虑到 IE (9以前)不需要javascript 正确的显示它们,但是这样将使你的站点非常的难于理解和阅读。

新的表单(form)属性

和页面的结构元素一样,我添加了一些新的属性到评论表单的input元素上。HTML5 是为了反应开发者在干什么而不是仅仅为了看着舒服,这清晰的体现在新的属性上,它 表明浏览器将负担现在开发者的一部分工作——在javascript中重复的验证工作(扩展的表单功能见如何开始 HTML5 规范)。

所以我将评论表单的 email 输入框加上了 type="email", 这表示当用户提交表单时, HTML5 浏览 器将使用内部验证机制来检查输入格式是否正确,而不需要再使用javascript。你可以在最新版本 的Opera浏览器上验证这个功能。

还有一些新的input types ,提供了类似的输入验证机制,比如url(这个我用来询问用户的网址) ,number 和pattern 则可用来比较输入和正则表达式。

另一个非常好的例子是input type="date", 当用户的焦点在这个input上时,这个可以弹出一个日历控件/日期选择控件,你可以在Opera9.6上测试这个功能,以下为截图:

另一个我同时使用在名字和邮件地址的input,以及评论的textarea上非常有用的属性是 type=“required” 提交表单时,如果这些字段为空的话,它将提供一条信息。根据不同语言版本的的浏览器,信息的语言和内容也不相同,遗憾的是它不能(至少现在)由开发者来定制。

这些新表单属性还有一个好处,它们都是对现有元素添加的新属性,所以使用老式浏览器的用户只是看到一个单纯的input字段。

新元素布局

所有浏览器对它们“知道”的元素都有默认的设定——元素有多少留白和边距,它是显示为块还是行内元素?除非用CSS重写这些设定,不然它们就会生效。但是浏览器不知道header、nav这类元素,所以也没有默认设定。

这些元素的显示遇到了一些奇怪的问题,直到我显式的声明了:

header, footer, nav, article {display:block;}

IE 布局

一个事实你需要知道,在IE里(9以前的版本)给HTML5新标签添加样式是没用的。你能使用javascript里的 document.createElement('element name'). 来解决这个问题。下面是一个现成脚本你可以使用。

但是请注意:如果IE用户禁用的Javascript就不行了。所以是否采用HTML5标签,这也是要考虑的因素。不过实事求是的讲,受益于HTML5新特性如样式特性、拖拽等的站点,如果禁用的Javascript的话,也是没发正常工作的。

这些新的结构元素的意义是什么?

现实的意义可能在于,第一,搜索引擎。可以想象的到,google或百度对待在 footer和header中内容的权重比是不一样的。第二,对于一些残疾人。用户可以有一个快捷键,直接跳到Nav部分,或者article部分。

页面内容更有说明性质,显然它未来应用场合是很多的,至于有人说还可以提升页面重用等等,你就自己实践吧。

进一步精炼 HTML5 结构

博客主页

博客主页一个有意思的事是,一般最新的5篇或几篇文章,分别由标题,一个“body”和关于文章的一些数据(时间、作者、有多少评论),并且一般有一个链接,可以将文章导航到另一个页面,可以看到文章的全部内容与评论。

HTML 5 有article 元素,我可以用来包装每篇文章:

article 元素表示页面的一个部分,对于文档、页面或站点而言,它可以构成一篇独立的文章。它可以是一篇论坛的帖子,一篇杂志或报纸的文章,一篇博客,一个用户提交的评论,或者其它内容上独立的片段。

来看一下我为每一篇博客搭建的框架的细节:

最外面的一层不再是div而是article,里面还有header,包含一个标题,以及由time元素标记的发布时间。

之后是我每篇才华横溢的文章,包括段落、引文等。是原封不动的从数据库中提取出来的。后面是博客帖子的一些数据(类别、评论数量),这些放在了footer中。在一个页面只展现一篇文章的情况下,后面有许多表达崇拜的评论。最后,文章后面或许有一个导航,可以到下一个文章。

文章的原数据

内容后面有一些文章的“元数据”:属于哪个类别、有多少评论。我把这些信息放在了footer里。 我之前使用的是aside,但它“与主要内容无关”的定义,感觉不太适合,因为文章的数据与文章内容还是直接相关的。

footer 就比较合适了:“一个footer典型地包括其所在部分的信息,比如作者、相关文档链接,版权信息,等等”。不能光看元素名字,我在这里使用的footer并不在页面底部,甚至不在文章的底部,但它的确符合定义——它是关于这部分的信息,包含了作者名字、到相关文档的链接等等。

没有理由,你不能在页面中使用多个footer,它的描述是“footer元素是其所在部分的脚注”,当然页面可以有多个部分。描述同样说了“footer不一定非要出现在部分的底部,虽然它经常被放置在那里”。

评论部分

我把评论部分也标记成了articles,就像说明中指出的那样,article可以是“用户提交的评论”,但是这些是嵌在外边一级的article中的。说明中指出:

当article元素互相嵌套时,里面的article元素代表的文章原则上应该与外边的文章内容相关。举例来说,博客的评论可以标记成article可以嵌套在博客内容的article中。

这些评论以评论的日期和时间以及作者作为题目——如果你愿意也可以把它们放到一个header中 。但对我来说,将它放在了更有意义的标签中。

时间和日期

大多数博客,新站点等都提供文章的发布时间。

我使用了 HTML5 的time 元素来显示一个可以让计算机解析的日期,同时用户也可以阅读。博客文章显示日期,评论显示日期和时间。

time 是HTML5 的新元素,下面是一些使用的例子:

<time>2009-11-13</time>
<!-- without @datetime content must be a valid date, time, or precise datetime -->
<time datetime="2009-11-13">13<sup>th</sup> November</time>
<!-- when using @datetime the content can be anything relevant -->
<time datetime="20:00">starting at 8pm</time>
<!-- time example -->
<time datetime="2009-11-13T20:00+00:00">8pm on my birthday</time>
<!-- datetime with time-zone example -->
<time datetime="2009-11-13T20:00Z">8pm on my birthday</time>
<!-- datetime with time-zone “Z” --> 

这些time 标签最终会带给我们什么实际用途很难说。浏览器可以根据日期给用户添加一个事件,也可以根据不同语言的浏览器对日期进行本地化,如一个日语浏览器可以把<time>16:00</time> 变为 “16:00時”。内容解析器可以产生一个时间的时间线。

另外,搜索引擎或许可以得到更智能的搜索结果。比如,可以把更新的结果标为更高的优先级。(现实?)

希望这一篇小文章能让你领略一些新 HTML5标签的风采,或许将来它们会派上大用场。

相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程
 
分享到
 
 


十天学会DIV+CSS(WEB标准)
HTML 5的革新:结构之美
介绍27款经典的CSS框架
35个有创意的404错误页面
最容易犯的13个JavaScript错误
设计易理解和操作的网站
更多...   


设计模式原理与应用
从需求过渡到设计
软件设计原理与实践
如何编写高质量代码
单元测试、重构及持续集成
软件开发过程指南


东软集团 代码重构
某金融软件服务商 技术文档
中达电通 设计模式原理与实践
法国电信 技术文档编写与管理
西门子 嵌入式设计模式
中新大东方人寿 技术文档编写
更多...