打印

[讨论] 分享我的页面制作方法 - HTML

原文:http://www.33lab.cn/?p=15

做前端也有几年时间了,不敢说能把他看地多透,但是多多少少还是有些自己的东西。下面以 Tudou.com 的首页为例,总结总结。

Html 演示地址:http://www.33lab.cn/demo/200802/tudou.htm



就制作而言,我将一张页面分为四层:框架、布局、模块、列表和数据块。



一、框架

页面的框架基本上都是:“头”、“主体”、“尾”。但是对于一些页面如Tudou.com,由于布局的需要,还应在“头”的下面还要加个“菜单”。



二、布局(以下用#ID表示页面元素)

#Head和#Foot里的就不说了,具体查看演示页面源码。

布局说的是将#Main里的内容分成几大块。我们看Tudou.com,#Main里典型的左右结构,我们用#Layout_1,#Layout_2表示。如图



三、模块

布局#Layout_1,#Layout_2里的块就是模块了,

按我的理解,模块至少要有一个ID,Class则要视页面设计,给需要重用的加上。

关于模块的ID名称,要取个有意义的名字,当然偷懒的可以用#Col_1,#Col_2,。。。

模块的Class名称用.cols_1,.cols_2,。。。


模块内部的如下图



四、列表和数据块

模块的主体是由列表组成的,而列表里则包含数据块。

按我的理解,页面上的信息其实就是不同类型的列表。我们应将典型的列表方式提取出来,放在公用样式里(public.css)。

以Tudou.com为例,需要定义到public.css里的列表至少要有以下三种:

   1. .list-v 垂直列表方式 (图片和文字成垂直排列)
   2. .list-h 水平列表方式 (图片和文字成水平排列)
   3. .list-t 文字列表方式

数据块其实是微格式的一个变相应用,给不同的数据元素定义固定的结构。

Tudou.com 需要定义的数据块有:

   1. .mVideo (视频)
   2. .mList (豆单)
   3. .mUser (用户)

比如 .mVideo 应该是这样的:
复制内容到剪贴板
代码:
<div class=“mVideo”>
    <div class=“p”><a href=“” title=“”><img src=“” alt=“阿联又挂彩 有望首发战公牛” /></a></div>
    <div class=“d”>
        <div class=“d_name”><a href=“” title=“”>阿联又挂彩 有望首发战公牛</a></div>
        <div class=“d_user”><a href=“” title=“”>阿联又挂彩 有望首发战公牛</a></div>
        <div class=“d_length”>06:88</div>
        <div class=“d_time”>发布时间:<span>2007-10-08 14:31</span></div>
        <div class=“d_intro”>阿联又挂彩阿联又挂彩阿联又挂彩</div>
        <div class=“d_honor”>荣誉:<span><img src=“” alt=“&#199;&#191;” /></span></div>
        <div class=“d_view”>人气:<span>222</span></div>
        <div class=“d_comment”>评论:<span>323</span></div>
        <div class=“d_favorite”>收藏:<span>32</span></div>
        <div class=“d_type”>类型:<span><a href=“” title=“”>&#181;&#231;&#211;°</a><a href=“” title=“”>&#181;&#231;&#202;&#211;&#190;&#231;</a></span></div>
        <div class=“d_tag”>标签:<span><a href=“” title=“”>Twins</a><a href=“” title=“”>&#209;&#221;&#179;&#170;&#187;á</a></span></div>
        <div class=“d_subject”>专题:<span><a href=“” title=“”>±&#172;&#193;&#207;</a></span></div>
    </div>
</div>
最后,附上关键字表,就是一些用于公共定义的ID和Class名称。
ID

   1. #B-* // Body用
   2. #Head, #Main, #Foot //布局用ID
   3. #Message // 系统消息用
   4. #Logo, #Toolbar, #Search, #Menu // Head内元素
   5. #Layout_*, #Group_*, #Col_* // Main内元素
   6. #Links, #CopyRight // Foot内元素
   7. #B* // 广告位,与class=”b”结合使用
   8. #Plugin // Banner用

Class

   1. .txt, .btn, .label_checkbox, .label_input, .handle // 表单内元素
   2. .meat // 模块主体元素
   3. .list_*(.list_v, .list_h, .list-t, .list_top, …) // 列表元素,详见“列表”
   4. .m // 更多,可延伸至“绝对定位于右上角”的元素
   5. .s1, .s2, … // 用于子单元块需各自定义样式的元素,如菜单、排行榜等
   6. .s // 特殊元素,如果一个元素相对于兄弟节点特殊,则用之
   7. .b // 广告位
   8. .p, .d, .d_*, .h // 数据块内元素,分别为图片、详细、详细内元素、操作
   9. .handle // 操作元素
  10. .m_*(.mVideo, .mComment, .mUser, .mSubject, …) // 数据块元素
  11. .*_fix // *元素的补丁元素
  12. .current // 当前元素
本帖最近评分记录
  • greengnn 威望 +1 谢谢分享 2008-3-21 14:57
[url]33lab.cn[/url]
其实做到了后面都大同小异。

但是还有就是整个网站的继承性,统一性。

CLASS的重用。


比如 列表页:

大多页面都差不多,用CLASS实现。
其他在引用他,不同的在稍做处理。

------------
.b .p 跟某些关键字相同 使用的少

其他的都非常支持lz。
惟草木之零落兮,恐美人之迟暮。
示例代码典型的div,span综合症。
这些标签能描述这段内容的意思么?

另外,class和id的定义,有些是首字母大写,有的是驼峰式,有些是中划线,下划线...
要知道,开发团队看代码时间一般都比写代码时间要长。
.b,.p这样的定义,新成员没有认真看团队开发规范,是看不懂什么意思的。

[ 本帖最后由 firepage 于 2008-2-20 23:25 编辑 ]
细心学习~ 谢谢楼主分享~

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
@ z3333426
.p 原来我们用的是 .photo,但是因为页面上的数据块太多,用.p一个原因是为了节约字节,另外也是考虑可以节约关键字。

@ firepage
关于Class和ID的命名,因为没有统一的规范,所以各个团队之间可能差别较大。

我们是这样定义的,有些地方用了不同的命名方法,是为了区别。
   1. 名称必须要有实际意义,容易理解。
   2. 除了Body和Form内元素的ID,用帕斯卡命名法,字母和数字之间用”_”连接,如#HotSubject, #Col_1…
   3. Body的ID,须以”B-”开头,字母之间用”-”连接,如#B-Index, #B-Subject-Index…
   4. Form内元素的ID,须用小写字母,如#user, #email…
   5. Class,用小写字母,单词之间用”_”连接,如.color_red, .m, .s… (全局定义的Class用"_"连接)

至于新成员,我觉得要融入团队,看开发规范是必须的。:)
[url]33lab.cn[/url]

