本来在chrome上用js写的好好的三级显隐菜单,放到ie6上一测试竟然奇葩般的会瞎闪。问题原因至今没参透,可能是我每次响应事件的处理代码过长??总之我是对ie6幻灭了,去网上搜一搜能支持ie6的下拉菜单的实现,发现了这个网站的实现:

http://www.jb51.net/article/12964.htm(请猛点我)

实现得相当漂亮,没有用一行js代码,其主要思想是将二级菜单嵌入到上一级菜单项的dom对象中,并使用上一级菜单项的hover伪类来控制二级菜单的visibility属性。唯一美中不足的是这个实现只是一个二级菜单,我需要做一个三级的。试了一下与原实现类似的写法:

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

但这样会有歧义,它区分不出是哪一级菜单项被悬停时应该显示其下面的哪一级菜单。于是冥思苦想怎么解决菜单定位歧义的问题,解决方案是,对每一级菜单都指定不同的class名称,这样可以直接定位到某一级菜单,不会产生歧义。html代码大体如下:

  1. <ul class="l1-nav"> <!-- 第一级菜单 -->
  2. <li class="l1-nav"> <!-- 第一级菜单项 -->
  3. <ul class="l2-nav"> <!-- 第二级菜单 -->
  4. <li class="l2-nav"> <!-- 第二级菜单项 -->
  5. <ul class="l3-nav"> <!-- 第三级菜单 -->
  6. <li class="l3-nav"></li> <!-- 第三级菜单项 -->
  7. </ul>
  8. </li>
  9. </ul>
  10. </li>
    </ul>

而控制显示隐藏的代码如下:

  1. li.l1-nav:hover ul.l2-nav, li.l2-nav:hover ul.l3-nav
    { visibility: visible }

