打印

[教程] Web 标准实践系列(一)——Google 的首页

文章写的通俗易懂,很适合刚学标准的朋友,推荐给大家阅读。

作者:JunChen
原文:http://www.junchenwu.com/2007/01/web_standards_practice_series_01.html

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

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

从设计稿上看到的内容,去揣摩结构。因为整个页面内容较少,容易理解,但也碰到了我们的第一个问题:是用 <p> 标签还是 <div>?各自代表着 paragraph 和 division,原则上说,这个页面上没有任何的段落存在,所以不应该用 <p>。但这里涉及到一个问题,抛开样式表显示的话,用 <p> 更加的清晰,因为默认 <div> 的 margin 和 padding 值都为零。好吧,用 <p> 还是用 <div> 是一个个人喜好问题,但是原则上应当用后者。在本例中也使用后者。开始找个称手的编辑器写 HTML :
复制内容到剪贴板
代码:
<div><strong>junchenwu@gmail.com</strong> | <a href="ig">个性化主页</a> | <a href="MyAccount">我的帐户</a> | <a href="logout">退出</a></div>
<div><img src="http://www.google.com/intl/zh-CN_ALL/images/logo.gif" alt="Google" /></div>
这包括头部的登陆状态和中间的大 Logo。我们先不增加任何样式 id 和 class。

然后我们看到中间有“网页 图片 资讯 论坛 更多 »”这些链接。怎么做?一般就两种写法,看个人喜好。把这几个链接写一行里面或者写在一个 ul 里面,如下:
复制内容到剪贴板
代码:
<div><strong>网页</strong> <a href="pic">图片</a> <a href="info">资讯</a> <a href="group">论坛</a> <a href="more"><strong>更多 &raquo;</strong></a></div>
或者:
复制内容到剪贴板
代码:
<ul>
<li><strong>网页</strong></li>
<li><a href="pic">图片</a></li>
<li><a href="info">资讯</a></li>
<li><a href="group">论坛</a></li>
<li><a href="more"><strong>更多 &raquo;</strong></a></li>
</ul>
这两种写法各有什么优缺点呢?这里一共有 5 项,第一项是加粗的文字,其余 4 项是链接。如果使用第一种写法对于样式的控制就显得力不从心,比如控制这 5 项之间的间距;如果使用第二种写法,那么在脱离样式的情况下,分了 5 行显示。这里我把缺点都写出来,根据本例情况,我们还是选择第一种写法,这样要控制样式就需要在每一项前后增加无意义的 <span>。

我们先继续往下写,遇到了搜索表单以及边上的高级搜索等三个链接。先写哪一个?看上去是平级的啊。这个时候最好问一下产品设计师的本意。我们在这里先写表单。如下:
复制内容到剪贴板
代码:
<form action="" method="post">
<div><input type="text" size="55" title="Google 搜索" /></div>
<div><button type="submit">Google 搜索</button><button>手气不错</button></div>
<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>
</form>
注意给每一项 radio button 添加一个 label,具体的效果大家可以自行测试一下。另外这里采用了 label 包含的写法,也可以写成 <label for="foo"> 针对 id 为 foo 的 label </label>。怎么写这也是看个人喜好的。

接下来是高级搜索等三个链接,以及底部的版权信息等,代码如下:
复制内容到剪贴板
代码:
<div><a href="advanced_search">高级搜索</a> <a href="pref">使用偏好</a> <a href="lang">语言工具</a></div>
<div><a href="ad">广告计划</a> - <a href="all">Google 大全</a> - <a href="en">Google.com in English</a></div>
<div>&copy;2007 Google</div>
到这里我们基本完成了 Google 首页的 HTML 构建,这里是样例文件,待会儿我们还会再修整一部分代码。

第二部分、样式表

我们采用直接把样式写在 head 里面的方式,较为简单也方便演示。首先我们看到除了头部的登陆状态,其余部分都是居中对齐的,并且发现字体是 Arial,默认文字大小为 13 px。我们在 head 区域增加以下样式:
复制内容到剪贴板
代码:
body{
font-family: Arial, sans-serif;
font-size: 13px;
text-align: center;
margin-top: 3px;
}
a:link{
color: #00C;
}
a:visited{
color: #551a8b;
}
这里使用了 px 这个绝对单位。关于绝对单位和相对单位,网上相关文章很多,并且也一直是 Web 前台的热门话题,本文简单起见,直接使用绝对单位。

然后我们逐步增加其他样式:
复制内容到剪贴板
代码:
#login{ /*这是头部的登陆状态*/
text-align: right;
}
#stype{ /*这就是上文提到的那 5 项搜索类型*/
margin-bottom: 4px;
}
#stype span{ /*此处增加了无意义的 span*/
padding: 0 6px;
}
之后的搜索表单,我们碰到了样式化的难点,首先作为搜索的 size 为 55 的输入框从布局上来说是绝对居中的,而右侧高级搜索那三项的宽度加上输入框在内并不是绝对居中。也就是说视觉上,高级搜索那三项偏右了。如下图所示:



