成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CSS學(xué)習(xí)筆記(九) 界面組件之導(dǎo)航菜單

pingink / 1905人閱讀

摘要:為了讓包圍列表項(xiàng),沒(méi)有使用,而是使用了,是因?yàn)榍罢邥?huì)導(dǎo)致后來(lái)添加到下拉菜單中的子菜單無(wú)法顯示它們最終會(huì)顯示在父元素的外面,結(jié)果會(huì)導(dǎo)致溢出而被隱藏。它與父元素之間的間隙,實(shí)際上下拉菜單中第一個(gè)鏈接的邊框。

  

菜單由一組鏈接組成。用 HTML 中的列表元素(ulol)來(lái)分組鏈接不僅符合邏輯,而且即使沒(méi)有額外的 CSS 也能適當(dāng)顯示鏈接的層次。默認(rèn)情況下,由于列表(li)是塊級(jí)元素,因此它們會(huì)上下堆疊。

1.縱向菜單

html 標(biāo)記


css 規(guī)則

*{
    margin: 0;
    padding: 0;
}
nav{
    margin: 50px;width:150px;
}
.list ul{
    border: 1px solid #6a6b6c;
    border-radius: 3px;
    padding:5px 10px 3px;
}
.list li{
    list-style: none;
    /*padding: 3px 10px;*/
}
.list li + li a{       /* 注意這里! */
    border-top: 1px solid #6a6b6c;
}
.list a{
    display: block;    /* 這里! */
    padding:3px 10px;    /* 還有這里! */
    text-decoration: none;
    padding: 3px 10px;
}
.list a:hover{
    color:#069;
}

效果圖

說(shuō)明

相對(duì)于 div,使用 HTML5 新增的 nav 元素作為導(dǎo)航菜單的容器在語(yǔ)義上更恰當(dāng)。

使用 非首位子元素 選擇符。li + li選擇符意思為:任何跟在 li 之后的 li。在上面表示給除第一個(gè) li 之外的所有列表項(xiàng)上方加一條邊框。這種選擇符就稱為 非首位子元素選擇符。它在選擇列表時(shí)非常使用。其它實(shí)現(xiàn)該效果的方法:

/*給所有 li 上方添加一條邊框*/
li {
    border-top:1px solid #f00;
}
/*去掉第一個(gè) li 上方的邊框*/
li:first-child {
    border-top:none;
}

讓列表可點(diǎn)擊。為了不讓只有文本可以點(diǎn)擊(因?yàn)殒溄?a 是行內(nèi)元素,它會(huì)收縮并包住其中的文本。),為了提高用戶體驗(yàn),我們需要 讓列表項(xiàng)所在的整行都能點(diǎn)擊。方法就是首先把內(nèi)邊距從 li 元素轉(zhuǎn)移到鏈接內(nèi)部,然后讓鏈接完全填滿整個(gè)列表項(xiàng)。如下所示:

.list a{
    display:block;
    padding:3px 10px;
}

然后就是把選擇符 li + li 變成li + li a,就可以把上邊框添加到列表后面的列表項(xiàng)所包含的鏈接元素上。

2.橫向菜單

html 標(biāo)記


CSS 規(guī)則

.list ul{
    overflow: hidden;   /*強(qiáng)制 ul 包圍浮動(dòng)的 li 元素*/
}
.list li{
    float: left;    /*讓 li 元素水平排列*/
    list-style: none;
}
.list a{
    display: block;    /*讓鏈接變成塊級(jí)元素*/
    padding: 0 16px;
    text-decoration: none;
    color:#999;
}
.list li + li a{
    border-left:1px solid #aaa;
}
.list a:hover{
    color:#555;
}

效果圖

說(shuō)明

浮動(dòng)可以讓 li 元素從垂直變成水平。

display:block 讓鏈接從收縮變成擴(kuò)張,從而整個(gè) li 元素都變成了可點(diǎn)擊。

選擇符 li + li a 為除第一個(gè)鏈接之外的每個(gè)鏈接左側(cè)都加了一條豎線,作為視覺(jué)分割線。

