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

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

查看: 33663|回复: 52

[教程] 彻底弄懂CSS盒子模式二(导航栏实例详解) [复制链接]

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-3-27 22:18:23 |显示全部楼层

彻底弄懂CSS盒子模式二(导航栏实例详解)



1.彻底弄懂CSS盒子模式一(DIV布局快速入门) 【论坛讨论】
3.彻底弄懂CSS盒子模式三(浮动的表演和清除的自述) 【论坛讨论】
4.彻底弄懂CSS盒子模式四(绝对定位和相对定位) 【论坛讨论】
5.彻底弄懂CSS盒子模式五(定位强化练习) 【论坛讨论】

作者:唐国辉          实现原理动画演示:http://www.blueidea.com/articleimg/2007/03/4563/cssNav.swf



  自本人教程《彻底弄懂CSS盒子模式(DIV布局快速入门)》发表以来,一直获得各位网友的好评与支持,今天应各位网友的要求,也为了答谢各位网友的支持,本人将推出续篇教程,以加深各位网友对CSS盒子模式的理解。此教程面向读者还是DIV排版入门者,如果你是高手,那就不要浪费自己时间了。

  本人这次将讲解一个纵向CSS导航栏实例的制作,在讲解过程中将会延用之前发表教程所讲到的“盒子”概念,如果你没有看过本人之前的那篇教程,又或者你还不理解什么是“盒子”这一概念,请先通过下面的两个链接阅读本人之前发表的教程,看完之后再回来看此教程,如有不便敬请原谅。

1.彻底弄懂CSS盒子模式(DIV布局快速入门)
2.彻底弄懂CSS盒子模式(DIV布局快速入门)

  用CSS做导航栏也是轻而易举的事情,在本人之前发表的教程中其实也有一个简单的横向导航栏制作,那时只给出了样式代码并没有作太多的解释,这次要做一个相对复杂点的导航栏,为了加深大家对CSS盒子模式的理解,特别选做一个有多个盒子嵌套实现的导航栏。

  先看实现原理动画演示:

[/url]


[url=http://www.blueidea.com/articleimg/2007/03/4563/cssNav.swf]http://www.blueidea.com/articleimg/2007/03/4563/cssNav.swf  


(如果觉得动画太快,看不清说明文字,你可以通过动画右下边的播放、暂停按钮来控制动画播放。)

结果页:

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



现在再看结果图:


  这个导航栏中的链接用到了背景图片的切换效果,鼠标移到链接上导航栏背景图片和文字颜色都会跟着改变,整个导航用到下列4幅图片素材:


即链接不同状态的两张背景图片,每条导航左边的“勾月”图形,最外边大盒子1像素高的背景图片。

  看了动画演示和结果图,也了解了用到那些素材,现在就请你带着一股好奇和我一起来完成这个导航栏吧,当做完这个导航栏之后你会发现原来DIV排版那么简单。愿你更有信心学好DIV排版!

  先来分析一下这个导航栏要用到多少个盒子,在分析之前我们还是要形成一种思想:尽量减少和优化XHTML代码,让他们基本上都有语义。这个导航栏最少的盒子实现是:最外边一个大盒子(ul),这个盒子与1像素高的背景图片等宽,里面又有五个小盒子(li)分别装着每一个导航栏,这个盒子与“勾月”图形等高,导航栏这个盒子里面又装着一个稍小的盒子(a),这个盒子又装着一个黄色的修饰盒子(a的左边框,这里勉强理解为盒子,因为它不像一般的边框那么细,在网页中看起来像个盒子)和一个有文字的链接盒子(a的内容)。

网页结构代码:
  1. <ul id="nav">
  2.         <li>
  3.           <a href="#">彻底弄懂CSS盒子模式1</a>
  4.         </li>
  5.        
  6.         <li>
  7.           <a href="#">彻底弄懂CSS盒子模式2</a>
  8.         </li>
  9.        
  10.         <li>
  11.           <a href="#">彻底弄懂CSS盒子模式3</a>
  12.         </li>
  13.        
  14.         <li>
  15.           <a href="#">彻底弄懂CSS盒子模式4</a>
  16.         </li>
  17.        
  18.         <li>
  19.           <a href="#">彻底弄懂CSS盒子模式5</a>
  20.         </li>
  21. </ul>
复制代码

1.现在正式开始做,做之前初始化一下各签标的边界和填充,这里用样式:
  1. * {
  2.         margin: 0px;
  3.         padding: 0px;
  4.         }
复制代码

2.组装最外边的大盒子ul,宽200px,高为自动auto或者干脆不要,背景图片为bj.jpg,背景纵向重复,用<ul id=”nav”>方式引用样式,用到样式:
  1. #nav {
  2.         background: url(bj.jpg) repeat-y;
  3.         width: 200px;
  4.         overflow: hidden;
  5. }