这里我们使用绝对定位的方法来处理它(在 HTML 中将高级搜索这三项的内容放入 form 之内):
复制内容到剪贴板
代码:
#search{ /*这是搜索表单*/
margin: 0 auto;
width: 400px;
position: relative;
}
#more{
width: 4em; /*4个汉字宽,这样可以形成类似列表的效果*/
position: absolute;
top: 0;
right: -4.5em;
}
最后我们加上底部链接和版权信息部分的样式:
复制内容到剪贴板
代码:
#ft{
margin: 54px auto 16px;
}
在浏览器里面预览并且微调一下各个数值,这样就完成了 Google 首页的制作。最终效果及源文件

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

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

怿飞补充:

1、对于“»”使用代码“&raquo;”来代替;
2、label写法推荐写成 <label for="foo"> 针对 id 为 foo 的 label </label>。因为<label><input />xxxxx</label>只有在FF等对标准支持很好的浏览器里才显示正常,在IE6中无法显示正常的效果。
3、对于strong,需要重点显示出来的内容,可以使用strong,而对于布局里需要区分主次点的部分,就写到样式里,比如分类的一级分类为粗体,二级分类为一般字体……,其实strong对于搜索引擎优化也有一定的作用,搜索引擎会优先strong的内容,而写在样式里就不会有这样的效果!

[ 本帖最后由 blankzheng 于 2007-1-15 10:00 编辑 ]
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!
谢谢lz转载。

对于补充的第一点,Roger 曾写过一篇关于 XHTML 的文章,文中提到:Only the five predefined named entities (&lt;, &gt;, &amp;, &quot;, and &apos;) are guaranteed to be supported. Others may be completely omitted or output literally. For example, if your XHTML document contains entities like &nbsp; or &rdquo;, that is what Safari will render. Literally. Opera instead chooses to omit the unknown entities, while the Mozilla family will recognise the entities and render them as in HTML if the document references a public identifier for which there is a mapping in the browser’s pseudo-DTD catalog and the document has not been declared standalone.

只有五种实体是绝对被良好支持的,&lt;, &gt;, &amp;, &quot;, and &apos;。至于实际是不是这样,我没有条件测试。在 UTF-8 编码的网页中,对于 &raquo; 使用 » 是好的选择。

对于第二点,确实我记得在 IE6 中这种写法不被支持。因为写得时候是在 IE7 和 FF1.5 下,没条件测试到。我会补充到原文中去。

对于第三点,我在原文评论后给出了我的看法。
www.junchenwu.com
字体大小, 推荐使用 em 代替 px
引用:
原帖由 mirycat 于 2007-1-15 10:51 发表
字体大小, 推荐使用 em 代替 px
何解?

PX与PT当年还曾讨论优劣呢,对于,PX,我认为其精确性更取胜于EM
呵呵~

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
引用:
原帖由 刺影无痕 于 2007-1-15 11:41 发表

何解?

PX与PT当年还曾讨论优劣呢,对于,PX,我认为其精确性更取胜于EM
em和px各有利弊,不过我也推荐使用em,毕竟使用了px对于视力不好的人使用IE无法放大阅读!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

TOP

做记号 晚上学习
QQ:275333

TOP

学习,好贴

TOP

我还没有使用过em,但是我使用过pt,px,感觉用pt还蛮不错。。。。


今晚看了之后真的要去试一下看看有什么不同。。。。

TOP

1 html的style放在css里,
2 div块,即然没有class,也预留一个.
3 作为布局层,少用margin padding.
4 程序实现,有些块程序员要调用,所以我己不用id.

---个人观点
http://www.rpple.com

TOP

问问楼主,google自己为什么用table布局?

TOP

回复 #10 twinsenliang 的帖子

比较了下GOOGLE和楼主的页面大小,

再删除掉两者的CSS样式。。

汗。!

TOP

引用:
原帖由 twinsenliang 于 2007-1-17 20:40 发表
问问楼主,google自己为什么用table布局?
因为google财大气粗不在乎。
http://old9.blogsome.com 已被 GFW 封锁

TOP

支持!学习中

TOP

引用:
这里使用了 px 这个绝对单位。关于绝对单位和相对单位,网上相关文章很多,并且也一直是 Web 前台的热门话题,本文简单起见,直接使用绝对单位。
我来除虫,呵呵。
英尺inch 厘米cm是绝对单位
px像素是相对单位 一般显示器的dpi为96。,即每英尺的像素点个数为96点。这个是可以调整的
pt磅才是绝对单位了。规定了1pt =1/72 inch 1pt必须为一英尺的七十二分之一

一般设置中文字体9pt和12px差不多大