3.下拉菜單

相對(duì)于前面兩種菜單,這個(gè)實(shí)現(xiàn)起來(lái)有點(diǎn)復(fù)雜。

下面,我們分幾個(gè)步驟來(lái)實(shí)現(xiàn)。

第1步-實(shí)現(xiàn)頂級(jí)菜單

HTMl 標(biāo)記


CSS 規(guī)則:

/* ***************添加視覺(jué)樣式************ */
.multi_drop_menu {
    font: 1em helvetica, arial, sans-serif;
}

.multi_drop_menu a{
    /*讓鏈接充滿列表項(xiàng)*/
    display: block;

    /*文本顏色*/
    color:#555;

    /*背景顏色*/
    background-color:#eee;

    /*鏈接的內(nèi)邊距*/
    padding: .2em 1em;

    /*分隔線寬度*/
    border-width:3px;

    /*可以有顏色,也可以透明*/
    border-color: transparent;
}

/*顯示選擇路徑*/
.multi_drop_menu li:hover > a{ /*注意這里的選擇符,使用了冒泡機(jī)制,后面會(huì)用到*/
    /*懸停時(shí)的文本顏色*/
    color:#fff;

    /*懸停時(shí)的背景顏色*/
    background-color: #aaa;
}

/* ***************添加功能樣式************* */
.multi_drop_menu *{
    margin:0;
    padding:0;
}

/*強(qiáng)制ul包圍li*/
.multi_drop_menu ul{
    float: left;
}
.multi_drop_menu li{
    /*水平排列菜單項(xiàng)*/
    float: left;

    /*去掉默認(rèn)的項(xiàng)目符合*/
    list-style: none;

    /*為子菜單提供定位上下文*/
    position: relative;
}

.multi_drop_menu li a{
    /*讓鏈接填充列表項(xiàng)*/
    display: block;

    /*給每個(gè)鏈接添加一個(gè)右邊框*/
    border-right-style: solid;

    /*背景只出現(xiàn)在內(nèi)邊距區(qū)域后面*/
    background-clip: padding-box;

    /*去掉鏈接的下劃線*/
    text-decoration: none;
}

效果圖

說(shuō)明:

分離菜單的 視覺(jué)樣式功能樣式。有利于代碼維護(hù)。

  

視覺(jué)樣式:控制字體大小、邊框和文本的顏色。
功能樣式:控制布局和行為。

通過(guò) 浮動(dòng)li 由垂直堆疊變成水平排列。

為了讓 ul 包圍列表項(xiàng),沒(méi)有使用 overflow:hide,而是使用了 float:left,是因?yàn)榍罢邥?huì)導(dǎo)致后來(lái)添加到下拉菜單中的子菜單無(wú)法顯示——它們最終會(huì)顯示在父元素 ul 的外面,結(jié)果會(huì)導(dǎo)致 溢出(overflow) 而被 隱藏(hide)。

為了提高用戶體驗(yàn),要讓 熱區(qū)(可點(diǎn)擊區(qū)域) 最大化——所有視覺(jué)樣式(內(nèi)邊距、背景、邊框等)都應(yīng)用給鏈接 a,而不要應(yīng)用給 ulli。

使用 background-clip:padding-box 阻止鏈接的背景延伸到邊框后面。接著, border-color:transparent;讓邊框透明 ,在鏈接之間產(chǎn)生間隙,讓后面的頁(yè)面能夠透過(guò)邊框被看到。這樣一來(lái),不用外邊距也能分隔鏈接,本質(zhì)上是緊挨在一起,視覺(jué)上卻是分開的。

第2步-實(shí)現(xiàn)菜單的下拉部分

CSS 規(guī)則:

/*二級(jí)菜單寬度*/
.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 {
    /*臨時(shí)顯示二級(jí)下拉菜單*/
    display:block;
    /*相對(duì)于父菜單項(xiàng)定位*/
    position:absolute;
    /*左邊與父菜單項(xiàng)對(duì)齊*/
    left:0;
    /*頂邊與父菜單項(xiàng)底邊對(duì)齊*/
    top:100%;
}
.multi_drop_menu li li {
    /*停止浮動(dòng),恢復(fù)堆疊*/
    float:none;
}
.multi_drop_menu li li ul {
    /*繼續(xù)隱藏三級(jí)下拉菜單*/
    display:none;
}

效果圖

說(shuō)明:

通過(guò)將二級(jí)菜單的頂邊位置(top)設(shè)定為 100%(相對(duì)于其相對(duì)定位的父元素 li),其頂邊會(huì)與父元素底邊恰好對(duì)齊。它與父元素之間的間隙,實(shí)際上下拉菜單中第一個(gè)鏈接的邊框。

第3步-讓下拉菜單響應(yīng)鼠標(biāo)事件

CSS 規(guī)則

.multi_drop_menu li ul {
    /*隱藏二級(jí)下拉菜單*/
    display:none;
    /*相對(duì)于父菜單項(xiàng)定位*/
    position:absolute;
    /*左邊與父菜單項(xiàng)對(duì)齊*/
    left:0;
    /*頂邊與父菜單項(xiàng)底邊對(duì)齊*/
    top:100%;
}
.multi_drop_menu li:hover > ul {
    /*父元素懸停時(shí)顯示*/
    display:block;
}
/*隱藏二級(jí)菜單*/
li ul {
    display:none;
}
/*顯示二級(jí)菜單*/
li:hover > ul {
    display:block;
}

說(shuō)明:

先把下一級(jí)的菜單隱藏,再在父元素鼠標(biāo)懸停時(shí)把它顯示出來(lái)。

:hover 觸發(fā)器是設(shè)定在 li 元素而非鏈接身上。因?yàn)槲覀兿胍@示的是 li 的子元素 ul。

懸停列表項(xiàng)與子列表之間還有一個(gè)子選擇符 >,如果沒(méi)有這個(gè)選擇符,當(dāng)頂級(jí)菜單項(xiàng)處于懸停狀態(tài)時(shí),會(huì)同時(shí)顯示二級(jí)和三級(jí)菜單。

第4步-調(diào)整三級(jí)菜單的位置

CSS 規(guī)則

.multi_drop_menu li li ul {
    /*相對(duì)于父菜單定位*/
    position:absolute;
    /*與父菜單右側(cè)對(duì)齊*/
    left:100%;
    /*與父菜單項(xiàng)頂邊對(duì)齊*/
    top:0;
}

效果圖:

說(shuō)明

由于三級(jí)菜單跟二級(jí)菜單一樣垂直堆疊,因而會(huì)被二級(jí)菜單遮住,所以我們需要把三級(jí)菜單放到二級(jí)菜單右側(cè),讓它的頂邊與鼠標(biāo)所在的菜單項(xiàng)的底邊對(duì)齊。

其它-突出顯示選擇路徑

CSS 規(guī)則

.multi_drop_menu li:hover > a {
 /*懸停時(shí)的文本顏色*/
 color:#fff;
 /*懸停時(shí)的背景顏色*/
 background-color:#aaa
}

效果圖

其它-垂直的三級(jí)菜單

HTML 標(biāo)記


CSS 規(guī)則

/*頂級(jí)垂直菜單寬度*/
.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 {
     /*讓頂級(jí)菜單垂直顯示*/
     float:none;
}
.multi_drop_menu.vertical li ul {
     /*子菜單左邊與上一級(jí)菜單右邊對(duì)齊*/
     left:100%;

     /*子菜單頂邊與上一級(jí)菜單項(xiàng)頂邊對(duì)齊*/
     top:0;
}

效果圖:

源碼下載

點(diǎn)擊這里

參考資料

CSS設(shè)計(jì)指南

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/110979.html