复制代码

3.组装每条导航的盒子li,这个盒子与“勾月”图形等高,并把“勾月”图形以背景形式放在这个盒子的左边,并用15px的填充把盒子内容区块推向正中合适位置(当然你也可以考虑给子级a指定边界属性来实现),并让这个盒子靠左边对齐(因为这个盒子的宽度比外边的大盒子小,如果相等则可以不用考虑对齐方式),这里用到样式float的属性,本人没有写入样式中则取其默认值,样式代码如下:
  1. #nav li {
  2.         background: url(lan.gif) no-repeat left center ;
  3.         height: 35px;
  4.         width: 190px;
  5.         padding-top:15px;
  6. }
复制代码

4.组装链接盒子a,这里用到样式: display: block;让链接以块状方式呈现,并为链接安排背景图片,为了安全起见设置背景不重复,垂直居中(如果浏览器出错解释错误,而你的背景又不是纯色的,那么盒子过大导致的背景重复将会影响网页美观),链接文字样式去除下划线,整个盒子右对齐,样式如下:
  1. #nav a {
  2.         background: url(lanbj2.gif) no-repeat left center;
  3.         text-decoration: none;
  4.         height: 20px;
  5.         width: 155px;
  6.         display: block;
  7.         float: right;
  8.         padding: 0px 0px 0px 5px;
  9.         font-weight: bold;
  10.         font-size: 9pt;
  11.         line-height: 20px;
  12.         color: #630;
  13. }
复制代码

5.组装黄色修饰块盒子(a的左边框,如果又独立用一个盒子来做就不科学了,因为此方法最简单),直接给a加入下面一条样式即可,样式代码如下:
  1. #nav a {
  2.         border-left:10px solid #f90;
  3. }
复制代码

6.最后简单为鼠标移到链接上时,链接风格的改变指定一个样式:
  1. #nav a:hover {
  2.         background-image: url(lanbj3.gif);
  3.         color: #FFFFFF;
  4. }
复制代码


  至此完成样式代码编写,上面已给出内容部分的结构代码,把它们结合到网页中就算是完成本次导航栏的制作。再次感谢本专栏斑竹blankzheng指点优化。

