本案例将在8.5节的基础上来制作会跳起的多彩菜单,效果如图1所示。在平常状态时,各菜单项的高度都同样,而当鼠标指针经过某一个菜单项的时候,该菜单项就会跳起,高于其他菜单项。这个效果非常有趣,能够吸引访问者的目光。 该实例文件位于网页学习网CSS教程资源的“第8章\06\rounded-navi.htm”。 图1 会跳起的多彩菜单 注意:本案例的制作完全基于8.5节的最终成果进行,因此请读者一定先做出8.5节的效果,再学习本案例。 一、实现跳起效果 这里来实现跳起的效果,基于8.5节的制作过程,自然会想到,这里让某个菜单项跳起来,就是让菜单项在鼠标指针经过时,使菜单文字所在的p段落变高一些,那么只要给它的padding-bottom增加若干像素就可以了。 先来试验一下,在“.item a:hover p”中增加对padding-bottom的设置,代码如下。 折叠展开CSS 代码复制内容到剪贴板 - .item a:hover p{
- background:#884;
- color:#fff;
- padding-bottom:10px;
- }
在浏览器中看到如图效果,并不是希望的效果,会错误的跳起。 分析:这是由于每个菜单性都是向左浮动排列的,这些盒子都是根据上边缘对齐的,如果某个菜单项中的p段落变高了,它自然就会向下延伸,而不是向上延伸。网页学习网CSS教程资源中的"第8章\06\wrong-method.htm"文件是这种错误效果的页面,请读者参考。 解决办法是实现为每一个菜单项的上面增加一个预留的高度空间,然后在鼠标指针经过某一个菜单项的时候,使该菜单项的预留空间高度变为0,同时增加下面的p段落的高度。这样,如果计算精确,就可以实现跳起的效果了。 具体的做法如下。 ① 首先改造HTML。在每一个li中,增加一个div.这里把类别名设为“pad”,即垫子的意思,代码如下。这里的代码只抄录了一个Ii的代码,其余3个都是相同的。 折叠展开XML/HTML 代码复制内容到剪贴板 - <li>
- <a href="#">
- <div class="pad"></div>
- <div class="row1"></div> <div class="row2"></div>
- <div class="row3"></div> <div class="row4"></div>
- <p>Home</p>
- </a>
- </li>
② 对这个“垫子”div设置CSS样式,代码如下。 折叠展开CSS 代码复制内容到剪贴板 - .item .pad{
- height:10px;
- border:0;
- background:transparent;
- }
上面代码将“垫子”设置为10像素高,边框为0,背景色为透明,这样这个“垫子”看起来就好像不存在一样。lodidance.com ③ 分别设置“垫子”和p段落在鼠标指针经过时的样式,代码如下。 折叠展开CSS 代码复制内容到剪贴板 - .item a:hover p{
- background:#884;
- padding-bottom:12px;
- }
-
- .item a:hover .pad{
- height:0px;
- }
在鼠标指针经过时,“垫子”的高度变为0,菜单文字所在的p段落的padding-bottom变为12像素。注意这里的12像素是因为原本p段落的padding-bottom是2像素,这里加上垫子所占的10像素,因此一共12像素。此时在浏览器巾的效果如图1所示,已经可以正确地实现“跳起”的效果了。 网页学习网CSS教程资源中的“第8章\06\popup-navi.hLm”文件是制作到这时的文件,请读者参考。 二、实现多彩效果 为了实现各个菜单项的不同颜色,仍需要对HTML进行改造。为了使各个菜单的颜色不同,可以为每种所需颜色设置一个类别,分别分配给相应的菜单项。 ① 若想让第1个菜单项以橘黄色显示,就要在li的类别声明中增加一个orange类别名。注意和前而原先的item类别名之间留一个空格,代码如下:lodidance.com 折叠展开XML/HTML 代码复制内容到剪贴板 - <li class="item orange">
- <a href="#">
- <div class="pad"></div>
- <div class="row1"></div> <div class="row2"></div>
- <div class="row3"></div> <div class="row4"></div>
- <p>Home</p>
- </a>
- </li>
② 其余3个菜单项也同样处理,颜色分别为黄色、绿色和蓝色,相应增加的类别名称分别为yellow、green和blue。 ③ 接下来对增加的这4个类别的css样式进行设置。平常状态颜色设置的代码如下。这里将文字所在的p段落以及row2、row3和row4这4个对象的背景色设置为橘黄色(#fa0)。为什么不设置row1呢?因为row1自有一条黑色边框,所以不需要设置背景色。 折叠展开CSS 代码复制内容到剪贴板 - .orange p,
- .orange .row2,
- .orange .row3,
- .orange .row4,
- {
- background:#fa0;
- }
④ 设置鼠标指针经过时的颜色,代码如下。 折叠展开CSS 代码复制内容到剪贴板 - .orange a:hover p,
- .orange a:hover .row2,
- .orange a:hover .row3,
- .orange a:hover .row4,
- {
- background:#fa0;
- }
⑤ 其余3个菜单项做相同处理,黄、绿、蓝3种颜色使用的颜色值依次为#ff0、#0e0和#0cf,读者可以随意选择自己喜欢的颜色。 分析:由于普通状态与跳起状态的背景色相同,使用的都是比较浅的颜色,因此在鼠标指针经过时,文字的颜色就不必变成白色了,否则文字会不容易看清楚。 ⑥ 在“.item a:hover p”中,将8.5节对文字颜色的设置删除,就会在鼠标指针经过时仍使用黑色文字。这时在浏览器中的效果如图1所示。 网页学习网CSS教程资源中的“第8章\06\colorful-navi.htm”文件是制作到这时的文件,请读者参考。这个例子比较复杂,在下一小节中将给出本案例的完整的代码,供读者逐行分析理解。 三、本案例完整代码 在进行比较复杂的CSS设计时,可以准备一张草稿纸,经常画一画草图,计算准确是很重要的。本案例的完整代码如下。 折叠展开XML/HTML 代码复制内容到剪贴板 - <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
-
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>会跳起的多彩菜单</title>
- <style type="text/css">
- ul{
- height:26px;
- margin:0;
- padding:10px;
- list-style-type:none;
- background:#ddd;
- }
-
- .item{
- float:left;
- width:100px;
- margin:0 -1px 0 0;
- padding 0;
- font: 14px Arial;
- font-weight:bold;
- }
-
- .item p{
- padding:0 0 2px 0;
- margin:0px;
- text-align:center;
- background:#cc6;
- border:solid 1px #000;
- border-top-width:0;
- }
-
- .item div{
- height:1px;
- overflow:hidden;
- background:#cc6;
- border-left:solid 1px #000;
- border-right:solid 1px #000;
- }
-
- .item .pad{
- height:10px;
- border:0;
- background:transparent;
- }
-
- .item .row1{
- margin:0 5px;
- background:#000;
- }
-
- .item .row2{
- margin:0 3px;
- border:0 2px;
- }
-
- .item .row3{
- margin:0 2px;
- }
- .item .row4{
- margin:0 1px;
- height:2px;
- }
-
-
- .item a , .item a:visted{
- display:block;
- color:#000;
- text-decoration:none;
- }
-
- .item a:hover{
- background:transparent;
- }
-
- .item a:hover p{
- background:#884;
- padding-bottom:12px;
- }
-
- .item a:hover .pad{
- height:0px;
- }
-
- .item a:hover .row2,
- .item a:hover .row3 ,
- .item a:hover .row4{
- background:#884;
- }
-
-
- .orange p,
- .orange .row2,
- .orange .row3,
- .orange .row4,
- {
- background:#fa0;
- }
-
- .orange a:hover p,
- .orange a:hover .row2,
- .orange a:hover .row3,
- .orange a:hover .row4,
- {
- background:#fa0;
- }
-
- .yellow p,
- .yellow .row2,
- .yellow .row3,
- .yellow .row4,
- {
- background:#ff0;
- }
-
- .yellow a:hover p,
- .yellow a:hover .row2,
- .yellow a:hover .row3,
- .yellow a:hover .row4,
- {
- background:#ff0;
- }
- .green p,
- .green .row2,
- .green .row3,
- .green .row4,
- {
- background:#0e0;
- }
-
- .green a:hover p,
- .green a:hover .row2,
- .green a:hover .row3,
- .green a:hover .row4,
- {
- background:#0e0;
- }
-
-
- .blue p,
- .blue .row2,
- .blue .row3,
- .blue .row4,
- {
- background:#0cf;
- }
-
- .blue a:hover p,
- .blue a:hover .row2,
- .blue a:hover .row3,
- .blue a:hover .row4,
- {
- background:#0cf;
- }
-
-
- </style>
- </head>
-
- <body>
- <ul>
- <li class="item orange"><a href="#">
- <div class="pad"></div>
- <div class="row1"></div> <div class="row2"></div>
- <div class="row3"></div> <div class="row4"></div>
- <p>Home</p>
- </a>
- </li>
- <li class="item yellow"><a href="#">
- <div class="pad"></div>
- <div class="row1"></div> <div class="row2"></div>
- <div class="row3"></div> <div class="row4"></div>
- <p>Contact Us</p>
- </a>
- </li>
- <li class="item green"><a href="#">
- <div class="pad"></div>
- <div class="row1"></div> <div class="row2"></div>
- <div class="row3"></div> <div class="row4"></div>
- <p>Web Dev</p>
- </a>
- </li>
- <li class="item blue"><a href="#">
- <div class="pad"></div>
- <div class="row1"></div> <div class="row2"></div>
- <div class="row3"></div> <div class="row4"></div>
- <p>Map</p>
- </a>
- </li>
- </ul>
- </body>
-
- </html>
四、实现向下弹出效果 菜单向上弹出的效果已经比较完善了,最后再给读者提出一个思考题。如果要制作一个向下的弹出菜单,制作方法和上面有哪些相同之处,又有哪些不同之处? 倒转每个菜单项,实际上只需要把row1—row4这4个div移动到p段落的下面就可以了,然后把p段落的下边框设置为0,而上边框设置为1像素,就可实现了。 而要实现向下弹起,就更简单了,不需要使用“垫子”div,直接把p段落的paddjng-top值增加就可以实现跳起了。 这里只列出修改后的HTML代码,至于CSS的修改方法,相信读者完全可以自己解决了。HTML代码如下。 折叠展开XML/HTML 代码复制内容到剪贴板 - <body>
- <ul>
- <li class="item orange"><a href="#">
- <p>Home</p>
- <div class="row4"></div> <div class="row3"></div>
- <div class="row2"></div> <div class="row1"></div>
- </a>
- </li>
- ……这里省略其他三个菜单项……
- </ul>
- </body>
网页学习网CSS教程资源中的“第8章\06\popdown-navi.htm”文件是制作完成的“向下弹出”效果的文件,请读者参考。 本章重点 在本章中,实现了6个水平方向的菜单,主要需要掌握以下基本要点。 (1) 设置浮动方式,以及是否适应宽度的设置方法。 (2) 不使用图像,实现斜角和圆角的方法。 (3) 使用背景图片的滑动门技术。 (4) 理解本章案例中的“钩子”和“垫子”的用途。 点击下载第8~17章CSS教程资源 返回《CSS教程布局之道》教程列表 |