TOP

...路过.
..停下..
.看看...
..无语....
...转身...
..摇头..
.离去.
-------

TOP

不知道要说些什么了`````````

- - `````````

TOP

不大认同 这页面太复杂了 如果内容多就看不明白了 后期修改也难 我觉得P H UL SPAN 这些在一些class相同的层上多用 那代码看上去就容易懂多了 我觉得一大堆div结束标签数起来都麻烦

TOP

从结构出发的思路是正确的,不过HTML基础还有待提高哟。

TOP

樓主寫的不錯

TOP

思路很清晰了,呵呵。

关键是传播方法了,而菜好不好吃是个人喜好问题了。
有人喜欢吃甜食,有人喜欢吃辣的。众口难调。
厨师么该怎么炒菜就怎么炒菜了,
不要管哪些不掏钱的人是怎么评论应该怎么怎么做了。

TOP

之前看过一篇文章,推荐id命名最好避免下划线“_”和链接符“-”,应该用英文大小写结合组词。
貌似<h2>下面应该是个<p>标签,那样更符合语义吧。
好好学习,天天向上!

TOP

引用:
原帖由 firepage 于 2008-2-20 23:09 发表
示例代码典型的div,span综合症。
这些标签能描述这段内容的意思么?

另外,class和id的定义,有些是首字母大写,有的是驼峰式,有些是中划线,下划线...
要知道,开发团队看代码时间一般都比写代码时间要 ...
我想firepage兄弟把问题已经说的很透彻了,虽然说的有点不太和气!
我很奇怪,楼主怎么会用了那么多的div class span!
为什么不用p h2 h3?就是用列表ul也比那么多div来得更合情合理的!结构良好且有意义的xhtml标记还是我们所需要的。
就个人开发而言,也得养成一个书写良好CSS选择器代码的习惯!如果是团队开发,没有一个前期的CSS开发规范说明书更是一件很让人不可思议的事!
我不喜欢什么camel case,也不喜欢上划线、下划线,我只喜欢用小写,我想这足够了!长点怕什么?如果名称长的让你觉得可怕,只能说明我表述能力不行!
WEB标准推荐在分配ID与类名时,尽可能保持名称有意义且与表现无关!有意义就是让不是你团队的人能够看懂你的钩子是描述什么的。
http://www.m4er.cn/post/11.html
http://www.m4er.cn