相關(guān)文章

  • CSS學(xué)習(xí)筆記(十二) CSS命名規(guī)范

    摘要:引言最近想將這幾個(gè)月做過(guò)的東西組件化,然后首先想到的是編碼規(guī)范化本文只涉及命名規(guī)范,搬來(lái)了造好的輪子。舉例對(duì)齊樣式使用對(duì)齊目標(biāo)的英文名稱。舉例注意事項(xiàng)一律小寫盡量用英文不加中杠和下劃線盡量不縮寫,除非一看就明白的單詞。 引言:最近想將這幾個(gè)月做過(guò)的東西組件化,然后首先想到的是 編碼規(guī)范化!本文只涉及 CSS 命名規(guī)范,搬來(lái)了Alloyteam 造好的輪子??赡懿⒉煌耆m用,在以后...

    stormjun 評(píng)論0 收藏0
  • 從服務(wù)器獲取數(shù)據(jù),引入組件

    摘要:博文原址從服務(wù)器獲取數(shù)據(jù),引入組件接著前面四篇環(huán)境搭建以及使用創(chuàng)建第一個(gè)靜態(tài)頁(yè)面引入計(jì)算屬性動(dòng)態(tài)內(nèi)容模型,保存數(shù)據(jù)到數(shù)據(jù)庫(kù)發(fā)布項(xiàng)目,加入功能清理模板,使用組件重構(gòu)版本之后組件會(huì)越來(lái)越重要。 博文原址:從服務(wù)器獲取數(shù)據(jù),引入組件 接著前面四篇: 環(huán)境搭建以及使用Ember.js創(chuàng)建第一個(gè)靜態(tài)頁(yè)面 引入計(jì)算屬性、action、動(dòng)態(tài)內(nèi)容 模型,保存數(shù)據(jù)到數(shù)據(jù)庫(kù) 發(fā)布項(xiàng)目,加入CRUD功能 ...

    codecook 評(píng)論0 收藏0
  • 開發(fā)利器IntelliJ IDEA學(xué)習(xí)筆記

    摘要:旨在記錄自己的學(xué)習(xí)過(guò)程,方便日后遇到問(wèn)題是及時(shí)查閱復(fù)習(xí),另一方面也希望能幫助像筆者一樣從來(lái)沒(méi)使用過(guò)的人快速熟悉。 這篇文章主要記錄的是本人學(xué)習(xí)使用IntelliJ IDEA的筆記,可能不是特別的詳細(xì)。旨在記錄自己的學(xué)習(xí)過(guò)程,方便日后遇到問(wèn)題是及時(shí)查閱復(fù)習(xí),另一方面也希望能幫助像筆者一樣從來(lái)沒(méi)使用過(guò)IDEA的人快速熟悉IDEA。文章錯(cuò)誤之處還請(qǐng)各位大佬批評(píng)指正。(文末有本人的微信公眾號(hào),...

    馬永翠 評(píng)論0 收藏0
  • vue學(xué)習(xí)組件menu導(dǎo)航菜單

    摘要:后面就是和定位彈出框一樣類似的操作,在導(dǎo)航菜單里面我并沒(méi)有這么做,后面會(huì)改成這樣的吧。一些多層嵌套的位置問(wèn)題,尚未完成。在顯示的時(shí)候會(huì)有高度抖動(dòng)的問(wèn)題。里面給某些子組件添加樣式用到了深度作用。 效果盡量仿著element做。預(yù)覽地址 組件之間的通信 showImg(https://segmentfault.com/img/remote/1460000018614516?w=788&h=...

    el09xccxy 評(píng)論0 收藏0
  • vue學(xué)習(xí)組件menu導(dǎo)航菜單

    摘要:后面就是和定位彈出框一樣類似的操作,在導(dǎo)航菜單里面我并沒(méi)有這么做,后面會(huì)改成這樣的吧。一些多層嵌套的位置問(wèn)題,尚未完成。在顯示的時(shí)候會(huì)有高度抖動(dòng)的問(wèn)題。里面給某些子組件添加樣式用到了深度作用。 效果盡量仿著element做。預(yù)覽地址 組件之間的通信 showImg(https://segmentfault.com/img/remote/1460000018614516?w=788&h=...

    Vixb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<