不过对于ie6这个不听话的顽劣之徒来说,如果真的这么简单就太天真了。由于ie6只有a元素支持hover伪类,所以在ie中还要在li里包一个a元素。好在ie6中支持a元素里面包含其他元素,而不像其他浏览器里a元素不能包含其他元素(ie6奇葩之处不能胜数)。这样写出来的代码就有一些绕。而且还有一个针对ie6的hack是必须把每一个li项包含在一个定位为relative的table中,至于为什么由于没有删除一点点测还不得知,据猜测可能跟浮动定位有关。闲话不多说,上代码吧,css还是很简洁的,html就又臭又长还不好理解,谁让咱要考虑兼容性呢:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><!--定义过渡型DOCTYPE-->
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312"><!--定义名字空间-->
  3. <head>
  4.  
  5. <title>网页布局+纯CSS三级鼠标悬停显示/隐藏菜单</title><!--标题栏-->
  6. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><!--定义语言编码-->
  7. <meta http-equiv="Content-Language" content="gb2312" /><!--针对老版浏览器定义语言编码-->
  8. <meta content="all" name="robots" /><!--允许搜索机器人-->
  9. <meta name="author" content="" /><!--作者信息-->
  10. <meta name="Copyright" content=",共同探讨,允许转载" /><!--版权信息-->
  11. <meta name="description" content="下拉菜单,CSS,布局" /><!--简介-->
  12. <meta content="下拉,菜单,CSS,布局" name="keywords" /><!--关键词-->
  13.  
  14. <style type=text/css>
  15. * {
  16. margin: 0;
  17. padding: 0;
  18. border: 0;
  19. }
  20.  
  21. html {
  22. background: #bfc4c7; /*背景颜色*/
  23. }
  24.  
  25. body {
  26. font: 12px/150% '宋体';
  27. margin: 0 auto;
  28. width: 770px;
  29. text-align: center;
  30. }
  31.  
  32. /*menu部分*/
  33.  
  34. #menu {
  35. margin: 0 auto;
  36.  
  37. width: 770px !important;
  38. clear: both
  39. }
  40.  
  41. #menu ul {
  42. list-style: none;
  43. }
  44.  
  45. #menu table {
  46. position: absolute;
  47. left: 0;
  48. top: 0;
  49. }
  50.  
  51. li.l1-nav {
  52. float: left;
  53. position: relative;
  54. left: 0px;
  55. top: 0px;
  56. }
  57.  
  58. a.l1-nav {
  59. display: block;
  60. text-align: center;
  61. text-decoration: none;
  62. width: 77px;
  63. height: 30px;
  64. line-height: 30px;
  65. color: #000;
  66. background: #c9c9a7;
  67. }
  68.  
  69. li.l1-nav:hover a.l1-nav, a.l1-nav:hover {
  70. color: #fff;
  71. background: #b3ab79;
  72. }
  73.  
  74. ul.l2-nav {
  75. visibility: hidden;
  76. position: absolute; /* 第二级菜单相对于第一级菜单绝对定位 */
  77. left: 0px;
  78. top: 30px;
  79. }
  80.  
  81. li.l2-nav {
  82. float: left;
  83. position: relative; /* 这里把第二级菜单项设成相对定位,以使得它包含的三级菜单相对它自己定位 */
  84. left: 0px;
  85. top: 0px;
  86. }
  87.  
  88. a.l2-nav {
  89. display: block; /* 把a设成块级显示 */
  90. text-align: center;
  91. text-decoration: none;
  92. width: 77px;
  93. height: 30px;
  94. line-height: 30px;
  95. color: #000;
  96. background: #faeec7;
  97. }
  98.  
  99. li.l2-nav:hover a.l2-nav, a.l2-nav:hover {
  100. color: #fff;
  101. background: #dfc184;
  102. }
  103.  
  104. ul.l3-nav {
  105. visibility: hidden;
  106. position: absolute;
  107. left: 77px;
  108. top: 0px;
  109. }
  110.  
  111. /* 这是控制菜单显示与隐藏的重点 */
  112. a.l1-nav:hover ul.l2-nav, li.l1-nav:hover ul.l2-nav, a.l2-nav:hover ul.l3-nav, li.l2-nav:hover ul.l3-nav {
  113. visibility: visible;
  114. }
  115.  
  116. a.l3-nav {
  117. display: block;
  118. width: 77px;
  119. height: 30px;
  120. line-height: 30px;
  121. background: red;
  122. color: #000;
  123. text-decoration: none;
  124. }
  125.  
  126. a.l3-nav:hover {
  127. background: blue;
  128. color: #000;
  129. }
  130.  
  131. </style>
  132.  
  133. </head>
  134.  
  135. <body>
  136.  
  137. <div id="menu">
  138. <ul class="l1-nav">
  139.  
  140. <li class="l1-nav">
  141. <!-- IE6里面a元素可以包含其他元素,且只有a能够支持hover伪类,但ul还要放在一个table中。而chrome中,a不可以包含其他元素,但li支持hover伪类。所以这一段有些绕。 -->
  142. <a class="l1-nav" href="">第一分类
  143. <!--[if IE 7]><!-->
  144. </a>
  145. <!--<![endif]-->
  146. <!--[if lte IE 6]>
  147. <table>
  148. <tr>
  149. <td>
  150. <![endif]-->
  151. <ul class="l2-nav">
  152.  
  153. <li class="l2-nav">
  154. <a class="l2-nav" href="">XHTML
  155. <!--[if IE 7]><!-->
  156. </a>
  157. <!--<![endif]-->
  158. <!--[if lte IE 6]>
  159. <table>
  160. <tr>
  161. <td>
  162. <![endif]-->
  163. <ul class="l3-nav">
  164. <li><a class="l3-nav" href="">XHTML1</a></li>
  165. <li><a class="l3-nav" href="">XHTML2</a></li>
  166. <li><a class="l3-nav" href="">XHTML3</a></li>
  167. </ul>
  168. <!--[if lte IE 6]>
  169. </td>
  170. </tr>
  171. </table>
  172. </a>
  173. <![endif]-->
  174. </li>
  175.  
  176. <li class="l2-nav">
  177. <a class="l2-nav" href="">CSS
  178. <!--[if IE 7]><!-->
  179. </a>
  180. <!--<![endif]-->
  181. <!--[if lte IE 6]>
  182. <table>
  183. <tr>
  184. <td>
  185. <![endif]-->
  186. <ul class="l3-nav">
  187. <li><a class="l3-nav" href="">CSS1</a></li>
  188. <li><a class="l3-nav" href="">CSS2</a></li>
  189. <li><a class="l3-nav" href="">CSS3</a></li>
  190. </ul>
  191. <!--[if lte IE 6]>
  192. </td>
  193. </tr>
  194. </table>
  195. </a>
  196. <![endif]-->
  197. </li>
  198.  
  199. <li class="l2-nav">
  200. <a class="l2-nav" href="">PHP
  201. <!--[if IE 7]><!-->
  202. </a>
  203. <!--<![endif]-->
  204. <!--[if lte IE 6]>
  205. <table>
  206. <tr>
  207. <td>
  208. <![endif]-->
  209. <ul class="l3-nav">
  210. <li><a class="l3-nav" href="">PHP1</a></li>
  211. <li><a class="l3-nav" href="">PHP2</a></li>
  212. <li><a class="l3-nav" href="">PHP3</a></li>
  213. </ul>
  214. <!--[if lte IE 6]>
  215. </td>
  216. </tr>
  217. </table>
  218. </a>
  219. <![endif]-->
  220. </li>
  221.  
  222. <li class="l2-nav">
  223. <a class="l2-nav" href="">MySQL
  224. <!--[if IE 7]><!-->
  225. </a>
  226. <!--<![endif]-->
  227. <!--[if lte IE 6]>
  228. <table>
  229. <tr>
  230. <td>
  231. <![endif]-->
  232. <ul class="l3-nav">
  233. <li><a class="l3-nav" href="">MySQL1</a></li>
  234. <li><a class="l3-nav" href="">MySQL2</a></li>
  235. <li><a class="l3-nav" href="">MySQL3</a></li>
  236. </ul>
  237. <!--[if lte IE 6]>
  238. </td>
  239. </tr>
  240. </table>
  241. </a>
  242. <![endif]-->
  243. </li>
  244.  
  245. <li class="l2-nav">
  246. <a class="l2-nav" href="">Fireworks
  247. <!--[if IE 7]><!-->
  248. </a>
  249. <!--<![endif]-->
  250. <!--[if lte IE 6]>
  251. <table>
  252. <tr>
  253. <td>
  254. <![endif]-->
  255. <ul class="l3-nav">
  256. <li><a class="l3-nav" href="">Fireworks1</a></li>
  257. <li><a class="l3-nav" href="">Fireworks2</a></li>
  258. <li><a class="l3-nav" href="">Fireworks3</a></li>
  259. </ul>
  260. <!--[if lte IE 6]>
  261. </td>
  262. </tr>
  263. </table>
  264. </a>
  265. <![endif]-->
  266. </li>
  267.  
  268. <li class="l2-nav">
  269. <a class="l2-nav" href="">Photoshop
  270. <!--[if IE 7]><!-->
  271. </a>
  272. <!--<![endif]-->
  273. <!--[if lte IE 6]>
  274. <table>
  275. <tr>
  276. <td>
  277. <![endif]-->
  278. <ul class="l3-nav">
  279. <li><a class="l3-nav" href="">Photoshop1</a></li>
  280. <li><a class="l3-nav" href="">Photoshop2</a></li>
  281. <li><a class="l3-nav" href="">Photoshop3</a></li>
  282. </ul>
  283. <!--[if lte IE 6]>
  284. </td>
  285. </tr>
  286. </table>
  287. </a>
  288. <![endif]-->
  289. </li>
  290.  
  291. <li class="l2-nav">
  292. <a class="l2-nav" href="">Flash
  293. <!--[if IE 7]><!-->
  294. </a>
  295. <!--<![endif]-->
  296. <!--[if lte IE 6]>
  297. <table>
  298. <tr>
  299. <td>
  300. <![endif]-->
  301. <ul class="l3-nav">
  302. <li><a class="l3-nav" href="">Flash1</a></li>
  303. <li><a class="l3-nav" href="">Flash2</a></li>
  304. <li><a class="l3-nav" href="">Flash3</a></li>
  305. </ul>
  306. <!--[if lte IE 6]>
  307. </td>
  308. </tr>
  309. </table>
  310. </a>
  311. <![endif]-->
  312. </li>
  313.  
  314. </ul>
  315. <!--[if lte IE 6]>
  316. </td>
  317. </tr>
  318. </table>
  319. </a>
  320. <![endif]-->
  321. </li>
  322.  
  323. <li class="l1-nav">
  324. <a class="l1-nav" href="">第一分类
  325. <!--[if IE 7]><!-->
  326. </a>
  327. <!--<![endif]-->
  328. <!--[if lte IE 6]>
  329. <table>
  330. <tr>
  331. <td>
  332. <![endif]-->
  333. <ul class="l2-nav">
  334.  
  335. <li class="l2-nav">
  336. <a class="l2-nav" href="">XHTML
  337. <!--[if IE 7]><!-->
  338. </a>
  339. <!--<![endif]-->
  340. <!--[if lte IE 6]>
  341. <table>
  342. <tr>
  343. <td>
  344. <![endif]-->
  345. <ul class="l3-nav">
  346. <li><a class="l3-nav" href="">XHTML1</a></li>
  347. <li><a class="l3-nav" href="">XHTML2</a></li>
  348. <li><a class="l3-nav" href="">XHTML3</a></li>
  349. </ul>
  350. <!--[if lte IE 6]>
  351. </td>
  352. </tr>
  353. </table>
  354. </a>
  355. <![endif]-->
  356. </li>
  357.  
  358. <li class="l2-nav">
  359. <a class="l2-nav" href="">CSS
  360. <!--[if IE 7]><!-->
  361. </a>
  362. <!--<![endif]-->
  363. <!--[if lte IE 6]>
  364. <table>
  365. <tr>
  366. <td>
  367. <![endif]-->
  368. <ul class="l3-nav">
  369. <li><a class="l3-nav" href="">CSS1</a></li>
  370. <li><a class="l3-nav" href="">CSS2</a></li>
  371. <li><a class="l3-nav" href="">CSS3</a></li>
  372. </ul>
  373. <!--[if lte IE 6]>
  374. </td>
  375. </tr>
  376. </table>
  377. </a>
  378. <![endif]-->
  379. </li>
  380.  
  381. <li class="l2-nav">
  382. <a class="l2-nav" href="">PHP
  383. <!--[if IE 7]><!-->
  384. </a>
  385. <!--<![endif]-->
  386. <!--[if lte IE 6]>
  387. <table>
  388. <tr>
  389. <td>
  390. <![endif]-->
  391. <ul class="l3-nav">
  392. <li><a class="l3-nav" href="">PHP1</a></li>
  393. <li><a class="l3-nav" href="">PHP2</a></li>
  394. <li><a class="l3-nav" href="">PHP3</a></li>
  395. </ul>
  396. <!--[if lte IE 6]>
  397. </td>
  398. </tr>
  399. </table>
  400. </a>
  401. <![endif]-->
  402. </li>
  403.  
  404. <li class="l2-nav">
  405. <a class="l2-nav" href="">MySQL
  406. <!--[if IE 7]><!-->
  407. </a>
  408. <!--<![endif]-->
  409. <!--[if lte IE 6]>
  410. <table>
  411. <tr>
  412. <td>
  413. <![endif]-->
  414. <ul class="l3-nav">
  415. <li><a class="l3-nav" href="">MySQL1</a></li>
  416. <li><a class="l3-nav" href="">MySQL2</a></li>
  417. <li><a class="l3-nav" href="">MySQL3</a></li>
  418. </ul>
  419. <!--[if lte IE 6]>
  420. </td>
  421. </tr>
  422. </table>
  423. </a>
  424. <![endif]-->
  425. </li>
  426.  
  427. <li class="l2-nav">
  428. <a class="l2-nav" href="">Fireworks
  429. <!--[if IE 7]><!-->
  430. </a>
  431. <!--<![endif]-->
  432. <!--[if lte IE 6]>
  433. <table>
  434. <tr>
  435. <td>
  436. <![endif]-->
  437. <ul class="l3-nav">
  438. <li><a class="l3-nav" href="">Fireworks1</a></li>
  439. <li><a class="l3-nav" href="">Fireworks2</a></li>
  440. <li><a class="l3-nav" href="">Fireworks3</a></li>
  441. </ul>
  442. <!--[if lte IE 6]>
  443. </td>
  444. </tr>
  445. </table>
  446. </a>
  447. <![endif]-->
  448. </li>
  449.  
  450. <li class="l2-nav">
  451. <a class="l2-nav" href="">Photoshop
  452. <!--[if IE 7]><!-->
  453. </a>
  454. <!--<![endif]-->
  455. <!--[if lte IE 6]>
  456. <table>
  457. <tr>
  458. <td>
  459. <![endif]-->
  460. <ul class="l3-nav">
  461. <li><a class="l3-nav" href="">Photoshop1</a></li>
  462. <li><a class="l3-nav" href="">Photoshop2</a></li>
  463. <li><a class="l3-nav" href="">Photoshop3</a></li>
  464. </ul>
  465. <!--[if lte IE 6]>
  466. </td>
  467. </tr>
  468. </table>
  469. </a>
  470. <![endif]-->
  471. </li>
  472.  
  473. <li class="l2-nav">
  474. <a class="l2-nav" href="">Flash
  475. <!--[if IE 7]><!-->
  476. </a>
  477. <!--<![endif]-->
  478. <!--[if lte IE 6]>
  479. <table>
  480. <tr>
  481. <td>
  482. <![endif]-->
  483. <ul class="l3-nav">
  484. <li><a class="l3-nav" href="">Flash1</a></li>
  485. <li><a class="l3-nav" href="">Flash2</a></li>
  486. <li><a class="l3-nav" href="">Flash3</a></li>
  487. </ul>
  488. <!--[if lte IE 6]>
  489. </td>
  490. </tr>
  491. </table>
  492. </a>
  493. <![endif]-->
  494. </li>
  495.  
  496. </ul>
  497. <!--[if lte IE 6]>
  498. </td>
  499. </tr>
  500. </table>
  501. </a>
  502. <![endif]-->
  503. </li>
  504.  
  505. </ul>
  506. </div>
  507.  
  508. </body><!--网页主体结束-->
  509. </html>

