前端入门教程——纯css制作二级菜单

首先,需要声明的是本教程是写给初级者参考的,如果您已经有一定的基础请直接忽略吧

二级菜单是网站开发中很常见的功能模块,但是对于初级者来说却还是有些困难,下面我就拿几个常见的案例来讲好了。

鼠标滑过显示显示二级菜单

clipboard.png

很简单,li标签嵌套一层ul

<ul class="navs">
    <li class="nav">
        <a class="nav-a" href="#">一级菜单</a>
        <ul class="sub-navs">
            <li class="sub-nav"><a class="sub-nav-a" href="#">二级菜单</a></li>
            <li class="sub-nav"><a class="sub-nav-a" href="#">二级菜单</a></li>
            <li class="sub-nav"><a class="sub-nav-a" href="#">二级菜单</a></li>
        </ul>
    </li>
    <li class="nav">
        <a class="nav-a" href="#">一级菜单</a>
    </li>
</ul>
/*设置一级菜单样式*/

.navs:after{
    position: relative;
    content: '';
    width: 0;
    height: 0;
    visibility: hidden;
    clear: both;
    zoom: 1;
}

.nav {
    position: relative;
    float: left;
    height: 30px;
    line-height: 30px;
    text-align: center;
}

.nav-a {
    display: inline-block;
    width: 80px;
    font-size: 14px;
    color: #d8ac00;
}

效果如下:

clipboard.png

接着设置二级菜单

/*设置二级样式*/

.sub-navs {
    /*使用绝对定位,在文档流中不占位,免得影响后面的布局*/
    /*注意,因为这里使用了绝对定位,所以它的父元素.nav记得使用相对定位*/
    position: absolute;
    top: 100%;
    width: 100%;
    display: none;
    /*先隐藏起来*/
}

.nav:hover .sub-navs {
    /*鼠标滑过时显示二级菜单*/
    display: block;
}

.sub-nav-a {
    font-size: 12px;
    color: #000; 
}

这时候简单的二级菜单效果就出来了。如果想要划过的时候,一级菜单背景变黄,字体变白呢

.nav:hover .nav-a {
    background-color: #d8ac00;
    color: #fff;
}

添加这行就好了。
但是我们的效果图还加了边框,各位看官可能觉得很简单啊,加上border属性不就就好了

.nav:hover .nav-a,
.sub-nav{
    border: 1px solid #ccc;
}

结果边框重叠了:

clipboard.png

我们发现,其实二级菜单把border-top去掉就可以了

.sub-nav{
    border-left: 1px solid #ccc;
    border-right: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

clipboard.png

还有一个问题时,当鼠标滑动到左边第一个一级菜单的时候,右边的一级菜单出现了闪动现象,体验十分不友好,加上border-box属性就可以解决此问题

.nav-a {
    box-sizing: border-box;
}

参考代码:http://runjs.cn/detail/ep0eq85c


关注作者吧~

clipboard.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的HTML+CSS制作横向二级菜单栏的示例代码: HTML代码: ```html <nav> <ul> <li><a href="#">菜单1</a> <ul> <li><a href="#">子菜单1</a></li> <li><a href="#">子菜单2</a></li> <li><a href="#">子菜单3</a></li> </ul> </li> <li><a href="#">菜单2</a> <ul> <li><a href="#">子菜单1</a></li> <li><a href="#">子菜单2</a></li> <li><a href="#">子菜单3</a></li> </ul> </li> <li><a href="#">菜单3</a> <ul> <li><a href="#">子菜单1</a></li> <li><a href="#">子菜单2</a></li> <li><a href="#">子菜单3</a></li> </ul> </li> </ul> </nav> ``` CSS代码: ```css nav ul { list-style: none; padding: 0; margin: 0; } nav li { float: left; position: relative; } nav li a { display: block; padding: 10px; text-decoration: none; color: #333; } nav ul ul { position: absolute; top: 100%; left: 0; display: none; } nav ul li:hover > ul { display: inherit; } nav ul ul li { float: none; width: 100%; } nav ul ul a { padding: 5px 10px; display: block; } nav ul ul ul { top: 0; left: 100%; } nav ul li:hover > a { background-color: #f8f8f8; } nav ul ul li:hover > a { background-color: #f1f1f1; } nav a:focus { outline: none; } @media screen and (max-width: 768px) { nav ul li { float: none; } nav ul ul { position: static; display: none; } nav ul li:hover > ul { display: none; } nav ul ul li { display: block; width: 100%; } } ``` 在以上代码中,我们首先创建了一个 `nav` 元素,内含一个无序列表 `ul`,列表项 `li` 中包含了一个链接 `a` 和一个子菜单的无序列表 `ul`,子菜单列表项也是 `li`,链接也是 `a`,以此类推。 CSS 中,我们使用了 `float` 属性使菜单项横向排列,使用了 `position: absolute` 属性将子菜单定位在其父菜单下方,使用了 `display: none` 属性将子菜单默认隐藏,然后使用 `:hover` 伪类选择器来控制菜单项和子菜单的显示和隐藏。同时,我们还使用了媒体查询 `@media` 来控制菜单在小屏幕设备上的响应式布局。 希望这个示例代码能够帮到你,如果有疑问可以随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值