本节教程中我们将介绍如何只使用css3创建一个漂亮的导航下拉菜单,兼容所有主流浏览器,包括ie7,ie8当然在ie7/8浏览器中一些css3特性就不支持了,比如圆角,但是整个菜单还是可以很好地显示滴。接下来开始教程~
第一步:HTML标签结构
这里我们使用ul无序列表来实现HTML结构,同时每一个菜单项都是一个超链接,子菜单项也是用相同的结构。
- <ul class="menu">
- <li><a href="#">首页</a></li>
- <li><a href="#">前端开发</a>
- <ul>
- <li><a href="#">CSS & CSS3</a></li>
- <li><a href="#">JS & jQuery</a></li>
- <li><a href="#">HTML5</a></li>
- </ul>
- </li>
- <li><a href="#">DOTNET</a></li>
- <li><a href="#">网站素材</a></li>
- <li><a href="#">WordPress</a></li>
- </ul>
第二步:布局
我们为所有的菜单项移除margin, padding, border和outline,然后定义合适的宽高,添加圆角和渐变效果。为了使菜单水平显示,还需要加上左对齐浮动。最后需要加上相对定位的position,这样做是为了固定子菜单的位置。
- .menu ul,
- .menu li,
- .menu a {
- margin: 0;
- padding: 0;
- border: none;
- outline: none;
- }
- .menu {
- height: 40px;
- width: 410px;
- background: #4c4e5a;
- background: -webkit-linear-gradient(top, #4c4e5a 0%,#2c2d33 100%);
- background: -moz-linear-gradient(top, #4c4e5a 0%,#2c2d33 100%);
- background: -o-linear-gradient(top, #4c4e5a 0%,#2c2d33 100%);
- background: -ms-linear-gradient(top, #4c4e5a 0%,#2c2d33 100%);
- background: linear-gradient(top, #4c4e5a 0%,#2c2d33 100%);
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- }
- .menu li {
- position: relative;
- list-style: none;
- float: left;
- display: block;
- height: 40px;
- }
第三步:修饰菜单项链接
我们需要为菜单项加一些基础的样式color,padding,font等等。为了鼠标hover到菜单上的时候,有一个更好的效果,我们为菜单项添加文字阴影,和颜色过渡transition,最后为每个菜单想加上间隔边框,第一个移除左边框,最后一个移除右边框。当hover的时候只改变菜单链接的颜色。
- .menu li a {
- display: block;
- padding: 0 14px;
- margin: 6px 0;
- line-height: 28px;
- text-decoration: none;
- border-left: 1px solid #393942;
- border-right: 1px solid #4f5058;
- font-family: Helvetica, Arial, sans-serif;
- font-weight: bold;
- font-size: 13px;
- color: #f3f3f3;
- text-shadow: 1px 1px 1px rgba(0,0,0,.6);
- -webkit-transition: color .2s ease-in-out;
- -moz-transition: color .2s ease-in-out;
- -o-transition: color .2s ease-in-out;
- -ms-transition: color .2s ease-in-out;
- transition: color .2s ease-in-out;
- }
- .menu li:first-child a { border-left: none; }
- .menu li:last-child a{ border-right: none; }
- .menu li:hover > a { color: #8fde62; }
第四步:子菜单样式
子菜单这里我们使用绝对定位,这就是为什么我们要为第一级菜单li添加绝对定位的原因。当鼠标hover的时候我们设置透明度从0到1来实现渐变显示效果,同样是设置高度从0到36px来实现向下滑出效果。
- .menu ul {
- position: absolute;
- top: 40px;
- left: 0;
- opacity: 0;
- background: #1f2024;
- -webkit-border-radius: 0 0 5px 5px;
- -moz-border-radius: 0 0 5px 5px;
- border-radius: 0 0 5px 5px;
- -webkit-transition: opacity .25s ease .1s;
- -moz-transition: opacity .25s ease .1s;
- -o-transition: opacity .25s ease .1s;
- -ms-transition: opacity .25s ease .1s;
- transition: opacity .25s ease .1s;
- }
- .menu li:hover > ul { opacity: 1; }
- .menu ul li {
- height: 0;
- overflow: hidden;
- padding: 0;
- -webkit-transition: height .25s ease .1s;
- -moz-transition: height .25s ease .1s;
- -o-transition: height .25s ease .1s;
- -ms-transition: height .25s ease .1s;
- transition: height .25s ease .1s;
- }
- .menu li:hover > ul li {
- height: 36px;
- overflow: visible;
- padding: 0;
- }
设置子菜单的宽度为100px,同时移除左右边框,使用下边框,同时移除最后一个子菜单的下边框。
- .menu ul li a {
- width: 100px;
- margin: 0;
- border: none;
- border-bottom: 1px solid #353539;
- text-align:left;
- }
- .menu ul li:last-child a { border: none; }