TOP

hi, m4er
说实话,现在的{<div class="d"><div .d_xx><div .d_xx></div>},半年前我在自己公司的网站上也是用{ul,li}来实现的。

为什么我会选择这样的结构?包括用那么多的class。
可以说是为了更好的扩展性吧。
其实这种结构是另一位同事从microformat引入的,当时我也不认同。觉得用那么多的class干嘛,ul+li多好,即简单又省字节。
但是后来事实证明他是对的,虽然字节上多了点,但是却预见性地对一些潜在的需求提供了便利。

比如说:对所有的播客设置不同的链接颜色。.mVideo .d_user a { color:#xxx } 即可
比如说:数据一致性项目,因为html上的数据不能保持实时更新,所以我们在页面加载完成之后用js异步读取数据后进行相应的覆盖。拖全站统一的数据块格式的福,实施起来只写了一个js函数就搞定了。

如果用不设置class,对于上面两个例子来说,就要重写结构了,改html了。这对于全站生成html的大站来说是很可怕的。

实施标准的目的之一就是把表现和结构分开。咋分?就是改表现的时候改css,改结构的时候改html。
所以我认为html的结构一开始就要设计地有很好的扩展性。

[ 本帖最后由 sorrycc 于 2008-3-21 14:57 编辑 ]
[url]33lab.cn[/url]

TOP

看LZ的帖子 受益不少...顶

TOP

我想扩展性好的结构也绝不是必须纯div构成,用h、p、li这些标签,同样可以将class细化以增强扩展性,可读性跟divitis相比也绝非同日而语。

TOP

支持一下LZ 辛苦了

TOP

又是DIV+CSS
我讨厌div+css    WEB民工群: 19746324

TOP

如果以后只改css不能修改结构,看来这种复杂的div+class还是有存在价值。
大站毕竟不是小作坊
研究各版主发的帖子

TOP

语义清晰的xhtml很好,但是目前的浏览器兼容不那么友好。
<p>、<ul>、<h2>等等在FF和IE下都不同,与其写一堆冗余hack,相对而言有些地方用div、span代替更方便了。

TOP

回复 #14 sorrycc 的帖子

比较认同这一点
用那么多的class后期维护起来是很方便的

TOP

很实用的分享,楼主辛苦

TOP

“苏醒中国”杯首届音画大赛报名贴

“苏醒中国”杯首届音画大赛将于四月一日全面启动,组委会诚邀活动合作伙伴,欢迎爱好FLASH制作的朋友参与比赛,本次活动奖品丰厚,机会多多,不容错过!
大赛宗旨:求音画搏客共谋事业发展;
          邀I T精英同创绚烂人生!
大赛口号:苏醒乐队,唱响中国!
组委QQ:57764701 (指定群)
报名地址:中国苏醒乐队: http://q.163.com/iivf8888/
          靓妹有约:     http://q.163.com/liangmei/
          全球闽南联盟: http://q.163.com/liyanhong

TOP

俺也来分享下前一阵的工作吧,http://intl.2008.cctv.com/



#wrap 与 #contaier 控制页面尺寸及背景图,没啥好说的哈


头部结构

ul li结构在一般情况下使用display:inline来实现横排,padding和margin来扩大可点击范围与间距.


内容部分结构

.col为左右大块,宽度及位置由.primary .secondary来分别定义

内部分割块为多个.box 统一定义与.col的边距,避免ie5的盒模型问题,由.miniCol来进一步块切割

最初设计稿为上右下左4圆角模块,.rbord即为此设定,而后修改为仅下方圆角,则由.rbtm实现,各不同moudles的内部由各自的名称来定义,如.express,.doYouKnow等等.

.entryTitle与.entryContent源自前一阵看的微格式,据说是ie8支持摘出其中的内容,没细加研究\测试了,望了解的同志告之一二.


CSS部分

分为layout,typo,themes,moudles几部分
布局和字体其实应该是放到最前面的,然后再是模块的控制,最后再加载图片无数的themes部分.
不过在做这块的时候由于项目逼的时间很紧,实在是赶得大伙都够呛,很多预先的想法都没有很好的实施.惭愧一下,顺便bs项目方的作风,距离上线不到2周时间才拍定下来.

样式表的这个样式 布局分离的做法俺也是在实践当中,好处应该是在加载的顺序上页面呈现的过程不会太离谱,有的大型站在页面未加载完之前就是整个一条很长很长的;而不好的地方应该就是会增加css文件体积了吧,毕竟俺起的名字都很长一条.



PS:不太擅长写这类文档,新来的小姑娘说看不懂我写的首页部分,先写点东西出来,以免交接的时候出问题厄.顺便问下,俺准备跳槽,有公司要么?
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

刚才firefox3崩溃了一下,于是打了一大段的文字就这样木有了... 俺慢慢回忆吧


关于html的命名,除了最外围的header,mainContent,footer在确定唯一的时候使用id来命名,其他moudles都使用多个classname(不超过3个为宜,虽然我很想写出很多的公共类让程序自行挑选添加进去.如class="iAmBox iHaveOneListColumn theListColumnLikeHorizontal myFontColorisred thisListStyleHaveaLitttleStar")

首先从顺序上应该先是public的,如.box,.col,.miniCol等等,然后再是对该moudle的描述,如.primary,.secondary | .liveTalk, .doYouKnow
写出来在html上即为<div class="box liveTalk">,而样式表内的顺序也是如此,public的类放在moudles之前,特定的moudle定义便自行覆盖掉了前面的公用属性,有特殊要求的还可以通过在前面附加#mainContent来进一步提高优先级

可能有些朋友会觉得为什么不直接给不同的moudles直接加上id来区分?我个人觉得id的优先级太高,尽量是不用它来写,以免在多人协作的时候出现命名重复(虽然这个问题用我现在的多个classname也并没有得到解决,我倡议的结果是尽量使用页面上的详细描述来进行命名,实在没把握的时候就到moudles的样式表里CTRL+F一下o_o!),只在js需要操作node的时候再加上id.如下图的"Olympic Express"



适量的在外面多套些div对以后的维护工作还是很有帮助的.
也实在是搞不懂微格式这老调牙的东西怎么又被捡起来了,不过sorrycc同学那一堆
引用:
<div class="d_name">
<div class="d_user">
<div class="d_length">
<div class="d_time">
<div class="d_intro">
确实是看得心里发憷哈,虽然俺对微格式的了解不太深,不过那玩意貌似也只是对classname的一套要求吧,也没有规定非用div才能做吧?
http://microformats.org/code/hcalendar/creator 可以参考下这个生成出来的代码.microformat与合理使用html标签并不冲突,也许是你们的"数据一致性"对这个有要求吧.
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

楼住所做的只是div+css ,并不是xhtml/html+css,没有语义

TOP

引用:
原帖由 spritefire 于 2008-3-24 04:23 发表
刚才firefox3崩溃了一下,于是打了一大段的文字就这样木有了... 俺慢慢回忆吧


关于html的命名,除了最外围的header,mainContent,footer在确定唯一的时候使用id来命名,其他moudles都使用多个classname(不超 ...
其他的我不想解释,说下我对给moudles加多个classname的理解吧。

我觉得存在着几个问题:

1. 如果要更改一个或几个moudle的样式,是不是要更换moudle的classname?如果是的话,这样就要改html了,背离了“分离结构和表现”的根本目的。
2. 不给moudle加id我觉得不可取。一个是为了方便dom操作,取id应该是最快速的方法。另一个还是和第一个问题描述的一样,更改特定moudle的样式的时候会有麻烦。


个人观点。
[url]33lab.cn[/url]

TOP

引用:
1. 如果要更改一个或几个moudle的样式,是不是要更换moudle的classname?如果是的话,这样就要改html了
多个classname来定义moudle的样式其实与id来定义差别不大,按我之前说的公共类和特定类顺序排下来的话,特定的类可以覆盖掉之前定义的公用属性.
后面的特定描述classname是不重复的,没有更换的必要,咱们做法上的差别也就是我把你所用的IDname放进class里面去了

第2个问题,俺js不咋样,目前只会用jQuery,取classname也可以定义到位置(这里应该不是node吧,好像取出来的是jquery的对象),俺估计应该效率是比不上id的。以后还请sorrycc同学能指点下js方面的问题哈,俺正努力学习这方面

TOP

开始结构的观点同意,之后的代码示例从语义角度上看确实不理想。不过没参与过这么大的站点制作,所以保留意见。因为css不够完善,实现结构表现分离也真不是件简单的事,能做的也只是保留语义的情况下尽可能地减少结构的修改,前不久粗看了css3,发现功能强大不少,期待中……

TOP

引用:
原帖由 lanxuehai 于 2008-2-21 09:59 AM 发表
...路过.
..停下..
.看看...
..无语....
...转身...
..摇头..
.离去.
-------
同道中人
承接ASP定制,http://08-if.cn/

TOP