实现效果如下:

经虚拟机xp下亲测,非常流畅,一点不闪。有任何不甚严谨之处还敬请指教!

可以兼容ie6的纯CSS三级鼠标悬停显示/隐藏菜单实现的更多相关文章

  1. Selenium操作示例——鼠标悬停显示二级菜单,再点击二级菜单或下拉列表

    这两天在玩python中selenium,遇到一个问题,就是鼠标移动到页面中某按钮或菜单,自动弹出二级菜单或下拉菜单,再自动点击其中的二级菜单或下拉列表. 首先,手工操作:打开母校的主页 http:/ ...

  2. [小技巧]兼容IE6的纯CSS背景半透明文字不透明

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Html中鼠标悬停显示二级菜单的两种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 兄弟连教育分享:用CSS实现鼠标悬停提示的方法

    兄弟连教育分享:用CSS实现鼠标悬停提示的方法 本文,兄弟连HTML5培训,分享了纯CSS实现鼠标悬停提示的方法.给大家供大家参考.具体分析如下: 这是一款比较漂亮的鼠标悬停提示效果,用纯CSS代码实 ...

  5. 纯css实现鼠标感应弹出二级菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 不可思议的纯 CSS 实现鼠标跟随效果

    直接进入正题,鼠标跟随,顾名思义,就是元素会跟随着鼠标的移动而作出相应的运动.大概类似于这样: 通常而言,CSS 负责表现,JavaScript 负责行为.而鼠标跟随这种效果属于行为,要实现通常都需要 ...

  7. 纯CSS实现二级导航下拉菜单--css的简单应用

    思想:使用css的display属性控制二级下拉菜单的显示与否.当鼠标移动到一级导航菜单的li标签时,显示二级导航菜单的ul标签.由于实现起来比较简单,所以在这里直接给出了参考代码. 1.纯CSS二级 ...

  8. 鼠标悬停显示CSS3动画边框

    效果体验:http://keleyi.com/keleyi/phtml/css3/14.htm 以下是代码: <!DOCTYPE html> <html xmlns="ht ...

  9. EasyUI Datagrid 鼠标悬停显示单元格内容 复制代码

    EasyUI Datagrid 鼠标悬停显示单元格内容 ,halign:, align: 0 « 上一篇:LINQ to Entities 中的查询» 下一篇:去掉字符串中的非数字字符 posted ...