[ 本帖最后由 webflash 于 2007-8-20 10:27 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 2 人评分威望 收起 理由
zhuyinhong + 2 谢谢分享
greengnn + 3 不错,很有条理

总评分: 威望 + 5   查看全部评分

西部数码顶级域名注册商39元抢注!
帖子
109
体力
224
威望
0
居住地
湖北省 武汉市
发表于 2007-3-27 22:39:31 |显示全部楼层
楼主的教程真是不错啊!条理清晰,描述合理到位.依旧是
图文并茂,一看明了.
辛苦了!支持...
学无止境。
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

sosme 

我心被捅

金牌会员

帖子
867
体力
3483
威望
0
发表于 2007-3-27 22:41:31 |显示全部楼层
有心了,支持一下
留下一眨眼的时间,看一场烟花的表演......

使用道具 举报

blank 

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-3-27 22:43:21 |显示全部楼层
XHTML代码写到上面,CSS写在下面,这样别人才知道你的CSS对应的是XHTML中的什么元素。

对于这样的结构推荐用无序列表来实现(ul/li)!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

使用道具 举报

blank 

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-3-28 08:56:27 |显示全部楼层
标准重要的是表现和结构的分离,尽量减少和优化XHTML代码,让他们基本上都有语义。

我将你的代码重新优化了一下,看看结构是不是更简洁明了,而且CSS也会随着良好的结构变得简单。

继续努力,期待更成熟的教程。

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

个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-3-28 12:01:18 |显示全部楼层
高手就是高手,那个黄色的盒子斑竹想到用边框Border来实现它!整理中...

使用道具 举报

jayliu 
帖子
100
体力
383
威望
0
发表于 2007-3-28 20:05:09 |显示全部楼层
冒昧的说一下:LZ的结构代码真的不是很好。如SPAN标签不应该用来专门修饰边框这样它的语义根本没有体现,还有盒子好像嵌套的太多,不过好像是故意的,因为要深入的讲解大盒子和嵌套盒子的么?

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-3-28 20:43:40 |显示全部楼层
原帖由 jayliu 于 2007-3-28 20:05 发表
冒昧的说一下:LZ的结构代码真的不是很好。如SPAN标签不应该用来专门修饰边框这样它的语义根本没有体现,还有盒子好像嵌套的太多,不过好像是故意的,因为要深入的讲解大盒子和嵌套盒子的么?


本文已优化,如果是之前看的,现在不妨回来再看一次。

使用道具 举报

lsjegg 
帖子
106
体力
398
威望
0
居住地
广东省 佛山市
发表于 2007-3-28 23:11:21 |显示全部楼层
我是新手,还不懂CSS,先收藏了,谢谢楼主!

使用道具 举报

帖子
433
体力
1698
威望
0
发表于 2007-4-4 18:37:29 |显示全部楼层
建议楼主保留(重帖)未经优化的代码,未优化的与优化过的对比,这本身也是教材。

使用道具 举报

帖子
41
体力
132
威望
0
居住地
湖南省 湘西土家族苗族自治州
发表于 2007-4-5 11:46:59 |显示全部楼层
我是新手,先收藏了

使用道具 举报

帖子
12
体力
36
威望
0
发表于 2007-4-6 19:35:17 |显示全部楼层
初学者,好东西,支持下.

使用道具 举报

帖子
335
体力
1109
威望
0
居住地
山东省 济南市
发表于 2007-4-8 12:12:59 |显示全部楼层
先收藏
这个教程写的很详细
我觉得蓝色里面的人都不浮躁

这样的精神值得发扬 !呵呵

使用道具 举报

帖子
14
体力
67
威望
0
发表于 2007-4-25 22:15:25 |显示全部楼层

我做了一遍.

挺好.
问题:

1、repeat-y是什么意思?overflow: hidden;是什么意思?

2、background: url(lanbj2.gif) no-repeat left center;
此句话中的left center是什么意思?

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-4-28 21:18:39 |显示全部楼层
原帖由 livestyle 于 2007-4-25 22:15 发表
挺好.
问题:

1、repeat-y是什么意思?overflow: hidden;是什么意思?

2、background: url(lanbj2.gif) no-repeat left center;
此句话中的left center是什么意思?


(1)repeat-y:让背景纵向重复;
(2)overflow: hidden:隐藏超出盒子大小的内容,主要防止意外变形;
(3)background: url(lanbj2.gif) no-repeat left center;
此句话中的left center是指,背景在盒子内水平方向左对齐,垂直方向也居中对齐。

使用道具 举报

hubird 
帖子
314
体力
543
威望
0
发表于 2007-5-30 16:16:40 |显示全部楼层
不错 现在才发现标准的网页是如此有趣 table布局完全让我痛苦。

使用道具 举报

Spicegirl

中级会员

帖子
250
体力
457
威望
0
发表于 2007-6-1 16:17:52 |显示全部楼层
原帖由 twostone 于 2007-4-4 18:37 发表
建议楼主保留(重帖)未经优化的代码,未优化的与优化过的对比,这本身也是教材。


    嗯,同感,这样便于新手学习也让更多的人避免走弯路。

    仍然非常感谢楼主。

使用道具 举报

Andy88

银牌会员

帖子
2590
体力
1826
威望
0
发表于 2007-6-4 18:02:00 |显示全部楼层
原帖由 twostone 于 2007-4-4 18:37 发表
建议楼主保留(重帖)未经优化的代码,未优化的与优化过的对比,这本身也是教材。


严重同意此楼!刚才我看板主纠正那层然后,回1楼看了一下。没找出毛病。。原来是改过了。。
为我们新手改错的过程本身也是教程呢。

使用道具 举报

帖子
295
体力
551
威望
0
发表于 2007-6-5 13:14:22 |显示全部楼层
好帖!顶!

使用道具 举报

打不死的小强

高级会员

帖子
245
体力
681
威望
0
居住地
广东省 深圳市
发表于 2007-6-6 17:19:12 |显示全部楼层
好贴.支持

使用道具 举报

66855 
帖子
33
体力
276
威望
0
居住地
广东省 深圳市
发表于 2007-6-7 15:12:42 |显示全部楼层
好贴,顶起来!

使用道具 举报

帖子
7
体力
22
威望
0
发表于 2007-6-7 17:28:37 |显示全部楼层
我是新手问个弱智的问题?
div就抛弃表格,我原来要用表格的框架然后用div来构架,内容用css来实现
那我的每个区域块都要用div了对不?
还有就是我让页面都是动态比如添加asp语言该怎么做
在这里学了2天div总算理解了一点东西,但是对于加动态语言就疑惑了
按说是不能加因为他是静态页子,我看网上好多站点都是动态管理,老大能不能指点指点......

使用道具 举报

cwawaw 
帖子
164
体力
374
威望
0
发表于 2007-6-12 14:02:27 |显示全部楼层
果然不错,很详细,通俗易懂!

使用道具 举报

帖子
32
体力
35
威望
0
发表于 2007-6-19 17:06:20 |显示全部楼层
继续学习!!好好学习,天天向上!!

使用道具 举报

xxyan 
帖子
2
体力
9
威望
0
发表于 2007-6-27 23:14:48 |显示全部楼层
不错。

使用道具 举报

Wendyazhu

高级会员

帖子
184
体力
705
威望
0
发表于 2007-7-1 15:13:17 |显示全部楼层
真得是好文章,受益匪淺。lz辛苦啦!期待您的文章

使用道具 举报

cinhoo 
帖子
4
体力
18
威望
0
发表于 2007-8-14 22:11:14 |显示全部楼层
感谢楼主.............

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-8-15 13:39:17 |显示全部楼层
原帖由 twostone 于 2007-4-4 18:37 发表
建议楼主保留(重帖)未经优化的代码,未优化的与优化过的对比,这本身也是教材。

原帖由 Spicegirl 于 2007-6-1 16:17 发表


    嗯,同感,这样便于新手学习也让更多的人避免走弯路。

    仍然非常感谢楼主。

原帖由 dsqwei1 于 2007-6-4 18:02 发表


严重同意此楼!刚才我看板主纠正那层然后,回1楼看了一下。没找出毛病。。原来是改过了。。
为我们新手改错的过程本身也是教程呢。


未经过优化的代码本人没有保留,大家分析我下面给出的类似代码,从中对比发现问题吧!

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

原帖由 webflash 于 2007-3-28 12:01 发表
高手就是高手,那个黄色的盒子斑竹想到用边框Border来实现它!整理中...

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-8-15 14:20:09 |显示全部楼层
原帖由 sun22sun 于 2007-6-7 17:28 发表
我是新手问个弱智的问题?
div就抛弃表格,我原来要用表格的框架然后用div来构架,内容用css来实现
那我的每个区域块都要用div了对不?
还有就是我让页面都是动态比如添加asp语言该怎么做
在这里学了2天div总算理解了一点东西,但是对于加动态语言就疑惑了
按说是不能加因为他是静态页子,我看网上好多站点都是动态管理,老大能不能指点指点......


1.div了不一定要完全抛弃表格。采用transitional.dtd文档类型的网页可以使用表格,有些时候还更乐意用回表格,谁优用谁,不要喜新厌旧。
2.你的说法“内容用css来实现”是错误的,内容可以说是用XHTML来架构,CSS是用来控制表现的。
3.“那我的每个区域块都要用div了”说法也欠妥,这里的DIV布局强调的是用CSS控制布局。网页结构还是尽量用有语义的标签(XHTML)。
4.采用DIV布局后,不但不会影响前台页面与后台的结合,而且更方便代码的加入。

客户端模拟服务器动态输出,body区最终输出的结果为<a class="one"></a><a class="two"></a>...

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

使用道具 举报

奋斗中的叶兄

银牌会员 手机认证 

帖子
236
体力
1151
威望
0
居住地
浙江省 杭州市
发表于 2007-8-16 22:01:45 |显示全部楼层
请问为什么在<a>中加入了float:right后原li 的默认项目小黑点就不在了呢?(去掉楼主代码中的float:right后<a>靠左显示,小黑点又出现了...)虽说可以用list-style:none来消除,但还是请楼主解释一下float:right与小黑点的关系...谢谢!

使用道具 举报

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

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

GMT+8, 2012-2-13 13:02 , Processed in 0.188655 second(s), 11 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部