JunChen::Wish Room 1906

Promoting Usability, Accessibility and Web Standards...

上一篇:(X)HTML Strict 下的嵌套规则 | 返回首页 | 下一篇:备案出卖了我?

Web 标准实践系列(一)——Google 的首页

发表于 2007年01月11日 08:05 PM @ 分类:Web Standards

最后更新:2007-01-15

今天我们来学习用 Web 标准的方法来制作 Google 首页(中文)。Google 首页一直是用 table 布局的。我们把 Google 首页用 PrtScr 截屏,作为制作时的设计稿参考,并且不打开 Google 首页查看其源代码——就当它不存在。这样和真实项目工作比较接近。

第一部分、HTML 的构建(基于XHTML Transitional)

从设计稿上看到的内容,去揣摩结构。因为整个页面内容较少,容易理解,但也碰到了我们的第一个问题:是用 <p> 标签还是 <div>?各自代表着 paragraph 和 division,原则上说,这个页面上没有任何的段落存在,所以不应该用 <p>。但这里涉及到一个问题,抛开样式表显示的话,用 <p> 更加的清晰,因为默认 <div>marginpadding 值都为零。好吧,用 <p> 还是用 <div> 是一个个人喜好问题,但是原则上应当用后者。在本例中也使用后者。开始找个称手的编辑器写 HTML :

  1. <div><strong>junchenwu@gmail.com</strong> | <a href="ig">个性化主页</a> | <a href="MyAccount">我的帐户</a> | <a href="logout">退出</a></div>
  2. <div><img src="http://www.google.com/intl/zh-CN_ALL/images/logo.gif" alt="Google" /></div>

这包括头部的登陆状态和中间的大 Logo。我们先不增加任何样式 idclass

然后我们看到中间有“网页 图片 资讯 论坛 更多 »”这些链接。怎么做?一般就两种写法,看个人喜好。把这几个链接写一行里面或者写在一个 ul 里面,如下:

  1. <div><strong>网页</strong> <a href="pic">图片</a> <a href="info">资讯</a> <a href="group">论坛</a> <a href="more"><strong>更多 »</strong></a></div>

或者:

  1. <ul>
  2. <li><strong>网页</strong></li>
  3. <li><a href="pic">图片</a></li>
  4. <li><a href="info">资讯</a></li>
  5. <li><a href="group">论坛</a></li>
  6. <li><a href="more"><strong>更多 »</strong></a></li>
  7. </ul>

这两种写法各有什么优缺点呢?这里一共有 5 项,第一项是加粗的文字,其余 4 项是链接。如果使用第一种写法对于样式的控制就显得力不从心,比如控制这 5 项之间的间距;如果使用第二种写法,那么在脱离样式的情况下,分了 5 行显示。这里我把缺点都写出来,根据本例情况,我们还是选择第一种写法,这样要控制样式就需要在每一项前后增加无意义的 <span>

我们先继续往下写,遇到了搜索表单以及边上的高级搜索等三个链接。先写哪一个?看上去是平级的啊。这个时候最好问一下产品设计师的本意。我们在这里先写表单。如下:

  1. <form action="" method="post">
  2. <div><input type="text" size="55" title="Google 搜索" /></div>
  3. <div><button type="submit">Google 搜索</button><button>手气不错</button></div>
  4. <div><label><input type="radio" name="t" checked="checked" /> 搜索所有网页</label> <label><input type="radio" name="t" /> 中文网页</label> <label><input type="radio" name="t" /> 简体中文网页</label></div>
  5. </form>

注意给每一项 radio button 添加一个 label,具体的效果大家可以自行测试一下。另外这里采用了 label 包含的写法,也可以写成 <label for="foo"> 针对 id 为 foo 的 label </label>怎么写这也是看个人喜好的谢谢怿飞提醒,包含的写法在 IE6 中不被支持。我测试时使用的环境是 IE7 + FF1.5,有些局限了。

接下来是高级搜索等三个链接,以及底部的版权信息等,代码如下:

  1. <div><a href="advanced_search">高级搜索</a> <a href="pref">使用偏好</a> <a href="lang">语言工具</a></div>
  2. <div><a href="ad">广告计划</a> - <a href="all">Google 大全</a> - <a href="en">Google.com in English</a></div>
  3. <div>©2007 Google</div>

到这里我们基本完成了 Google 首页的 HTML 构建,这里是样例文件,待会儿我们还会再修整一部分代码。

第二部分、样式表

