Web元素設(shè)計之導(dǎo)航菜單

1. 橫向?qū)Ш讲藛?/h5>

導(dǎo)航菜單實際上相當(dāng)于一個列表腔寡,自然地坎藐,我們可以選擇HTML中的列表元素ul來進行實現(xiàn):

HTML ↓:

<ul id="nav">
    <li><a href="#">首頁</a></li>
    <li><a href="#" class="current">探索</a></li>
    <li><a href="#">觀察</a></li>
    <li><a href="#">解密</a></li>
    <li><a href="#">關(guān)于</a></li>
</ul>

ul本身是一個塊級元素涂籽,其中包含的列表項li同樣也是塊級元素。所以要實現(xiàn)橫向菜單,我們需要使用到浮動钻弄,使得列表項li在同一行依次排列。此外者吁,無序列表ul默認會在每個列表項前帶一個小圓點窘俺,我們需要通過list-style將其取消掉。還有關(guān)鍵的一點就是复凳,我們通過超鏈接a來實現(xiàn)可點擊的菜單項瘤泪,但由于a本身是行內(nèi)元素,所以我們需要將其設(shè)置為塊級元素使得可以方便地設(shè)置寬高和邊距等:

CSS ↓:

#nav{
    height:26px;
    list-style: none; /*取消列表項前默認的小圓點*/
    border-bottom: 2px solid #2788da;
}
#nav li{
    float: left; /*浮動列表項育八,使其成為一個個橫向布局的容器*/
}
#nav li a{
    color: #000;
    text-decoration: none; /*取消超鏈接默認的下劃線*/
    padding-top: 4px;
    display: block; /*更改為塊級元素以設(shè)置寬高对途、邊距*/
    width: 97px;
    height:22px;
    text-align: center;
    background-color: #ececec;
    margin-left: 1px;
}
#nav li a:hover{
    background-color: #bbb;
    color: #fff;
}
#nav li a.current{
    background-color: #2788da;
    color: #fff;
}

效果如下 ↓:


橫向菜單

最后的工作,就是添加JS交互使得菜單擁有切換效果:

JavaScript:

var nav = document.getElementById('nav');
nav.addEventListener('click', function (e) {
    if (e.target.tagName === 'A') {
        for (var i = 0; i < this.children.length; i++) {
            var element = this.children[i].children[0];
            element.removeAttribute('class');
        }
        e.target.className = 'current';
    }
});
2. 縱向?qū)Ш讲藛?/h5>

實現(xiàn)方式一:直接使用h1~h6構(gòu)造

HTML ↓:

<div id="category">
    <h1>CSS</h1>
        <h2>基礎(chǔ)</h2>
        <h2>進階</h2>
        <h2>實戰(zhàn)</h2>
    <h1>HTML</h1>
        <h2>基礎(chǔ)</h2>
        <h2>進階</h2>
        <h2>實戰(zhàn)</h2>
    <h1>JS</h1>
        <h2>基礎(chǔ)</h2>
        <h2>進階</h2>
        <h2>實戰(zhàn)</h2>
</div>

CSS ↓:

#category{
    width: 100px;
    border-color: #c5c6c4;
    border-style: solid;
    border-width: 0 1px 1px 1px;
}
#category h1,#category h2{
    text-align: center;
    margin: 0;
    padding: 5px;
    font-size: 12px;
}
#category h1{
    border-top: 1px solid #c5c6c4;
    background-color: #f4f4f4;
}
#category h2{
    font-weight: normal;
}
#category h2:hover{
    cursor: pointer;
    background-color: #ececec;
}

效果如下 ↓:

用h1等標題元素實現(xiàn)的縱向菜單

實現(xiàn)方式二:和橫向菜單一樣使用ul元素構(gòu)造

HTML ↓:

<ul id="category">
    <li class="parent">CSS</li>
    <li>基礎(chǔ)</li>
    <li>進階</li>
    <li>實戰(zhàn)</li>
    <li class="parent">HTML</li>
    <li>基礎(chǔ)</li>
    <li>進階</li>
    <li>實戰(zhàn)</li>
    <li class="parent">JS</li>
    <li>基礎(chǔ)</li>
    <li>進階</li>
    <li>實戰(zhàn)</li>
</ul>

CSS ↓:

#category{
    width: 100px;
    border-color: #c5c6c4;
    border-style: solid;
    border-width: 0 1px 1px 1px;
}
#category li{
    text-align: center;
    padding: 5px 0;
}
#category li.parent{
    border-top: 1px solid #c5c6c4;
    border-bottom: 1px solid #c5c6c4;
    background-color: #f4f4f4;
    font-weight: bold;
}
#category li:not(.parent):hover{
    cursor: pointer;
    background-color: #ececec;
}

效果如下 ↓:

用ul實現(xiàn)的縱向菜單
3. 橫向下拉菜單

有了橫向菜單的實現(xiàn)基礎(chǔ)髓棋,現(xiàn)在其實只要對需要的部分添加相應(yīng)列表就可以實現(xiàn)下拉菜單了实檀。

HTML ↓:

<ul id="nav">
    <li>
        <a class="top-a" href="#">首頁</a>
    </li>
    <li>
        <a class="top-a" href="#">探索</a>
        <ul class="inner-ul">
            <li><a href="#">Explore</a></li>
            <li><a href="#">Explore</a></li>
        </ul>
    </li>
    <li>
        <a class="top-a" href="#">觀察</a>
        <ul class="inner-ul">
            <li><a href="#">Observation</a></li>
            <li><a href="#">Observation</a></li>
        </ul>
    </li>
    <li>
        <a class="top-a" href="#">解密</a>
        <ul class="inner-ul">
            <li><a href="#">Decrypt</a></li>
            <li><a href="#">Decrypt</a></li>
        </ul>
    </li>
    <li>
        <a class="top-a" href="#">關(guān)于</a>
        <ul class="inner-ul">
            <li><a href="#">Corporation</a></li>
            <li><a href="#">Team</a></li>
        </ul>
    </li>
</ul>

CSS ↓:

#nav{
    height:26px;
    list-style: none; /*取消列表項前默認的小圓點*/
    border-bottom: 2px solid #2788da;
}
#nav li{
    width: 130px;
    float: left; /*浮動列表項惶洲,使其成為一個個橫向布局的容器*/
}
#nav li a.top-a{
    color: #000;
    text-decoration: none; /*取消超鏈接默認的下劃線*/
    padding-top: 4px;
    display: block; /*更改為塊級元素以設(shè)置寬高、邊距*/
    width: 130px;
    height:22px;
    text-align: center;
    background-color: #ececec;
    margin-left: 1px;
}
#nav li a:hover{
    background-color: #bbb;
    color: #fff;
}
ul#nav li ul.inner-ul{
    list-style: none;
}
ul#nav li ul.inner-ul li{
    text-align: center;
}
ul#nav li ul.inner-ul{
    display: none;
}
ul#nav li:hover ul.inner-ul{
    display: block; /*這里的選擇器是關(guān)鍵*/
}
ul#nav li ul.inner-ul a{
    display: block;
    width:130px;
    height:22px;
    text-decoration: none;
    background-color: #ececec;
}
ul#nav li ul.inner-ul a:hover{
    background-color: #bbb;
}

效果如下 ↓:


橫向下拉菜單
4. 縱向彈出菜單

使用上面橫向下拉菜單的HTML結(jié)構(gòu)膳犹,只通過CSS的改變就能輕松實現(xiàn)縱向彈出菜單恬吕。考慮到彈出菜單可能會發(fā)生層疊以及每個彈出菜單應(yīng)該相對于其父級菜單定位须床,因此可以結(jié)合使用position:relativeposition:absolute進行實現(xiàn)铐料。

CSS ↓:

ul{
    list-style: none;
    width: 130px;
    border-bottom: 1px solid #ccc;
    font-size: 16px;
    background-color: #ececec;
}
ul a{
    text-decoration: none;
}
ul#nav li{
    position: relative;
    text-align: center;
}
ul#nav li:hover{
    background-color:#fff;
}
li ul{
    position: absolute; /*相對于父級菜單進行定位*/
    left: 129px;
    top: 0;
    display: none;
}
li ul a{
    display: block;
    text-decoration: none;
    color: #777;
    background: #fff;
    padding: 5px;
    border: 1px solid #ccc;
    border-bottom: 0;
}
ul#nav li:hover ul{
    display: block;
}

效果如下 ↓:

縱向彈出菜單
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市豺旬,隨后出現(xiàn)的幾起案子钠惩,更是在濱河造成了極大的恐慌,老刑警劉巖族阅,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篓跛,死亡現(xiàn)場離奇詭異,居然都是意外死亡坦刀,警方通過查閱死者的電腦和手機举塔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來求泰,“玉大人,你說我怎么就攤上這事计盒】势担” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵北启,是天一觀的道長卜朗。 經(jīng)常有香客問我,道長咕村,這世上最難降的妖魔是什么场钉? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮懈涛,結(jié)果婚禮上逛万,老公的妹妹穿的比我還像新娘。我一直安慰自己批钠,他們只是感情好宇植,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著埋心,像睡著了一般指郁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拷呆,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天闲坎,我揣著相機與錄音疫粥,去河邊找鬼。 笑死腰懂,一個胖子當(dāng)著我的面吹牛梗逮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悯恍,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼库糠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涮毫?” 一聲冷哼從身側(cè)響起瞬欧,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罢防,沒想到半個月后艘虎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡咒吐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年野建,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恬叹。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡候生,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绽昼,到底是詐尸還是另有隱情唯鸭,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布硅确,位于F島的核電站目溉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏菱农。R本人自食惡果不足惜缭付,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望循未。 院中可真熱鬧陷猫,春花似錦、人聲如沸的妖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羔味。三九已至河咽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赋元,已是汗流浹背忘蟹。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工飒房, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媚值。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓狠毯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親褥芒。 傳聞我的和親對象是個殘疾皇子嚼松,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件锰扶、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案献酗? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,753評論 1 92
  • 愛情是需要經(jīng)過三年之痛,七年之癢的坷牛,而兄弟之間的感情罕偎,也是需要磨練的,需要珍惜的京闰。 我和曾經(jīng)的一個好兄弟Z颜及,我...
    金勇的小屋閱讀 209評論 0 0
  • 貓為什么遇到敵人時會炸毛弓背俏站?最近讀了《牛奶可樂經(jīng)濟學(xué)》才知道。當(dāng)雙方存在信息不對稱的情況時痊土,唯有通過難以造假的信...
    多多是只貓閱讀 3,046評論 0 1
  • 烏云下的地鐵站 大雨澆不滅人群的噪雜 黑車司機菠蘿菠蘿蜜一樣的拉客 大嬸如脫口秀一樣叫賣著雨傘 雨刮刷著 車卻堵著...
    勒普蘭斯閱讀 240評論 0 0