Home > xhtml+css > 全兼容的纯CSS级联菜单制作要点浅析

全兼容的纯CSS级联菜单制作要点浅析

5月 20th, 2009

[参与测试的浏览器:IE6 / IE7 / IE8 / FF3 / OP9.6 / SF3 / Chrome2 ]
[操作系统:Windows]

这次给云南移动网上营业厅做的级联菜单使用了纯CSS的方式,霍霍,能用CSS做的,就用CSS完成吧。^-^

早已有前辈完成过这样的实例了,我以为我能顺利完成,但没想到处处碰壁,故记录一点心得如下,供大家参阅。

废话不多说,咚咚咚,开始制作啦!!!

除了IE6这个坚强的孩子,其他浏览器攻克还是比较容易的。

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

该实例完成大概就两个要点:

1. 忌浮忌躁,一步步来,先把最低级的display:none;掉。

2. “:hover伪类”的使用,默认状态“display:none;”,“:hover”时则“display:block;”则能很容易完成。

而IE6下折腾就比较复杂了,经过头破血流的教训之后,总结出关键四点:

1. 原理:IE6仅<a>标签支持:hover伪类,但如果a标签里面再嵌入a标签,里面的a标签将不会生效,所以必须在之间套加一层<table>

  1. <!–[if IE 6]><a href="#nogo"><table><tr><td><![endif]–>
  2. 内容部分可以含有<a>标签
  3. <!–[if IE 6]></td></tr></table></a><![endif]–>

2. 关键样式名:这个用于:hover效果的a标签的命名,如果使用与<li>一致的样式名(在非IE6中是li:hover产生的效果),将不用再另写样式代码,不仅节省了代码开销,而且可维性更好;

  1. <li class="li">
  2. <!–[if IE 6]><a class="li" href="#nogo"><table><tr><td><![endif]–>
  3. 内容部分可以含有<a>标签
  4. <!–[if IE 6]></td></tr></table></a><![endif]–>
  5. </li>

3. visibility的使用:采用display的话将出现onmouseout时上一次显示的optionGroup仍然不消失的情况

  1. .c_subNav .li:hover ul { visibility:visible;}

4.table的设置:[含泪ing]table一定要记得width:100%;啊,一定要记得啊,一定要记得啊,一定要记得啊……

最后完成效果:

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

Chomo xhtml+css , , ,

  1. 5月 20th, 2009 at 15:25 | #1

    学习css,好想跟你学

  2. 5月 20th, 2009 at 21:32 | #2

    所谓的折腾。。

    给点更折腾的建议,怎样让图片不出来时显示三角呢?

  3. vk_heung
    5月 21st, 2009 at 11:10 | #3

    原来要这样啊,之前一直没搞出来后来加JS解决了
    “采用display的话将出现onmouseout时上一次显示的optionGroup仍然不消失的情况”

  4. 5月 21st, 2009 at 23:01 | #4

    @aoao @_@ 你真是好人。。

  5. 5月 23rd, 2009 at 12:29 | #5

    table是个很纠结的标签… 因为不和block一样自己撑开,如果用width:100%父元素有padding的话….
    求解…如何让table和block一样撑开捏…?

  6. 5月 23rd, 2009 at 20:57 | #6

    @bigCat 恩啊,太纠结了…如果可以直接display:block;多好 - -! 还有那一堆的表单元素,可是MS大爷不让。
    不过貌似width:100%;和父元素的padding不抵触呢。

  7. 5月 27th, 2009 at 00:12 | #7

    @chomo
    大半夜跑回来回复…
    #sugerDaddy {width:100px;padding:20px;}
    #littleGirl {width:100%;}
    [div id=sugerDaddy][div id=littleGirl][/div][/div]
    偶意思是这样子…父容器有宽度写死加padding,那里面的百分百不就是父容器的宽度么….那不就撑开了….如果没记错的话…半夜了..zzz先

  8. eastlift
    9月 2nd, 2009 at 22:34 | #8

    很好。
    有个疑问,如果要将这个菜单做为后台的导航放在带有框架的布局的Left中,该如何实现?
    因为LeftFrame 我们定义了
    cols=”144″

    这样展开后的菜单就无法显示了。

  9. 9月 5th, 2009 at 15:32 | #9

    这个得用到div仿框架配合实现了。

  10. 9月 29th, 2009 at 21:06 | #10

    版主 学习啦

  11. fx
    11月 24th, 2009 at 17:22 | #11

    @chomo
    我在IE7下面测试:z-index:2;后面必须添加:background:transparent;才能解决这个问题。

  12. 12月 5th, 2009 at 08:52 | #12

    不好意思,昨晚用了你的这个级联菜单,刚开始觉得已经很好了!不过用下来会发现一个问题,算是比较难发现的问题,就是在第一级菜单鼠标上下移动时,有时候会触发二级菜单的hover事件,发生几率和菜单的复杂度有关,菜单越长级联越多越容易出现这种情况!

  13. 12月 5th, 2009 at 17:34 | #13

    还有就是用visibility属性的话,如果菜单太长,即使状态是hidden,惨淡也会占据自己原有的位置,使得原本并没有那么长的页面变得很长!

  1. 9月 10th, 2009 at 09:58 | #1