我们采用直接把样式写在 head 里面的方式,较为简单也方便演示。首先我们看到除了头部的登陆状态,其余部分都是居中对齐的,并且发现字体是 Arial,默认文字大小为 13 px。我们在 head 区域增加以下样式:

  1. body{
  2. font-family: Arial, sans-serif;
  3. font-size: 13px;
  4. text-align: center;
  5. margin-top: 3px;
  6. }
  7. a:link{
  8. color: #00C;
  9. }
  10. a:visited{
  11. color: #551a8b;
  12. }

这里使用了 px 这个绝对单位。关于绝对单位和相对单位,网上相关文章很多,并且也一直是 Web 前台的热门话题,本文简单起见,直接使用绝对单位。

然后我们逐步增加其他样式:

  1. #login{ /*这是头部的登陆状态*/
  2. text-align: right;
  3. }
  4. #stype{ /*这就是上文提到的那 5 项搜索类型*/
  5. margin-bottom: 4px;
  6. }
  7. #stype span{ /*此处增加了无意义的 span*/
  8. padding: 0 6px;
  9. }

之后的搜索表单,我们碰到了样式化的难点,首先作为搜索的 size 为 55 的输入框从布局上来说是绝对居中的,而右侧高级搜索那三项的宽度加上输入框在内并不是绝对居中。也就是说视觉上,高级搜索那三项偏右了。如下图所示:

Google首页的中线示意图

这里我们使用绝对定位的方法来处理它(在 HTML 中将高级搜索这三项的内容放入 form 之内):

  1. #search{ /*这是搜索表单*/
  2. margin: 0 auto;
  3. width: 400px;
  4. position: relative;
  5. }
  6. #more{
  7. width: 4em; /*4个汉字宽,这样可以形成类似列表的效果*/
  8. position: absolute;
  9. top: 0;
  10. right: -4.5em;
  11. }

最后我们加上底部链接和版权信息部分的样式:

  1. #ft{
  2. margin: 54px auto 16px;
  3. }

在浏览器里面预览并且微调一下各个数值,这样就完成了 Google 首页的制作。最终效果及源文件

这在 Firefox 1.5 下测试,与 Google 首页没有任何像素的差异。在 IE 下会有一些像素上的差异,这就是各个浏览器的兼容性问题,留给大家自行处理了。本系列以后会有专门的文章讨论这些问题。

本例的最终代码还能够有进一步的优化,做法每个人习惯不同,希望本文能够帮助到大家。

相关文章

引用 Trackback

本文引用地址:http://www.junchenwu.com/cgi-bin/mt-tb.cgi/471.

来自王志勇的引用:谈谈网页的DIV
题外话:不好意思在第一篇的三周之后才交作业。本想继续写 Google 的搜索结果页的,看到豆瓣上有朋友留言说想学习豆瓣首页的写法,我看了一下,有写头。起初以为比较简单的,最后花了不少时间。但还是有疏漏或者不合理的地方,请直接指出,谢谢。 [阅读全文]

评论

yyq123 说:

非常好的学习方式。但是,我觉得还应该“假定”用户学习之前需要具备哪些必要的知识,以及从哪里可以获得这些知识(给出链接)。
我的疑惑一:
junchenwu@gmail.com
在我的理解,所有格式化都应该用CSS来处理,这个看法对吗?那么这里是应该用还是应该用?

JunChen 说:

我之前写过一篇文章,关于内容、结构与表现的。内容里体现出来的结构我称之为内结构,这可以写在 HTML 里面。比如你觉得 <strong> 是一种样式,但是产品设计师的意思可能是打算强调这个单词(在任何情况下),所以可以用 <em> 或者 <strong>

不过在 XHTML 标准小组内部,对于是否要去除 <strong> 也是持不同意见的,并且没有定论。

oiclover 说:

个人感觉 DIV 标签用得太多 呵呵

自由勇 说:

我搞HTML到现在已经6年了,我写的HTML、样式表都是按照自己的思路来写。
看到很多国外Blog对HTML、CSS、XML的讨论,与我的思路不一样。但还是坚信自己的代码也符合标准。

这6年中,我从来没有用过<div>,都是用<p>。

:)

JunChen 说:

坚信自己的代码符合标准是好事 :)

至于从来没用过 <div>,这个习惯有些古怪。div 的意思是 division,即分割、区分。一个网页上不存在任何分割,也是有可能的。

给你加了链接 :)

自由勇 说:

Thanks for linking:)
主要是2001年初我刚接触div的时候,是用FrontPage产生的position:absolute,所以没有学习过div。我创建过的页面可能有几百页、上千页了吧,手写的代码不计其数,呵呵:)
一直是用table和样式表,在Google搜索“样式表”,第2个结果是我02年写的文章,03年放在了webshu。
而2005年以后,自从Donews使用div以后,以及Blog界大量应用div以后,div才被UI广泛关注。而2003以前呢?样式表在一些人心中的地位是远不如现在的,我却一直在支持样式表。

aoao 说:

用div或者是p都属于个人爱好~
没有绝对的说法,
全部使用div其实算是一种比较折中的做法,
而全部用p就有点怪,p算是个特别的元素,不能包括其他块元素
我个人看法p 不仅仅用来表示段落~嘿嘿~因为我在html找不到别一个更接近表示内容~毕竟web不是仅仅是文章~
各家看法都不一,这个讨论是没结果的,谁来给我个可以说服我的说法,我还在矛盾中。

对于要不要使用strong之类的也是没有绝对的说法,
用样式表控制也有控制的好处,但抛开样式表,html能否更好的工作呢?侧重的方向不一样。

总的来说,我更喜欢div划结构~p包内容~还是使用类如strong之类语义跟表现类的标签。结构优先~反正样式表无所不能。
但遇到特殊情况也只能折中处理。

PS:把友链上我的loaoao改成aoao …^_#

自由勇 说:

div我一直没有去关注、学习,经大郎和大家的介绍,看大家都喜欢它,我去学一下。以前就是因为position:absolute,所以放弃了对div的关注。

怿飞 说:

文章写得通俗易懂,比较实用。

p常理上是用来表示文章段落,但如果内容结构相似的情况,个人认为也可以表示布局的分段。

对于<strong>其实是有另外的含义的,对于需要重点显示出来的内容,可以使用<strong>,而对于布局里需要区分主次点的部分,就写到样式里,比如分类的一级分类为粗体,二级分类为一般字体……,其实<strong>对于搜索引擎优化也有一定的作用,搜索引擎会优先<strong>的内容,而写在样式里就不会有这样的效果!

JunChen 说:

实际项目里确实有把 <strong> 用作 SEO 的情况,不过比用 headings 少。回到标准里说的:<em> 和 <strong> 都是用来强调内容的,后者比前者强烈。

正淳 说:

个人认为这样的结构还欠妥当.首先缺乏跨平台性.
disable掉css后首先在ppc下预览就有一定的难度,
用户登录信息后缺乏跳转到搜索的链接,当然在media属性为screen的时候是display:none的.

JunChen 说:

to 正淳:确实如此。学习 Web 标准有一个很重要的部分就是跨平台。在实际项目中我接触的不多,所以没什么发言权,文中也没提及。对于 Google 首页确实增加 skip to search 链接是必须的。

触点 说:

这种方法确实很好,希望多一些这种实例的分析和设计,有助于初级和中级的学习者

micleaf 说:

正如上面怿飞说的,我觉得用布局还是符合其标签本身的语义的。如果整篇全用来控制的话,在语义上说不过去。
当然如果你的站点是类似于小说网站那种的页面,全是段落倒要另说。

micleaf 说:

....我又来了。
刚才也试着把google.com做了一次,有些地方和你的思路不一样。不过最终效果还是一样的(废话~!-_-)
这里我也遇到了关于搜索框的问题,不知道和你的是不是一样(你的图挂了,一直打不开),因为我是用一个div包含form和ul(高级搜索等,我做成ul了),然后让div和ul分别左右浮动。但一看效果,做为包含框的div被安排到了左边(我原来是居中的...),估计是因为两个子元素浮动的结果...只有用margin:0px auto来消除。

另外,我觉得里还是用name比较好吧,这是type=text时的必须属性...相反的title跟本不是的属性...

最后,多谢你的文章和上在的回复,让我学到很多东西~

张韡武 说:

看了几篇之后,觉得吴隽辰研究问题细致而深入,兴趣广泛,文章有意思,禁不住第二天仍然来看。随见随评,望勿求明于垢镜:为锚点指定样式,xhtml/css的标准方法是

:visited { ... }
:link { ... }

而非

a:visited {...}
a:link {}

此用意:印象中旧读一文说是xhtml标准中将广泛许可使用href,不仅限于<a>。我没有求证,但是使用此方法很久了,知道在IE/Fx上均无问题。xhtml的走向并非人人同意,但我看href专归<a>不许别个也用,是历史使然,不是当然。

发表评论