请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 7660|回复: 30

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

blank 楼主

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-1-15 09:52:45 |显示全部楼层
文章写的通俗易懂,很适合刚学标准的朋友,推荐给大家阅读。

作者: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 :

  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。我们先不增加任何样式 id 和 class。

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

  1. <div><strong>网页</strong> <a href="pic">图片</a> <a href="info">资讯</a> <a href="group">论坛</a> <a href="more"><strong>更多 &raquo;</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>更多 &raquo;</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>。怎么写这也是看个人喜好的。

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

  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>&copy;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 的输入框从布局上来说是绝对居中的,而右侧高级搜索那三项的宽度加上输入框在内并不是绝对居中。也就是说视觉上,高级搜索那三项偏右了。如下图所示:



这里我们使用绝对定位的方法来处理它(在 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 下会有一些像素上的差异,这就是各个浏览器的兼容性问题,留给大家自行处理了。本系列以后会有专门的文章讨论这些问题。

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

怿飞补充:

1、对于“&raquo;”使用代码“&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前端技术!
西部数码顶级域名注册商39元抢注!
帖子
94
体力
667
威望
66
居住地
江苏省 南京市
发表于 2007-1-15 10:43:00 |显示全部楼层
谢谢lz转载。

对于补充的第一点,Roger 曾写过一篇关于 XHTML 的文章,文中提到:Only the five predefined named entities (&amp;lt;, &amp;gt;, &amp;amp;, &amp;quot;, and &amp;apos;) are guaranteed to be supported. Others may be completely omitted or output literally. For example, if your XHTML document contains entities like &amp;nbsp; or &amp;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.

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

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

对于第三点,我在原文评论后给出了我的看法。
www.junchenwu.com
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

CK同伈鎖

荣誉管理

帖子
4640
体力
19243
威望
372
发表于 2007-1-15 10:51:33 |显示全部楼层
字体大小, 推荐使用 em 代替 px

使用道具 举报

帖子
222
体力
816
威望
0
发表于 2007-1-15 11:41:32 |显示全部楼层
原帖由 mirycat 于 2007-1-15 10:51 发表
字体大小, 推荐使用 em 代替 px

何解?

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

使用道具 举报

blank 楼主

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-1-15 12:16:59 |显示全部楼层
原帖由 刺影无痕 于 2007-1-15 11:41 发表

何解?

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


em和px各有利弊,不过我也推荐使用em,毕竟使用了px对于视力不好的人使用IE无法放大阅读!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

使用道具 举报

帖子
62
体力
222
威望
0
发表于 2007-1-15 17:13:51 |显示全部楼层
做记号 晚上学习
QQ:275333

使用道具 举报

帖子
2
体力
9
威望
0
发表于 2007-1-15 22:00:29 |显示全部楼层
学习,好贴

使用道具 举报

czbad 

蓝色飞扬

高级会员 手机认证 

帖子
277
体力
491
威望
23
居住地
广东省 广州市
发表于 2007-1-16 00:54:27 |显示全部楼层
我还没有使用过em,但是我使用过pt,px,感觉用pt还蛮不错。。。。


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

使用道具 举报

帖子
150
体力
693
威望
0
居住地
浙江省 杭州市
发表于 2007-1-17 10:43:33 |显示全部楼层
1 html的style放在css里,
2 div块,即然没有class,也预留一个.
3 作为布局层,少用margin padding.
4 程序实现,有些块程序员要调用,所以我己不用id.

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

使用道具 举报

帖子
34
体力
79
威望
0
居住地
广东省 深圳市
发表于 2007-1-17 20:40:19 |显示全部楼层
问问楼主,google自己为什么用table布局?

使用道具 举报

帖子
98
体力
528
威望
0
发表于 2007-1-18 15:17:50 |显示全部楼层

回复 #10 twinsenliang 的帖子

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

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

汗。!

使用道具 举报

old9 
帖子
653
体力
1762
威望
88
居住地
安徽省 合肥市
发表于 2007-1-18 19:07:34 |显示全部楼层
原帖由 twinsenliang 于 2007-1-17 20:40 发表
问问楼主,google自己为什么用table布局?


因为google财大气粗不在乎。
http://old9.blogsome.com 已被 GFW 封锁

使用道具 举报

sudeky 
帖子
2
体力
9
威望
0
发表于 2007-1-19 22:14:15 |显示全部楼层
支持!学习中

使用道具 举报

hero4u 

孤竹林

金牌会员 手机认证 

帖子
1305
体力
3444
威望
14
居住地
湖南省 长沙市
发表于 2007-1-22 00:29:15 |显示全部楼层
这里使用了 px 这个绝对单位。关于绝对单位和相对单位,网上相关文章很多,并且也一直是 Web 前台的热门话题,本文简单起见,直接使用绝对单位。

我来除虫,呵呵。
英尺inch 厘米cm是绝对单位
px像素是相对单位 一般显示器的dpi为96。,即每英尺的像素点个数为96点。这个是可以调整的
pt磅才是绝对单位了。规定了1pt =1/72 inch 1pt必须为一英尺的七十二分之一

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

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

使用道具 举报

blank 楼主

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-1-22 09:00:11 |显示全部楼层
回楼上:

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

使用道具 举报

帖子
94
体力
667
威望
66
居住地
江苏省 南京市
发表于 2007-1-22 09:56:57 |显示全部楼层
原帖由 twinsenliang 于 2007-1-17 20:40 发表
问问楼主,google自己为什么用table布局?


应该先问 Google 为什么不写 DocType?
www.junchenwu.com

使用道具 举报

缘客

银牌会员

帖子
199
体力
1011
威望
0
居住地
黑龙江省 哈尔滨市
发表于 2007-1-22 12:23:08 |显示全部楼层
记号下。。。。。。。。。。

使用道具 举报

hero4u 

孤竹林

金牌会员 手机认证 

帖子
1305
体力
3444
威望
14
居住地
湖南省 长沙市
发表于 2007-1-22 12:25:28 |显示全部楼层
我查了苏沈小雨的《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

使用道具 举报

帖子
34
体力
79
威望
0
居住地
广东省 深圳市
发表于 2007-1-27 18:11:32 |显示全部楼层
原帖由 Farewelli 于 2007-1-22 09:56 发表


应该先问 Google 为什么不写 DocType?


因为DocType会影响一些浏览终端的页面显示以及文件格式定义。

使用道具 举报

sasumi 
帖子
120
体力
887
威望
0
居住地
广东省 深圳市
发表于 2007-4-14 17:43:24 |显示全部楼层
/*********** 我有话说************/
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多么麻烦。

使用道具 举报

leaon 
帖子
193
体力
513
威望
4
发表于 2007-4-14 20:09:18 |显示全部楼层
原帖由 old9 于 2007-1-18 19:07 发表


因为google财大气粗不在乎。


非常同意!另外也有稳定性方面的考虑!

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

呵呵

使用道具 举报

帖子
64
体力
295
威望
0
发表于 2007-4-14 22:28:18 |显示全部楼层
blankzheng文章写的好,让我获益非浅,回头自己再试着做做看,感谢楼主,辛苦le

使用道具 举报

gixxue 

维拉斯邦纳

中级会员 手机认证 

帖子
102
体力
490
威望
0
居住地
云南省 昆明市
发表于 2007-4-15 10:11:55 |显示全部楼层
我整理了一下,在IE6、IE7、FF中好像行得通!

 提示:您可以先修改部分代码再运行


[ 本帖最后由 gixxue 于 2007-4-15 16:50 编辑 ]

使用道具 举报

帖子
150
体力
570
威望
0
居住地
福建省 厦门市
发表于 2007-5-19 09:49:08 |显示全部楼层
高手提出问题
菜鸟收帖学习。。

使用道具 举报

baby16 
帖子
24
体力
213
威望
0
发表于 2007-5-19 10:40:44 |显示全部楼层
开始走上征程 ,学习

使用道具 举报

帖子
5
体力
135
威望
0
居住地
广东省 揭阳市
发表于 2011-12-31 00:03:22 |显示全部楼层
貌似老外更爱用em,天朝子民更偏爱px。

使用道具 举报

pengchaovista

银牌会员 手机认证 

帖子
29
体力
1072
威望
0
居住地
湖北省 武汉市
发表于 2011-12-31 11:17:54 |显示全部楼层
mirycat 发表于 2007-1-15 10:51
字体大小, 推荐使用 em 代替 px

什么都不用最好
pengchao

使用道具 举报

Sme7 

我就喜欢

初级会员

帖子
1056
体力
53
威望
2
居住地
安徽省 安庆市
发表于 2011-12-31 21:29:39 |显示全部楼层
yabbichan 发表于 2011-12-31 00:03
貌似老外更爱用em,天朝子民更偏爱px。

用户不可以修改PX设置的文字大小  因为EM是相对单位所以用户可以调整

使用道具 举报

mycggo 
帖子
1966
体力
4724
威望
0
发表于 2012-1-5 10:11:56 |显示全部楼层
Sme7 发表于 2011-12-31 21:29
用户不可以修改PX设置的文字大小  因为EM是相对单位所以用户可以调整

现在的浏览器都支持全局缩放了,EM这方面的优势不大,当然做弹性布局来讲,EM还是有一定优势。

px/em/ex都是相对单位,pt/mm/cm是绝对单位吧。

坚韧不拔的毅力 & 良好的心态

使用道具 举报

Sme7 

我就喜欢

初级会员

帖子
1056
体力
53
威望
2
居住地
安徽省 安庆市
发表于 2012-1-5 11:20:03 |显示全部楼层
mycggo 发表于 2012-1-5 10:11
现在的浏览器都支持全局缩放了,EM这方面的优势不大,当然做弹性布局来讲,EM还是有一定优势。

px/em/ ...


PX是绝对单位...
相对单位会被父级别的相对单位影响
  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4.         <meta charset="UTF-8">
  5.         <title></title>
  6.         <style type="text/css">
  7.         div{font-size:10em;}
  8.         div span{font-size:1em;}
  9.         </style>
  10. </head>
  11. <body>
  12.         <div>div<span>span</span></div>
  13. </body>
  14. </html>
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-12 08:10 , Processed in 0.156996 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部