CSS3响应式导航菜单

jerry HTML 2015年08月20日 收藏

今天我给大家介绍一下如何使用纯CSS来实现的一个响应式导航菜单,我们使用的是HTML5+CSS3技术,当浏览器窗口变小或者使用手机浏览器访问的时候,原本横条菜单会收缩成一个下拉菜单,当鼠标滑向菜单时下拉展示全部菜单。

此方法可以应用到有特别多的链接菜单项目中,特别在移动项目中,它可以将所有菜单转换成一个按钮式的下拉菜单。

HTML

示例中有一个导航菜单的html结构,元素<nav>用来定位导航菜单,.current表示当前活动的导航项。

  1. <ul>
  2. <li class="current"><a href="#">首页</a></li>
  3. <li><a href="#">客户服务</a></li>
  4. <li><a href="#">产品展示</a></li>
  5. <li><a href="#">经典案例</a></li>
  6. <li><a href="#">联系我们</a></li>
  7. </ul>

CSS

首先我们要给菜单nav相对定位,我们在.nav li中使用display: inline-block代替float:left,这样一来我们可以使用text-align 来对nav菜单进行左中右对齐设置。

  1. .nav {
  2. position: relative;
  3. margin: 20px 0;
  4. }
  5. .nav ul {
  6. margin: 0;
  7. padding: 0;
  8. }
  9. .nav li {
  10. margin: 0 5px 10px 0;
  11. padding: 0;
  12. list-style: none;
  13. display: inline-block;
  14. }
  15. .nav a {
  16. padding: 3px 12px;
  17. text-decoration: none;
  18. color: #999;
  19. line-height: 100%;
  20. }
  21. .nav a:hover {
  22. color: #d0d0d0;
  23. }
  24. .nav .current a {
  25. background: #999;
  26. color: #fff;
  27. border-radius: 5px;
  28. }

使用text-align对菜单进行右对齐和居中对齐。

  1. /* right nav */
  2. .nav.right ul {
  3. text-align: right;
  4. }
  5. /* center nav */
  6. .nav.center ul {
  7. text-align: center;
  8. }

接下来我们来做响应式设计,我们使用CSS3的media query来实现。当浏览器窗口宽度小于600px时,我们把<nav>设置成relative相对定位,把<ul>设置成absolute绝对定位,并且display:none隐藏所有li元素,这个时候导航菜单变成一个固定大小的按钮。当鼠标滑向nav元素时,菜单下拉展开,设置所有li的样式display: block,具体请看代码:

  1. @media screen and (max-width: 600px) {
  2. .nav {
  3. position: relative;
  4. min-height: 40px;
  5. }
  6. .nav ul {
  7. width: 180px;
  8. padding: 5px 0;
  9. position: absolute;
  10. top: 0;
  11. left: 0;
  12. border: solid 1px #aaa;
  13. background: #fff url(images/menu.png) no-repeat 10px 11px;
  14. border-radius: 5px;
  15. box-shadow: 0 1px 2px rgba(0,0,0,.3);
  16. }
  17. .nav li {
  18. display: none; /* hide all
  19. items */
  20. margin: 0;
  21. }
  22. .nav .current {
  23. display: block; /* show only current
  24. item */
  25. }
  26. .nav a {
  27. display: block;
  28. padding: 5px 5px 5px 32px;
  29. text-align: left;
  30. }
  31. .nav .current a {
  32. background: none;
  33. color: #666;
  34. }
  35. /* on nav hover */
  36. .nav ul:hover {
  37. background-image: none;
  38. }
  39. .nav ul:hover li {
  40. display: block;
  41. margin: 0 0 5px;
  42. }
  43. .nav ul:hover .current {
  44. background: url(images/check.png) no-repeat 10px 7px;
  45. }
  46. /* right nav */
  47. .nav.right ul {
  48. left: auto;
  49. right: 0;
  50. }
  51. /* center nav */
  52. .nav.center ul {
  53. left: 50%;
  54. margin-left: -90px;
  55. }
  56. }

下载地址