随机推荐

  1. python中利用类创建的对象来保存信息

    在类创建的对象中,一般都是以字典的方式来保存信息 class Student: def __init__(self, name, age, score): self.name = name self. ...

  2. 全球常用NTP服务器地址及IP列表ntpdate

    pool.ntp.org是一组授时服务器虚拟集群,在全球有3000多台服务器,只需要这样写就行了,具体哪台服务器提供服务无需关心. time.windows.com   微软 asia.pool.nt ...

  3. cordova学习-基础篇

    Cordova 学习笔记(一):快速开始 1.安装cordova Cordova安装可以通过node.js从npm上获取.npm install -g cordova 通过这个命令可以安装cordov ...

  4. 当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?

    这篇文章不会说 MVVM 是什么,因为讲这个的文章太多了:也不会说 MVVM 的好处,因为这样的文章也是一搜一大把.我只是想说说我们究竟应该如何理解 M-V-VM,当我们真正开始写代码时,应该在里面的 ...

  5. 《DSP using MATLAB》示例Example 8.14

    %% ------------------------------------------------------------------------ %% Output Info about thi ...

  6. simulink使用system test测试 (matlab2014a)

    simulink中有个工具system test,tools->systemtest->launch system test 打开.打开之后界面是这样的 选择insert->test ...

  7. liunx系统环境下,爆出该错误"org.eclipse.wst.validation" has been removed解决办法

    导出maven工程遇到的问题,"org.eclipse.wst.validation" has been removed,还以为是工程本身的问题,后来发现是eclipse的问题. ...

  8. [语法]C语言中二维数组做输入参数

    C语言中二维数组做输入参数时, 可以同时指定各维长度, 可以只指定第二维的长度, 不可以只指定第一维的长度, 不可以各维长度都不指定. 一句话总结:要指定至少指定第二维,都不指定是不行的. 具体栗子如 ...

  9. cookie控制登陆时间

    使用cookie实现永久登陆 1,在cookie里面保存账号密码然后和数据库核对(由于我没有使用数据库,就不用了 2,在cookie里面保存时间戳和账号使用加密解密(我也没有使用时间戳 思路,requ ...

  10. Linux 内核源码目录结构

    arch:包含和硬件体系结构相关的代码,每种平台占用一个相应的目录. block:块设备驱动程序 I/O 调度. crypto:常用加密和散列算法(如AES.SHA等),还有一些压缩和CRC校验算法. ...