CSS多级菜单的实现方法

  介绍

小编给大家分享一下CSS多级菜单的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

先来一个非常简单的一级菜单与悬停效果。

& lt; ul id=癿enu"比;   & lt; li>   https://www.yisu.com/zixun/& lt; a href=" http://www.php.cn/">   菜单一      李   <李>      菜单二      李   <李>      菜单三      李   <李类="最后">      菜单四      李   

结构很熟悉吧,就是把原来放图片的地方换成文字而已。我还特意标出来了。接着下来的表现层代码非常简单。

* {   保证金:0;   填充:0;   }   .menu {   字体大小:12 px;   }   李.menu{/*水平菜单*/浮:左;   list-style:没有;   }   .menu一个{   显示:块;   位置:相对;   高度:32像素;   宽度:100 px;   行高:32像素;   背景:# a9ea00;   颜色:# ff8040;   文字修饰:没有;   text-align:中心;   }   .menu答:{徘徊   背景:# 369;   颜色:# fff;   }   李.menu跨度{   显示:没有;   位置:绝对的;   左:0;   上图:32像素;   宽度:200 px;   身高:150 px;   背景:# B9D6FF;   }   .menu答:悬停跨度{   显示:块;   }

这里有两个值得注意的地方。我们先说第一个。子菜单(跨度元素)的顶部应该能使其顶部停留在一元素的范围内,如果包含块是李元素,同理。当跨度最大的值大于32 px,如40像素,我们就无法把鼠标移到跨度元素上。因为离开了:悬停的作用范围,跨度元素又重新隐藏。

。菜单李跨度{   显示:没有;   位置:绝对的;   左:0;   上图:40 px;/*★★修改这里★★*/宽度:200 px;   身高:150 px;   背景:# B9D6FF;   }

第二个问题是IE6特有的,就是子菜单在对应的包含块mouseout后仍不消失的问题.hover伪类相当于moverover与moverout。我们在可以在鼠标悬停给它的子孙元素认定一种样式,mouseout时认定另一种,换言之,显示现在在IE6无法切换(img元素除外)。解决方法用能见度代替显示。

好了,现在我们真正做二级菜单,把有关跨度的CSS全删掉,并在结构层原跨度的位置改为如下代码:

& lt; ul>   & lt; li> https://www.yisu.com/zixun/& lt; a href=" http://www.php.cn/">二级菜单_11   <李>
二级菜单_12   

我们在各游览器看一下,感觉非常乏力.IE6与Opera10的二级菜单项是垂直的,但我们并没有清除浮动啊? firefox3.5与铬与safari4的二级菜单项是水平分布了,但上面好像多出一个菜单项……IE8同学这次反而是表现得最好的。我没有装IE7,所以一向忽略它。

我们重新设置一下样式,如把包含块改设李在元素上,让二级菜单项呈垂直显示。

* {   保证金:0;   填充:0;   }   .menu {   字体大小:12 px;   }   李.menu{/*水平菜单*/浮:左;   list-style:没有;   位置:相对,/*把包含块移动李元素*/}   .menu一个{   显示:块;/*:相对;发现放在一元素中,   在标准游览器中惨不忍睹,   和纯CSS相册3的第一个运行框在chrome中遇到的虫子一样*/高度:32像素;   宽度:100 px;   行高:32像素;   背景:# a9ea00;   颜色:# ff8040;   文字修饰:没有;   text-align:中心;   }   .menu答:{徘徊   背景:# 369;   颜色:# fff;   }/*新增的二级菜单部分*/.menu ul ul {   可见性:隐藏;/*开始时是隐藏的*/位置:绝对的;   左:0 px;   上图:32像素;   }   .menu ul答:ul{徘徊   可见性:可见;   }   李.menu ul ul {   明确:;/*垂直显示*/text-align:左;   }

发现二级菜单在firefox与safari与chrome中没有反应,弹不出来(这三个浏览器的CSS部分互相抄袭严重啊).opera10表现得最好,IE8其次。不过,标准浏览器的所有元素都支持hover伪类,不像IE6,非带href的一元素不可。我们改写部分CSS代码:

CSS多级菜单的实现方法