界面组件之导航菜单 Posted on 2017-08-22 | In 技术 本文转载自:segmentfault链接:https://segmentfault.com/a/1190000002446160 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>界面组件之导航菜单</title> <style> /*纵向菜单*/ .vertical * { margin: 0; padding: 0; } nav.vertical { margin: 50px; width: 150px; } .list.vertical ul { border: 1px solid #6a6b6c; border-radius: 3px; padding: 5px 10px 3px; } .list.vertical li { list-style: none; /*padding: 3px 10px;*/ } /*2.横向菜单*/ .list.vertical li+li a { /* 注意这里! */ border-top: 1px solid #6a6b6c; } .list.vertical a { display: block; /* 这里! */ padding: 3px 10px; /* 还有这里! */ text-decoration: none; padding: 3px 10px; } .list.vertical a:hover { color: #069; } .list.transverse ul { overflow: hidden; /*强制 ul 包围浮动的 li 元素*/ } .list.transverse li { float: left; /*让 li 元素水平排列*/ list-style: none; } .list.transverse a { display: block; /*让链接变成块级元素*/ padding: 0 16px; text-decoration: none; color: #999; } .list.transverse li+li a { border-left: 1px solid #aaa; } .list.transverse a:hover { color: #555; } /*下拉菜单*/ /*第1步-实现顶级菜单*/ /* ***************添加视觉样式************ */ .multi_drop_menu { font: 1em helvetica, arial, sans-serif; } .multi_drop_menu a { /*让链接充满列表项*/ display: block; /*文本颜色*/ color: #555; /*背景颜色*/ background-color: #eee; /*链接的内边距*/ padding: .2em 1em; /*分隔线宽度*/ border-width: 3px; /*可以有颜色,也可以透明*/ border-color: transparent; } /*显示选择路径*/ .multi_drop_menu li:hover>a { /*注意这里的选择符,使用了冒泡机制,后面会用到*/ /*悬停时的文本颜色*/ color: #fff; /*悬停时的背景颜色*/ background-color: #aaa; } /* ***************添加功能样式************* */ .multi_drop_menu * { margin: 0; padding: 0; } /*强制ul包围li*/ .multi_drop_menu ul { float: left; } .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; } /*第2步-实现菜单的下拉部分*/ /*二级菜单宽度*/ .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: block; /*相对于父菜单项定位*/ position: absolute; /*左边与父菜单项对齐*/ left: 0; /*顶边与父菜单项底边对齐*/ top: 100%; } .multi_drop_menu li li { /*停止浮动,恢复堆叠*/ float: none; } .multi_drop_menu li li ul { /*继续隐藏三级下拉菜单*/ display: none; } /*第3步-让下拉菜单响应鼠标事件*/ .multi_drop_menu li ul { /*隐藏二级下拉菜单*/ display: none; /*相对于父菜单项定位*/ position: absolute; /*左边与父菜单项对齐*/ left: 0; /*顶边与父菜单项底边对齐*/ top: 100%; } .multi_drop_menu li:hover>ul { /*父元素悬停时显示*/ display: block; } /*隐藏二级菜单*/ li ul { display: none; } /*显示二级菜单*/ li:hover>ul { display: block; } /*第4步-调整三级菜单的位置*/ .multi_drop_menu li li ul { /*相对于父菜单定位*/ position: absolute; /*与父菜单右侧对齐*/ left: 100%; /*与父菜单项顶边对齐*/ top: 0; } /*其它-垂直的三级菜单*/ /*顶级垂直菜单宽度*/ .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; } </style></head><body> <section> <h2>1.纵向菜单</h2> <nav class="list vertical"> <ul> <li><a href="#">a</a></li> <li><a href="#">b</a></li> <li><a href="#">c</a></li> <li><a href="#">d</a></li> </ul> </nav> </section> <section> <h2>2.横向菜单</h2> <nav class="list transverse"> <ul> <li><a href="#">a</a></li> <li><a href="#">b</a></li> <li><a href="#">c</a></li> <li><a href="#">d</a></li> </ul> </nav> </section> <section> <h2>3.下拉菜单</h2> <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> </ul> <!-- 二级结束 --> </li> </ul> <!-- 一级结束 --> </nav> </section> <section style="clear: both;margin-top: 200px;"> <h2>其它-垂直的三级菜单</h2> <nav class="multi_drop_menu vertical"> <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> </ul> <!-- 二级结束 --> </li> </ul> <!-- 一级结束 --> </nav> </section></body></html>