http://bbs.itcast.cn/thread-17158-1-1.html
一、什么是“滑動門”導航菜單
1.1 “滑動門”處處可見
現在流行的網站設計中,水平導航菜單占據了大壁江山。的確,無論是門戶網站還是企事業單位網站,都大量的采用水平的導航菜單設計。而水平導航菜單中,又有絕大多數網站采用“滑動門”設計。什么是滑動門呢?來看下圖,是筆者任教的學校的官方主頁:

從圖中可見,這是一個藍色背景的導航條,各個欄目的名稱依次排列。瀏覽者當前所在的欄目會有一種“玻璃材質”的3D
凸起的效果。與此相同的,用戶用鼠標滑過的鏈接,也有這樣的效果。
這就是“滑動門”技術,它被廣泛的應用在各種網站的設計中。
1.2 為什么要用滑動門技術
首先需要確定的是,制作滑動門導航菜單效果,不需要使用
JavaScript
,而僅僅需要使用
DIV+CSS
技術即可。這對於很多同學來說,是值得興奮的。
然后很多同學都會問了,邵老師,這個“門”在哪兒呢?它是怎么“滑動”的啊?為什么叫它“滑動門”啊。這個問題非常的好,解答這個問題,需要從滑動門效果的的技術難點談起。
“滑動門”效果的難點在於,每個導航欄目的文字個數不一樣多,有的長,有的短,如下圖所示:



所以這就是一個技術難點,直覺上,我們會認為,不能用“定死”的一個圖片當做鼠標滑過的時候切換的背景圖片。因為我們這是因為文字的個數不一樣多,如果“定死”一個圖片,那不就會出現下圖的問題么?

背景圖片被重復繪制,產生了錯誤
但是如果為每個欄目按照字數多少,都繪制一個不同長度的背景圖片,這也會帶來兩點問題:
1. 將會影響頁面的加載速度;
2. 需求一旦改變,比如將
4
個字的欄目名稱,變成
5
個字的欄目,難以及時適應這種改變。
那有沒有一種辦法,能夠滿足“用一張背景圖片,適應不同字數”的導航條呢?
答案大家已經猜到了,這就是滑動門技術。
1.3 滑動門技術的核心原理
“滑動門”設計的非常巧妙,采用兩個相同的背景圖像,一左一右,一個負責提供左邊框,一個負責提供右邊框。如下圖所示,較深顏色區域表示二者重疊的部分,當需要容納較多文字時,重疊就少一些,而需要較少文字時,重疊就多一些。兩個圖像可以滑動,重疊的部分的寬度會根據里面的文字的字數而自動調整,就像兩扇推拉門一樣,因此這種技術就叫做“滑動門”。

二、制作“滑動門”效果
2.1 圖片准備
制作滑動門效果,需要准備好兩張圖片,一個是用來做整個菜單的背景色平鋪使用的;一個是是當鼠標經過某個菜單項的時候顯示出來的。
2.2 書寫DIV+CSS設置菜單的整體效果
先搭
HTML
框架,這里的代碼很簡單,直接給大家貼出:
|
每一個鏈接都是一個列表項目的
<li>
標簽,並且設置了它們的左浮動,來讓各列表項橫向排列而不是默認的豎直排列。並且值得注意的一點是,要將
a
元素設置成為塊級元素,這樣整個矩形的范圍內都會響應鼠標事件。我們還要設置行高
line-height
屬性,設置行高可以是文字豎直方向居中排列。
利用
a:hover
偽類選擇器來為它添加鼠標懸停之后的效果。
2.3 制作另一個“鈎子”
我們在每個
<li>
標簽中設置一個文字加粗標記
<b>
。基本思想就是把
<b>
標記作為“鈎子”來設置
CSS
樣式,這個圖片采用的就是
hover.png
文件,不過不同的在於,這個圖片的背景圖片是從右向左展開,這樣就可以出現右邊的邊框了。具體代碼如下:
|
這樣,我們非常巧妙的就為滑動門設置好了第二個門。在瀏覽器中瀏覽,發現效果良好。
至此,效果全部完成,完整代碼如下:
|
同學們可以發現,真正的難點在於原理,而不是代碼的實現。這就給我們提了個醒,多去總結有經驗的前端開發工程師解決問題的辦法,總結的多了,你自然而然就能舉一反三了。
我非常願意回答同學們的提問,邵老師的郵箱是
shaosh@itcast.cn
。源代碼在本帖的附件。