介面組件--導覽功能表

來源:互聯網
上載者:User

標籤:

首先把整個導覽功能表放在一個DIV裡,好定位它在頁面的位置(也方便管理li的長度)。li用來設定各功能表項目之間的距離,將a的display屬性設定為block,使整個li都可以點擊,然後設定padding留空白。這是自己看著書上的圖片做的,下拉式功能表因為改成絕對位置使父元素的長度變短,繼承長度後也變短了,使內容換行,給下拉式功能表li添加足夠寬度後,暫時解決了這個問題。

上面寫的這個代碼有很多冗長的地方,比如:

.nav1 ul li:hover ul li ul{display:none;}
.nav1 ul li ul li:hover ul{display:block; position:absolute; left:100%; top:0;width:12em;}

書上的講解如下:

<nav class="multi_drop_menu">    <ul>        <li><a href="#">Power</a></li>        <li><a href="#">Money</a></li>        <li><a href="#">Love</a></li>        <li><a href="#">Fame</a>            <!--二級菜單-->            <ul>            <li><a href="#">Sports Star</a></li>            <li><a href="#">Movie Star</a></li>            <li><a href="#">Rock Star</a>                <!--三級菜單-->                <ul>                <li><a href="#">Bruce Springsteen</a></li>                <li><a href="#">Bono</a></li>                <li><a href="#">Mick Jagger</a></li>                <li><a href="#">Bob Dylan</a></li>                </ul>                <!--三級菜單介紹-->            </li>            <li><a href="#">Web Designer</a></li>            </ul>            <!--二級菜單結束-->        </li>    </ul></nav>

提倡把視覺樣式與功能樣式分開

.multi_drop_menu a{    display:block;  /*讓連結充滿清單項目*/    padding:.2em 1em;    color:#555;    background-color:#eee;    border-width:3px;  /*作為清單項目之間的分隔寬度*/    border-color:transparent;}.multi_drop_menu a:hover{    color:#fff;    background-color:#aaa;}/*添加功能樣式*/.multi_drop_menu ul{float:left;} /*強制ul包圍li*/.multi_drop_menu li{    float:left;    list-style:none;    position:relative; /*為子功能表提供定位上下文*/}.multi_drop_menu li a{    display:block;        border-right-style:solid; /*給每一個連結添加一個右邊框*/        /*背景只出現在內邊距地區後面*/        background-clip:padding-box;        text-decoration:none;}.multi_drop_menu li;last-child a{boder-right-style:none;}
.multi_drop_menu li ul{display:none;}/*臨時隱藏低級菜單*/

為了保證使用者體驗,所有視覺樣式--內邊距、背景、邊框,等等,都要應用給連結a,而不要應用給ul或li,以便熱區(可點擊地區)最大化,讓使用者滑鼠經過時不會產生滑鼠狀態切換。為達到這個目的,同時還要從視覺上分隔連結,這裡使用了background-clip:padding-box聲明,這樣就可以阻止連結的背景延伸到邊框後面。然後,讓邊框透明,在連結之間產生間隙,讓後面的頁面能夠透過邊框被看到。如此一來,不用外邊距也能分隔連結,而且滑鼠從一個功能表項目移動到另一個功能表項目時,也不會出現游標切換,功能表項目之間從視覺上是分開,但實際上卻是緊緊挨在一塊的。

.multi_drop_menu li ul{width:9em;}.multi_drop_menu li li a{    border-right-style:none;/*去掉繼承的右邊框*/    border-top-style:solid;/*添加上邊框*/}.multi_drop_menu li ul{    display:none;    position:absolute;    left:0;    top:100%;}.multi_drop_menu li li{    float:none;  /*停止浮動,恢複堆疊,由於ul寬度為9em,這裡不設定,它們也是堆疊的*/}.multi_drop_menu li li ul{display:none;}

頂邊會與父元素底邊恰好對齊。它與父元素之間的間隙,實際上是下拉式功能表中第一個連結的邊框

.multi_drop_menu li:hover>ul{display:block;}.multi_drop_menu li li ul{    position:absolute;    left:100%;    top:0;}.multi_drop_menu li:hover>a{    color:#fff;    background-color:#aaa;}

上面第二行的意思是:當滑鼠移動到清單項目上時,就顯示它的子列表。這裡的:hover觸發器是設定在li元素而非連結自身上的。這樣做是因為我們想要顯示li的子項目ul,而它不是想連結的子項目。此外,為了只顯示其子項目,懸停清單項目與子列表之間還有一個字選擇符>,如果沒有這個子選擇符,當頂級功能表項目處於懸停狀態時,會同時顯示二級和三級菜單

最後一行的效果:

:hover事件會沿著元素的結構層次“向上冒泡”。所以,把:hover設定在li元素,就相當於也把它設定給了所有祖先li元素。然後,只要再給其子項目(連結)設定樣式即可。這個改進能夠極大地提高菜單的易用性。

 

代碼重用

<nav class="multi_drop_menu vertical">.multi_drop_menu.vertical{width:8em;}.multi_drop_menu.vertical li a{    border-right-style:none;    border-top-style:solid;  }.multi_drop_menu.vertical li li a{border-left-style:solid;}.multi_drop_menu.vertical ul,.multi_drop_menu.vertical li{    float:none;}.multi_drop_menu.vertical li ul{    left:100%;   top:0;}

為側欄設定垂直菜單

只在導航容器有vertical類的情況下才起作用

這裡為nav容器設定了寬度。如果不設定導航容器寬度,那麼nav及其包含的頂級功能表項目都會儘可能延伸。最後,我們把二級菜單與頂級菜單的位置關係,設定成了前面三級菜單和二級菜單之間的關係,即讓子功能表頂邊與父功能表項目頂邊對齊。還去掉了頂級功能表項目的右邊框,代之以上邊框

介面組件--導覽功能表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.