希望没有说错,呵呵。
体验游戏 game4power

TOP

回楼上:

px和pt都属于绝对单位,em才属于相对单位!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

TOP

引用:
原帖由 twinsenliang 于 2007-1-17 20:40 发表
问问楼主,google自己为什么用table布局?
应该先问 Google 为什么不写 DocType?
www.junchenwu.com

TOP

记号下。。。。。。。。。。

TOP

我查了苏沈小雨的《css2.0中文手册》
px版本:CSS1  兼容性:IE3+ NS4+
说明:  
像素(Pixel)。相对长度单位。
像素是相对于显示器屏幕分辨率而言的。譬如,WONDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。

援引w3.org的讨论解释
引用:
16:20:33 [wendy]
debate about px
16:21:18 [wendy]
not to define how css defines px, it's an implementation issue w/how browsers handle px.
16:21:31 [wendy]
px is relative to hardware, while %, em, ex are relative to layout.
16:21:38 [wendy]
it is layout that we are more concerned about.
16:24:57 [wendy]
general approach we can take in our techs: replace relative with em and %, replace absolute with px
16:26:31 [wendy]
i.e., use em and % for things that change (font, width), use px for things that don't (margins)

px is relative to hardware, while %, em, ex are relative to layout.
px是相对于硬件的长度,em 字体宽 ex 字体高 是相对于布局的长度
w3.org 定义的 css2.0语法
有两种长度单位一种是相对一种是绝对,相对长度单位是通过另外一个长度属性来确定长度大小的。样式表使用相对单位更容易从中等大小缩放成其它的大小(例如从屏幕显示 到激光打印)
相对长度单位有em,ex,px 字体宽 字体高 像素
引用:
There are two types of length units: relative and absolute. Relative length units specify a length relative to another length property. Style sheets that use relative units will more easily scale from one medium to another (e.g., from a computer display to a laser printer).
Relative units are: em, ex, and px.
绝对单位是仅适用于物理属性输出(打印机传真等终端),绝对单位有 英尺in 厘米cm 毫米mm 点pt和派斯卡(我国四号铅字大小)
引用:
Absolute length units are only useful when the physical properties of the output medium are known. The absolute units are: in (inches), cm (centimeters), mm (millimeters), pt (points), and pc (picas).
绝对单位换算关系是1in = 2.54cm = 25.4 mm = 72pt = 6pc

另外px的dpi是可以调整的了,windows下面是96dpi,打开 桌面->属性-> 显示属性-> 高级->常规选项卡可以把96dpi换成150dpi。  使用print screen 抓图桌面也是得到96dpi的图,而不是72的了。
在mac操作系统下面 屏幕是72dpi 相差很多的了。在windows下面看起来是一样的,在别的系统就不一定了。

[ 本帖最后由 hero4u 于 2007-1-22 12:28 编辑 ]
体验游戏 game4power

TOP

引用:
原帖由 Farewelli 于 2007-1-22 09:56 发表


应该先问 Google 为什么不写 DocType?
因为DocType会影响一些浏览终端的页面显示以及文件格式定义。

TOP

/*********** 我有话说************/
1 html的style放在css里,
2 div块,即然没有class,也预留一个.
3 作为布局层,少用margin padding.
4 程序实现,有些块程序员要调用,所以我己不用id.

---个人观点
*************************
1、style放在css文件主要是可以保持代码的整洁,容易个人管理,以及后面页面的样式的调用
2、如果没有样式的div就可以不用class了。当然,没有样式的div也说明你没有规划好。
3、布局层少用 maring,padding是对的,用padding、margin很难说清楚IE,FF会出现什么事。。
4、绝对顶!样式只用class。做程序的才知道叫做样式的改id多么麻烦。

TOP

引用:
原帖由 old9 于 2007-1-18 19:07 发表


因为google财大气粗不在乎。
非常同意!另外也有稳定性方面的考虑!

我曾经问过携程的技术人员,为什么不用标准,他们这样回答,一般有3个很直接饿方法优化速度:1是用标准,一般可以提高200%的加载速度,2是在服务器端做文章,如果是用apache服务器,那么可以用它自带的压缩功能把速度提高50%到100%,第3就是,我们有钱,我们可以砸钱给电信,让尽量多的用户感觉打开我们的网站就好象在本地打开一样。最后,再从人力资源和稳定性方面考虑,我们毫不犹豫采用后面两种!

呵呵

TOP

blankzheng文章写的好,让我获益非浅,回头自己再试着做做看,感谢楼主,辛苦le

TOP

我整理了一下,在IE6、IE7、FF中好像行得通!

 提示:您可以先修改部分代码再运行
[ 本帖最后由 gixxue 于 2007-4-15 16:50 编辑 ]
aervea.com

TOP

高手提出问题
菜鸟收帖学习。。

TOP

开始走上征程 ,学习

TOP