1. 程式人生 > >用CSS3設計響應式導航選單

用CSS3設計響應式導航選單

 HTML程式碼

   下面是導航的HTML程式碼。<nav>標籤用於建立伸展條,包含絕對定位的css屬性。我會在稍後解釋這一點,current類表示當前啟用的菜單鏈接。


[html]  view plain  copy
  1. <nav class="nav">  
  2.     <ul>  
  3.         <
    li class="current"><a href="#">Portfolio</a></li>  
  4.         <li><a href="#">Illustration</a></li>  
  5.         <li><a href="#">
    Web Design</a></li>  
  6.         <li><a href="#">Print Media</a></li>  
  7.         <li><a href="#">Graphic Design</a></li>
      
  8.     </ul>  
  9. </nav>  

   CSS

         導航的CSS樣式(桌面檢視)非常簡單,所以我不打算介紹細節。請注意我為導航的<li>元素指定了display:inline-block來取代float:left。這樣我們可以通過為<ul>元素設定text-align屬性來控制選單按鈕居左、居中或者居右對齊。

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

  居中與居右對齊

         像上面所提到的一樣,你可以使用text-align屬性更改按鈕的對其方式。

[html]  view plain  copy
  1. /* right nav */  
  2. .nav.right ul {  
  3.     text-align: right;  
  4. }  
  5.    
  6. /* center nav */  
  7. .nav.center ul {  
  8.     text-align: center;  
  9. }  

 IE支援

         IE8或更早的版本不支援HTML5的<nav>標籤和媒介查詢(MediaQuery)。我們需要引用css3-mediaqueries.js(或者respond.js)和html5shim.js來提供支援。如果你不打算使用html5shim.js,可以把<nav>標籤用<div>代替。

[html]  view plain  copy
  1. <!--[if lt IE 9]>  
  2.     <script src="http://css3-mediaqueries-js.googlecode.com/files/css3-mediaqueries.js"></script>  
  3.     <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>  

  4. <![endif]-->  

  響應式設計

         現在是最有意思的部分-使用媒介查詢建立響應式選單。如果你對響應式設計不瞭解,可以看看我之前關於響應式設計媒介查詢的文章。

         在600畫素的節點上,我將導航元素設定為相對定位,所以我能把頂部的<ul>選單列表樣式替換為絕對定位。通過設定display:none我隱藏所有的<li>元素,但是保留了當前啟用的<li>項。然後當滑鼠hover在導航欄上時,我將所有的<li>元素設定為display:block(這會產生伸展列表)。我添加了一個勾選圖示在當前欄目上來展示啟用狀態。對於居中和居右對齊的選單,使用position的left和right屬性來定位<ul>列表。可以根據演示來檢視最終結果。

[html]  view plain  copy
  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/icon-menu.png) no-repeat 10px11px;  
  14.        border-radius: 5px;  
  15.        box-shadow: 0 1px 2px rgba(0,0,0,.3);  
  16.     }  
  17.     .nav li {  
  18.        display: none; /* hide all <li> items */  
  19.        margin: 0;  
  20.     }  
  21.     .nav .current {  
  22.        display: block; /* show only current <li> item */  
  23.     }  
  24.     .nav a {  
  25.        display: block;  
  26.        padding: 5px 5px 5px 32px;  
  27.        text-align: left;  
  28.     }  
  29.     .nav .current a {  
  30.        background: none;  
  31.        color: #666;  
  32.     }  
  33.    
  34.     /* on nav hover */  
  35.     .nav ul:hover {  
  36.        background-image: none;  
  37.     }  
  38.     .nav ul:hover li {  
  39.        display: block;  
  40.        margin: 0 0 5px;  
  41.     }  
  42.     .nav ul:hover .current {  
  43.        background: url(images/icon-check.png) no-repeat 10px 7px;  
  44.     }  
  45.    
  46.     /* right nav */  
  47.     .nav.right ul {  
  48.        left: auto;  
  49.        right: 0;  
  50.     }  
  51.    
  52.     /* center nav */  
  53.     .nav.center ul {  
  54.        left: 50%;  
  55.        margin-left: -90px;  
  56.     }  
  57.      
  58. }